summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjb <gjb@FreeBSD.org>2016-03-10 21:16:01 +0000
committergjb <gjb@FreeBSD.org>2016-03-10 21:16:01 +0000
commit1c7e318a9a31cae130bd5b2de01d93e7800f66ff (patch)
tree5abb86d0e160314526bb716fff070a6708d61844
parent8c3e466633f443f8af1bf868eb74c53b39b63fb8 (diff)
parent03f8f8e39672316bbe0cad522f381fab54de0b6e (diff)
downloadFreeBSD-src-1c7e318a9a31cae130bd5b2de01d93e7800f66ff.zip
FreeBSD-src-1c7e318a9a31cae130bd5b2de01d93e7800f66ff.tar.gz
MFH
Sponsored by: The FreeBSD Foundation
-rw-r--r--Makefile2
-rw-r--r--Makefile.inc111
-rw-r--r--ObsoleteFiles.inc16
-rw-r--r--bin/cat/tests/Makefile.depend11
-rw-r--r--bin/date/tests/Makefile.depend11
-rw-r--r--bin/dd/tests/Makefile.depend11
-rw-r--r--bin/expr/tests/Makefile.depend11
-rw-r--r--bin/ls/tests/Makefile.depend11
-rw-r--r--bin/mv/tests/Makefile.depend11
-rw-r--r--bin/pax/tests/Makefile.depend11
-rw-r--r--bin/pkill/tests/Makefile.depend11
-rw-r--r--bin/sh/options.c6
-rw-r--r--bin/sh/tests/Makefile.depend11
-rw-r--r--bin/sh/tests/builtins/Makefile1
-rw-r--r--bin/sh/tests/builtins/Makefile.depend11
-rw-r--r--bin/sh/tests/builtins/set3.04
-rw-r--r--bin/sh/tests/errors/Makefile.depend11
-rw-r--r--bin/sh/tests/execution/Makefile.depend11
-rw-r--r--bin/sh/tests/expansion/Makefile.depend11
-rw-r--r--bin/sh/tests/parameters/Makefile.depend11
-rw-r--r--bin/sh/tests/parser/Makefile.depend11
-rw-r--r--bin/sh/tests/set-e/Makefile.depend11
-rw-r--r--bin/sleep/tests/Makefile.depend11
-rw-r--r--bin/test/tests/Makefile.depend11
-rw-r--r--bin/tests/Makefile.depend11
-rw-r--r--cddl/contrib/opensolaris/cmd/zdb/zdb.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c6
-rw-r--r--cddl/contrib/opensolaris/cmd/zfs/zfs_main.c58
-rw-r--r--cddl/contrib/opensolaris/cmd/zinject/zinject.c111
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c8
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool_main.c38
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c10
-rw-r--r--cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/ztest/ztest.c1
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h3
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c3
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c3
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c7
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c14
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c3
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c21
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c4
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c1
-rw-r--r--cddl/lib/tests/Makefile.depend11
-rw-r--r--cddl/sbin/tests/Makefile.depend11
-rw-r--r--cddl/tests/Makefile.depend11
-rw-r--r--cddl/usr.bin/tests/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/aggs/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/arrays/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/assocs/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/begin/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/buffering/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/cg/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/clauses/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/cpc/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/decls/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/drops/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/end/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/enum/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/error/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/exit/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/funcs/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/grammar/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/include/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/inline/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/io/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/ip/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/java_api/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/json/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/lexer/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/mdb/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/mib/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/misc/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/operators/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pid/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pointers/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pragma/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/predicates/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/print/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/printa/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/printf/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/privs/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/probes/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/proc/Makefile.depend20
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile.depend16
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/providers/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/raise/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/rates/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/safety/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/scalars/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sched/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/scripting/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sdt/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/speculation/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stability/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stack/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stop/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/strlen/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/struct/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/syscall/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/trace/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/translators/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/typedef/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/types/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/uctf/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/union/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/usdt/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/ustack/Makefile.depend17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/vars/Makefile.depend11
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/version/Makefile.depend11
-rw-r--r--cddl/usr.sbin/tests/Makefile.depend11
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c2
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c2
-rw-r--r--etc/mtree/BSD.tests.dist2
-rwxr-xr-xetc/rc.d/abi5
-rw-r--r--gnu/lib/tests/Makefile.depend11
-rw-r--r--gnu/tests/Makefile.depend11
-rw-r--r--gnu/usr.bin/diff/tests/Makefile.depend11
-rw-r--r--gnu/usr.bin/tests/Makefile.depend11
-rw-r--r--lib/atf/libatf-c++/tests/Makefile.depend23
-rw-r--r--lib/atf/libatf-c++/tests/detail/Makefile.depend23
-rw-r--r--lib/atf/libatf-c/tests/Makefile.depend19
-rw-r--r--lib/atf/libatf-c/tests/detail/Makefile.depend19
-rw-r--r--lib/atf/tests/Makefile.depend11
-rw-r--r--lib/atf/tests/test-programs/Makefile.depend23
-rw-r--r--lib/clang/libclangcodegen/Makefile.depend2
-rw-r--r--lib/clang/libclangdriver/Makefile.depend2
-rw-r--r--lib/clang/libclangfrontend/Makefile.depend2
-rw-r--r--lib/clang/libclangfrontendtool/Makefile.depend2
-rw-r--r--lib/clang/liblldbExpression/Makefile.depend2
-rw-r--r--lib/clang/liblldbInitialization/Makefile.depend1
-rw-r--r--lib/clang/liblldbPluginExpressionParserClang/Makefile.depend17
-rw-r--r--lib/clang/liblldbPluginExpressionParserGo/Makefile.depend15
-rw-r--r--lib/clang/liblldbPluginLanguageCPlusPlus/Makefile.depend16
-rw-r--r--lib/clang/liblldbPluginLanguageObjC/Makefile.depend16
-rw-r--r--lib/clang/liblldbPluginScriptInterpreterNone/Makefile.depend15
-rw-r--r--lib/clang/liblldbPluginSymbolFileDWARF/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64asmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64asmprinter/Makefile.depend12
-rw-r--r--lib/clang/libllvmaarch64codegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64desc/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64disassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64info/Makefile.depend2
-rw-r--r--lib/clang/libllvmaarch64utils/Makefile.depend2
-rw-r--r--lib/clang/libllvmanalysis/Makefile.depend2
-rw-r--r--lib/clang/libllvmarmasmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmarmasmprinter/Makefile.depend10
-rw-r--r--lib/clang/libllvmarmcodegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmarmdesc/Makefile.depend2
-rw-r--r--lib/clang/libllvmarmdisassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmarminfo/Makefile.depend2
-rw-r--r--lib/clang/libllvmasmparser/Makefile.depend1
-rw-r--r--lib/clang/libllvmasmprinter/Makefile.depend2
-rw-r--r--lib/clang/libllvmbitreader/Makefile.depend2
-rw-r--r--lib/clang/libllvmbitwriter/Makefile.depend1
-rw-r--r--lib/clang/libllvmcodegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmcore/Makefile.depend2
-rw-r--r--lib/clang/libllvmexecutionengine/Makefile.depend1
-rw-r--r--lib/clang/libllvminstcombine/Makefile.depend2
-rw-r--r--lib/clang/libllvminstrumentation/Makefile.depend2
-rw-r--r--lib/clang/libllvminterpreter/Makefile.depend2
-rw-r--r--lib/clang/libllvmipo/Makefile.depend2
-rw-r--r--lib/clang/libllvmirreader/Makefile.depend1
-rw-r--r--lib/clang/libllvmlibdriver/Makefile.depend2
-rw-r--r--lib/clang/libllvmlinker/Makefile.depend1
-rw-r--r--lib/clang/libllvmlto/Makefile.depend2
-rw-r--r--lib/clang/libllvmmcjit/Makefile.depend1
-rw-r--r--lib/clang/libllvmmipsasmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmmipsasmprinter/Makefile.depend10
-rw-r--r--lib/clang/libllvmmipscodegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmmipsdesc/Makefile.depend2
-rw-r--r--lib/clang/libllvmmipsdisassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmmipsinfo/Makefile.depend2
-rw-r--r--lib/clang/libllvmmirparser/Makefile.depend1
-rw-r--r--lib/clang/libllvmobjcarcopts/Makefile.depend2
-rw-r--r--lib/clang/libllvmobject/Makefile.depend1
-rw-r--r--lib/clang/libllvmorcjit/Makefile.depend1
-rw-r--r--lib/clang/libllvmpasses/Makefile.depend2
-rw-r--r--lib/clang/libllvmpowerpcasmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmpowerpcasmprinter/Makefile.depend10
-rw-r--r--lib/clang/libllvmpowerpccodegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmpowerpcdesc/Makefile.depend2
-rw-r--r--lib/clang/libllvmpowerpcdisassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmpowerpcinfo/Makefile.depend2
-rw-r--r--lib/clang/libllvmprofiledata/Makefile.depend1
-rw-r--r--lib/clang/libllvmscalaropts/Makefile.depend2
-rw-r--r--lib/clang/libllvmselectiondag/Makefile.depend2
-rw-r--r--lib/clang/libllvmsparcasmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmsparcasmprinter/Makefile.depend10
-rw-r--r--lib/clang/libllvmsparccodegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmsparcdesc/Makefile.depend2
-rw-r--r--lib/clang/libllvmsparcdisassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmsparcinfo/Makefile.depend2
-rw-r--r--lib/clang/libllvmsymbolize/Makefile.depend15
-rw-r--r--lib/clang/libllvmtarget/Makefile.depend2
-rw-r--r--lib/clang/libllvmtransformutils/Makefile.depend2
-rw-r--r--lib/clang/libllvmvectorize/Makefile.depend2
-rw-r--r--lib/clang/libllvmx86asmparser/Makefile.depend2
-rw-r--r--lib/clang/libllvmx86asmprinter/Makefile.depend24
-rw-r--r--lib/clang/libllvmx86codegen/Makefile.depend2
-rw-r--r--lib/clang/libllvmx86desc/Makefile.depend2
-rw-r--r--lib/clang/libllvmx86disassembler/Makefile.depend2
-rw-r--r--lib/clang/libllvmx86info/Makefile.depend2
-rw-r--r--lib/libarchive/tests/Makefile.depend26
-rw-r--r--lib/libc/amd64/sys/cerror.S1
-rw-r--r--lib/libc/i386/sys/cerror.S1
-rw-r--r--lib/libc/sys/getdirentries.24
-rw-r--r--lib/libc/tests/Makefile1
-rw-r--r--lib/libc/tests/Makefile.depend11
-rw-r--r--lib/libc/tests/c063/Makefile.depend20
-rw-r--r--lib/libc/tests/db/Makefile.depend18
-rw-r--r--lib/libc/tests/gen/Makefile.depend23
-rw-r--r--lib/libc/tests/gen/execve/Makefile.depend20
-rw-r--r--lib/libc/tests/gen/posix_spawn/Makefile.depend20
-rw-r--r--lib/libc/tests/hash/Makefile.depend22
-rw-r--r--lib/libc/tests/inet/Makefile.depend21
-rw-r--r--lib/libc/tests/locale/Makefile.depend21
-rw-r--r--lib/libc/tests/net/Makefile.depend21
-rw-r--r--lib/libc/tests/nss/Makefile.depend21
-rw-r--r--lib/libc/tests/regex/Makefile.depend21
-rw-r--r--lib/libc/tests/resolv/Makefile.depend20
-rw-r--r--lib/libc/tests/rpc/Makefile.depend23
-rw-r--r--lib/libc/tests/setjmp/Makefile.depend20
-rw-r--r--lib/libc/tests/ssp/Makefile.depend21
-rw-r--r--lib/libc/tests/stdio/Makefile.depend21
-rw-r--r--lib/libc/tests/stdlib/Makefile.depend22
-rw-r--r--lib/libc/tests/string/Makefile.depend21
-rw-r--r--lib/libc/tests/sys/Makefile.depend24
-rw-r--r--lib/libc/tests/termios/Makefile.depend20
-rw-r--r--lib/libc/tests/time/Makefile.depend20
-rw-r--r--lib/libc/tests/tls/Makefile.depend22
-rw-r--r--lib/libc/tests/tls_dso/Makefile.depend17
-rw-r--r--lib/libc/tests/ttyio/Makefile.depend21
-rw-r--r--lib/libclang_rt/asan_dynamic/Makefile.depend23
-rw-r--r--lib/libcrypt/tests/Makefile.depend1
-rw-r--r--lib/libmp/tests/Makefile.depend20
-rw-r--r--lib/libnv/tests/Makefile.depend24
-rw-r--r--lib/libpam/libpam/tests/Makefile.depend19
-rw-r--r--lib/libproc/tests/Makefile.depend26
-rw-r--r--lib/librt/tests/Makefile.depend22
-rw-r--r--lib/libthr/tests/Makefile.depend23
-rw-r--r--lib/libthr/tests/dlopen/Makefile.depend21
-rw-r--r--lib/libthr/tests/dlopen/dso/Makefile.depend19
-rw-r--r--lib/libutil/tests/Makefile.depend20
-rw-r--r--lib/libxo/tests/Makefile.depend20
-rw-r--r--lib/msun/tests/Makefile.depend21
-rw-r--r--lib/tests/Makefile.depend11
-rw-r--r--libexec/atf/atf-check/tests/Makefile.depend11
-rw-r--r--libexec/atf/atf-sh/tests/Makefile.depend11
-rw-r--r--libexec/atf/tests/Makefile.depend11
-rw-r--r--libexec/rtld-elf/tests/Makefile.depend19
-rw-r--r--libexec/tests/Makefile.depend11
-rw-r--r--sbin/devd/tests/Makefile.depend19
-rw-r--r--sbin/dhclient/tests/Makefile.depend20
-rw-r--r--sbin/growfs/tests/Makefile.depend11
-rw-r--r--sbin/ifconfig/tests/Makefile.depend11
-rw-r--r--sbin/ipfw/ipfw2.c1
-rw-r--r--sbin/mdconfig/tests/Makefile.depend11
-rw-r--r--sbin/tests/Makefile.depend11
-rw-r--r--sbin/tunefs/tunefs.c2
-rw-r--r--secure/lib/tests/Makefile.depend11
-rw-r--r--secure/libexec/tests/Makefile.depend11
-rw-r--r--secure/tests/Makefile.depend11
-rw-r--r--secure/usr.bin/tests/Makefile.depend11
-rw-r--r--secure/usr.sbin/tests/Makefile.depend11
-rw-r--r--share/examples/tests/Makefile.depend11
-rw-r--r--share/examples/tests/tests/Makefile.depend11
-rw-r--r--share/examples/tests/tests/atf/Makefile.depend19
-rw-r--r--share/examples/tests/tests/plain/Makefile.depend18
-rw-r--r--share/man/man4/filemon.418
-rw-r--r--share/man/man5/resolver.53
-rw-r--r--share/man/man9/bus_adjust_resource.95
-rw-r--r--share/man/man9/bus_alloc_resource.96
-rw-r--r--share/mk/bsd.confs.mk6
-rw-r--r--share/mk/bsd.files.mk6
-rw-r--r--share/mk/bsd.incs.mk6
-rw-r--r--share/mk/bsd.lib.mk4
-rw-r--r--share/mk/bsd.progs.mk41
-rw-r--r--share/mk/bsd.sys.mk2
-rw-r--r--share/mk/bsd.test.mk4
-rw-r--r--share/mk/local.dirdeps.mk61
-rw-r--r--share/mk/local.meta.sys.mk2
-rw-r--r--share/tests/Makefile.depend11
-rw-r--r--sys/amd64/cloudabi64/cloudabi64_sysvec.c2
-rw-r--r--sys/arm64/cloudabi64/cloudabi64_sysvec.c2
-rw-r--r--sys/boot/efi/boot1/Makefile2
-rw-r--r--sys/boot/uboot/common/main.c7
-rw-r--r--sys/boot/uboot/lib/glue.c35
-rw-r--r--sys/boot/uboot/lib/glue.h1
-rw-r--r--sys/cam/cam_ccb.h10
-rw-r--r--sys/cam/cam_xpt.c1
-rw-r--r--sys/cam/ctl/scsi_ctl.c1
-rw-r--r--sys/cddl/compat/opensolaris/sys/callo.h37
-rw-r--r--sys/cddl/compat/opensolaris/sys/systm.h3
-rw-r--r--sys/cddl/compat/opensolaris/sys/time.h3
-rw-r--r--sys/cddl/contrib/opensolaris/common/nvpair/opensolaris_nvpair.c3
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c1
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h1
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c493
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h72
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c1
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c77
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c19
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c10
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c8
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c11
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c49
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c32
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c60
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c3
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h7
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h5
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c5
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c5
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c6
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c14
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c53
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c6
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c257
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c21
-rw-r--r--sys/cddl/contrib/opensolaris/uts/powerpc/dtrace/fasttrap_isa.c13
-rw-r--r--sys/cddl/contrib/opensolaris/uts/sparc/dtrace/fasttrap_isa.c1595
-rw-r--r--sys/cddl/contrib/opensolaris/uts/sparc/sys/fasttrap_isa.h94
-rw-r--r--sys/cddl/dev/dtrace/dtrace_ioctl.c4
-rw-r--r--sys/compat/freebsd32/freebsd32_proto.h44
-rw-r--r--sys/compat/freebsd32/freebsd32_syscall.h10
-rw-r--r--sys/compat/freebsd32/freebsd32_syscalls.c10
-rw-r--r--sys/compat/freebsd32/freebsd32_sysent.c28
-rw-r--r--sys/compat/freebsd32/freebsd32_systrace_args.c90
-rw-r--r--sys/compat/freebsd32/syscalls.master28
-rw-r--r--sys/compat/linux/linux_fork.c12
-rw-r--r--sys/compat/linux/linux_misc.c10
-rw-r--r--sys/compat/linux/linux_socket.c79
-rw-r--r--sys/compat/linux/linux_socket.h25
-rw-r--r--sys/conf/Makefile.riscv2
-rw-r--r--sys/conf/files.riscv4
-rw-r--r--sys/conf/options.mips5
-rw-r--r--sys/dev/agp/agp_i810.c220
-rw-r--r--sys/dev/agp/agp_i810.h34
-rw-r--r--sys/dev/amr/amr.c2
-rw-r--r--sys/dev/bxe/bxe.c147
-rw-r--r--sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c2
-rw-r--r--sys/dev/cxgbe/adapter.h49
-rw-r--r--sys/dev/cxgbe/common/common.h136
-rw-r--r--sys/dev/cxgbe/common/t4_hw.c6393
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/device.c19
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h1
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/qp.c6
-rw-r--r--sys/dev/cxgbe/osdep.h14
-rw-r--r--sys/dev/cxgbe/t4_ioctl.h11
-rw-r--r--sys/dev/cxgbe/t4_main.c1282
-rw-r--r--sys/dev/cxgbe/t4_netmap.c18
-rw-r--r--sys/dev/cxgbe/t4_sge.c155
-rw-r--r--sys/dev/drm2/drmP.h13
-rw-r--r--sys/dev/drm2/drm_atomic.h7
-rw-r--r--sys/dev/drm2/drm_dp_iic_helper.c4
-rw-r--r--sys/dev/drm2/drm_drv.c8
-rw-r--r--sys/dev/drm2/drm_linux_list.h120
-rw-r--r--sys/dev/drm2/drm_mem_util.h59
-rw-r--r--sys/dev/drm2/drm_os_freebsd.c114
-rw-r--r--sys/dev/drm2/drm_os_freebsd.h332
-rw-r--r--sys/dev/drm2/drm_pciids.h134
-rw-r--r--sys/dev/drm2/i915/dvo.h155
-rw-r--r--sys/dev/drm2/i915/dvo_ch7017.c418
-rw-r--r--sys/dev/drm2/i915/dvo_ch7xxx.c347
-rw-r--r--sys/dev/drm2/i915/dvo_ivch.c439
-rw-r--r--sys/dev/drm2/i915/dvo_ns2501.c601
-rw-r--r--sys/dev/drm2/i915/dvo_sil164.c282
-rw-r--r--sys/dev/drm2/i915/dvo_tfp410.c321
-rw-r--r--sys/dev/drm2/i915/i915_debug.c891
-rw-r--r--sys/dev/drm2/i915/i915_dma.c881
-rw-r--r--sys/dev/drm2/i915/i915_drm.h251
-rw-r--r--sys/dev/drm2/i915/i915_drv.c994
-rw-r--r--sys/dev/drm2/i915/i915_drv.h1456
-rw-r--r--sys/dev/drm2/i915/i915_gem.c2058
-rw-r--r--sys/dev/drm2/i915/i915_gem_context.c25
-rw-r--r--sys/dev/drm2/i915/i915_gem_evict.c55
-rw-r--r--sys/dev/drm2/i915/i915_gem_execbuffer.c798
-rw-r--r--sys/dev/drm2/i915/i915_gem_gtt.c605
-rw-r--r--sys/dev/drm2/i915/i915_gem_stolen.c92
-rw-r--r--sys/dev/drm2/i915/i915_gem_tiling.c34
-rw-r--r--sys/dev/drm2/i915/i915_irq.c743
-rw-r--r--sys/dev/drm2/i915/i915_reg.h103
-rw-r--r--sys/dev/drm2/i915/i915_suspend.c775
-rw-r--r--sys/dev/drm2/i915/intel_acpi.c256
-rw-r--r--sys/dev/drm2/i915/intel_bios.c94
-rw-r--r--sys/dev/drm2/i915/intel_bios.h7
-rw-r--r--sys/dev/drm2/i915/intel_crt.c378
-rw-r--r--sys/dev/drm2/i915/intel_ddi.c1140
-rw-r--r--sys/dev/drm2/i915/intel_display.c5003
-rw-r--r--sys/dev/drm2/i915/intel_dp.c1579
-rw-r--r--sys/dev/drm2/i915/intel_drv.h323
-rw-r--r--sys/dev/drm2/i915/intel_dvo.c534
-rw-r--r--sys/dev/drm2/i915/intel_fb.c88
-rw-r--r--sys/dev/drm2/i915/intel_hdmi.c651
-rw-r--r--sys/dev/drm2/i915/intel_iic.c446
-rw-r--r--sys/dev/drm2/i915/intel_lvds.c426
-rw-r--r--sys/dev/drm2/i915/intel_modes.c64
-rw-r--r--sys/dev/drm2/i915/intel_opregion.c179
-rw-r--r--sys/dev/drm2/i915/intel_overlay.c332
-rw-r--r--sys/dev/drm2/i915/intel_panel.c245
-rw-r--r--sys/dev/drm2/i915/intel_pm.c1481
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.c694
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.h95
-rw-r--r--sys/dev/drm2/i915/intel_sdvo.c714
-rw-r--r--sys/dev/drm2/i915/intel_sprite.c151
-rw-r--r--sys/dev/drm2/i915/intel_tv.c165
-rw-r--r--sys/dev/fdc/fdc.c35
-rw-r--r--sys/dev/filemon/filemon.c16
-rw-r--r--sys/dev/filemon/filemon_wrapper.c3
-rw-r--r--sys/dev/firewire/fwmem.c2
-rw-r--r--sys/dev/hyperv/netvsc/hv_net_vsc.h6
-rw-r--r--sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c109
-rw-r--r--sys/dev/isp/isp_freebsd.c1
-rw-r--r--sys/dev/md/md.c3
-rw-r--r--sys/dev/nvd/nvd.c2
-rw-r--r--sys/dev/nvme/nvme.h1
-rw-r--r--sys/dev/nvme/nvme_ns.c18
-rw-r--r--sys/dev/nvme/nvme_sysctl.c16
-rw-r--r--sys/dev/vnic/nicvf_queues.c9
-rw-r--r--sys/geom/geom_disk.c10
-rw-r--r--sys/geom/geom_io.c8
-rw-r--r--sys/geom/sched/g_sched.c10
-rw-r--r--sys/geom/sched/gs_rr.c2
-rw-r--r--sys/kern/init_sysent.c28
-rw-r--r--sys/kern/kern_descrip.c3
-rw-r--r--sys/kern/link_elf_obj.c133
-rw-r--r--sys/kern/posix4_mib.c9
-rw-r--r--sys/kern/syscalls.c8
-rw-r--r--sys/kern/syscalls.master26
-rw-r--r--sys/kern/systrace_args.c78
-rw-r--r--sys/kern/vfs_aio.c111
-rw-r--r--sys/kern/vfs_default.c3
-rw-r--r--sys/kern/vfs_syscalls.c14
-rw-r--r--sys/mips/cavium/octeon_ebt3000_cf.c43
-rw-r--r--sys/mips/rt305x/rt305x_machdep.c2
-rw-r--r--sys/modules/drm2/i915kms/Makefile10
-rw-r--r--sys/modules/md/Makefile2
-rw-r--r--sys/netinet/sctp_usrreq.c1
-rw-r--r--sys/netinet/tcp_stacks/fastpath.c2
-rw-r--r--sys/riscv/conf/GENERIC6
-rw-r--r--sys/riscv/htif/htif_console.c29
-rw-r--r--sys/riscv/include/db_machdep.h46
-rw-r--r--sys/riscv/include/riscv_opcode.h116
-rw-r--r--sys/riscv/include/riscvreg.h7
-rw-r--r--sys/riscv/include/stack.h51
-rw-r--r--sys/riscv/riscv/db_disasm.c475
-rw-r--r--sys/riscv/riscv/db_interface.c163
-rw-r--r--sys/riscv/riscv/db_trace.c135
-rw-r--r--sys/riscv/riscv/stack_machdep.c37
-rw-r--r--sys/riscv/riscv/trap.c11
-rw-r--r--sys/riscv/riscv/unwind.c57
-rw-r--r--sys/sys/fdcio.h1
-rw-r--r--sys/sys/signalvar.h2
-rw-r--r--sys/sys/syscall.h8
-rw-r--r--sys/sys/syscall.mk8
-rw-r--r--sys/sys/sysproto.h38
-rw-r--r--sys/sys/unistd.h2
-rw-r--r--sys/sys/vnode.h1
-rw-r--r--targets/pseudo/clang/Makefile.depend3
-rw-r--r--targets/pseudo/hosttools/Makefile.depend2
-rw-r--r--targets/pseudo/tests/Makefile3
-rw-r--r--targets/pseudo/tests/Makefile.depend337
-rw-r--r--targets/pseudo/the-lot/Makefile.depend6
-rw-r--r--tests/Makefile.depend11
-rw-r--r--tests/etc/Makefile.depend11
-rw-r--r--tests/etc/rc.d/Makefile.depend11
-rw-r--r--tests/sys/Makefile.depend11
-rw-r--r--tests/sys/acl/Makefile.depend11
-rw-r--r--tests/sys/aio/Makefile.depend20
-rw-r--r--tests/sys/fifo/Makefile.depend18
-rw-r--r--tests/sys/file/Makefile.depend20
-rw-r--r--tests/sys/geom/Makefile.depend11
-rw-r--r--tests/sys/geom/class/Makefile.depend11
-rw-r--r--tests/sys/geom/class/concat/Makefile.depend11
-rw-r--r--tests/sys/geom/class/eli/Makefile.depend11
-rw-r--r--tests/sys/geom/class/gate/Makefile.depend11
-rw-r--r--tests/sys/geom/class/mirror/Makefile.depend11
-rw-r--r--tests/sys/geom/class/nop/Makefile.depend11
-rw-r--r--tests/sys/geom/class/raid3/Makefile.depend11
-rw-r--r--tests/sys/geom/class/shsec/Makefile.depend11
-rw-r--r--tests/sys/geom/class/stripe/Makefile.depend11
-rw-r--r--tests/sys/geom/class/uzip/Makefile.depend11
-rw-r--r--tests/sys/kern/Makefile.depend22
-rw-r--r--tests/sys/kern/acct/Makefile.depend20
-rw-r--r--tests/sys/kern/execve/Makefile.depend17
-rw-r--r--tests/sys/kern/pipe/Makefile.depend18
-rw-r--r--tests/sys/kqueue/Makefile.depend18
-rw-r--r--tests/sys/mac/Makefile.depend11
-rw-r--r--tests/sys/mac/bsdextended/Makefile.depend19
-rw-r--r--tests/sys/mac/portacl/Makefile.depend11
-rw-r--r--tests/sys/mqueue/Makefile.depend21
-rw-r--r--tests/sys/netinet/Makefile.depend19
-rw-r--r--tests/sys/opencrypto/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/chflags/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/chmod/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/chown/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/ftruncate/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/granular/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/link/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/mkdir/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/mkfifo/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/mknod/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/open/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/rename/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/rmdir/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/symlink/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/truncate/Makefile.depend11
-rw-r--r--tests/sys/pjdfstest/tests/unlink/Makefile.depend11
-rw-r--r--tests/sys/posixshm/Makefile.depend19
-rw-r--r--tests/sys/vfs/Makefile.depend11
-rw-r--r--tests/sys/vm/Makefile.depend19
-rw-r--r--tools/regression/filemon/Makefile85
-rw-r--r--tools/regression/filemon/filemontest.c84
-rwxr-xr-xtools/regression/filemon/test_script.sh44
-rw-r--r--tools/regression/filemon/timed-forkb.c177
-rw-r--r--tools/tools/cxgbetool/cxgbetool.c185
-rw-r--r--tools/tools/cxgbetool/reg_defs_t4.c182
-rw-r--r--tools/tools/cxgbetool/reg_defs_t4vf.c55
-rw-r--r--tools/tools/cxgbetool/reg_defs_t5.c162
-rw-r--r--tools/tools/cxgbetool/reg_defs_t6.c57337
-rw-r--r--tools/tools/nanobsd/embedded/common3
-rw-r--r--usr.bin/apply/tests/Makefile.depend11
-rw-r--r--usr.bin/basename/tests/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/archives/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/basic/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/basic/t0/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/basic/t1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/basic/t2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/basic/t3/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/execution/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/execution/empty/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/execution/joberr/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/execution/plus/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/builtin/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/meta/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/path/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/path_select/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/replace/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/shell/select/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/suffixes/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/syntax/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/syntax/enl/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/syntax/semi/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/mk/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/mk/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/mk/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/variables/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/Makefile.depend11
-rw-r--r--usr.bin/bmake/tests/variables/t0/Makefile.depend11
-rw-r--r--usr.bin/calendar/tests/Makefile.depend11
-rw-r--r--usr.bin/clang/bugpoint/Makefile.depend4
-rw-r--r--usr.bin/clang/clang/Makefile.depend17
-rw-r--r--usr.bin/clang/llc/Makefile.depend16
-rw-r--r--usr.bin/clang/lldb/Makefile.depend18
-rw-r--r--usr.bin/clang/lli/Makefile.depend5
-rw-r--r--usr.bin/clang/llvm-ar/Makefile.depend15
-rw-r--r--usr.bin/clang/llvm-as/Makefile.depend1
-rw-r--r--usr.bin/clang/llvm-bcanalyzer/Makefile.depend1
-rw-r--r--usr.bin/clang/llvm-cov/Makefile.depend1
-rw-r--r--usr.bin/clang/llvm-cxxdump/Makefile.depend14
-rw-r--r--usr.bin/clang/llvm-diff/Makefile.depend1
-rw-r--r--usr.bin/clang/llvm-dis/Makefile.depend2
-rw-r--r--usr.bin/clang/llvm-extract/Makefile.depend3
-rw-r--r--usr.bin/clang/llvm-link/Makefile.depend5
-rw-r--r--usr.bin/clang/llvm-lto/Makefile.depend17
-rw-r--r--usr.bin/clang/llvm-mc/Makefile.depend14
-rw-r--r--usr.bin/clang/llvm-nm/Makefile.depend15
-rw-r--r--usr.bin/clang/llvm-objdump/Makefile.depend14
-rw-r--r--usr.bin/clang/llvm-profdata/Makefile.depend2
-rw-r--r--usr.bin/clang/llvm-rtdyld/Makefile.depend14
-rw-r--r--usr.bin/clang/llvm-symbolizer/Makefile.depend1
-rw-r--r--usr.bin/clang/opt/Makefile.depend16
-rw-r--r--usr.bin/cmp/tests/Makefile.depend11
-rw-r--r--usr.bin/col/tests/Makefile.depend11
-rw-r--r--usr.bin/comm/tests/Makefile.depend11
-rw-r--r--usr.bin/cpio/tests/Makefile.depend25
-rw-r--r--usr.bin/cut/tests/Makefile.depend11
-rw-r--r--usr.bin/dirname/tests/Makefile.depend11
-rw-r--r--usr.bin/file2c/tests/Makefile.depend11
-rw-r--r--usr.bin/grep/tests/Makefile.depend11
-rw-r--r--usr.bin/gzip/tests/Makefile.depend11
-rw-r--r--usr.bin/ident/tests/Makefile.depend11
-rw-r--r--usr.bin/join/tests/Makefile.depend11
-rw-r--r--usr.bin/jot/tests/Makefile.depend11
-rw-r--r--usr.bin/kdump/kdump.c11
-rw-r--r--usr.bin/lastcomm/tests/Makefile.depend11
-rw-r--r--usr.bin/limits/tests/Makefile.depend11
-rw-r--r--usr.bin/m4/tests/Makefile.depend11
-rw-r--r--usr.bin/mkimg/tests/Makefile.depend11
-rw-r--r--usr.bin/ncal/tests/Makefile.depend11
-rw-r--r--usr.bin/printf/tests/Makefile.depend11
-rw-r--r--usr.bin/script/script.c36
-rw-r--r--usr.bin/sed/tests/Makefile.depend11
-rw-r--r--usr.bin/sed/tests/regress.multitest.out/Makefile.depend11
-rw-r--r--usr.bin/soelim/tests/Makefile.depend11
-rw-r--r--usr.bin/tar/tests/Makefile.depend19
-rw-r--r--usr.bin/tests/Makefile.depend11
-rw-r--r--usr.bin/timeout/tests/Makefile.depend11
-rw-r--r--usr.bin/tr/tests/Makefile.depend11
-rw-r--r--usr.bin/truncate/tests/Makefile.depend11
-rw-r--r--usr.bin/truss/setup.c203
-rw-r--r--usr.bin/truss/syscalls.c10
-rw-r--r--usr.bin/truss/truss.h4
-rw-r--r--usr.bin/units/tests/Makefile.depend11
-rw-r--r--usr.bin/uudecode/tests/Makefile.depend11
-rw-r--r--usr.bin/uuencode/tests/Makefile.depend11
-rw-r--r--usr.bin/xargs/tests/Makefile.depend11
-rw-r--r--usr.bin/xo/tests/Makefile.depend11
-rw-r--r--usr.bin/yacc/tests/Makefile.depend11
-rw-r--r--usr.sbin/chown/tests/Makefile.depend11
-rw-r--r--usr.sbin/etcupdate/tests/Makefile.depend11
-rw-r--r--usr.sbin/fstyp/tests/Makefile.depend11
-rw-r--r--usr.sbin/makefs/tests/Makefile.depend11
-rw-r--r--usr.sbin/newsyslog/tests/Makefile.depend11
-rw-r--r--usr.sbin/nmtree/tests/Makefile.depend11
-rw-r--r--usr.sbin/pw/tests/Makefile.depend11
-rw-r--r--usr.sbin/rpcbind/tests/Makefile.depend21
-rw-r--r--usr.sbin/sa/tests/Makefile.depend11
-rw-r--r--usr.sbin/tests/Makefile.depend11
699 files changed, 91231 insertions, 14881 deletions
diff --git a/Makefile b/Makefile
index 31313d5..d18eede 100644
--- a/Makefile
+++ b/Makefile
@@ -148,7 +148,7 @@ TGTS+= ${BITGTS}
PATH= /sbin:/bin:/usr/sbin:/usr/bin
MAKEOBJDIRPREFIX?= /usr/obj
-_MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} ${MAKE} \
+_MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} MK_AUTO_OBJ=no ${MAKE} \
${.MAKEFLAGS:MMAKEOBJDIRPREFIX=*} __MAKE_CONF=${__MAKE_CONF} \
-f /dev/null -V MAKEOBJDIRPREFIX dummy
.if !empty(_MAKEOBJDIRPREFIX)
diff --git a/Makefile.inc1 b/Makefile.inc1
index f2ba7a7..40bc9fe 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -179,9 +179,9 @@ OSRELDATE= 0
.endif
# Set VERSION for CTFMERGE to use via the default CTFFLAGS=-L VERSION.
-.if !defined(VERSION) && !make(showconfig)
-REVISION!= ${MAKE} -C ${SRCDIR}/release -V REVISION
-BRANCH!= ${MAKE} -C ${SRCDIR}/release -V BRANCH
+.if !defined(VERSION)
+REVISION!= MK_AUTO_OBJ=no ${MAKE} -C ${SRCDIR}/release -V REVISION
+BRANCH!= MK_AUTO_OBJ=no ${MAKE} -C ${SRCDIR}/release -V BRANCH
SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
${SRCDIR}/sys/sys/param.h
VERSION= FreeBSD ${REVISION}-${BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE}
@@ -244,14 +244,11 @@ _TARGET_CPUTYPE=${TARGET_CPUTYPE}
.else
_TARGET_CPUTYPE=dummy
.endif
-# Skip for showconfig as it is just wasted time and may invoke auto.obj.mk.
-.if !make(showconfig)
-_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
+_CPUTYPE!= MK_AUTO_OBJ=no MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
.error CPUTYPE global should be set with ?=.
.endif
-.endif
.if make(buildworld)
BUILD_ARCH!= uname -p
.if ${MACHINE_ARCH} != ${BUILD_ARCH}
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 53a1e08..e53a91a 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -7843,22 +7843,6 @@ OLD_FILES+=usr/share/bsnmp/mibs/FOKUS-MIB.txt
OLD_FILES+=usr/share/bsnmp/mibs/BEGEMOT-MIB.txt
OLD_FILES+=usr/share/bsnmp/mibs/BEGEMOT-SNMPD.txt
OLD_FILES+=usr/share/bsnmp/mibs/BEGEMOT-NETGRAPH.txt
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.x
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xbn
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xn
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xr
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xs
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xu
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xc
-OLD_FILES+=usr/libdata/ldscripts/elf64_sparc.xsc
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.x
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xbn
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xn
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xr
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xs
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xu
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xc
-OLD_FILES+=usr/libdata/ldscripts/elf32_sparc.xsc
OLD_FILES+=usr/libdata/msdosfs/iso22dos
OLD_FILES+=usr/libdata/msdosfs/iso72dos
OLD_FILES+=usr/libdata/msdosfs/koi2dos
diff --git a/bin/cat/tests/Makefile.depend b/bin/cat/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/cat/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/date/tests/Makefile.depend b/bin/date/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/date/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/dd/tests/Makefile.depend b/bin/dd/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/dd/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/expr/tests/Makefile.depend b/bin/expr/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/expr/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/ls/tests/Makefile.depend b/bin/ls/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/ls/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/mv/tests/Makefile.depend b/bin/mv/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/mv/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/pax/tests/Makefile.depend b/bin/pax/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/pax/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/pkill/tests/Makefile.depend b/bin/pkill/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/pkill/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/options.c b/bin/sh/options.c
index 70a09c3..340d7e0 100644
--- a/bin/sh/options.c
+++ b/bin/sh/options.c
@@ -285,7 +285,7 @@ minus_o(char *name, int val)
static void
setoptionbyindex(int idx, int val)
{
- if (optletter[idx] == 'p' && !val && privileged) {
+ if (&optval[idx] == &privileged && !val && privileged) {
if (setgid(getgid()) == -1)
error("setgid");
if (setuid(getuid()) == -1)
@@ -294,9 +294,9 @@ setoptionbyindex(int idx, int val)
optval[idx] = val;
if (val) {
/* #%$ hack for ksh semantics */
- if (optletter[idx] == 'V')
+ if (&optval[idx] == &Vflag)
Eflag = 0;
- else if (optletter[idx] == 'E')
+ else if (&optval[idx] == &Eflag)
Vflag = 0;
}
}
diff --git a/bin/sh/tests/Makefile.depend b/bin/sh/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/builtins/Makefile b/bin/sh/tests/builtins/Makefile
index c2f00a5..11cea5f 100644
--- a/bin/sh/tests/builtins/Makefile
+++ b/bin/sh/tests/builtins/Makefile
@@ -143,6 +143,7 @@ FILES+= return7.4
FILES+= return8.0
FILES+= set1.0
FILES+= set2.0
+FILES+= set3.0
FILES+= trap1.0
FILES+= trap10.0
FILES+= trap11.0
diff --git a/bin/sh/tests/builtins/Makefile.depend b/bin/sh/tests/builtins/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/builtins/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/builtins/set3.0 b/bin/sh/tests/builtins/set3.0
new file mode 100644
index 0000000..c5536e9
--- /dev/null
+++ b/bin/sh/tests/builtins/set3.0
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+settings1=$(set +o) && set -o nolog && settings2=$(set +o) &&
+[ "$settings1" != "$settings2" ]
diff --git a/bin/sh/tests/errors/Makefile.depend b/bin/sh/tests/errors/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/errors/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/execution/Makefile.depend b/bin/sh/tests/execution/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/execution/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/expansion/Makefile.depend b/bin/sh/tests/expansion/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/expansion/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/parameters/Makefile.depend b/bin/sh/tests/parameters/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/parameters/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/parser/Makefile.depend b/bin/sh/tests/parser/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/parser/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sh/tests/set-e/Makefile.depend b/bin/sh/tests/set-e/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sh/tests/set-e/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/sleep/tests/Makefile.depend b/bin/sleep/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/sleep/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/test/tests/Makefile.depend b/bin/test/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/test/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/bin/tests/Makefile.depend b/bin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/bin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb.c b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
index 346d817..bb45b5e 100644
--- a/cddl/contrib/opensolaris/cmd/zdb/zdb.c
+++ b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <stdio.h>
diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c
index 626d69c..317063e 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c
@@ -93,7 +93,7 @@ static int
zfs_callback(zfs_handle_t *zhp, void *data)
{
callback_data_t *cb = data;
- boolean_t dontclose = B_FALSE;
+ boolean_t should_close = B_TRUE;
boolean_t include_snaps = zfs_include_snapshots(zhp, cb);
boolean_t include_bmarks = (cb->cb_types & ZFS_TYPE_BOOKMARK);
@@ -121,7 +121,7 @@ zfs_callback(zfs_handle_t *zhp, void *data)
}
}
uu_avl_insert(cb->cb_avl, node, idx);
- dontclose = B_TRUE;
+ should_close = B_FALSE;
} else {
free(node);
}
@@ -147,7 +147,7 @@ zfs_callback(zfs_handle_t *zhp, void *data)
cb->cb_depth--;
}
- if (!dontclose)
+ if (should_close)
zfs_close(zhp);
return (0);
diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
index 99f9a1e..1d8b77c 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
@@ -29,6 +29,8 @@
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
+ * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>.
*/
#include <assert.h>
@@ -751,7 +753,7 @@ zfs_do_create(int argc, char **argv)
{
zfs_type_t type = ZFS_TYPE_FILESYSTEM;
zfs_handle_t *zhp = NULL;
- uint64_t volsize;
+ uint64_t volsize = 0;
int c;
boolean_t noreserve = B_FALSE;
boolean_t bflag = B_FALSE;
@@ -846,14 +848,14 @@ zfs_do_create(int argc, char **argv)
if (type == ZFS_TYPE_VOLUME && !noreserve) {
zpool_handle_t *zpool_handle;
- nvlist_t *real_props;
+ nvlist_t *real_props = NULL;
uint64_t spa_version;
char *p;
zfs_prop_t resv_prop;
char *strval;
char msg[1024];
- if (p = strchr(argv[0], '/'))
+ if ((p = strchr(argv[0], '/')) != NULL)
*p = '\0';
zpool_handle = zpool_open(g_zfs, argv[0]);
if (p != NULL)
@@ -2360,6 +2362,9 @@ us_compare(const void *larg, const void *rarg, void *unused)
if (rv64 != lv64)
rc = (rv64 < lv64) ? 1 : -1;
break;
+
+ default:
+ break;
}
if (rc != 0) {
@@ -2415,7 +2420,7 @@ userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space)
nvlist_t *props;
us_node_t *n;
zfs_sort_column_t *sortcol = cb->cb_sortcol;
- unsigned type;
+ unsigned type = 0;
const char *typestr;
size_t namelen;
size_t typelen;
@@ -3973,7 +3978,7 @@ zfs_do_send(int argc, char **argv)
static int
zfs_do_receive(int argc, char **argv)
{
- int c, err;
+ int c, err = 0;
recvflags_t flags = { 0 };
boolean_t abort_resumable = B_FALSE;
@@ -4233,7 +4238,7 @@ deleg_perm_type(zfs_deleg_note_t note)
}
}
-static int inline
+static int
who_type2weight(zfs_deleg_who_type_t who_type)
{
int res;
@@ -4453,7 +4458,7 @@ fs_perm_fini(fs_perm_t *fsperm)
uu_avl_destroy(fsperm->fsp_uge_avl);
}
-static void inline
+static void
set_deleg_perm_node(uu_avl_t *avl, deleg_perm_node_t *node,
zfs_deleg_who_type_t who_type, const char *name, char locality)
{
@@ -4521,7 +4526,7 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
nvlist_t *nvl2 = NULL;
const char *name = nvpair_name(nvp);
uu_avl_t *avl = NULL;
- uu_avl_pool_t *avl_pool;
+ uu_avl_pool_t *avl_pool = NULL;
zfs_deleg_who_type_t perm_type = name[0];
char perm_locality = name[1];
const char *perm_name = name + 3;
@@ -4550,6 +4555,9 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
avl_pool = fspset->fsps_who_perm_avl_pool;
avl = fsperm->fsp_uge_avl;
break;
+
+ default:
+ assert(!"unhandled zfs_deleg_who_type_t");
}
if (is_set) {
@@ -4585,6 +4593,9 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
if (g)
nice_name = g->gr_name;
break;
+
+ default:
+ break;
}
if (nice_name != NULL)
@@ -4853,11 +4864,12 @@ parse_allow_args(int argc, char **argv, boolean_t un, struct allow_opts *opts)
allow_usage(un, B_FALSE,
gettext("-u, -g, and -e are mutually exclusive\n"));
- if (opts->prt_usage)
+ if (opts->prt_usage) {
if (argc == 0 && all_sum == 0)
allow_usage(un, B_TRUE, NULL);
else
usage(B_FALSE);
+ }
if (opts->set) {
if (csuge_sum > 1)
@@ -4906,8 +4918,8 @@ store_allow_perm(zfs_deleg_who_type_t type, boolean_t local, boolean_t descend,
int i;
char ld[2] = { '\0', '\0' };
char who_buf[ZFS_MAXNAMELEN+32];
- char base_type;
- char set_type;
+ char base_type = '\0';
+ char set_type = '\0';
nvlist_t *base_nvl = NULL;
nvlist_t *set_nvl = NULL;
nvlist_t *nvl;
@@ -4956,6 +4968,10 @@ store_allow_perm(zfs_deleg_who_type_t type, boolean_t local, boolean_t descend,
ld[0] = ZFS_DELEG_LOCAL;
if (descend)
ld[1] = ZFS_DELEG_DESCENDENT;
+ break;
+
+ default:
+ assert(set_type != '\0' && base_type != '\0');
}
if (perms != NULL) {
@@ -5060,7 +5076,7 @@ construct_fsacl_list(boolean_t un, struct allow_opts *opts, nvlist_t **nvlp)
while (curr < end) {
const char *who;
- zfs_deleg_who_type_t who_type;
+ zfs_deleg_who_type_t who_type = ZFS_DELEG_WHO_UNKNOWN;
char *endch;
char *delim = strchr(curr, ',');
char errbuf[256];
@@ -5110,12 +5126,13 @@ construct_fsacl_list(boolean_t un, struct allow_opts *opts, nvlist_t **nvlp)
p = getpwuid(rid);
}
- if (p == NULL)
+ if (p == NULL) {
if (*endch != '\0') {
g = getgrnam(curr);
} else {
g = getgrgid(rid);
}
+ }
if (p != NULL) {
who_type = ZFS_DELEG_USER;
@@ -5188,7 +5205,7 @@ print_set_creat_perms(uu_avl_t *who_avl)
}
}
-static void inline
+static void
print_uge_deleg_perms(uu_avl_t *who_avl, boolean_t local, boolean_t descend,
const char *title)
{
@@ -5239,6 +5256,10 @@ print_uge_deleg_perms(uu_avl_t *who_avl, boolean_t local, boolean_t descend,
case ZFS_DELEG_EVERYONE:
who = gettext("everyone");
who_name = NULL;
+ break;
+
+ default:
+ assert(who != NULL);
}
prt_who = B_FALSE;
@@ -5407,8 +5428,7 @@ zfs_do_allow_unallow_impl(int argc, char **argv, boolean_t un)
cleanup0:
nvlist_free(perm_nvl);
- if (update_perm_nvl != NULL)
- nvlist_free(update_perm_nvl);
+ nvlist_free(update_perm_nvl);
cleanup1:
fs_perm_set_fini(&fs_perm_set);
cleanup2:
@@ -5956,7 +5976,7 @@ share_mount_one(zfs_handle_t *zhp, int op, int flags, char *protocol,
shared_nfs = zfs_is_shared_nfs(zhp, NULL);
shared_smb = zfs_is_shared_smb(zhp, NULL);
- if (shared_nfs && shared_smb ||
+ if ((shared_nfs && shared_smb) ||
(shared_nfs && strcmp(shareopts, "on") == 0 &&
strcmp(smbshareopts, "off") == 0) ||
(shared_smb && strcmp(smbshareopts, "on") == 0 &&
@@ -6430,7 +6450,7 @@ unshare_unmount(int op, int argc, char **argv)
*/
struct mnttab entry;
uu_avl_pool_t *pool;
- uu_avl_t *tree;
+ uu_avl_t *tree = NULL;
unshare_unmount_node_t *node;
uu_avl_index_t idx;
uu_avl_walk_t *walk;
@@ -6924,7 +6944,7 @@ zfs_do_diff(int argc, char **argv)
if (copy == NULL)
usage(B_FALSE);
- if (atp = strchr(copy, '@'))
+ if ((atp = strchr(copy, '@')) != NULL)
*atp = '\0';
if ((zhp = zfs_open(g_zfs, copy, ZFS_TYPE_FILESYSTEM)) == NULL)
diff --git a/cddl/contrib/opensolaris/cmd/zinject/zinject.c b/cddl/contrib/opensolaris/cmd/zinject/zinject.c
index ddcdb1f..bf42bc4 100644
--- a/cddl/contrib/opensolaris/cmd/zinject/zinject.c
+++ b/cddl/contrib/opensolaris/cmd/zinject/zinject.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
*/
/*
@@ -229,21 +229,57 @@ usage(void)
"\t\tall records if 'all' is specificed.\n"
"\n"
"\tzinject -p <function name> pool\n"
+ "\n"
"\t\tInject a panic fault at the specified function. Only \n"
"\t\tfunctions which call spa_vdev_config_exit(), or \n"
"\t\tspa_vdev_exit() will trigger a panic.\n"
"\n"
"\tzinject -d device [-e errno] [-L <nvlist|uber|pad1|pad2>] [-F]\n"
"\t [-T <read|write|free|claim|all> pool\n"
+ "\n"
"\t\tInject a fault into a particular device or the device's\n"
"\t\tlabel. Label injection can either be 'nvlist', 'uber',\n "
"\t\t'pad1', or 'pad2'.\n"
"\t\t'errno' can be 'nxio' (the default), 'io', or 'dtl'.\n"
"\n"
"\tzinject -d device -A <degrade|fault> pool\n"
+ "\n"
"\t\tPerform a specific action on a particular device\n"
"\n"
+ "\tzinject -d device -D latency:lanes pool\n"
+ "\n"
+ "\t\tAdd an artificial delay to IO requests on a particular\n"
+ "\t\tdevice, such that the requests take a minimum of 'latency'\n"
+ "\t\tmilliseconds to complete. Each delay has an associated\n"
+ "\t\tnumber of 'lanes' which defines the number of concurrent\n"
+ "\t\tIO requests that can be processed.\n"
+ "\n"
+ "\t\tFor example, with a single lane delay of 10 ms (-D 10:1),\n"
+ "\t\tthe device will only be able to service a single IO request\n"
+ "\t\tat a time with each request taking 10 ms to complete. So,\n"
+ "\t\tif only a single request is submitted every 10 ms, the\n"
+ "\t\taverage latency will be 10 ms; but if more than one request\n"
+ "\t\tis submitted every 10 ms, the average latency will be more\n"
+ "\t\tthan 10 ms.\n"
+ "\n"
+ "\t\tSimilarly, if a delay of 10 ms is specified to have two\n"
+ "\t\tlanes (-D 10:2), then the device will be able to service\n"
+ "\t\ttwo requests at a time, each with a minimum latency of\n"
+ "\t\t10 ms. So, if two requests are submitted every 10 ms, then\n"
+ "\t\tthe average latency will be 10 ms; but if more than two\n"
+ "\t\trequests are submitted every 10 ms, the average latency\n"
+ "\t\twill be more than 10 ms.\n"
+ "\n"
+ "\t\tAlso note, these delays are additive. So two invocations\n"
+ "\t\tof '-D 10:1', is roughly equivalent to a single invocation\n"
+ "\t\tof '-D 10:2'. This also means, one can specify multiple\n"
+ "\t\tlanes with differing target latencies. For example, an\n"
+ "\t\tinvocation of '-D 10:1' followed by '-D 25:2' will\n"
+ "\t\tcreate 3 lanes on the device; one lane with a latency\n"
+ "\t\tof 10 ms and two lanes with a 25 ms latency.\n"
+ "\n"
"\tzinject -I [-s <seconds> | -g <txgs>] pool\n"
+ "\n"
"\t\tCause the pool to stop writing blocks yet not\n"
"\t\treport errors for a duration. Simulates buggy hardware\n"
"\t\tthat fails to honor cache flush requests.\n"
@@ -357,6 +393,9 @@ print_device_handler(int id, const char *pool, zinject_record_t *record,
if (record->zi_guid == 0 || record->zi_func[0] != '\0')
return (0);
+ if (record->zi_cmd == ZINJECT_DELAY_IO)
+ return (0);
+
if (*count == 0) {
(void) printf("%3s %-15s %s\n", "ID", "POOL", "GUID");
(void) printf("--- --------------- ----------------\n");
@@ -371,6 +410,35 @@ print_device_handler(int id, const char *pool, zinject_record_t *record,
}
static int
+print_delay_handler(int id, const char *pool, zinject_record_t *record,
+ void *data)
+{
+ int *count = data;
+
+ if (record->zi_guid == 0 || record->zi_func[0] != '\0')
+ return (0);
+
+ if (record->zi_cmd != ZINJECT_DELAY_IO)
+ return (0);
+
+ if (*count == 0) {
+ (void) printf("%3s %-15s %-15s %-15s %s\n",
+ "ID", "POOL", "DELAY (ms)", "LANES", "GUID");
+ (void) printf("--- --------------- --------------- "
+ "--------------- ----------------\n");
+ }
+
+ *count += 1;
+
+ (void) printf("%3d %-15s %-15llu %-15llu %llx\n", id, pool,
+ (u_longlong_t)NSEC2MSEC(record->zi_timer),
+ (u_longlong_t)record->zi_nlanes,
+ (u_longlong_t)record->zi_guid);
+
+ return (0);
+}
+
+static int
print_panic_handler(int id, const char *pool, zinject_record_t *record,
void *data)
{
@@ -407,6 +475,13 @@ print_all_handlers(void)
count = 0;
}
+ (void) iter_handlers(print_delay_handler, &count);
+ if (count > 0) {
+ total += count;
+ (void) printf("\n");
+ count = 0;
+ }
+
(void) iter_handlers(print_data_handler, &count);
if (count > 0) {
total += count;
@@ -549,6 +624,35 @@ perform_action(const char *pool, zinject_record_t *record, int cmd)
return (1);
}
+static int
+parse_delay(char *str, uint64_t *delay, uint64_t *nlanes)
+{
+ unsigned long scan_delay;
+ unsigned long scan_nlanes;
+
+ if (sscanf(str, "%lu:%lu", &scan_delay, &scan_nlanes) != 2)
+ return (1);
+
+ /*
+ * We explicitly disallow a delay of zero here, because we key
+ * off this value being non-zero in translate_device(), to
+ * determine if the fault is a ZINJECT_DELAY_IO fault or not.
+ */
+ if (scan_delay == 0)
+ return (1);
+
+ /*
+ * The units for the CLI delay parameter is milliseconds, but
+ * the data passed to the kernel is interpreted as nanoseconds.
+ * Thus we scale the milliseconds to nanoseconds here, and this
+ * nanosecond value is used to pass the delay to the kernel.
+ */
+ *delay = MSEC2NSEC(scan_delay);
+ *nlanes = scan_nlanes;
+
+ return (0);
+}
+
int
main(int argc, char **argv)
{
@@ -632,8 +736,9 @@ main(int argc, char **argv)
device = optarg;
break;
case 'D':
- record.zi_timer = strtoull(optarg, &end, 10);
- if (errno != 0 || *end != '\0') {
+ ret = parse_delay(optarg, &record.zi_timer,
+ &record.zi_nlanes);
+ if (ret != 0) {
(void) fprintf(stderr, "invalid i/o delay "
"value: '%s'\n", optarg);
usage();
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c
index 6ba91b1..2f7de93 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c
@@ -22,8 +22,9 @@
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-
-#pragma ident "%Z%%M% %I% %E% SMI"
+/*
+ * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>.
+ */
#include <solaris.h>
#include <libintl.h>
@@ -132,7 +133,8 @@ pool_list_get(int argc, char **argv, zprop_list_t **proplist, int *err)
for (i = 0; i < argc; i++) {
zpool_handle_t *zhp;
- if (zhp = zpool_open_canfail(g_zfs, argv[i])) {
+ if ((zhp = zpool_open_canfail(g_zfs, argv[i])) !=
+ NULL) {
if (add_pool(zhp, zlp) != 0)
*err = B_TRUE;
} else {
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
index c666263..b979833 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
@@ -26,6 +26,7 @@
* Copyright (c) 2012 by Frederik Wessels. All rights reserved.
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2013 by Prasad Joshi (sTec). All rights reserved.
+ * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>.
*/
#include <solaris.h>
@@ -3171,33 +3172,6 @@ zpool_do_list(int argc, char **argv)
return (ret);
}
-static nvlist_t *
-zpool_get_vdev_by_name(nvlist_t *nv, char *name)
-{
- nvlist_t **child;
- uint_t c, children;
- nvlist_t *match;
- char *path;
-
- if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
- &child, &children) != 0) {
- verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0);
- if (strncmp(name, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0)
- name += sizeof(_PATH_DEV) - 1;
- if (strncmp(path, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0)
- path += sizeof(_PATH_DEV) - 1;
- if (strcmp(name, path) == 0)
- return (nv);
- return (NULL);
- }
-
- for (c = 0; c < children; c++)
- if ((match = zpool_get_vdev_by_name(child[c], name)) != NULL)
- return (match);
-
- return (NULL);
-}
-
static int
zpool_do_attach_or_replace(int argc, char **argv, int replacing)
{
@@ -3413,8 +3387,7 @@ zpool_do_split(int argc, char **argv)
if (add_prop_list(
zpool_prop_to_name(ZPOOL_PROP_ALTROOT), optarg,
&props, B_TRUE) != 0) {
- if (props)
- nvlist_free(props);
+ nvlist_free(props);
usage(B_FALSE);
}
break;
@@ -3427,8 +3400,7 @@ zpool_do_split(int argc, char **argv)
propval++;
if (add_prop_list(optarg, propval,
&props, B_TRUE) != 0) {
- if (props)
- nvlist_free(props);
+ nvlist_free(props);
usage(B_FALSE);
}
} else {
@@ -3928,7 +3900,7 @@ print_scan_status(pool_scan_stat_t *ps)
*/
if (ps->pss_state == DSS_FINISHED) {
uint64_t minutes_taken = (end - start) / 60;
- char *fmt;
+ char *fmt = NULL;
if (ps->pss_func == POOL_SCAN_SCRUB) {
fmt = gettext("scrub repaired %s in %lluh%um with "
@@ -5562,7 +5534,7 @@ find_command_idx(char *command, int *idx)
int
main(int argc, char **argv)
{
- int ret;
+ int ret = 0;
int i;
char *cmdname;
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
index efd828f..227d25a 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>.
*/
/*
@@ -588,7 +589,9 @@ get_replication(nvlist_t *nvroot, boolean_t fatal)
uint_t c, children;
nvlist_t *nv;
char *type;
- replication_level_t lastrep, rep, *ret;
+ replication_level_t lastrep = {0};
+ replication_level_t rep;
+ replication_level_t *ret;
boolean_t dontreport;
ret = safe_malloc(sizeof (replication_level_t));
@@ -1080,7 +1083,7 @@ is_device_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
nvlist_t **child;
uint_t c, children;
char *type, *path;
- int ret;
+ int ret = 0;
char buf[MAXPATHLEN];
uint64_t wholedisk;
boolean_t anyinuse = B_FALSE;
@@ -1449,8 +1452,7 @@ split_mirror_vdev(zpool_handle_t *zhp, char *newname, nvlist_t *props,
}
if (zpool_vdev_split(zhp, newname, &newroot, props, flags) != 0) {
- if (newroot != NULL)
- nvlist_free(newroot);
+ nvlist_free(newroot);
return (NULL);
}
diff --git a/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c b/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c
index 83a5b54..32e370d 100644
--- a/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c
+++ b/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c
@@ -26,6 +26,7 @@
/*
* Copyright (c) 2013, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <ctype.h>
diff --git a/cddl/contrib/opensolaris/cmd/ztest/ztest.c b/cddl/contrib/opensolaris/cmd/ztest/ztest.c
index 7cc8d5f..211348c 100644
--- a/cddl/contrib/opensolaris/cmd/ztest/ztest.c
+++ b/cddl/contrib/opensolaris/cmd/ztest/ztest.c
@@ -24,6 +24,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/*
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
index 8ab1546..1b4b46c 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
@@ -28,6 +28,7 @@
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _LIBZFS_H
@@ -326,7 +327,7 @@ typedef enum {
ZPOOL_STATUS_VERSION_OLDER, /* older legacy on-disk version */
ZPOOL_STATUS_FEAT_DISABLED, /* supported features are disabled */
ZPOOL_STATUS_RESILVERING, /* device being resilvered */
- ZPOOL_STATUS_OFFLINE_DEV, /* device online */
+ ZPOOL_STATUS_OFFLINE_DEV, /* device offline */
ZPOOL_STATUS_REMOVED_DEV, /* removed device */
ZPOOL_STATUS_NON_NATIVE_ASHIFT, /* (e.g. 512e dev with ashift of 9) */
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c
index 833e1b6..b9ecd9d 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c
@@ -74,6 +74,9 @@ zcmd_ioctl(int fd, int request, zfs_cmd_t *zc)
if (zfs_ioctl_version >= ZFS_IOCVER_DEADMAN) {
switch (zfs_ioctl_version) {
+ case ZFS_IOCVER_RESUME:
+ cflag = ZFS_CMD_COMPAT_RESUME;
+ break;
case ZFS_IOCVER_EDBP:
cflag = ZFS_CMD_COMPAT_EDBP;
break;
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c
index c3dafd6..2f332a8 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c
@@ -318,8 +318,7 @@ zpool_refresh_stats(zpool_handle_t *zhp, boolean_t *missing)
verify(nvlist_lookup_uint64(config,
ZPOOL_CONFIG_POOL_TXG, &newtxg) == 0);
- if (zhp->zpool_old_config != NULL)
- nvlist_free(zhp->zpool_old_config);
+ nvlist_free(zhp->zpool_old_config);
if (oldtxg != newtxg) {
nvlist_free(zhp->zpool_config);
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
index 234d2cd..504db96 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
@@ -29,6 +29,7 @@
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <ctype.h>
@@ -2063,8 +2064,7 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src,
zcmd_free_nvlists(&zc);
return (-1);
}
- if (zplprops)
- nvlist_free(zplprops);
+ nvlist_free(zplprops);
zcmd_free_nvlists(&zc);
break;
@@ -4339,8 +4339,7 @@ zfs_smb_acl_mgmt(libzfs_handle_t *hdl, char *dataset, char *path,
return (-1);
}
error = ioctl(hdl->libzfs_fd, ZFS_IOC_SMB_ACL, &zc);
- if (nvlist)
- nvlist_free(nvlist);
+ nvlist_free(nvlist);
return (error);
}
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
index bb49eba..28b1e2e 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2016 Joyent, Inc.
*/
/*
@@ -136,12 +137,13 @@ get_stats_for_obj(differ_info_t *di, const char *dsname, uint64_t obj,
static void
stream_bytes(FILE *fp, const char *string)
{
- while (*string) {
- if (*string > ' ' && *string != '\\' && *string < '\177')
- (void) fprintf(fp, "%c", *string++);
- else {
- (void) fprintf(fp, "\\%03hho",
- (unsigned char)*string++);
+ char c;
+
+ while ((c = *string++) != '\0') {
+ if (c > ' ' && c != '\\' && c < '\177') {
+ (void) fprintf(fp, "%c", c);
+ } else {
+ (void) fprintf(fp, "\\%03o", (uint8_t)c);
}
}
}
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
index 0987024..133cc6f 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
@@ -1331,8 +1331,7 @@ error:
venext = ve->ve_next;
for (ce = ve->ve_configs; ce != NULL; ce = cenext) {
cenext = ce->ce_next;
- if (ce->ce_config)
- nvlist_free(ce->ce_config);
+ nvlist_free(ce->ce_config);
free(ce);
}
free(ve);
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
index 7cdcfc9..4dc48fa 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
@@ -1054,12 +1054,9 @@ zpool_open(libzfs_handle_t *hdl, const char *pool)
void
zpool_close(zpool_handle_t *zhp)
{
- if (zhp->zpool_config)
- nvlist_free(zhp->zpool_config);
- if (zhp->zpool_old_config)
- nvlist_free(zhp->zpool_old_config);
- if (zhp->zpool_props)
- nvlist_free(zhp->zpool_props);
+ nvlist_free(zhp->zpool_config);
+ nvlist_free(zhp->zpool_old_config);
+ nvlist_free(zhp->zpool_props);
free(zhp);
}
@@ -1577,8 +1574,7 @@ zpool_import(libzfs_handle_t *hdl, nvlist_t *config, const char *newname,
ret = zpool_import_props(hdl, config, newname, props,
ZFS_IMPORT_NORMAL);
- if (props)
- nvlist_free(props);
+ nvlist_free(props);
return (ret);
}
@@ -2901,8 +2897,7 @@ zpool_vdev_split(zpool_handle_t *zhp, char *newname, nvlist_t **newroot,
&children) != 0) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"Source pool is missing vdev tree"));
- if (zc_props)
- nvlist_free(zc_props);
+ nvlist_free(zc_props);
return (-1);
}
@@ -3050,10 +3045,8 @@ out:
free(varray);
}
zcmd_free_nvlists(&zc);
- if (zc_props)
- nvlist_free(zc_props);
- if (newconfig)
- nvlist_free(newconfig);
+ nvlist_free(zc_props);
+ nvlist_free(newconfig);
if (freelist) {
nvlist_free(*newroot);
*newroot = NULL;
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
index 4fbab42..723cd42 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
@@ -27,6 +27,7 @@
* All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <assert.h>
@@ -2793,8 +2794,7 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname,
out:
fsavl_destroy(stream_avl);
- if (stream_nv)
- nvlist_free(stream_nv);
+ nvlist_free(stream_nv);
if (softerr)
error = -2;
if (anyerr)
diff --git a/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c b/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
index 69d332a..3accb2c 100644
--- a/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
+++ b/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/*
diff --git a/cddl/lib/tests/Makefile.depend b/cddl/lib/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/lib/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/sbin/tests/Makefile.depend b/cddl/sbin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/sbin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/tests/Makefile.depend b/cddl/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.bin/tests/Makefile.depend b/cddl/usr.bin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.bin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/Makefile.depend b/cddl/usr.sbin/dtrace/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/begin/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/begin/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/begin/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/cg/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/cg/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/cg/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/decls/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/decls/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/decls/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/drops/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/drops/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/drops/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/end/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/end/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/end/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/enum/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/enum/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/enum/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/error/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/error/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/error/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/exit/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/exit/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/exit/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/include/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/include/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/include/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/inline/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/inline/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/inline/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/io/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/io/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/io/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/ip/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/ip/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/ip/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/json/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/json/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/json/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/mib/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/mib/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/mib/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/misc/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/misc/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/misc/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/operators/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/operators/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/operators/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/pid/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/pid/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pid/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/print/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/print/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/print/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/printa/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/printa/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/printa/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/printf/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/printf/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/printf/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/privs/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/privs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/privs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/probes/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/probes/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/probes/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/proc/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/proc/Makefile.depend
new file mode 100644
index 0000000..7543607
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/proc/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/librt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile.depend
new file mode 100644
index 0000000..43d71f8
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile.depend
@@ -0,0 +1,16 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/providers/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/providers/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/providers/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/raise/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/raise/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/raise/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/rates/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/rates/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/rates/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/safety/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/safety/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/safety/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/sched/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/sched/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sched/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/stability/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/stability/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stability/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/stack/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/stack/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stack/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/stop/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/stop/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stop/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/struct/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/struct/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/struct/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/trace/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/trace/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/trace/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/translators/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/translators/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/translators/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/types/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/types/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/types/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/union/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/union/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/union/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/vars/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/vars/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/vars/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/dtrace/tests/common/version/Makefile.depend b/cddl/usr.sbin/dtrace/tests/common/version/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/version/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/cddl/usr.sbin/tests/Makefile.depend b/cddl/usr.sbin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/cddl/usr.sbin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
index 4d2a93b..34fd5cc 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
@@ -87,7 +87,7 @@ __RCSID("$NetBSD: t_setjmp.c,v 1.1 2010/12/27 19:35:31 pgoyette Exp $");
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
atf_tc_pass();
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
index 4437c92..2014470 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
@@ -91,7 +91,7 @@ static pthread_t myself = NULL;
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE(myself == pthread_self());
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
index ea10412..d4410db 100644
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -283,6 +283,8 @@
..
ssp
..
+ setjmp
+ ..
stdio
..
stdlib
diff --git a/etc/rc.d/abi b/etc/rc.d/abi
index 3765b05..5021843 100755
--- a/etc/rc.d/abi
+++ b/etc/rc.d/abi
@@ -27,6 +27,11 @@ linux_start()
echo -n ' linux'
load_kld -e 'linux(aout|elf)' linux
+ case `sysctl -n hw.machine_arch` in
+ amd64)
+ load_kld -e 'linux64elf' linux64
+ ;;
+ esac
if [ -x /compat/linux/sbin/ldconfigDisabled ]; then
_tmpdir=`mktemp -d -t linux-ldconfig`
/compat/linux/sbin/ldconfig -C ${_tmpdir}/ld.so.cache
diff --git a/gnu/lib/tests/Makefile.depend b/gnu/lib/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/gnu/lib/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/gnu/tests/Makefile.depend b/gnu/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/gnu/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/gnu/usr.bin/diff/tests/Makefile.depend b/gnu/usr.bin/diff/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/gnu/usr.bin/diff/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/gnu/usr.bin/tests/Makefile.depend b/gnu/usr.bin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/gnu/usr.bin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/libatf-c++/tests/Makefile.depend b/lib/atf/libatf-c++/tests/Makefile.depend
new file mode 100644
index 0000000..494810e
--- /dev/null
+++ b/lib/atf/libatf-c++/tests/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/atf/libatf-c++ \
+ lib/libc \
+ lib/libc++ \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/libatf-c++/tests/detail/Makefile.depend b/lib/atf/libatf-c++/tests/detail/Makefile.depend
new file mode 100644
index 0000000..494810e
--- /dev/null
+++ b/lib/atf/libatf-c++/tests/detail/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/atf/libatf-c++ \
+ lib/libc \
+ lib/libc++ \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/libatf-c/tests/Makefile.depend b/lib/atf/libatf-c/tests/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/lib/atf/libatf-c/tests/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/libatf-c/tests/detail/Makefile.depend b/lib/atf/libatf-c/tests/detail/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/lib/atf/libatf-c/tests/detail/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/tests/Makefile.depend b/lib/atf/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/lib/atf/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/atf/tests/test-programs/Makefile.depend b/lib/atf/tests/test-programs/Makefile.depend
new file mode 100644
index 0000000..494810e
--- /dev/null
+++ b/lib/atf/tests/test-programs/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/atf/libatf-c++ \
+ lib/libc \
+ lib/libc++ \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/libclangcodegen/Makefile.depend b/lib/clang/libclangcodegen/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/libclangcodegen/Makefile.depend
+++ b/lib/clang/libclangcodegen/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libclangdriver/Makefile.depend b/lib/clang/libclangdriver/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/libclangdriver/Makefile.depend
+++ b/lib/clang/libclangdriver/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libclangfrontend/Makefile.depend b/lib/clang/libclangfrontend/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/libclangfrontend/Makefile.depend
+++ b/lib/clang/libclangfrontend/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libclangfrontendtool/Makefile.depend b/lib/clang/libclangfrontendtool/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/libclangfrontendtool/Makefile.depend
+++ b/lib/clang/libclangfrontendtool/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/liblldbExpression/Makefile.depend b/lib/clang/liblldbExpression/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/liblldbExpression/Makefile.depend
+++ b/lib/clang/liblldbExpression/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/liblldbInitialization/Makefile.depend b/lib/clang/liblldbInitialization/Makefile.depend
index 3e7f3f5..264ede1 100644
--- a/lib/clang/liblldbInitialization/Makefile.depend
+++ b/lib/clang/liblldbInitialization/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/clang-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/liblldbPluginExpressionParserClang/Makefile.depend b/lib/clang/liblldbPluginExpressionParserClang/Makefile.depend
new file mode 100644
index 0000000..7bd22d4
--- /dev/null
+++ b/lib/clang/liblldbPluginExpressionParserClang/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+ usr.bin/clang/clang-tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/liblldbPluginExpressionParserGo/Makefile.depend b/lib/clang/liblldbPluginExpressionParserGo/Makefile.depend
new file mode 100644
index 0000000..3e7f3f5
--- /dev/null
+++ b/lib/clang/liblldbPluginExpressionParserGo/Makefile.depend
@@ -0,0 +1,15 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/liblldbPluginLanguageCPlusPlus/Makefile.depend b/lib/clang/liblldbPluginLanguageCPlusPlus/Makefile.depend
new file mode 100644
index 0000000..264ede1
--- /dev/null
+++ b/lib/clang/liblldbPluginLanguageCPlusPlus/Makefile.depend
@@ -0,0 +1,16 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+ usr.bin/clang/clang-tblgen.host \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/liblldbPluginLanguageObjC/Makefile.depend b/lib/clang/liblldbPluginLanguageObjC/Makefile.depend
new file mode 100644
index 0000000..264ede1
--- /dev/null
+++ b/lib/clang/liblldbPluginLanguageObjC/Makefile.depend
@@ -0,0 +1,16 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+ usr.bin/clang/clang-tblgen.host \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/liblldbPluginScriptInterpreterNone/Makefile.depend b/lib/clang/liblldbPluginScriptInterpreterNone/Makefile.depend
new file mode 100644
index 0000000..3e7f3f5
--- /dev/null
+++ b/lib/clang/liblldbPluginScriptInterpreterNone/Makefile.depend
@@ -0,0 +1,15 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/liblldbPluginSymbolFileDWARF/Makefile.depend b/lib/clang/liblldbPluginSymbolFileDWARF/Makefile.depend
index 9a1b84e..7bd22d4 100644
--- a/lib/clang/liblldbPluginSymbolFileDWARF/Makefile.depend
+++ b/lib/clang/liblldbPluginSymbolFileDWARF/Makefile.depend
@@ -7,7 +7,7 @@ DIRDEPS = \
lib/libc++ \
lib/msun \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64asmparser/Makefile.depend b/lib/clang/libllvmaarch64asmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64asmparser/Makefile.depend
+++ b/lib/clang/libllvmaarch64asmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64asmprinter/Makefile.depend b/lib/clang/libllvmaarch64asmprinter/Makefile.depend
index 56c8d39..00c24e7 100644
--- a/lib/clang/libllvmaarch64asmprinter/Makefile.depend
+++ b/lib/clang/libllvmaarch64asmprinter/Makefile.depend
@@ -6,21 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-AArch64InstPrinter.o: AArch64GenAsmWriter.inc.h
-AArch64InstPrinter.o: AArch64GenAsmWriter1.inc.h
-AArch64InstPrinter.o: AArch64GenInstrInfo.inc.h
-AArch64InstPrinter.o: AArch64GenRegisterInfo.inc.h
-AArch64InstPrinter.o: AArch64GenSubtargetInfo.inc.h
-AArch64InstPrinter.po: AArch64GenAsmWriter.inc.h
-AArch64InstPrinter.po: AArch64GenAsmWriter1.inc.h
-AArch64InstPrinter.po: AArch64GenInstrInfo.inc.h
-AArch64InstPrinter.po: AArch64GenRegisterInfo.inc.h
-AArch64InstPrinter.po: AArch64GenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmaarch64codegen/Makefile.depend b/lib/clang/libllvmaarch64codegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64codegen/Makefile.depend
+++ b/lib/clang/libllvmaarch64codegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64desc/Makefile.depend b/lib/clang/libllvmaarch64desc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64desc/Makefile.depend
+++ b/lib/clang/libllvmaarch64desc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64disassembler/Makefile.depend b/lib/clang/libllvmaarch64disassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64disassembler/Makefile.depend
+++ b/lib/clang/libllvmaarch64disassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64info/Makefile.depend b/lib/clang/libllvmaarch64info/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64info/Makefile.depend
+++ b/lib/clang/libllvmaarch64info/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmaarch64utils/Makefile.depend b/lib/clang/libllvmaarch64utils/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmaarch64utils/Makefile.depend
+++ b/lib/clang/libllvmaarch64utils/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmanalysis/Makefile.depend b/lib/clang/libllvmanalysis/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmanalysis/Makefile.depend
+++ b/lib/clang/libllvmanalysis/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmarmasmparser/Makefile.depend b/lib/clang/libllvmarmasmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmarmasmparser/Makefile.depend
+++ b/lib/clang/libllvmarmasmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmarmasmprinter/Makefile.depend b/lib/clang/libllvmarmasmprinter/Makefile.depend
index ba60d06..00c24e7 100644
--- a/lib/clang/libllvmarmasmprinter/Makefile.depend
+++ b/lib/clang/libllvmarmasmprinter/Makefile.depend
@@ -6,19 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-ARMInstPrinter.o: ARMGenAsmWriter.inc.h
-ARMInstPrinter.o: ARMGenInstrInfo.inc.h
-ARMInstPrinter.o: ARMGenRegisterInfo.inc.h
-ARMInstPrinter.o: ARMGenSubtargetInfo.inc.h
-ARMInstPrinter.po: ARMGenAsmWriter.inc.h
-ARMInstPrinter.po: ARMGenInstrInfo.inc.h
-ARMInstPrinter.po: ARMGenRegisterInfo.inc.h
-ARMInstPrinter.po: ARMGenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmarmcodegen/Makefile.depend b/lib/clang/libllvmarmcodegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmarmcodegen/Makefile.depend
+++ b/lib/clang/libllvmarmcodegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmarmdesc/Makefile.depend b/lib/clang/libllvmarmdesc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmarmdesc/Makefile.depend
+++ b/lib/clang/libllvmarmdesc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmarmdisassembler/Makefile.depend b/lib/clang/libllvmarmdisassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmarmdisassembler/Makefile.depend
+++ b/lib/clang/libllvmarmdisassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmarminfo/Makefile.depend b/lib/clang/libllvmarminfo/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmarminfo/Makefile.depend
+++ b/lib/clang/libllvmarminfo/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmasmparser/Makefile.depend b/lib/clang/libllvmasmparser/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmasmparser/Makefile.depend
+++ b/lib/clang/libllvmasmparser/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmasmprinter/Makefile.depend b/lib/clang/libllvmasmprinter/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmasmprinter/Makefile.depend
+++ b/lib/clang/libllvmasmprinter/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmbitreader/Makefile.depend b/lib/clang/libllvmbitreader/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmbitreader/Makefile.depend
+++ b/lib/clang/libllvmbitreader/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmbitwriter/Makefile.depend b/lib/clang/libllvmbitwriter/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmbitwriter/Makefile.depend
+++ b/lib/clang/libllvmbitwriter/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmcodegen/Makefile.depend b/lib/clang/libllvmcodegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmcodegen/Makefile.depend
+++ b/lib/clang/libllvmcodegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmcore/Makefile.depend b/lib/clang/libllvmcore/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmcore/Makefile.depend
+++ b/lib/clang/libllvmcore/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmexecutionengine/Makefile.depend b/lib/clang/libllvmexecutionengine/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmexecutionengine/Makefile.depend
+++ b/lib/clang/libllvmexecutionengine/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvminstcombine/Makefile.depend b/lib/clang/libllvminstcombine/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvminstcombine/Makefile.depend
+++ b/lib/clang/libllvminstcombine/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvminstrumentation/Makefile.depend b/lib/clang/libllvminstrumentation/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvminstrumentation/Makefile.depend
+++ b/lib/clang/libllvminstrumentation/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvminterpreter/Makefile.depend b/lib/clang/libllvminterpreter/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvminterpreter/Makefile.depend
+++ b/lib/clang/libllvminterpreter/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmipo/Makefile.depend b/lib/clang/libllvmipo/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmipo/Makefile.depend
+++ b/lib/clang/libllvmipo/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmirreader/Makefile.depend b/lib/clang/libllvmirreader/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmirreader/Makefile.depend
+++ b/lib/clang/libllvmirreader/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmlibdriver/Makefile.depend b/lib/clang/libllvmlibdriver/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmlibdriver/Makefile.depend
+++ b/lib/clang/libllvmlibdriver/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmlinker/Makefile.depend b/lib/clang/libllvmlinker/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmlinker/Makefile.depend
+++ b/lib/clang/libllvmlinker/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmlto/Makefile.depend b/lib/clang/libllvmlto/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmlto/Makefile.depend
+++ b/lib/clang/libllvmlto/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmcjit/Makefile.depend b/lib/clang/libllvmmcjit/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmmcjit/Makefile.depend
+++ b/lib/clang/libllvmmcjit/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmipsasmparser/Makefile.depend b/lib/clang/libllvmmipsasmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmmipsasmparser/Makefile.depend
+++ b/lib/clang/libllvmmipsasmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmipsasmprinter/Makefile.depend b/lib/clang/libllvmmipsasmprinter/Makefile.depend
index 2426018..00c24e7 100644
--- a/lib/clang/libllvmmipsasmprinter/Makefile.depend
+++ b/lib/clang/libllvmmipsasmprinter/Makefile.depend
@@ -6,19 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-MipsInstPrinter.o: MipsGenAsmWriter.inc.h
-MipsInstPrinter.o: MipsGenInstrInfo.inc.h
-MipsInstPrinter.o: MipsGenRegisterInfo.inc.h
-MipsInstPrinter.o: MipsGenSubtargetInfo.inc.h
-MipsInstPrinter.po: MipsGenAsmWriter.inc.h
-MipsInstPrinter.po: MipsGenInstrInfo.inc.h
-MipsInstPrinter.po: MipsGenRegisterInfo.inc.h
-MipsInstPrinter.po: MipsGenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmmipscodegen/Makefile.depend b/lib/clang/libllvmmipscodegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmmipscodegen/Makefile.depend
+++ b/lib/clang/libllvmmipscodegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmipsdesc/Makefile.depend b/lib/clang/libllvmmipsdesc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmmipsdesc/Makefile.depend
+++ b/lib/clang/libllvmmipsdesc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmipsdisassembler/Makefile.depend b/lib/clang/libllvmmipsdisassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmmipsdisassembler/Makefile.depend
+++ b/lib/clang/libllvmmipsdisassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmipsinfo/Makefile.depend b/lib/clang/libllvmmipsinfo/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmmipsinfo/Makefile.depend
+++ b/lib/clang/libllvmmipsinfo/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmmirparser/Makefile.depend b/lib/clang/libllvmmirparser/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmmirparser/Makefile.depend
+++ b/lib/clang/libllvmmirparser/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmobjcarcopts/Makefile.depend b/lib/clang/libllvmobjcarcopts/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmobjcarcopts/Makefile.depend
+++ b/lib/clang/libllvmobjcarcopts/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmobject/Makefile.depend b/lib/clang/libllvmobject/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmobject/Makefile.depend
+++ b/lib/clang/libllvmobject/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmorcjit/Makefile.depend b/lib/clang/libllvmorcjit/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmorcjit/Makefile.depend
+++ b/lib/clang/libllvmorcjit/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpasses/Makefile.depend b/lib/clang/libllvmpasses/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpasses/Makefile.depend
+++ b/lib/clang/libllvmpasses/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpowerpcasmparser/Makefile.depend b/lib/clang/libllvmpowerpcasmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpowerpcasmparser/Makefile.depend
+++ b/lib/clang/libllvmpowerpcasmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpowerpcasmprinter/Makefile.depend b/lib/clang/libllvmpowerpcasmprinter/Makefile.depend
index 9ddadfa..00c24e7 100644
--- a/lib/clang/libllvmpowerpcasmprinter/Makefile.depend
+++ b/lib/clang/libllvmpowerpcasmprinter/Makefile.depend
@@ -6,19 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-PPCInstPrinter.o: PPCGenAsmWriter.inc.h
-PPCInstPrinter.o: PPCGenInstrInfo.inc.h
-PPCInstPrinter.o: PPCGenRegisterInfo.inc.h
-PPCInstPrinter.o: PPCGenSubtargetInfo.inc.h
-PPCInstPrinter.po: PPCGenAsmWriter.inc.h
-PPCInstPrinter.po: PPCGenInstrInfo.inc.h
-PPCInstPrinter.po: PPCGenRegisterInfo.inc.h
-PPCInstPrinter.po: PPCGenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmpowerpccodegen/Makefile.depend b/lib/clang/libllvmpowerpccodegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpowerpccodegen/Makefile.depend
+++ b/lib/clang/libllvmpowerpccodegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpowerpcdesc/Makefile.depend b/lib/clang/libllvmpowerpcdesc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpowerpcdesc/Makefile.depend
+++ b/lib/clang/libllvmpowerpcdesc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpowerpcdisassembler/Makefile.depend b/lib/clang/libllvmpowerpcdisassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpowerpcdisassembler/Makefile.depend
+++ b/lib/clang/libllvmpowerpcdisassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmpowerpcinfo/Makefile.depend b/lib/clang/libllvmpowerpcinfo/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmpowerpcinfo/Makefile.depend
+++ b/lib/clang/libllvmpowerpcinfo/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmprofiledata/Makefile.depend b/lib/clang/libllvmprofiledata/Makefile.depend
index 3e7f3f5..00c24e7 100644
--- a/lib/clang/libllvmprofiledata/Makefile.depend
+++ b/lib/clang/libllvmprofiledata/Makefile.depend
@@ -6,6 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmscalaropts/Makefile.depend b/lib/clang/libllvmscalaropts/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmscalaropts/Makefile.depend
+++ b/lib/clang/libllvmscalaropts/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmselectiondag/Makefile.depend b/lib/clang/libllvmselectiondag/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmselectiondag/Makefile.depend
+++ b/lib/clang/libllvmselectiondag/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsparcasmparser/Makefile.depend b/lib/clang/libllvmsparcasmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmsparcasmparser/Makefile.depend
+++ b/lib/clang/libllvmsparcasmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsparcasmprinter/Makefile.depend b/lib/clang/libllvmsparcasmprinter/Makefile.depend
index 6571fb4..00c24e7 100644
--- a/lib/clang/libllvmsparcasmprinter/Makefile.depend
+++ b/lib/clang/libllvmsparcasmprinter/Makefile.depend
@@ -6,19 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-SparcInstPrinter.o: SparcGenAsmWriter.inc.h
-SparcInstPrinter.o: SparcGenInstrInfo.inc.h
-SparcInstPrinter.o: SparcGenRegisterInfo.inc.h
-SparcInstPrinter.o: SparcGenSubtargetInfo.inc.h
-SparcInstPrinter.po: SparcGenAsmWriter.inc.h
-SparcInstPrinter.po: SparcGenInstrInfo.inc.h
-SparcInstPrinter.po: SparcGenRegisterInfo.inc.h
-SparcInstPrinter.po: SparcGenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmsparccodegen/Makefile.depend b/lib/clang/libllvmsparccodegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmsparccodegen/Makefile.depend
+++ b/lib/clang/libllvmsparccodegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsparcdesc/Makefile.depend b/lib/clang/libllvmsparcdesc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmsparcdesc/Makefile.depend
+++ b/lib/clang/libllvmsparcdesc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsparcdisassembler/Makefile.depend b/lib/clang/libllvmsparcdisassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmsparcdisassembler/Makefile.depend
+++ b/lib/clang/libllvmsparcdisassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsparcinfo/Makefile.depend b/lib/clang/libllvmsparcinfo/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmsparcinfo/Makefile.depend
+++ b/lib/clang/libllvmsparcinfo/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmsymbolize/Makefile.depend b/lib/clang/libllvmsymbolize/Makefile.depend
new file mode 100644
index 0000000..3e7f3f5
--- /dev/null
+++ b/lib/clang/libllvmsymbolize/Makefile.depend
@@ -0,0 +1,15 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/libc++ \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/clang/libllvmtarget/Makefile.depend b/lib/clang/libllvmtarget/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmtarget/Makefile.depend
+++ b/lib/clang/libllvmtarget/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmtransformutils/Makefile.depend b/lib/clang/libllvmtransformutils/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmtransformutils/Makefile.depend
+++ b/lib/clang/libllvmtransformutils/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmvectorize/Makefile.depend b/lib/clang/libllvmvectorize/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmvectorize/Makefile.depend
+++ b/lib/clang/libllvmvectorize/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmx86asmparser/Makefile.depend b/lib/clang/libllvmx86asmparser/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmx86asmparser/Makefile.depend
+++ b/lib/clang/libllvmx86asmparser/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmx86asmprinter/Makefile.depend b/lib/clang/libllvmx86asmprinter/Makefile.depend
index dfc7c0f..00c24e7 100644
--- a/lib/clang/libllvmx86asmprinter/Makefile.depend
+++ b/lib/clang/libllvmx86asmprinter/Makefile.depend
@@ -6,33 +6,11 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
-X86ATTInstPrinter.o: X86GenAsmWriter.inc.h
-X86ATTInstPrinter.o: X86GenInstrInfo.inc.h
-X86ATTInstPrinter.o: X86GenRegisterInfo.inc.h
-X86ATTInstPrinter.o: X86GenSubtargetInfo.inc.h
-X86ATTInstPrinter.po: X86GenAsmWriter.inc.h
-X86ATTInstPrinter.po: X86GenInstrInfo.inc.h
-X86ATTInstPrinter.po: X86GenRegisterInfo.inc.h
-X86ATTInstPrinter.po: X86GenSubtargetInfo.inc.h
-X86InstComments.o: X86GenInstrInfo.inc.h
-X86InstComments.o: X86GenRegisterInfo.inc.h
-X86InstComments.o: X86GenSubtargetInfo.inc.h
-X86InstComments.po: X86GenInstrInfo.inc.h
-X86InstComments.po: X86GenRegisterInfo.inc.h
-X86InstComments.po: X86GenSubtargetInfo.inc.h
-X86IntelInstPrinter.o: X86GenAsmWriter1.inc.h
-X86IntelInstPrinter.o: X86GenInstrInfo.inc.h
-X86IntelInstPrinter.o: X86GenRegisterInfo.inc.h
-X86IntelInstPrinter.o: X86GenSubtargetInfo.inc.h
-X86IntelInstPrinter.po: X86GenAsmWriter1.inc.h
-X86IntelInstPrinter.po: X86GenInstrInfo.inc.h
-X86IntelInstPrinter.po: X86GenRegisterInfo.inc.h
-X86IntelInstPrinter.po: X86GenSubtargetInfo.inc.h
.endif
diff --git a/lib/clang/libllvmx86codegen/Makefile.depend b/lib/clang/libllvmx86codegen/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmx86codegen/Makefile.depend
+++ b/lib/clang/libllvmx86codegen/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmx86desc/Makefile.depend b/lib/clang/libllvmx86desc/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmx86desc/Makefile.depend
+++ b/lib/clang/libllvmx86desc/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmx86disassembler/Makefile.depend b/lib/clang/libllvmx86disassembler/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmx86disassembler/Makefile.depend
+++ b/lib/clang/libllvmx86disassembler/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/clang/libllvmx86info/Makefile.depend b/lib/clang/libllvmx86info/Makefile.depend
index 385072f..00c24e7 100644
--- a/lib/clang/libllvmx86info/Makefile.depend
+++ b/lib/clang/libllvmx86info/Makefile.depend
@@ -6,7 +6,7 @@ DIRDEPS = \
include/xlocale \
lib/libc++ \
lib/msun \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/lib/libarchive/tests/Makefile.depend b/lib/libarchive/tests/Makefile.depend
new file mode 100644
index 0000000..d61a89f
--- /dev/null
+++ b/lib/libarchive/tests/Makefile.depend
@@ -0,0 +1,26 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libarchive \
+ lib/libbz2 \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libexpat \
+ lib/liblzma \
+ lib/libmd \
+ lib/libthr \
+ lib/libz \
+ secure/lib/libcrypto \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/amd64/sys/cerror.S b/lib/libc/amd64/sys/cerror.S
index d01cf4a..d28a139 100644
--- a/lib/libc/amd64/sys/cerror.S
+++ b/lib/libc/amd64/sys/cerror.S
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include "SYS.h"
.globl HIDENAME(cerror)
+ .hidden HIDENAME(cerror)
/*
* The __error() function is thread aware. For non-threaded
diff --git a/lib/libc/i386/sys/cerror.S b/lib/libc/i386/sys/cerror.S
index ad3a033..5101e9e 100644
--- a/lib/libc/i386/sys/cerror.S
+++ b/lib/libc/i386/sys/cerror.S
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include "SYS.h"
.globl HIDENAME(cerror)
+ .hidden HIDENAME(cerror)
/*
* The __error() function is thread aware. For non-threaded
diff --git a/lib/libc/sys/getdirentries.2 b/lib/libc/sys/getdirentries.2
index ab60ed2..e4f61db 100644
--- a/lib/libc/sys/getdirentries.2
+++ b/lib/libc/sys/getdirentries.2
@@ -75,7 +75,7 @@ uint32_t d_fileno;
uint16_t d_reclen;
uint8_t d_type;
uint8_t d_namlen;
-char d_name[MAXNAMELEN + 1]; /* see below */
+char d_name[MAXNAMLEN + 1]; /* see below */
.Ed
.Pp
The
@@ -103,7 +103,7 @@ entry specifies the length of the file name excluding the null byte.
Thus the actual size of
.Fa d_name
may vary from 1 to
-.Dv MAXNAMELEN
+.Dv MAXNAMLEN
\&+ 1.
.Pp
Entries may be separated by extra space.
diff --git a/lib/libc/tests/Makefile b/lib/libc/tests/Makefile
index 53d7419..8276422 100644
--- a/lib/libc/tests/Makefile
+++ b/lib/libc/tests/Makefile
@@ -18,6 +18,7 @@ TESTS_SUBDIRS+= nss
TESTS_SUBDIRS+= regex
TESTS_SUBDIRS+= resolv
TESTS_SUBDIRS+= rpc
+TESTS_SUBDIRS+= setjmp
TESTS_SUBDIRS+= stdio
TESTS_SUBDIRS+= stdlib
TESTS_SUBDIRS+= string
diff --git a/lib/libc/tests/Makefile.depend b/lib/libc/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/lib/libc/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/c063/Makefile.depend b/lib/libc/tests/c063/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/c063/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/db/Makefile.depend b/lib/libc/tests/db/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/lib/libc/tests/db/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/gen/Makefile.depend b/lib/libc/tests/gen/Makefile.depend
new file mode 100644
index 0000000..7826828
--- /dev/null
+++ b/lib/libc/tests/gen/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libthr \
+ lib/libutil \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/gen/execve/Makefile.depend b/lib/libc/tests/gen/execve/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/gen/execve/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/gen/posix_spawn/Makefile.depend b/lib/libc/tests/gen/posix_spawn/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/gen/posix_spawn/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/hash/Makefile.depend b/lib/libc/tests/hash/Makefile.depend
new file mode 100644
index 0000000..b1a491e
--- /dev/null
+++ b/lib/libc/tests/hash/Makefile.depend
@@ -0,0 +1,22 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libmd \
+ lib/libnetbsd \
+ secure/lib/libcrypto \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/inet/Makefile.depend b/lib/libc/tests/inet/Makefile.depend
new file mode 100644
index 0000000..08e76dc
--- /dev/null
+++ b/lib/libc/tests/inet/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/locale/Makefile.depend b/lib/libc/tests/locale/Makefile.depend
new file mode 100644
index 0000000..68a9dd0
--- /dev/null
+++ b/lib/libc/tests/locale/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/net/Makefile.depend b/lib/libc/tests/net/Makefile.depend
new file mode 100644
index 0000000..949a9f6
--- /dev/null
+++ b/lib/libc/tests/net/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/nss/Makefile.depend b/lib/libc/tests/nss/Makefile.depend
new file mode 100644
index 0000000..4d03805
--- /dev/null
+++ b/lib/libc/tests/nss/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/rpc \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/regex/Makefile.depend b/lib/libc/tests/regex/Makefile.depend
new file mode 100644
index 0000000..5212dd0
--- /dev/null
+++ b/lib/libc/tests/regex/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/resolv/Makefile.depend b/lib/libc/tests/resolv/Makefile.depend
new file mode 100644
index 0000000..505fe5a
--- /dev/null
+++ b/lib/libc/tests/resolv/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/rpc/Makefile.depend b/lib/libc/tests/rpc/Makefile.depend
new file mode 100644
index 0000000..7cd7515
--- /dev/null
+++ b/lib/libc/tests/rpc/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/rpc \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/librpcsvc \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/setjmp/Makefile.depend b/lib/libc/tests/setjmp/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/setjmp/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/ssp/Makefile.depend b/lib/libc/tests/ssp/Makefile.depend
new file mode 100644
index 0000000..bb203f1
--- /dev/null
+++ b/lib/libc/tests/ssp/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/librt \
+ lib/libthr \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/stdio/Makefile.depend b/lib/libc/tests/stdio/Makefile.depend
new file mode 100644
index 0000000..68a9dd0
--- /dev/null
+++ b/lib/libc/tests/stdio/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/stdlib/Makefile.depend b/lib/libc/tests/stdlib/Makefile.depend
new file mode 100644
index 0000000..1555e0f
--- /dev/null
+++ b/lib/libc/tests/stdlib/Makefile.depend
@@ -0,0 +1,22 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libutil \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/string/Makefile.depend b/lib/libc/tests/string/Makefile.depend
new file mode 100644
index 0000000..fbc70c8
--- /dev/null
+++ b/lib/libc/tests/string/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libmd \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/sys/Makefile.depend b/lib/libc/tests/sys/Makefile.depend
new file mode 100644
index 0000000..ae11679
--- /dev/null
+++ b/lib/libc/tests/sys/Makefile.depend
@@ -0,0 +1,24 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libkvm \
+ lib/libnetbsd \
+ lib/librt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/termios/Makefile.depend b/lib/libc/tests/termios/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/termios/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/time/Makefile.depend b/lib/libc/tests/time/Makefile.depend
new file mode 100644
index 0000000..e8ee295
--- /dev/null
+++ b/lib/libc/tests/time/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/tls/Makefile.depend b/lib/libc/tests/tls/Makefile.depend
new file mode 100644
index 0000000..933417c3f
--- /dev/null
+++ b/lib/libc/tests/tls/Makefile.depend
@@ -0,0 +1,22 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libc/tests/tls_dso \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/tls_dso/Makefile.depend b/lib/libc/tests/tls_dso/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/lib/libc/tests/tls_dso/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libc/tests/ttyio/Makefile.depend b/lib/libc/tests/ttyio/Makefile.depend
new file mode 100644
index 0000000..5212dd0
--- /dev/null
+++ b/lib/libc/tests/ttyio/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libclang_rt/asan_dynamic/Makefile.depend b/lib/libclang_rt/asan_dynamic/Makefile.depend
new file mode 100644
index 0000000..98f4a5f
--- /dev/null
+++ b/lib/libclang_rt/asan_dynamic/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libc++ \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/msun \
+ lib/ncurses/ncursesw \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libcrypt/tests/Makefile.depend b/lib/libcrypt/tests/Makefile.depend
index dd2539c..2945c88 100644
--- a/lib/libcrypt/tests/Makefile.depend
+++ b/lib/libcrypt/tests/Makefile.depend
@@ -11,6 +11,7 @@ DIRDEPS = \
lib/libc \
lib/libcompiler_rt \
lib/libcrypt \
+ lib/libnetbsd \
.include <dirdeps.mk>
diff --git a/lib/libmp/tests/Makefile.depend b/lib/libmp/tests/Makefile.depend
new file mode 100644
index 0000000..bd34832
--- /dev/null
+++ b/lib/libmp/tests/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libmp \
+ secure/lib/libcrypto \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libnv/tests/Makefile.depend b/lib/libnv/tests/Makefile.depend
new file mode 100644
index 0000000..e6cfb18
--- /dev/null
+++ b/lib/libnv/tests/Makefile.depend
@@ -0,0 +1,24 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/atf/libatf-c++ \
+ lib/libc \
+ lib/libc++ \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/libnv \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libpam/libpam/tests/Makefile.depend b/lib/libpam/libpam/tests/Makefile.depend
new file mode 100644
index 0000000..8e09560
--- /dev/null
+++ b/lib/libpam/libpam/tests/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libpam/libpam \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libproc/tests/Makefile.depend b/lib/libproc/tests/Makefile.depend
new file mode 100644
index 0000000..c61b234
--- /dev/null
+++ b/lib/libproc/tests/Makefile.depend
@@ -0,0 +1,26 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ cddl/lib/libctf \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libcxxrt \
+ lib/libelf \
+ lib/libproc \
+ lib/librtld_db \
+ lib/libutil \
+ lib/libz \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/librt/tests/Makefile.depend b/lib/librt/tests/Makefile.depend
new file mode 100644
index 0000000..e2d637c
--- /dev/null
+++ b/lib/librt/tests/Makefile.depend
@@ -0,0 +1,22 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/librt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libthr/tests/Makefile.depend b/lib/libthr/tests/Makefile.depend
new file mode 100644
index 0000000..a3fc968
--- /dev/null
+++ b/lib/libthr/tests/Makefile.depend
@@ -0,0 +1,23 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/librt \
+ lib/libthr \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libthr/tests/dlopen/Makefile.depend b/lib/libthr/tests/dlopen/Makefile.depend
new file mode 100644
index 0000000..949a9f6
--- /dev/null
+++ b/lib/libthr/tests/dlopen/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libthr/tests/dlopen/dso/Makefile.depend b/lib/libthr/tests/dlopen/dso/Makefile.depend
new file mode 100644
index 0000000..7b92dbd
--- /dev/null
+++ b/lib/libthr/tests/dlopen/dso/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libutil/tests/Makefile.depend b/lib/libutil/tests/Makefile.depend
new file mode 100644
index 0000000..a79b1eb
--- /dev/null
+++ b/lib/libutil/tests/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libutil \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/libxo/tests/Makefile.depend b/lib/libxo/tests/Makefile.depend
new file mode 100644
index 0000000..137678c
--- /dev/null
+++ b/lib/libxo/tests/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libutil \
+ lib/libxo \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/msun/tests/Makefile.depend b/lib/msun/tests/Makefile.depend
new file mode 100644
index 0000000..68a9dd0
--- /dev/null
+++ b/lib/msun/tests/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/lib/tests/Makefile.depend b/lib/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/lib/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/atf/atf-check/tests/Makefile.depend b/libexec/atf/atf-check/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/libexec/atf/atf-check/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/atf/atf-sh/tests/Makefile.depend b/libexec/atf/atf-sh/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/libexec/atf/atf-sh/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/atf/tests/Makefile.depend b/libexec/atf/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/libexec/atf/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/rtld-elf/tests/Makefile.depend b/libexec/rtld-elf/tests/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/libexec/rtld-elf/tests/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/tests/Makefile.depend b/libexec/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/libexec/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/devd/tests/Makefile.depend b/sbin/devd/tests/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/sbin/devd/tests/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/dhclient/tests/Makefile.depend b/sbin/dhclient/tests/Makefile.depend
new file mode 100644
index 0000000..7de116d
--- /dev/null
+++ b/sbin/dhclient/tests/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/growfs/tests/Makefile.depend b/sbin/growfs/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/sbin/growfs/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/ifconfig/tests/Makefile.depend b/sbin/ifconfig/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/sbin/ifconfig/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index f6a9692..95a96ad 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -424,6 +424,7 @@ bp_flush(struct buf_pr *b)
b->ptr = b->buf;
b->avail = b->size;
+ b->buf[0] = '\0';
}
/*
diff --git a/sbin/mdconfig/tests/Makefile.depend b/sbin/mdconfig/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/sbin/mdconfig/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/tests/Makefile.depend b/sbin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/sbin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c
index 15c6cf0..b03cdde7 100644
--- a/sbin/tunefs/tunefs.c
+++ b/sbin/tunefs/tunefs.c
@@ -316,7 +316,7 @@ main(int argc, char *argv[])
}
if (Lflag) {
name = "volume label";
- strlcpy(sblock.fs_volname, Lvalue, MAXVOLLEN);
+ strncpy(sblock.fs_volname, Lvalue, MAXVOLLEN);
}
if (aflag) {
name = "POSIX.1e ACLs";
diff --git a/secure/lib/tests/Makefile.depend b/secure/lib/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/secure/lib/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/secure/libexec/tests/Makefile.depend b/secure/libexec/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/secure/libexec/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/secure/tests/Makefile.depend b/secure/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/secure/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/secure/usr.bin/tests/Makefile.depend b/secure/usr.bin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/secure/usr.bin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/secure/usr.sbin/tests/Makefile.depend b/secure/usr.sbin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/secure/usr.sbin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/share/examples/tests/Makefile.depend b/share/examples/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/share/examples/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/share/examples/tests/tests/Makefile.depend b/share/examples/tests/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/share/examples/tests/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/share/examples/tests/tests/atf/Makefile.depend b/share/examples/tests/tests/atf/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/share/examples/tests/tests/atf/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/share/examples/tests/tests/plain/Makefile.depend b/share/examples/tests/tests/plain/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/share/examples/tests/tests/plain/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/share/man/man4/filemon.4 b/share/man/man4/filemon.4
index c0b4a51..3287a47 100644
--- a/share/man/man4/filemon.4
+++ b/share/man/man4/filemon.4
@@ -31,7 +31,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 28, 2016
+.Dd March 9, 2016
.Dt FILEMON 4
.Os
.Sh NAME
@@ -125,6 +125,19 @@ function returns the value 0 if successful;
otherwise the value \-1 is returned and the global variable
.Va errno
is set to indicate the error.
+.Sh ERRORS
+The
+.Fn ioctl
+system call
+with
+.Dv FILEMON_SET_FD
+will fail if:
+.Bl -tag -width Er
+.It Bq Er EEXIST
+The
+.Nm
+handle is already associated with a file descriptor.
+.El
.Sh FILES
.Bl -tag -width ".Pa /dev/filemon"
.It Pa /dev/filemon
@@ -194,3 +207,6 @@ Only children of the set process are logged.
Processes can escape being traced by double forking.
This is not seen as a problem as the intended use is build monitoring, which
does not make sense to have daemons for.
+.Pp
+Unloading the module may panic the system, thus requires using
+.Ic kldunload -f .
diff --git a/share/man/man5/resolver.5 b/share/man/man5/resolver.5
index a3c5e05..8306309 100644
--- a/share/man/man5/resolver.5
+++ b/share/man/man5/resolver.5
@@ -218,7 +218,8 @@ resides in
.Sh SEE ALSO
.Xr gethostbyname 3 ,
.Xr resolver 3 ,
-.Xr hostname 7
+.Xr hostname 7 ,
+.Xr resolvconf 8
.Rs
.%T "Name Server Operations Guide for BIND"
.Re
diff --git a/share/man/man9/bus_adjust_resource.9 b/share/man/man9/bus_adjust_resource.9
index 6f561b9..681faf6 100644
--- a/share/man/man9/bus_adjust_resource.9
+++ b/share/man/man9/bus_adjust_resource.9
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 29, 2011
+.Dd March 10, 2016
.Dt BUS_ADJUST_RESOURCE 9
.Os
.Sh NAME
@@ -41,8 +41,7 @@
.In sys/rman.h
.In machine/resource.h
.Ft int
-.Fo bus_adjust_resource
-.Fa "device_t dev" "int type" "struct resource *r" "rman_res_t start" "rman_res_t end"
+.Fn bus_adjust_resource "device_t dev" "int type" "struct resource *r" "rman_res_t start" "rman_res_t end"
.Sh DESCRIPTION
This function is used to ask the parent bus to adjust the resource range
assigned to an allocated resource.
diff --git a/share/man/man9/bus_alloc_resource.9 b/share/man/man9/bus_alloc_resource.9
index 92c589d..c8418b0 100644
--- a/share/man/man9/bus_alloc_resource.9
+++ b/share/man/man9/bus_alloc_resource.9
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 18, 2000
+.Dd March 10, 2016
.Dt BUS_ALLOC_RESOURCE 9
.Os
.Sh NAME
@@ -50,10 +50,8 @@
.Fc
.Ft struct resource *
.Fn bus_alloc_resource_any "device_t dev" "int type" "int *rid" "u_int flags"
-.Fc
.Ft struct resource *
-.Fn bus_alloc_resource_anywhere
-.Fa "device_t dev" "int type" "int *rid" "rman_res_t count" "u_int flags"
+.Fn bus_alloc_resource_anywhere "device_t dev" "int type" "int *rid" "rman_res_t count" "u_int flags"
.Sh DESCRIPTION
This is an easy interface to the resource-management functions.
It hides the indirection through the parent's method table.
diff --git a/share/mk/bsd.confs.mk b/share/mk/bsd.confs.mk
index 20a9782..6fe2ad2 100644
--- a/share/mk/bsd.confs.mk
+++ b/share/mk/bsd.confs.mk
@@ -6,8 +6,10 @@
CONFGROUPS?= CONFS
+_CONFGROUPS= ${CONFGROUPS:C,[/*],_,g}
+
.if !target(buildconfig)
-.for group in ${CONFGROUPS}
+.for group in ${_CONFGROUPS}
buildconfig: ${${group}}
.endfor
.endif
@@ -17,7 +19,7 @@ all: buildconfig
.endif
.if !target(installconfig)
-.for group in ${CONFGROUPS}
+.for group in ${_CONFGROUPS}
.if defined(${group}) && !empty(${group})
${group}OWN?= ${SHAREOWN}
diff --git a/share/mk/bsd.files.mk b/share/mk/bsd.files.mk
index 4080edd..d4fd509 100644
--- a/share/mk/bsd.files.mk
+++ b/share/mk/bsd.files.mk
@@ -9,7 +9,9 @@ __<bsd.files.mk>__:
FILESGROUPS?= FILES
-.for group in ${FILESGROUPS}
+_FILESGROUPS= ${FILESGROUPS:C,[/*],_,g}
+
+.for group in ${_FILESGROUPS}
# Add in foo.yes and remove duplicates from all the groups
${${group}}:= ${${group}} ${${group}.yes}
${${group}}:= ${${group}:O:u}
@@ -20,7 +22,7 @@ buildfiles: ${${group}}
all: buildfiles
.endif
-.for group in ${FILESGROUPS}
+.for group in ${_FILESGROUPS}
.if defined(${group}) && !empty(${group})
installfiles: installfiles-${group}
diff --git a/share/mk/bsd.incs.mk b/share/mk/bsd.incs.mk
index cd3e583..c5c852a 100644
--- a/share/mk/bsd.incs.mk
+++ b/share/mk/bsd.incs.mk
@@ -8,6 +8,8 @@
INCSGROUPS?= INCS
+_INCSGROUPS= ${INCSGROUPS:C,[/*],_,g}
+
.if defined(NO_ROOT)
.if !defined(TAGS) || ! ${TAGS:Mpackage=*}
TAGS+= package=${PACKAGE:Uruntime}
@@ -16,7 +18,7 @@ TAG_ARGS= -T ${TAGS:[*]:S/ /,/g}
.endif
.if !target(buildincludes)
-.for group in ${INCSGROUPS}
+.for group in ${_INCSGROUPS}
buildincludes: ${${group}}
.endfor
.endif
@@ -26,7 +28,7 @@ all: buildincludes
.endif
.if !target(installincludes)
-.for group in ${INCSGROUPS}
+.for group in ${_INCSGROUPS}
.if defined(${group}) && !empty(${group})
${group}OWN?= ${BINOWN}
diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk
index c511856..29a95e5 100644
--- a/share/mk/bsd.lib.mk
+++ b/share/mk/bsd.lib.mk
@@ -453,12 +453,13 @@ OBJS_DEPEND_GUESS.${_S:R}.So= ${_S}
.include <bsd.dep.mk>
-.if defined(LIB) && !empty(LIB)
.if ${MK_FAST_DEPEND} == "no" && !exists(${.OBJDIR}/${DEPENDFILE})
+.if defined(LIB) && !empty(LIB)
${OBJS} ${STATICOBJS} ${POBJS}: ${OBJS_DEPEND_GUESS}
.for _S in ${SRCS:N*.[hly]}
${_S:R}.po: ${OBJS_DEPEND_GUESS.${_S:R}.po}
.endfor
+.endif
.if defined(SHLIB_NAME) || \
defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
${SOBJS}: ${OBJS_DEPEND_GUESS}
@@ -467,7 +468,6 @@ ${_S:R}.So: ${OBJS_DEPEND_GUESS.${_S:R}.So}
.endfor
.endif
.endif
-.endif
.include <bsd.clang-analyze.mk>
.include <bsd.obj.mk>
diff --git a/share/mk/bsd.progs.mk b/share/mk/bsd.progs.mk
index 7560e7f..c5639b4 100644
--- a/share/mk/bsd.progs.mk
+++ b/share/mk/bsd.progs.mk
@@ -20,13 +20,6 @@
# we really only use PROGS below...
PROGS += ${PROGS_CXX}
-# In meta mode, we can capture dependenices for _one_ of the progs.
-# if makefile doesn't nominate one, we use the first.
-.ifndef UPDATE_DEPENDFILE_PROG
-UPDATE_DEPENDFILE_PROG = ${PROGS:[1]}
-.export UPDATE_DEPENDFILE_PROG
-.endif
-
.if defined(PROG)
# just one of many
PROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE DPSRCS MAN NO_WERROR \
@@ -45,11 +38,20 @@ $v ?=
.endif
.endfor
-# for meta mode, there can be only one!
-.if ${PROG} == ${UPDATE_DEPENDFILE_PROG}
-UPDATE_DEPENDFILE ?= yes
+.if ${MK_DIRDEPS_BUILD} == "yes"
+# Leave updating the Makefile.depend to the parent.
+UPDATE_DEPENDFILE = NO
+
+# Record our meta files for the parent to use.
+CLEANFILES+= ${PROG}.meta_files
+${PROG}.meta_files: .NOMETA $${.MAKE.META.CREATED} ${_this}
+ @echo "Updating ${.TARGET}: ${.OODATE:T:[1..8]}"
+ @echo ${.MAKE.META.FILES} > ${.TARGET}
+
+.if !defined(_SKIP_BUILD)
+.END: ${PROG}.meta_files
.endif
-UPDATE_DEPENDFILE ?= NO
+.endif # ${MK_DIRDEPS_BUILD} == "yes"
# prog.mk will do the rest
.else # !defined(PROG)
@@ -57,14 +59,17 @@ UPDATE_DEPENDFILE ?= NO
all: ${PROGS}
.endif
-# We cannot capture dependencies for meta mode here
-UPDATE_DEPENDFILE = NO
+META_XTRAS+= ${cat ${PROGS:S/$/*.meta_files/} 2>/dev/null || true:L:sh}
-.if ${MK_STAGING} != "no"
-.if !empty(PROGS)
-stage_files.prog: ${PROGS}
-.endif
-.endif # ${MK_STAGING} != "no"
+.if ${MK_STAGING} != "no" && !empty(PROGS)
+# Stage from parent while respecting PROGNAME and BINDIR overrides.
+.for _prog in ${PROGS}
+STAGE_DIR.prog.${_prog}= ${STAGE_OBJTOP}${BINDIR.${_prog}:UBINDIR_${_prog}:U${BINDIR}}
+STAGE_AS_SETS+= prog.${_prog}
+STAGE_AS_prog.${_prog}= ${PROGNAME.${_prog}:UPROGNAME_${_prog}:U${_prog}}
+stage_as.prog.${_prog}: ${_prog}
+.endfor
+.endif # ${MK_STAGING} != "no" && !empty(PROGS)
.endif
.endif # PROGS || PROGS_CXX
diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk
index 4a59274..be4c52f 100644
--- a/share/mk/bsd.sys.mk
+++ b/share/mk/bsd.sys.mk
@@ -208,7 +208,7 @@ staging: beforeinstall
.if ${MK_STAGING_PROG} != "no" && !defined(INTERNALPROG)
STAGE_DIR.prog= ${STAGE_OBJTOP}${BINDIR}
-.if !empty(PROG) || !empty(PROGS)
+.if !empty(PROG)
.if defined(PROGNAME)
STAGE_AS_SETS+= prog
STAGE_AS_${PROG}= ${PROGNAME}
diff --git a/share/mk/bsd.test.mk b/share/mk/bsd.test.mk
index d697097..97240cc 100644
--- a/share/mk/bsd.test.mk
+++ b/share/mk/bsd.test.mk
@@ -77,10 +77,6 @@ SUBDIR_PARALLEL= t
MAN=
.endif
-# tell progs.mk we might want to install things
-PROG_VARS+= BINDIR
-PROGS_TARGETS+= install
-
.if !defined(NOT_FOR_TEST_SUITE)
.include <suite.test.mk>
.endif
diff --git a/share/mk/local.dirdeps.mk b/share/mk/local.dirdeps.mk
index ba800a4..af7cf77 100644
--- a/share/mk/local.dirdeps.mk
+++ b/share/mk/local.dirdeps.mk
@@ -90,7 +90,8 @@ DIRDEPS += \
# used will be added in and handled via [local.]gendirdeps.mk. This is not
# done for MACHINE=host builds.
# XXX: Include this in local.autodep.mk as well for gendirdeps without filemon.
-.if ${RELDIR} == ${DEP_RELDIR} # Only do this for main build target
+# Only do this for main build target
+.if ${RELDIR} == ${DEP_RELDIR} && !defined(_RECURSING_PROGS)
.for _depfile in ${.MAKE.DEPENDFILE_PREFERENCE:T}
.if !defined(_have_depfile) && exists(${.CURDIR}/${_depfile})
_have_depfile=
@@ -99,6 +100,35 @@ _have_depfile=
.if !defined(_have_depfile)
# KMOD does not use any stdlibs.
.if !defined(KMOD)
+# Gather PROGS dependencies first
+.if !empty(PROGS)
+_PROGS_LIBADD=
+_PROGS_DPADD=
+_PROGS_SRCS=
+.for _prog in ${PROGS}
+.for s in . _
+.if !empty(LIBADD${s}${_prog})
+_PROGS_LIBADD+= ${LIBADD${s}${_prog}}
+.endif
+.if !empty(DPADD${s}${_prog})
+_PROGS_DPADD+= ${DPADD${s}${_prog}}
+.endif
+.if !empty(SRCS${s}${_prog})
+_PROGS_SRCS+= ${SRCS${s}${_prog}}
+.endif
+.endfor # .for s in . _
+# Add in assumed source (bsd.prog.mk)
+.if !target(${_prog})
+.if defined(PROG_CXX)
+_PROGS_SRCS+= ${_prog}.cc
+.else
+_PROGS_SRCS+= ${_prog}.c
+.endif
+.endif # !target(${_prog})
+.endfor # .for _prog in ${PROGS}
+.endif # !empty(PROGS)
+_SRCS= ${SRCS} ${_PROGS_SRCS}
+
# Has C files. The C_DIRDEPS are shared with C++ files as well.
C_DIRDEPS= \
gnu/lib/csu \
@@ -118,12 +148,12 @@ C_DIRDEPS= \
C_DIRDEPS+= include/gssapi
.endif
-.if !empty(SRCS:M*.c)
+.if !empty(_SRCS:M*.c)
DIRDEPS+= ${C_DIRDEPS}
.endif
# Has C++ files
-.if !empty(SRCS:M*.cc) || !empty(SRCS:M*.C) || !empty(SRCS:M*.cpp) || \
- !empty(SRCS:M*.cxx)
+.if !empty(_SRCS:M*.cc) || !empty(_SRCS:M*.C) || !empty(_SRCS:M*.cpp) || \
+ !empty(_SRCS:M*.cxx)
DIRDEPS+= ${C_DIRDEPS}
.if ${MK_CLANG} == "yes"
DIRDEPS+= lib/libc++ lib/libcxxrt
@@ -135,28 +165,15 @@ DIRDEPS+= lib/msun
.endif # CXX
.endif # !defined(KMOD)
# Has yacc files.
-.if !empty(SRCS:M*.y)
+.if !empty(_SRCS:M*.y)
DIRDEPS+= usr.bin/yacc.host
.endif
-# Gather PROGS dependencies
-.if !empty(PROGS)
-_PROGS_LIBADD=
-_PROGS_DPADD=
-.for _prog in ${PROGS}
-.if !empty(LIBADD.${_prog})
-_PROGS_LIBADD+= ${LIBADD.${_prog}}
-.endif
-.if !empty(DPADD.${_prog})
-_PROGS_DPADD+= ${DPADD.${_prog}}
-.endif
-.endfor
-.endif # !empty(PROGS)
-.if !empty(DPADD)
+_DPADD= ${DPADD} ${_PROGS_DPADD}
+.if !empty(_DPADD)
# Taken from meta.autodep.mk (where it only does something with
# BUILD_AT_LEVEL0, which we don't use).
# This only works for DPADD with full OBJ/SRC paths, which is mostly just
# _INTERNALLIBS.
-_DPADD= ${DPADD} ${_PROGS_DPADD}
_DP_DIRDEPS= \
${_DPADD:O:u:M${OBJTOP}*:H:N.:tA:C,${OBJTOP}[^/]*/,,:N.:O:u} \
${_DPADD:O:u:M${OBJROOT}*:N${OBJTOP}*:N${STAGE_ROOT}/*:H:S,${OBJROOT},,:C,^([^/]+)/(.*),\2.\1,:S,${HOST_TARGET}$,host,:N.*:O:u}
@@ -165,9 +182,9 @@ _DP_DIRDEPS= \
DIRDEPS+= ${_DP_DIRDEPS:C,^,${SRCTOP}/,:tA:C,^${SRCTOP}/,,}
.endif
.endif # !empty(DPADD)
-.if !empty(LIBADD)
-# Also handle LIBADD for non-internal libraries.
_ALL_LIBADD= ${LIBADD} ${_PROGS_LIBADD}
+.if !empty(_ALL_LIBADD)
+# Also handle LIBADD for non-internal libraries.
.for _lib in ${_ALL_LIBADD:O:u}
_lib${_lib}reldir= ${LIB${_lib:tu}DIR:C,${OBJTOP}/,,}
.if defined(LIB${_lib:tu}DIR) && ${DIRDEPS:M${_lib${_lib}reldir}} == "" && \
diff --git a/share/mk/local.meta.sys.mk b/share/mk/local.meta.sys.mk
index bf4fcbc..9f000f5 100644
--- a/share/mk/local.meta.sys.mk
+++ b/share/mk/local.meta.sys.mk
@@ -205,7 +205,9 @@ CSU_DIR := ${CSU_DIR.${MACHINE_ARCH}}
.if !empty(TIME_STAMP)
TRACER= ${TIME_STAMP} ${:U}
.endif
+.if !defined(_RECURSING_PROGS)
WITH_META_STATS= t
+.endif
# toolchains can be a pain - especially bootstrappping them
.if ${MACHINE} == "host"
diff --git a/share/tests/Makefile.depend b/share/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/share/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
index 30a2bbf..7075488 100644
--- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c
+++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
@@ -143,7 +143,7 @@ static struct sysentvec cloudabi64_elf_sysvec = {
.sv_usrstack = USRSTACK,
.sv_stackprot = VM_PROT_READ | VM_PROT_WRITE,
.sv_copyout_strings = cloudabi64_copyout_strings,
- .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM,
+ .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64,
.sv_set_syscall_retval = cloudabi64_set_syscall_retval,
.sv_fetch_syscall_args = cloudabi64_fetch_syscall_args,
.sv_syscallnames = cloudabi64_syscallnames,
diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
index 10b9820..cb569cd 100644
--- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c
+++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
@@ -144,7 +144,7 @@ static struct sysentvec cloudabi64_elf_sysvec = {
.sv_usrstack = USRSTACK,
.sv_stackprot = VM_PROT_READ | VM_PROT_WRITE,
.sv_copyout_strings = cloudabi64_copyout_strings,
- .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM,
+ .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64,
.sv_set_syscall_retval = cloudabi64_set_syscall_retval,
.sv_fetch_syscall_args = cloudabi64_fetch_syscall_args,
.sv_syscallnames = cloudabi64_syscallnames,
diff --git a/sys/boot/efi/boot1/Makefile b/sys/boot/efi/boot1/Makefile
index 5455e1a..c4c92cb 100644
--- a/sys/boot/efi/boot1/Makefile
+++ b/sys/boot/efi/boot1/Makefile
@@ -53,7 +53,7 @@ FILES= boot1.efi boot1.efifat
FILESMODE_boot1.efi= ${BINMODE}
LDSCRIPT= ${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE}
-LDFLAGS= -Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
+LDFLAGS+= -Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
.if ${MACHINE_CPUARCH} == "aarch64"
CFLAGS+= -msoft-float -mgeneral-regs-only
diff --git a/sys/boot/uboot/common/main.c b/sys/boot/uboot/common/main.c
index f4fe214..d5c7664 100644
--- a/sys/boot/uboot/common/main.c
+++ b/sys/boot/uboot/common/main.c
@@ -387,7 +387,7 @@ probe_disks(int devidx, int load_type, int load_unit, int load_slice,
}
int
-main(void)
+main(int argc, char **argv)
{
struct api_signature *sig = NULL;
int load_type, load_unit, load_slice, load_partition;
@@ -395,12 +395,15 @@ main(void)
const char *ldev;
/*
+ * We first check if a command line argument was passed to us containing
+ * API's signature address. If it wasn't then we try to search for the
+ * API signature via the usual hinted address.
* If we can't find the magic signature and related info, exit with a
* unique error code that U-Boot reports as "## Application terminated,
* rc = 0xnnbadab1". Hopefully 'badab1' looks enough like "bad api" to
* provide a clue. It's better than 0xffffffff anyway.
*/
- if (!api_search_sig(&sig))
+ if (!api_parse_cmdline_sig(argc, argv, &sig) && !api_search_sig(&sig))
return (0x01badab1);
syscall_ptr = sig->syscall;
diff --git a/sys/boot/uboot/lib/glue.c b/sys/boot/uboot/lib/glue.c
index 4c843f0..07db23d 100644
--- a/sys/boot/uboot/lib/glue.c
+++ b/sys/boot/uboot/lib/glue.c
@@ -68,6 +68,41 @@ valid_sig(struct api_signature *sig)
}
/*
+ * Checks to see if API signature's address was given to us as a command line
+ * argument by U-Boot.
+ *
+ * returns 1/0 depending on found/not found result
+ */
+int
+api_parse_cmdline_sig(int argc, char **argv, struct api_signature **sig)
+{
+ unsigned long api_address;
+ int c;
+
+ api_address = 0;
+ opterr = 0;
+ optreset = 1;
+ optind = 1;
+
+ while ((c = getopt (argc, argv, "a:")) != -1)
+ switch (c) {
+ case 'a':
+ api_address = strtoul(optarg, NULL, 16);
+ break;
+ default:
+ break;
+ }
+
+ if (api_address != 0) {
+ *sig = (struct api_signature *)api_address;
+ if (valid_sig(*sig))
+ return (1);
+ }
+
+ return (0);
+}
+
+/*
* Searches for the U-Boot API signature
*
* returns 1/0 depending on found/not found result
diff --git a/sys/boot/uboot/lib/glue.h b/sys/boot/uboot/lib/glue.h
index b9c60b6..4c2da66 100644
--- a/sys/boot/uboot/lib/glue.h
+++ b/sys/boot/uboot/lib/glue.h
@@ -58,6 +58,7 @@
int syscall(int, int *, ...);
void *syscall_ptr;
+int api_parse_cmdline_sig(int argc, char **argv, struct api_signature **sig);
int api_search_sig(struct api_signature **sig);
#define UB_MAX_MR 16 /* max mem regions number */
diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h
index 28abc30..4e1e6a2 100644
--- a/sys/cam/cam_ccb.h
+++ b/sys/cam/cam_ccb.h
@@ -189,16 +189,18 @@ typedef enum {
XPT_ATA_IO = 0x18 | XPT_FC_DEV_QUEUED,
/* Execute the requested ATA I/O operation */
- XPT_GET_SIM_KNOB = 0x18,
- /*
- * Get SIM specific knob values.
- */
+ XPT_GET_SIM_KNOB_OLD = 0x18, /* Compat only */
XPT_SET_SIM_KNOB = 0x19,
/*
* Set SIM specific knob values.
*/
+ XPT_GET_SIM_KNOB = 0x1a,
+ /*
+ * Get SIM specific knob values.
+ */
+
XPT_SMP_IO = 0x1b | XPT_FC_DEV_QUEUED,
/* Serial Management Protocol */
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index c2dd6a5..e811fe6 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -2610,6 +2610,7 @@ xpt_action_default(union ccb *start_ccb)
case XPT_RESET_BUS:
case XPT_IMMEDIATE_NOTIFY:
case XPT_NOTIFY_ACKNOWLEDGE:
+ case XPT_GET_SIM_KNOB_OLD:
case XPT_GET_SIM_KNOB:
case XPT_SET_SIM_KNOB:
case XPT_GET_TRAN_SETTINGS:
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index 2705240..98966e8 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -1557,6 +1557,7 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
break;
case XPT_SET_SIM_KNOB:
case XPT_GET_SIM_KNOB:
+ case XPT_GET_SIM_KNOB_OLD:
break;
default:
panic("%s: unexpected CCB type %#x", __func__,
diff --git a/sys/cddl/compat/opensolaris/sys/callo.h b/sys/cddl/compat/opensolaris/sys/callo.h
new file mode 100644
index 0000000..df2ae69
--- /dev/null
+++ b/sys/cddl/compat/opensolaris/sys/callo.h
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2016 Alexander Motin <mav@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _OPENSOLARIS_SYS_CALLO_H_
+#define _OPENSOLARIS_SYS_CALLO_H_
+
+#include_next <sys/callout.h>
+
+#define CALLOUT_REALTIME 0 /* realtime callout type */
+#define CALLOUT_NORMAL 1 /* normal callout type */
+
+#endif /* !_OPENSOLARIS_SYS_CALLO_H_ */
diff --git a/sys/cddl/compat/opensolaris/sys/systm.h b/sys/cddl/compat/opensolaris/sys/systm.h
index fe0e199..f6a0dce 100644
--- a/sys/cddl/compat/opensolaris/sys/systm.h
+++ b/sys/cddl/compat/opensolaris/sys/systm.h
@@ -42,6 +42,9 @@
#define delay(x) pause("soldelay", (x))
+#define timeout_generic(type, fn, arg, t, r, f) \
+ timeout(fn, arg, t / (NANOSEC/hz) + 1)
+
#endif /* _KERNEL */
#endif /* _OPENSOLARIS_SYS_SYSTM_H_ */
diff --git a/sys/cddl/compat/opensolaris/sys/time.h b/sys/cddl/compat/opensolaris/sys/time.h
index b54780c..6116d5b 100644
--- a/sys/cddl/compat/opensolaris/sys/time.h
+++ b/sys/cddl/compat/opensolaris/sys/time.h
@@ -40,6 +40,9 @@
#define MSEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MILLISEC))
#define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC))
+#define NSEC2SEC(n) ((n) / (NANOSEC / SEC))
+#define SEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / SEC))
+
typedef longlong_t hrtime_t;
#if defined(__i386__) || defined(__powerpc__)
diff --git a/sys/cddl/contrib/opensolaris/common/nvpair/opensolaris_nvpair.c b/sys/cddl/contrib/opensolaris/common/nvpair/opensolaris_nvpair.c
index 7038f7f..4bba05a 100644
--- a/sys/cddl/contrib/opensolaris/common/nvpair/opensolaris_nvpair.c
+++ b/sys/cddl/contrib/opensolaris/common/nvpair/opensolaris_nvpair.c
@@ -544,8 +544,7 @@ nvpair_free(nvpair_t *nvp)
int i;
for (i = 0; i < NVP_NELEM(nvp); i++)
- if (nvlp[i] != NULL)
- nvlist_free(nvlp[i]);
+ nvlist_free(nvlp[i]);
break;
}
default:
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c b/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
index 6eade2a..57e5f5e 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
@@ -24,6 +24,7 @@
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
* Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifdef _KERNEL
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h b/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h
index 56f3da7..eea60f3 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h
@@ -23,6 +23,7 @@
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _ZFEATURE_COMMON_H
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c b/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c
index 39ad7ce..0d8971c 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c
@@ -54,8 +54,69 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
zfs_cmd_deadman_t *zcdm_c;
zfs_cmd_zcmd_t *zcmd_c;
zfs_cmd_edbp_t *edbp_c;
+ zfs_cmd_resume_t *resume_c;
switch (cflag) {
+ case ZFS_CMD_COMPAT_RESUME:
+ resume_c = (void *)addr;
+ /* zc */
+ strlcpy(zc->zc_name, resume_c->zc_name, MAXPATHLEN);
+ strlcpy(zc->zc_value, resume_c->zc_value, MAXPATHLEN * 2);
+ strlcpy(zc->zc_string, resume_c->zc_string, MAXPATHLEN);
+
+#define FIELD_COPY(field) zc->field = resume_c->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
+ FIELD_COPY(zc_begin_record);
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(zc->zc_inject_record.zi_func,
+ resume_c->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ zc->zc_inject_record.zi_nlanes = 1;
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
+ FIELD_COPY(zc_defer_destroy);
+ FIELD_COPY(zc_flags);
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
+ FIELD_COPY(zc_resumable);
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
+ break;
+
case ZFS_CMD_COMPAT_EDBP:
edbp_c = (void *)addr;
/* zc */
@@ -63,40 +124,57 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
strlcpy(zc->zc_value, edbp_c->zc_value, MAXPATHLEN * 2);
strlcpy(zc->zc_string, edbp_c->zc_string, MAXPATHLEN);
-#define ZCMD_COPY(field) zc->field = edbp_c->field
- ZCMD_COPY(zc_nvlist_src);
- ZCMD_COPY(zc_nvlist_src_size);
- ZCMD_COPY(zc_nvlist_dst);
- ZCMD_COPY(zc_nvlist_dst_size);
- ZCMD_COPY(zc_nvlist_dst_filled);
- ZCMD_COPY(zc_pad2);
- ZCMD_COPY(zc_history);
- ZCMD_COPY(zc_guid);
- ZCMD_COPY(zc_nvlist_conf);
- ZCMD_COPY(zc_nvlist_conf_size);
- ZCMD_COPY(zc_cookie);
- ZCMD_COPY(zc_objset_type);
- ZCMD_COPY(zc_perm_action);
- ZCMD_COPY(zc_history_len);
- ZCMD_COPY(zc_history_offset);
- ZCMD_COPY(zc_obj);
- ZCMD_COPY(zc_iflags);
- ZCMD_COPY(zc_share);
- ZCMD_COPY(zc_jailid);
- ZCMD_COPY(zc_objset_stats);
+#define FIELD_COPY(field) zc->field = edbp_c->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
zc->zc_begin_record.drr_u.drr_begin = edbp_c->zc_begin_record;
- ZCMD_COPY(zc_inject_record);
- ZCMD_COPY(zc_defer_destroy);
- ZCMD_COPY(zc_flags);
- ZCMD_COPY(zc_action_handle);
- ZCMD_COPY(zc_cleanup_fd);
- ZCMD_COPY(zc_simple);
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(zc->zc_inject_record.zi_func,
+ edbp_c->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ zc->zc_inject_record.zi_nlanes = 1;
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
+ FIELD_COPY(zc_defer_destroy);
+ FIELD_COPY(zc_flags);
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
zc->zc_resumable = B_FALSE;
- ZCMD_COPY(zc_sendobj);
- ZCMD_COPY(zc_fromobj);
- ZCMD_COPY(zc_createtxg);
- ZCMD_COPY(zc_stat);
-#undef ZCMD_COPY
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
break;
case ZFS_CMD_COMPAT_ZCMD:
@@ -106,43 +184,60 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
strlcpy(zc->zc_value, zcmd_c->zc_value, MAXPATHLEN * 2);
strlcpy(zc->zc_string, zcmd_c->zc_string, MAXPATHLEN);
-#define ZCMD_COPY(field) zc->field = zcmd_c->field
- ZCMD_COPY(zc_nvlist_src);
- ZCMD_COPY(zc_nvlist_src_size);
- ZCMD_COPY(zc_nvlist_dst);
- ZCMD_COPY(zc_nvlist_dst_size);
- ZCMD_COPY(zc_nvlist_dst_filled);
- ZCMD_COPY(zc_pad2);
- ZCMD_COPY(zc_history);
- ZCMD_COPY(zc_guid);
- ZCMD_COPY(zc_nvlist_conf);
- ZCMD_COPY(zc_nvlist_conf_size);
- ZCMD_COPY(zc_cookie);
- ZCMD_COPY(zc_objset_type);
- ZCMD_COPY(zc_perm_action);
- ZCMD_COPY(zc_history_len);
- ZCMD_COPY(zc_history_offset);
- ZCMD_COPY(zc_obj);
- ZCMD_COPY(zc_iflags);
- ZCMD_COPY(zc_share);
- ZCMD_COPY(zc_jailid);
- ZCMD_COPY(zc_objset_stats);
+#define FIELD_COPY(field) zc->field = zcmd_c->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
zc->zc_begin_record.drr_u.drr_begin = zcmd_c->zc_begin_record;
- ZCMD_COPY(zc_inject_record);
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(zc->zc_inject_record.zi_func,
+ zcmd_c->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ zc->zc_inject_record.zi_nlanes = 1;
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
/* boolean_t -> uint32_t */
zc->zc_defer_destroy = (uint32_t)(zcmd_c->zc_defer_destroy);
zc->zc_flags = 0;
- ZCMD_COPY(zc_action_handle);
- ZCMD_COPY(zc_cleanup_fd);
- ZCMD_COPY(zc_simple);
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
zc->zc_resumable = B_FALSE;
- ZCMD_COPY(zc_sendobj);
- ZCMD_COPY(zc_fromobj);
- ZCMD_COPY(zc_createtxg);
- ZCMD_COPY(zc_stat);
-#undef ZCMD_COPY
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
break;
@@ -152,6 +247,8 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
strlcpy(zc->zc_name, zcdm_c->zc_name, MAXPATHLEN);
strlcpy(zc->zc_value, zcdm_c->zc_value, MAXPATHLEN * 2);
strlcpy(zc->zc_string, zcdm_c->zc_string, MAXPATHLEN);
+
+#define FIELD_COPY(field) zc->field = zcdm_c->field
zc->zc_guid = zcdm_c->zc_guid;
zc->zc_nvlist_conf = zcdm_c->zc_nvlist_conf;
zc->zc_nvlist_conf_size = zcdm_c->zc_nvlist_conf_size;
@@ -181,12 +278,28 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
zc->zc_fromobj = zcdm_c->zc_fromobj;
zc->zc_createtxg = zcdm_c->zc_createtxg;
zc->zc_stat = zcdm_c->zc_stat;
-
- /* zc_inject_record doesn't change in libzfs_core */
- zcdm_c->zc_inject_record = zc->zc_inject_record;
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(zc->zc_inject_record.zi_func,
+ resume_c->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ zc->zc_inject_record.zi_nlanes = 1;
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
/* we always assume zc_nvlist_dst_filled is true */
zc->zc_nvlist_dst_filled = B_TRUE;
+#undef FIELD_COPY
break;
case ZFS_CMD_COMPAT_V28:
@@ -255,6 +368,7 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
zc28_c->zc_inject_record.zi_duration;
zc->zc_inject_record.zi_timer =
zc28_c->zc_inject_record.zi_timer;
+ zc->zc_inject_record.zi_nlanes = 1;
zc->zc_inject_record.zi_cmd = ZINJECT_UNINITIALIZED;
zc->zc_inject_record.zi_pad = 0;
break;
@@ -319,47 +433,121 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_t addr, const int request,
zfs_cmd_deadman_t *zcdm_c;
zfs_cmd_zcmd_t *zcmd_c;
zfs_cmd_edbp_t *edbp_c;
+ zfs_cmd_resume_t *resume_c;
switch (cflag) {
+ case ZFS_CMD_COMPAT_RESUME:
+ resume_c = (void *)addr;
+ strlcpy(resume_c->zc_name, zc->zc_name, MAXPATHLEN);
+ strlcpy(resume_c->zc_value, zc->zc_value, MAXPATHLEN * 2);
+ strlcpy(resume_c->zc_string, zc->zc_string, MAXPATHLEN);
+
+#define FIELD_COPY(field) resume_c->field = zc->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
+ FIELD_COPY(zc_begin_record);
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(resume_c->zc_inject_record.zi_func,
+ zc->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
+ FIELD_COPY(zc_defer_destroy);
+ FIELD_COPY(zc_flags);
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
+ break;
+
case ZFS_CMD_COMPAT_EDBP:
edbp_c = (void *)addr;
strlcpy(edbp_c->zc_name, zc->zc_name, MAXPATHLEN);
strlcpy(edbp_c->zc_value, zc->zc_value, MAXPATHLEN * 2);
strlcpy(edbp_c->zc_string, zc->zc_string, MAXPATHLEN);
-#define ZCMD_COPY(field) edbp_c->field = zc->field
- ZCMD_COPY(zc_nvlist_src);
- ZCMD_COPY(zc_nvlist_src_size);
- ZCMD_COPY(zc_nvlist_dst);
- ZCMD_COPY(zc_nvlist_dst_size);
- ZCMD_COPY(zc_nvlist_dst_filled);
- ZCMD_COPY(zc_pad2);
- ZCMD_COPY(zc_history);
- ZCMD_COPY(zc_guid);
- ZCMD_COPY(zc_nvlist_conf);
- ZCMD_COPY(zc_nvlist_conf_size);
- ZCMD_COPY(zc_cookie);
- ZCMD_COPY(zc_objset_type);
- ZCMD_COPY(zc_perm_action);
- ZCMD_COPY(zc_history_len);
- ZCMD_COPY(zc_history_offset);
- ZCMD_COPY(zc_obj);
- ZCMD_COPY(zc_iflags);
- ZCMD_COPY(zc_share);
- ZCMD_COPY(zc_jailid);
- ZCMD_COPY(zc_objset_stats);
+#define FIELD_COPY(field) edbp_c->field = zc->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
edbp_c->zc_begin_record = zc->zc_begin_record.drr_u.drr_begin;
- ZCMD_COPY(zc_inject_record);
- ZCMD_COPY(zc_defer_destroy);
- ZCMD_COPY(zc_flags);
- ZCMD_COPY(zc_action_handle);
- ZCMD_COPY(zc_cleanup_fd);
- ZCMD_COPY(zc_simple);
- ZCMD_COPY(zc_sendobj);
- ZCMD_COPY(zc_fromobj);
- ZCMD_COPY(zc_createtxg);
- ZCMD_COPY(zc_stat);
-#undef ZCMD_COPY
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(resume_c->zc_inject_record.zi_func,
+ zc->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
+ FIELD_COPY(zc_defer_destroy);
+ FIELD_COPY(zc_flags);
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
break;
case ZFS_CMD_COMPAT_ZCMD:
@@ -369,42 +557,58 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_t addr, const int request,
strlcpy(zcmd_c->zc_value, zc->zc_value, MAXPATHLEN * 2);
strlcpy(zcmd_c->zc_string, zc->zc_string, MAXPATHLEN);
-#define ZCMD_COPY(field) zcmd_c->field = zc->field
- ZCMD_COPY(zc_nvlist_src);
- ZCMD_COPY(zc_nvlist_src_size);
- ZCMD_COPY(zc_nvlist_dst);
- ZCMD_COPY(zc_nvlist_dst_size);
- ZCMD_COPY(zc_nvlist_dst_filled);
- ZCMD_COPY(zc_pad2);
- ZCMD_COPY(zc_history);
- ZCMD_COPY(zc_guid);
- ZCMD_COPY(zc_nvlist_conf);
- ZCMD_COPY(zc_nvlist_conf_size);
- ZCMD_COPY(zc_cookie);
- ZCMD_COPY(zc_objset_type);
- ZCMD_COPY(zc_perm_action);
- ZCMD_COPY(zc_history_len);
- ZCMD_COPY(zc_history_offset);
- ZCMD_COPY(zc_obj);
- ZCMD_COPY(zc_iflags);
- ZCMD_COPY(zc_share);
- ZCMD_COPY(zc_jailid);
- ZCMD_COPY(zc_objset_stats);
+#define FIELD_COPY(field) zcmd_c->field = zc->field
+ FIELD_COPY(zc_nvlist_src);
+ FIELD_COPY(zc_nvlist_src_size);
+ FIELD_COPY(zc_nvlist_dst);
+ FIELD_COPY(zc_nvlist_dst_size);
+ FIELD_COPY(zc_nvlist_dst_filled);
+ FIELD_COPY(zc_pad2);
+ FIELD_COPY(zc_history);
+ FIELD_COPY(zc_guid);
+ FIELD_COPY(zc_nvlist_conf);
+ FIELD_COPY(zc_nvlist_conf_size);
+ FIELD_COPY(zc_cookie);
+ FIELD_COPY(zc_objset_type);
+ FIELD_COPY(zc_perm_action);
+ FIELD_COPY(zc_history_len);
+ FIELD_COPY(zc_history_offset);
+ FIELD_COPY(zc_obj);
+ FIELD_COPY(zc_iflags);
+ FIELD_COPY(zc_share);
+ FIELD_COPY(zc_jailid);
+ FIELD_COPY(zc_objset_stats);
zcmd_c->zc_begin_record = zc->zc_begin_record.drr_u.drr_begin;
- ZCMD_COPY(zc_inject_record);
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(resume_c->zc_inject_record.zi_func,
+ zc->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
/* boolean_t -> uint32_t */
zcmd_c->zc_defer_destroy = (uint32_t)(zc->zc_defer_destroy);
zcmd_c->zc_temphold = 0;
- ZCMD_COPY(zc_action_handle);
- ZCMD_COPY(zc_cleanup_fd);
- ZCMD_COPY(zc_simple);
- ZCMD_COPY(zc_sendobj);
- ZCMD_COPY(zc_fromobj);
- ZCMD_COPY(zc_createtxg);
- ZCMD_COPY(zc_stat);
-#undef ZCMD_COPY
+ FIELD_COPY(zc_action_handle);
+ FIELD_COPY(zc_cleanup_fd);
+ FIELD_COPY(zc_simple);
+ FIELD_COPY(zc_sendobj);
+ FIELD_COPY(zc_fromobj);
+ FIELD_COPY(zc_createtxg);
+ FIELD_COPY(zc_stat);
+#undef FIELD_COPY
break;
@@ -414,6 +618,8 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_t addr, const int request,
strlcpy(zcdm_c->zc_name, zc->zc_name, MAXPATHLEN);
strlcpy(zcdm_c->zc_value, zc->zc_value, MAXPATHLEN * 2);
strlcpy(zcdm_c->zc_string, zc->zc_string, MAXPATHLEN);
+
+#define FIELD_COPY(field) zcdm_c->field = zc->field
zcdm_c->zc_guid = zc->zc_guid;
zcdm_c->zc_nvlist_conf = zc->zc_nvlist_conf;
zcdm_c->zc_nvlist_conf_size = zc->zc_nvlist_conf_size;
@@ -442,9 +648,24 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_t addr, const int request,
zcdm_c->zc_fromobj = zc->zc_fromobj;
zcdm_c->zc_createtxg = zc->zc_createtxg;
zcdm_c->zc_stat = zc->zc_stat;
-
- /* zc_inject_record doesn't change in libzfs_core */
- zc->zc_inject_record = zcdm_c->zc_inject_record;
+ FIELD_COPY(zc_inject_record.zi_objset);
+ FIELD_COPY(zc_inject_record.zi_object);
+ FIELD_COPY(zc_inject_record.zi_start);
+ FIELD_COPY(zc_inject_record.zi_end);
+ FIELD_COPY(zc_inject_record.zi_guid);
+ FIELD_COPY(zc_inject_record.zi_level);
+ FIELD_COPY(zc_inject_record.zi_error);
+ FIELD_COPY(zc_inject_record.zi_type);
+ FIELD_COPY(zc_inject_record.zi_freq);
+ FIELD_COPY(zc_inject_record.zi_failfast);
+ strlcpy(resume_c->zc_inject_record.zi_func,
+ zc->zc_inject_record.zi_func, MAXNAMELEN);
+ FIELD_COPY(zc_inject_record.zi_iotype);
+ FIELD_COPY(zc_inject_record.zi_duration);
+ FIELD_COPY(zc_inject_record.zi_timer);
+ FIELD_COPY(zc_inject_record.zi_cmd);
+ FIELD_COPY(zc_inject_record.zi_pad);
+#undef FIELD_COPY
#ifndef _KERNEL
if (request == ZFS_IOC_RECV)
strlcpy(zcdm_c->zc_top_ds,
@@ -766,6 +987,12 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag)
zp.zfs_cmd_size = sizeof(zfs_cmd_t);
zp.zfs_ioctl_version = ZFS_IOCVER_CURRENT;
return (ioctl(fd, ncmd, &zp));
+ case ZFS_CMD_COMPAT_RESUME:
+ ncmd = _IOWR('Z', request, struct zfs_iocparm);
+ zp.zfs_cmd = (uint64_t)zc;
+ zp.zfs_cmd_size = sizeof(zfs_cmd_resume_t);
+ zp.zfs_ioctl_version = ZFS_IOCVER_RESUME;
+ return (ioctl(fd, ncmd, &zp));
case ZFS_CMD_COMPAT_EDBP:
ncmd = _IOWR('Z', request, struct zfs_iocparm);
zp.zfs_cmd = (uint64_t)zc;
@@ -876,7 +1103,8 @@ zfs_ioctl_compat_innvl(zfs_cmd_t *zc, nvlist_t * innvl, const int vec,
int err;
if (cflag == ZFS_CMD_COMPAT_NONE || cflag == ZFS_CMD_COMPAT_LZC ||
- cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP)
+ cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP ||
+ cflag == ZFS_CMD_COMPAT_RESUME)
goto out;
switch (vec) {
@@ -1028,7 +1256,8 @@ zfs_ioctl_compat_outnvl(zfs_cmd_t *zc, nvlist_t * outnvl, const int vec,
nvlist_t *tmpnvl;
if (cflag == ZFS_CMD_COMPAT_NONE || cflag == ZFS_CMD_COMPAT_LZC ||
- cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP)
+ cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP ||
+ cflag == ZFS_CMD_COMPAT_RESUME)
return (outnvl);
switch (vec) {
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h b/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h
index 8361aa3..6f24380 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h
@@ -53,7 +53,8 @@ extern "C" {
#define ZFS_IOCVER_ZCMD 3
#define ZFS_IOCVER_EDBP 4
#define ZFS_IOCVER_RESUME 5
-#define ZFS_IOCVER_CURRENT ZFS_IOCVER_RESUME
+#define ZFS_IOCVER_INLANES 6
+#define ZFS_IOCVER_CURRENT ZFS_IOCVER_INLANES
/* compatibility conversion flag */
#define ZFS_CMD_COMPAT_NONE 0
@@ -63,6 +64,7 @@ extern "C" {
#define ZFS_CMD_COMPAT_LZC 4
#define ZFS_CMD_COMPAT_ZCMD 5
#define ZFS_CMD_COMPAT_EDBP 6
+#define ZFS_CMD_COMPAT_RESUME 7
#define ZFS_IOC_COMPAT_PASS 254
#define ZFS_IOC_COMPAT_FAIL 255
@@ -167,6 +169,25 @@ typedef struct zfs_cmd_v28 {
zfs_stat_t zc_stat;
} zfs_cmd_v28_t;
+typedef struct zinject_record_deadman {
+ uint64_t zi_objset;
+ uint64_t zi_object;
+ uint64_t zi_start;
+ uint64_t zi_end;
+ uint64_t zi_guid;
+ uint32_t zi_level;
+ uint32_t zi_error;
+ uint64_t zi_type;
+ uint32_t zi_freq;
+ uint32_t zi_failfast;
+ char zi_func[MAXNAMELEN];
+ uint32_t zi_iotype;
+ int32_t zi_duration;
+ uint64_t zi_timer;
+ uint32_t zi_cmd;
+ uint32_t zi_pad;
+} zinject_record_deadman_t;
+
typedef struct zfs_cmd_deadman {
char zc_name[MAXPATHLEN];
char zc_value[MAXPATHLEN * 2];
@@ -192,7 +213,7 @@ typedef struct zfs_cmd_deadman {
dmu_objset_stats_t zc_objset_stats;
struct drr_begin zc_begin_record;
/* zc_inject_record doesn't change in libzfs_core */
- zinject_record_t zc_inject_record;
+ zinject_record_deadman_t zc_inject_record;
boolean_t zc_defer_destroy;
boolean_t zc_temphold;
uint64_t zc_action_handle;
@@ -235,7 +256,7 @@ typedef struct zfs_cmd_zcmd {
uint64_t zc_jailid;
dmu_objset_stats_t zc_objset_stats;
struct drr_begin zc_begin_record;
- zinject_record_t zc_inject_record;
+ zinject_record_deadman_t zc_inject_record;
boolean_t zc_defer_destroy;
boolean_t zc_temphold;
uint64_t zc_action_handle;
@@ -278,7 +299,7 @@ typedef struct zfs_cmd_edbp {
uint64_t zc_jailid;
dmu_objset_stats_t zc_objset_stats;
struct drr_begin zc_begin_record;
- zinject_record_t zc_inject_record;
+ zinject_record_deadman_t zc_inject_record;
uint32_t zc_defer_destroy;
uint32_t zc_flags;
uint64_t zc_action_handle;
@@ -291,6 +312,49 @@ typedef struct zfs_cmd_edbp {
zfs_stat_t zc_stat;
} zfs_cmd_edbp_t;
+typedef struct zfs_cmd_resume {
+ char zc_name[MAXPATHLEN]; /* name of pool or dataset */
+ uint64_t zc_nvlist_src; /* really (char *) */
+ uint64_t zc_nvlist_src_size;
+ uint64_t zc_nvlist_dst; /* really (char *) */
+ uint64_t zc_nvlist_dst_size;
+ boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */
+ int zc_pad2;
+
+ /*
+ * The following members are for legacy ioctls which haven't been
+ * converted to the new method.
+ */
+ uint64_t zc_history; /* really (char *) */
+ char zc_value[MAXPATHLEN * 2];
+ char zc_string[MAXNAMELEN];
+ uint64_t zc_guid;
+ uint64_t zc_nvlist_conf; /* really (char *) */
+ uint64_t zc_nvlist_conf_size;
+ uint64_t zc_cookie;
+ uint64_t zc_objset_type;
+ uint64_t zc_perm_action;
+ uint64_t zc_history_len;
+ uint64_t zc_history_offset;
+ uint64_t zc_obj;
+ uint64_t zc_iflags; /* internal to zfs(7fs) */
+ zfs_share_t zc_share;
+ uint64_t zc_jailid;
+ dmu_objset_stats_t zc_objset_stats;
+ dmu_replay_record_t zc_begin_record;
+ zinject_record_deadman_t zc_inject_record;
+ uint32_t zc_defer_destroy;
+ uint32_t zc_flags;
+ uint64_t zc_action_handle;
+ int zc_cleanup_fd;
+ uint8_t zc_simple;
+ boolean_t zc_resumable;
+ uint64_t zc_sendobj;
+ uint64_t zc_fromobj;
+ uint64_t zc_createtxg;
+ zfs_stat_t zc_stat;
+} zfs_cmd_resume_t;
+
#ifdef _KERNEL
unsigned static long zfs_ioctl_v15_to_v28[] = {
0, /* 0 ZFS_IOC_POOL_CREATE */
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c b/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
index 20b54d8..c310a67b 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
@@ -23,6 +23,7 @@
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c b/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
index 4d906b0..9c71744 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
@@ -22,6 +22,7 @@
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zio.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
index 2719a47..d3bce0e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
@@ -23,7 +23,7 @@
/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2016, Joyent, Inc. All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
*/
@@ -678,10 +678,12 @@ dtrace_error(uint32_t *counter)
* Use the DTRACE_LOADFUNC macro to define functions for each of loading a
* uint8_t, a uint16_t, a uint32_t and a uint64_t.
*/
+/* BEGIN CSTYLED */
DTRACE_LOADFUNC(8)
DTRACE_LOADFUNC(16)
DTRACE_LOADFUNC(32)
DTRACE_LOADFUNC(64)
+/* END CSTYLED */
static int
dtrace_inscratch(uintptr_t dest, size_t size, dtrace_mstate_t *mstate)
@@ -765,6 +767,7 @@ dtrace_canstore(uint64_t addr, size_t sz, dtrace_mstate_t *mstate,
uintptr_t base = (uintptr_t)dstate->dtds_base +
(dstate->dtds_hashsize * sizeof (dtrace_dynhash_t));
uintptr_t chunkoffs;
+ dtrace_dynvar_t *dvar;
/*
* Before we assume that we can store here, we need to make
@@ -781,6 +784,8 @@ dtrace_canstore(uint64_t addr, size_t sz, dtrace_mstate_t *mstate,
*
* (3) Not span a chunk boundary
*
+ * (4) Not be in the tuple space of a dynamic variable
+ *
*/
if (addr < base)
return (0);
@@ -793,6 +798,15 @@ dtrace_canstore(uint64_t addr, size_t sz, dtrace_mstate_t *mstate,
if (chunkoffs + sz > dstate->dtds_chunksize)
return (0);
+ dvar = (dtrace_dynvar_t *)((uintptr_t)addr - chunkoffs);
+
+ if (dvar->dtdv_hashval == DTRACE_DYNHASH_FREE)
+ return (0);
+
+ if (chunkoffs < sizeof (dtrace_dynvar_t) +
+ ((dvar->dtdv_tuple.dtt_nkeys - 1) * sizeof (dtrace_key_t)))
+ return (0);
+
return (1);
}
@@ -5632,6 +5646,12 @@ next:
ipaddr_t ip4;
uint8_t *ptr8, val;
+ if (!dtrace_canload(tupregs[argi].dttk_value,
+ sizeof (ipaddr_t), mstate, vstate)) {
+ regs[rd] = 0;
+ break;
+ }
+
/*
* Safely load the IPv4 address.
*/
@@ -5685,6 +5705,12 @@ next:
* just the IPv4 string is returned for inet_ntoa6.
*/
+ if (!dtrace_canload(tupregs[argi].dttk_value,
+ sizeof (struct in6_addr), mstate, vstate)) {
+ regs[rd] = 0;
+ break;
+ }
+
/*
* Safely load the IPv6 address.
*/
@@ -6248,6 +6274,7 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
ASSERT(id >= DIF_VAR_OTHER_UBASE);
id -= DIF_VAR_OTHER_UBASE;
+ VERIFY(id < vstate->dtvs_nglobals);
svar = vstate->dtvs_globals[id];
ASSERT(svar != NULL);
v = &svar->dtsv_var;
@@ -6339,7 +6366,7 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
ASSERT(id >= DIF_VAR_OTHER_UBASE);
id -= DIF_VAR_OTHER_UBASE;
- ASSERT(id < vstate->dtvs_nlocals);
+ VERIFY(id < vstate->dtvs_nlocals);
ASSERT(vstate->dtvs_locals != NULL);
svar = vstate->dtvs_locals[id];
@@ -6417,6 +6444,7 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
id = DIF_INSTR_VAR(instr);
ASSERT(id >= DIF_VAR_OTHER_UBASE);
id -= DIF_VAR_OTHER_UBASE;
+ VERIFY(id < vstate->dtvs_ntlocals);
key = &tupregs[DIF_DTR_NREGS];
key[0].dttk_value = (uint64_t)id;
@@ -6530,8 +6558,10 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
if (DIF_INSTR_OP(instr) == DIF_OP_LDTAA) {
DTRACE_TLS_THRKEY(key[nkeys].dttk_value);
key[nkeys++].dttk_size = 0;
+ VERIFY(id < vstate->dtvs_ntlocals);
v = &vstate->dtvs_tlocals[id];
} else {
+ VERIFY(id < vstate->dtvs_nglobals);
v = &vstate->dtvs_globals[id]->dtsv_var;
}
@@ -6570,8 +6600,10 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
if (DIF_INSTR_OP(instr) == DIF_OP_STTAA) {
DTRACE_TLS_THRKEY(key[nkeys].dttk_value);
key[nkeys++].dttk_size = 0;
+ VERIFY(id < vstate->dtvs_ntlocals);
v = &vstate->dtvs_tlocals[id];
} else {
+ VERIFY(id < vstate->dtvs_nglobals);
v = &vstate->dtvs_globals[id]->dtsv_var;
}
@@ -9584,6 +9616,7 @@ dtrace_difo_validate(dtrace_difo_t *dp, dtrace_vstate_t *vstate, uint_t nregs,
int (*efunc)(uint_t pc, const char *, ...) = dtrace_difo_err;
int kcheckload;
uint_t pc;
+ int maxglobal = -1, maxlocal = -1, maxtlocal = -1;
kcheckload = cr == NULL ||
(vstate->dtvs_state->dts_cred.dcr_visible & DTRACE_CRV_KERNEL) == 0;
@@ -9913,6 +9946,9 @@ dtrace_difo_validate(dtrace_difo_t *dp, dtrace_vstate_t *vstate, uint_t nregs,
switch (v->dtdv_scope) {
case DIFV_SCOPE_GLOBAL:
+ if (maxglobal == -1 || ndx > maxglobal)
+ maxglobal = ndx;
+
if (ndx < vstate->dtvs_nglobals) {
dtrace_statvar_t *svar;
@@ -9923,11 +9959,17 @@ dtrace_difo_validate(dtrace_difo_t *dp, dtrace_vstate_t *vstate, uint_t nregs,
break;
case DIFV_SCOPE_THREAD:
+ if (maxtlocal == -1 || ndx > maxtlocal)
+ maxtlocal = ndx;
+
if (ndx < vstate->dtvs_ntlocals)
existing = &vstate->dtvs_tlocals[ndx];
break;
case DIFV_SCOPE_LOCAL:
+ if (maxlocal == -1 || ndx > maxlocal)
+ maxlocal = ndx;
+
if (ndx < vstate->dtvs_nlocals) {
dtrace_statvar_t *svar;
@@ -9976,6 +10018,37 @@ dtrace_difo_validate(dtrace_difo_t *dp, dtrace_vstate_t *vstate, uint_t nregs,
}
}
+ for (pc = 0; pc < dp->dtdo_len && err == 0; pc++) {
+ dif_instr_t instr = dp->dtdo_buf[pc];
+
+ uint_t v = DIF_INSTR_VAR(instr);
+ uint_t op = DIF_INSTR_OP(instr);
+
+ switch (op) {
+ case DIF_OP_LDGS:
+ case DIF_OP_LDGAA:
+ case DIF_OP_STGS:
+ case DIF_OP_STGAA:
+ if (v > DIF_VAR_OTHER_UBASE + maxglobal)
+ err += efunc(pc, "invalid variable %u\n", v);
+ break;
+ case DIF_OP_LDTS:
+ case DIF_OP_LDTAA:
+ case DIF_OP_STTS:
+ case DIF_OP_STTAA:
+ if (v > DIF_VAR_OTHER_UBASE + maxtlocal)
+ err += efunc(pc, "invalid variable %u\n", v);
+ break;
+ case DIF_OP_LDLS:
+ case DIF_OP_STLS:
+ if (v > DIF_VAR_OTHER_UBASE + maxlocal)
+ err += efunc(pc, "invalid variable %u\n", v);
+ break;
+ default:
+ break;
+ }
+ }
+
return (err);
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
index 758ce0b..51db19b 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
@@ -63,13 +63,16 @@
#ifndef illumos
#include <sys/dtrace_bsd.h>
#include <sys/eventhandler.h>
+#include <sys/rmlock.h>
#include <sys/sysctl.h>
#include <sys/u8_textprep.h>
#include <sys/user.h>
+
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_param.h>
+
#include <cddl/dev/dtrace/dtrace_cddl.h>
#endif
@@ -224,7 +227,7 @@ static void fasttrap_thread_dtor(void *, struct thread *);
#define FASTTRAP_PROCS_INDEX(pid) ((pid) & fasttrap_procs.fth_mask)
#ifndef illumos
-static kmutex_t fasttrap_cpuc_pid_lock[MAXCPU];
+struct rmlock fasttrap_tp_lock;
static eventhandler_tag fasttrap_thread_dtor_tag;
#endif
@@ -439,10 +442,15 @@ fasttrap_mod_barrier(uint64_t gen)
fasttrap_mod_gen++;
+#ifdef illumos
CPU_FOREACH(i) {
mutex_enter(&fasttrap_cpuc_pid_lock[i]);
mutex_exit(&fasttrap_cpuc_pid_lock[i]);
}
+#else
+ rm_wlock(&fasttrap_tp_lock);
+ rm_wunlock(&fasttrap_tp_lock);
+#endif
}
/*
@@ -2574,10 +2582,7 @@ fasttrap_load(void)
mutex_init(&fasttrap_procs.fth_table[i].ftb_mtx,
"processes bucket mtx", MUTEX_DEFAULT, NULL);
- CPU_FOREACH(i) {
- mutex_init(&fasttrap_cpuc_pid_lock[i], "fasttrap barrier",
- MUTEX_DEFAULT, NULL);
- }
+ rm_init(&fasttrap_tp_lock, "fasttrap tracepoint");
/*
* This event handler must run before kdtrace_thread_dtor() since it
@@ -2710,9 +2715,7 @@ fasttrap_unload(void)
#ifndef illumos
destroy_dev(fasttrap_cdev);
mutex_destroy(&fasttrap_count_mtx);
- CPU_FOREACH(i) {
- mutex_destroy(&fasttrap_cpuc_pid_lock[i]);
- }
+ rm_destroy(&fasttrap_tp_lock);
#endif
return (0);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
index fad9874..f944903 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
@@ -3606,7 +3606,7 @@ arc_kmem_reap_now(void)
static void
arc_reclaim_thread(void *dummy __unused)
{
- clock_t growtime = 0;
+ hrtime_t growtime = 0;
callb_cpr_t cpr;
CALLB_CPR_INIT(&cpr, &arc_reclaim_lock, callb_generic_cpr, FTAG);
@@ -3627,7 +3627,7 @@ arc_reclaim_thread(void *dummy __unused)
* Wait at least zfs_grow_retry (default 60) seconds
* before considering growing.
*/
- growtime = ddi_get_lbolt() + (arc_grow_retry * hz);
+ growtime = gethrtime() + SEC2NSEC(arc_grow_retry);
arc_kmem_reap_now();
@@ -3647,7 +3647,7 @@ arc_reclaim_thread(void *dummy __unused)
}
} else if (free_memory < arc_c >> arc_no_grow_shift) {
arc_no_grow = B_TRUE;
- } else if (ddi_get_lbolt() >= growtime) {
+ } else if (gethrtime() >= growtime) {
arc_no_grow = B_FALSE;
}
@@ -3681,8 +3681,8 @@ arc_reclaim_thread(void *dummy __unused)
* even if we aren't being signalled)
*/
CALLB_CPR_SAFE_BEGIN(&cpr);
- (void) cv_timedwait(&arc_reclaim_thread_cv,
- &arc_reclaim_lock, hz);
+ (void) cv_timedwait_hires(&arc_reclaim_thread_cv,
+ &arc_reclaim_lock, SEC2NSEC(1), MSEC2NSEC(1), 0);
CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock);
}
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c
index 7a747b3..c706a38 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/bpobj.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c
index b2b9887..a69fcc3 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/arc.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
index ac7ef3d..a563d74 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
@@ -25,6 +25,7 @@
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
index 6ca021e..2c9802f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2013, 2015 by Delphix. All rights reserved.
* Copyright 2014 HybridCluster. All rights reserved.
*/
@@ -50,6 +50,12 @@ dmu_object_alloc(objset_t *os, dmu_object_type_t ot, int blocksize,
* reasonably sparse (at most 1/4 full). Look from the
* beginning once, but after that keep looking from here.
* If we can't find one, just keep going from here.
+ *
+ * Note that dmu_traverse depends on the behavior that we use
+ * multiple blocks of the dnode object before going back to
+ * reuse objects. Any change to this algorithm should preserve
+ * that property or find another solution to the issues
+ * described in traverse_visitbp.
*/
if (P2PHASE(object, L2_dnode_count) == 0) {
uint64_t offset = restarted ? object << DNODE_SHIFT : 0;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
index 85465ec..367dbcb 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
@@ -26,6 +26,7 @@
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2015, STRATO AG, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
index 00f52d6..188810b 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
@@ -25,6 +25,8 @@
* Copyright (c) 2014, Joyent, Inc. All rights reserved.
* Copyright (c) 2012, Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright 2014 HybridCluster. All rights reserved.
+ * Copyright 2016 RackTop Systems.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/dmu.h>
@@ -64,6 +66,12 @@
int zfs_send_corrupt_data = B_FALSE;
int zfs_send_queue_length = 16 * 1024 * 1024;
int zfs_recv_queue_length = 16 * 1024 * 1024;
+/* Set this tunable to FALSE to disable setting of DRR_FLAG_FREERECORDS */
+int zfs_send_set_freerecords_bit = B_TRUE;
+
+#ifdef _KERNEL
+TUNABLE_INT("vfs.zfs.send_set_freerecords_bit", &zfs_send_set_freerecords_bit);
+#endif
static char *dmu_recv_tag = "dmu_recv_tag";
const char *recv_clone_name = "%recv";
@@ -771,7 +779,8 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_t *to_ds,
drr->drr_u.drr_begin.drr_toguid = dsl_dataset_phys(to_ds)->ds_guid;
if (dsl_dataset_phys(to_ds)->ds_flags & DS_FLAG_CI_DATASET)
drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_CI_DATA;
- drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_FREERECORDS;
+ if (zfs_send_set_freerecords_bit)
+ drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_FREERECORDS;
if (ancestor_zb != NULL) {
drr->drr_u.drr_begin.drr_fromguid =
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
index 2c718df..dd0644a 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2012, 2016 by Delphix. All rights reserved.
* Copyright (c) 2015 Chunwei Chen. All rights reserved.
*/
@@ -63,6 +63,7 @@ typedef struct traverse_data {
uint64_t td_hole_birth_enabled_txg;
blkptr_cb_t *td_func;
void *td_arg;
+ boolean_t td_realloc_possible;
} traverse_data_t;
static int traverse_dnode(traverse_data_t *td, const dnode_phys_t *dnp,
@@ -232,18 +233,30 @@ traverse_visitbp(traverse_data_t *td, const dnode_phys_t *dnp,
if (bp->blk_birth == 0) {
/*
- * Since this block has a birth time of 0 it must be a
- * hole created before the SPA_FEATURE_HOLE_BIRTH
- * feature was enabled. If SPA_FEATURE_HOLE_BIRTH
- * was enabled before the min_txg for this traveral we
- * know the hole must have been created before the
- * min_txg for this traveral, so we can skip it. If
- * SPA_FEATURE_HOLE_BIRTH was enabled after the min_txg
- * for this traveral we cannot tell if the hole was
- * created before or after the min_txg for this
- * traversal, so we cannot skip it.
+ * Since this block has a birth time of 0 it must be one of
+ * two things: a hole created before the
+ * SPA_FEATURE_HOLE_BIRTH feature was enabled, or a hole
+ * which has always been a hole in an object.
+ *
+ * If a file is written sparsely, then the unwritten parts of
+ * the file were "always holes" -- that is, they have been
+ * holes since this object was allocated. However, we (and
+ * our callers) can not necessarily tell when an object was
+ * allocated. Therefore, if it's possible that this object
+ * was freed and then its object number reused, we need to
+ * visit all the holes with birth==0.
+ *
+ * If it isn't possible that the object number was reused,
+ * then if SPA_FEATURE_HOLE_BIRTH was enabled before we wrote
+ * all the blocks we will visit as part of this traversal,
+ * then this hole must have always existed, so we can skip
+ * it. We visit blocks born after (exclusive) td_min_txg.
+ *
+ * Note that the meta-dnode cannot be reallocated.
*/
- if (td->td_hole_birth_enabled_txg < td->td_min_txg)
+ if ((!td->td_realloc_possible ||
+ zb->zb_object == DMU_META_DNODE_OBJECT) &&
+ td->td_hole_birth_enabled_txg <= td->td_min_txg)
return (0);
} else if (bp->blk_birth <= td->td_min_txg) {
return (0);
@@ -338,6 +351,15 @@ traverse_visitbp(traverse_data_t *td, const dnode_phys_t *dnp,
objset_phys_t *osp = buf->b_data;
prefetch_dnode_metadata(td, &osp->os_meta_dnode, zb->zb_objset,
DMU_META_DNODE_OBJECT);
+ /*
+ * See the block comment above for the goal of this variable.
+ * If the maxblkid of the meta-dnode is 0, then we know that
+ * we've never had more than DNODES_PER_BLOCK objects in the
+ * dataset, which means we can't have reused any object ids.
+ */
+ if (osp->os_meta_dnode.dn_maxblkid == 0)
+ td->td_realloc_possible = B_FALSE;
+
if (arc_buf_size(buf) >= sizeof (objset_phys_t)) {
prefetch_dnode_metadata(td, &osp->os_groupused_dnode,
zb->zb_objset, DMU_GROUPUSED_OBJECT);
@@ -544,12 +566,13 @@ traverse_impl(spa_t *spa, dsl_dataset_t *ds, uint64_t objset, blkptr_t *rootbp,
td.td_pfd = &pd;
td.td_flags = flags;
td.td_paused = B_FALSE;
+ td.td_realloc_possible = (txg_start == 0 ? B_FALSE : B_TRUE);
if (spa_feature_is_active(spa, SPA_FEATURE_HOLE_BIRTH)) {
VERIFY(spa_feature_enabled_txg(spa,
SPA_FEATURE_HOLE_BIRTH, &td.td_hole_birth_enabled_txg));
} else {
- td.td_hole_birth_enabled_txg = 0;
+ td.td_hole_birth_enabled_txg = UINT64_MAX;
}
pd.pd_flags = flags;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c
index 65a017f..bea484f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2012, 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/dmu.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
index 01f2d14..39bef75 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 by Delphix. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
index 95e5392..00b9c7e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
@@ -25,6 +25,8 @@
* Copyright (c) 2014, Joyent, Inc. All rights reserved.
* Copyright (c) 2014 RackTop Systems.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
+ * Copyright 2016, OmniTI Computer Consulting, Inc. All rights reserved.
*/
#include <sys/dmu_objset.h>
@@ -84,6 +86,8 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, max_recordsize, CTLFLAG_RWTUN,
extern inline dsl_dataset_phys_t *dsl_dataset_phys(dsl_dataset_t *ds);
+extern int spa_asize_inflation;
+
/*
* Figure out how much of this delta should be propogated to the dsl_dir
* layer. If there's a refreservation, that space has already been
@@ -2896,6 +2900,11 @@ int
dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone,
dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx)
{
+ /*
+ * "slack" factor for received datasets with refquota set on them.
+ * See the bottom of this function for details on its use.
+ */
+ uint64_t refquota_slack = DMU_MAX_ACCESS * spa_asize_inflation;
int64_t unused_refres_delta;
/* they should both be heads */
@@ -2938,10 +2947,22 @@ dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone,
dsl_dir_space_available(origin_head->ds_dir, NULL, 0, TRUE))
return (SET_ERROR(ENOSPC));
- /* clone can't be over the head's refquota */
+ /*
+ * The clone can't be too much over the head's refquota.
+ *
+ * To ensure that the entire refquota can be used, we allow one
+ * transaction to exceed the the refquota. Therefore, this check
+ * needs to also allow for the space referenced to be more than the
+ * refquota. The maximum amount of space that one transaction can use
+ * on disk is DMU_MAX_ACCESS * spa_asize_inflation. Allowing this
+ * overage ensures that we are able to receive a filesystem that
+ * exceeds the refquota on the source system.
+ *
+ * So that overage is the refquota_slack we use below.
+ */
if (origin_head->ds_quota != 0 &&
dsl_dataset_phys(clone)->ds_referenced_bytes >
- origin_head->ds_quota)
+ origin_head->ds_quota + refquota_slack)
return (SET_ERROR(EDQUOT));
return (0);
@@ -2955,8 +2976,13 @@ dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone,
int64_t unused_refres_delta;
ASSERT(clone->ds_reserved == 0);
+ /*
+ * NOTE: On DEBUG kernels there could be a race between this and
+ * the check function if spa_asize_inflation is adjusted...
+ */
ASSERT(origin_head->ds_quota == 0 ||
- dsl_dataset_phys(clone)->ds_unique_bytes <= origin_head->ds_quota);
+ dsl_dataset_phys(clone)->ds_unique_bytes <= origin_head->ds_quota +
+ DMU_MAX_ACCESS * spa_asize_inflation);
ASSERT3P(clone->ds_prev, ==, origin_head->ds_prev);
/*
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c
index d26c6cd..7e3a122 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c
@@ -22,6 +22,7 @@
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/dsl_dataset.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c
index 7de9845..b897176 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c
@@ -23,6 +23,7 @@
* Copyright (c) 2012, 2015 by Delphix. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright (c) 2013 by Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
index 189ca19..30a0710 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
@@ -23,6 +23,7 @@
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/dsl_pool.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
index 4023985..d56bd13 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
+ * Copyright 2016 Gary Mills
*/
#include <sys/dsl_scan.h>
@@ -846,7 +847,16 @@ dsl_scan_ds_destroyed(dsl_dataset_t *ds, dmu_tx_t *tx)
if (scn->scn_phys.scn_bookmark.zb_objset == ds->ds_object) {
if (ds->ds_is_snapshot) {
- /* Note, scn_cur_{min,max}_txg stays the same. */
+ /*
+ * Note:
+ * - scn_cur_{min,max}_txg stays the same.
+ * - Setting the flag is not really necessary if
+ * scn_cur_max_txg == scn_max_txg, because there
+ * is nothing after this snapshot that we care
+ * about. However, we set it anyway and then
+ * ignore it when we retraverse it in
+ * dsl_scan_visitds().
+ */
scn->scn_phys.scn_bookmark.zb_objset =
dsl_dataset_phys(ds)->ds_next_snap_obj;
zfs_dbgmsg("destroying ds %llu; currently traversing; "
@@ -886,9 +896,6 @@ dsl_scan_ds_destroyed(dsl_dataset_t *ds, dmu_tx_t *tx)
zfs_dbgmsg("destroying ds %llu; in queue; removing",
(u_longlong_t)ds->ds_object);
}
- } else {
- zfs_dbgmsg("destroying ds %llu; ignoring",
- (u_longlong_t)ds->ds_object);
}
/*
@@ -1041,6 +1048,46 @@ dsl_scan_visitds(dsl_scan_t *scn, uint64_t dsobj, dmu_tx_t *tx)
VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds));
+ if (scn->scn_phys.scn_cur_min_txg >=
+ scn->scn_phys.scn_max_txg) {
+ /*
+ * This can happen if this snapshot was created after the
+ * scan started, and we already completed a previous snapshot
+ * that was created after the scan started. This snapshot
+ * only references blocks with:
+ *
+ * birth < our ds_creation_txg
+ * cur_min_txg is no less than ds_creation_txg.
+ * We have already visited these blocks.
+ * or
+ * birth > scn_max_txg
+ * The scan requested not to visit these blocks.
+ *
+ * Subsequent snapshots (and clones) can reference our
+ * blocks, or blocks with even higher birth times.
+ * Therefore we do not need to visit them either,
+ * so we do not add them to the work queue.
+ *
+ * Note that checking for cur_min_txg >= cur_max_txg
+ * is not sufficient, because in that case we may need to
+ * visit subsequent snapshots. This happens when min_txg > 0,
+ * which raises cur_min_txg. In this case we will visit
+ * this dataset but skip all of its blocks, because the
+ * rootbp's birth time is < cur_min_txg. Then we will
+ * add the next snapshots/clones to the work queue.
+ */
+ char *dsname = kmem_alloc(MAXNAMELEN, KM_SLEEP);
+ dsl_dataset_name(ds, dsname);
+ zfs_dbgmsg("scanning dataset %llu (%s) is unnecessary because "
+ "cur_min_txg (%llu) >= max_txg (%llu)",
+ dsobj, dsname,
+ scn->scn_phys.scn_cur_min_txg,
+ scn->scn_phys.scn_max_txg);
+ kmem_free(dsname, MAXNAMELEN);
+
+ goto out;
+ }
+
if (dmu_objset_from_ds(ds, &os))
goto out;
@@ -1545,7 +1592,8 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx)
}
if (err != 0)
return;
- if (!scn->scn_async_destroying && zfs_free_leak_on_eio &&
+ if (dp->dp_free_dir != NULL && !scn->scn_async_destroying &&
+ zfs_free_leak_on_eio &&
(dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes != 0 ||
dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes != 0 ||
dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes != 0)) {
@@ -1571,7 +1619,7 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx)
-dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes,
-dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes, tx);
}
- if (!scn->scn_async_destroying) {
+ if (dp->dp_free_dir != NULL && !scn->scn_async_destroying) {
/* finished; verify that space accounting went to zero */
ASSERT0(dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes);
ASSERT0(dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
index 6a20d25..41d54e0 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
index 2003692..e11dd4d 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
@@ -24,6 +24,7 @@
* Portions Copyright 2011 iXsystems, Inc
* Copyright (c) 2013 by Delphix. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
index 9caed4d..f69a5e7 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
@@ -26,6 +26,7 @@
* Copyright (c) 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
* Copyright 2013 Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/*
@@ -6343,8 +6344,7 @@ spa_sync_config_object(spa_t *spa, dmu_tx_t *tx)
spa_config_exit(spa, SCL_STATE, FTAG);
- if (spa->spa_config_syncing)
- nvlist_free(spa->spa_config_syncing);
+ nvlist_free(spa->spa_config_syncing);
spa->spa_config_syncing = config;
spa_sync_nvlist(spa, spa->spa_config_object, config, tx);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c
index be1e528..a5c17a5 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c
@@ -367,8 +367,7 @@ void
spa_config_set(spa_t *spa, nvlist_t *config)
{
mutex_enter(&spa->spa_props_lock);
- if (spa->spa_config != NULL)
- nvlist_free(spa->spa_config);
+ nvlist_free(spa->spa_config);
spa->spa_config = config;
mutex_exit(&spa->spa_props_lock);
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c
index ecd5435..8965686 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/spa.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c
index d5764bc..6080594 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c
@@ -25,6 +25,7 @@
* Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
* Copyright 2013 Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
index 226e8f7..3bbe18f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
@@ -28,6 +28,7 @@
* Copyright 2014 HybridCluster. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
* Copyright 2013 Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h
index 8a263a3..f05b2cf 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h
@@ -23,6 +23,7 @@
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
index 2865e82..19464a5 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
@@ -24,6 +24,7 @@
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _DMU_SEND_H
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
index d7df05b..766ae3c 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
@@ -24,6 +24,7 @@
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _SYS_DSL_DATASET_H
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
index 6dc2b11..105f889 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
@@ -24,6 +24,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
* Copyright 2013 Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _SYS_SPA_H
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
index 09b052e..6af259f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _SYS_ZAP_IMPL_H
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h
index 5102040..17503d8 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h
@@ -94,10 +94,8 @@ extern "C" {
#include <sys/sunddi.h>
#ifdef illumos
#include <sys/cyclic.h>
-#include <sys/callo.h>
-#else /* FreeBSD */
-#include <sys/callout.h>
#endif
+#include <sys/callo.h>
#include <sys/disp.h>
#include <machine/stdarg.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
index 2a50e19..f42df17 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
@@ -21,6 +21,8 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 by Delphix. All rights reserved.
+ * Copyright 2016 RackTop Systems.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _SYS_ZFS_IOCTL_H
@@ -124,6 +126,10 @@ typedef enum dmu_send_resume_token_version {
#define DMU_BACKUP_MAGIC 0x2F5bacbacULL
+/*
+ * Send stream flags. Bits 24-31 are reserved for vendor-specific
+ * implementations and should not be used.
+ */
#define DRR_FLAG_CLONE (1<<0)
#define DRR_FLAG_CI_DATA (1<<1)
/*
@@ -308,6 +314,7 @@ typedef struct zinject_record {
uint32_t zi_iotype;
int32_t zi_duration;
uint64_t zi_timer;
+ uint64_t zi_nlanes;
uint32_t zi_cmd;
uint32_t zi_pad;
} zinject_record_t;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
index c8e3105..3e72ec4 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#ifndef _SYS_FS_ZFS_ZNODE_H
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
index d3fe6e9..1642da0 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
index b5c666c..ac908bd 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
index eac4b90..56c821a 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
@@ -455,6 +455,7 @@ struct zio {
uint64_t io_offset;
hrtime_t io_timestamp;
+ hrtime_t io_target_timestamp;
avl_node_t io_queue_node;
avl_node_t io_offset_node;
@@ -548,6 +549,8 @@ extern int zio_wait(zio_t *zio);
extern void zio_nowait(zio_t *zio);
extern void zio_execute(zio_t *zio);
extern void zio_interrupt(zio_t *zio);
+extern void zio_delay_init(zio_t *zio);
+extern void zio_delay_interrupt(zio_t *zio);
extern zio_t *zio_walk_parents(zio_t *cio);
extern zio_t *zio_walk_children(zio_t *pio);
@@ -609,7 +612,7 @@ extern int zio_handle_fault_injection(zio_t *zio, int error);
extern int zio_handle_device_injection(vdev_t *vd, zio_t *zio, int error);
extern int zio_handle_label_injection(zio_t *zio, int error);
extern void zio_handle_ignored_writes(zio_t *zio);
-extern uint64_t zio_handle_io_delay(zio_t *zio);
+extern hrtime_t zio_handle_io_delay(zio_t *zio);
/*
* Checksum ereport functions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
index 429d31e..28ff6c9 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
@@ -24,6 +24,7 @@
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
index c397891..681a670 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
*/
@@ -691,7 +691,7 @@ vdev_disk_io_intr(buf_t *bp)
kmem_free(vb, sizeof (vdev_buf_t));
- zio_interrupt(zio);
+ zio_delay_interrupt(zio);
}
static void
@@ -797,6 +797,7 @@ vdev_disk_io_start(zio_t *zio)
}
ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE);
+ zio->io_target_timestamp = zio_handle_io_delay(zio);
vb = kmem_alloc(sizeof (vdev_buf_t), KM_SLEEP);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
index 01ef756..8228af1 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2015 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -188,6 +188,7 @@ vdev_file_io_start(zio_t *zio)
}
ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE);
+ zio->io_target_timestamp = zio_handle_io_delay(zio);
zio->io_error = vn_rdwr(zio->io_type == ZIO_TYPE_READ ?
UIO_READ : UIO_WRITE, vp, zio->io_data, zio->io_size,
@@ -196,7 +197,7 @@ vdev_file_io_start(zio_t *zio)
if (resid != 0 && zio->io_error == 0)
zio->io_error = ENOSPC;
- zio_interrupt(zio);
+ zio_delay_interrupt(zio);
#ifdef illumos
VERIFY3U(taskq_dispatch(system_taskq, vdev_file_io_strategy, bp,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
index 3df15e2..1fd9623 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
@@ -811,7 +811,8 @@ vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
*/
*logical_ashift = highbit(MAX(pp->sectorsize, SPA_MINBLOCKSIZE)) - 1;
*physical_ashift = 0;
- if (pp->stripesize)
+ if (pp->stripesize > (1 << *logical_ashift) && ISP2(pp->stripesize) &&
+ pp->stripesize <= (1 << SPA_MAXASHIFT) && pp->stripeoffset == 0)
*physical_ashift = highbit(pp->stripesize) - 1;
/*
@@ -885,7 +886,7 @@ vdev_geom_io_intr(struct bio *bp)
break;
}
g_destroy_bio(bp);
- zio_interrupt(zio);
+ zio_delay_interrupt(zio);
}
static void
@@ -948,6 +949,7 @@ sendreq:
switch (zio->io_type) {
case ZIO_TYPE_READ:
case ZIO_TYPE_WRITE:
+ zio->io_target_timestamp = zio_handle_io_delay(zio);
bp->bio_cmd = zio->io_type == ZIO_TYPE_READ ? BIO_READ : BIO_WRITE;
bp->bio_data = zio->io_data;
bp->bio_offset = zio->io_offset;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c
index 8981b10..112d698 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c
@@ -25,6 +25,7 @@
/*
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
@@ -871,9 +872,6 @@ vdev_queue_io_done(zio_t *zio)
vdev_queue_t *vq = &zio->io_vd->vdev_queue;
zio_t *nio;
- if (zio_injection_enabled)
- delay(SEC_TO_TICK(zio_handle_io_delay(zio)));
-
mutex_enter(&vq->vq_lock);
vdev_queue_pending_remove(vq, zio);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
index 6b538cf..a755f3a 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
@@ -23,6 +23,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zfs_context.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c
index 8ca68b8..ea3d869 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/zio.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
index 8c6fb97..c24836e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
@@ -31,6 +31,7 @@
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
* Copyright (c) 2013 Steven Hartland. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/*
@@ -1601,8 +1602,7 @@ zfs_ioc_pool_import(zfs_cmd_t *zc)
nvlist_free(config);
- if (props)
- nvlist_free(props);
+ nvlist_free(props);
return (error);
}
@@ -3972,7 +3972,7 @@ zfs_check_settable(const char *dsname, nvpair_t *pair, cred_t *cr)
return (SET_ERROR(EINVAL));
/* check prop value is enabled in features */
- feature = zio_checksum_to_feature(intval);
+ feature = zio_checksum_to_feature(intval & ZIO_CHECKSUM_MASK);
if (feature == SPA_FEATURE_NONE)
break;
@@ -6221,6 +6221,14 @@ zfsdev_ioctl(struct cdev *dev, u_long zcmd, caddr_t arg, int flag,
goto out;
}
break;
+ case ZFS_IOCVER_RESUME:
+ if (zc_iocparm->zfs_cmd_size != sizeof(zfs_cmd_resume_t)) {
+ error = SET_ERROR(EFAULT);
+ goto out;
+ }
+ compat = B_TRUE;
+ cflag = ZFS_CMD_COMPAT_RESUME;
+ break;
case ZFS_IOCVER_EDBP:
if (zc_iocparm->zfs_cmd_size != sizeof(zfs_cmd_edbp_t)) {
error = SET_ERROR(EFAULT);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
index 30b3b52..6933ccd 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/types.h>
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
index e8bcaf5..78d3fdc 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
@@ -23,6 +23,7 @@
* Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net>.
* All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index 9df85a7..5c2b66d 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 by Delphix. All rights reserved.
* Copyright 2014 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2007 Jeremy Teo */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
index 0a985c3..04f0b6c 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2007 Jeremy Teo */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
index a8a6d65..993a468 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
index 901e618..25fba19 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
@@ -22,6 +22,7 @@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
#include <sys/sysmacros.h>
@@ -1442,6 +1443,58 @@ zio_interrupt(zio_t *zio)
zio_taskq_dispatch(zio, ZIO_TASKQ_INTERRUPT, B_FALSE);
}
+void
+zio_delay_interrupt(zio_t *zio)
+{
+ /*
+ * The timeout_generic() function isn't defined in userspace, so
+ * rather than trying to implement the function, the zio delay
+ * functionality has been disabled for userspace builds.
+ */
+
+#ifdef _KERNEL
+ /*
+ * If io_target_timestamp is zero, then no delay has been registered
+ * for this IO, thus jump to the end of this function and "skip" the
+ * delay; issuing it directly to the zio layer.
+ */
+ if (zio->io_target_timestamp != 0) {
+ hrtime_t now = gethrtime();
+
+ if (now >= zio->io_target_timestamp) {
+ /*
+ * This IO has already taken longer than the target
+ * delay to complete, so we don't want to delay it
+ * any longer; we "miss" the delay and issue it
+ * directly to the zio layer. This is likely due to
+ * the target latency being set to a value less than
+ * the underlying hardware can satisfy (e.g. delay
+ * set to 1ms, but the disks take 10ms to complete an
+ * IO request).
+ */
+
+ DTRACE_PROBE2(zio__delay__miss, zio_t *, zio,
+ hrtime_t, now);
+
+ zio_interrupt(zio);
+ } else {
+ hrtime_t diff = zio->io_target_timestamp - now;
+
+ DTRACE_PROBE3(zio__delay__hit, zio_t *, zio,
+ hrtime_t, now, hrtime_t, diff);
+
+ (void) timeout_generic(CALLOUT_NORMAL,
+ (void (*)(void *))zio_interrupt, zio, diff, 1, 0);
+ }
+
+ return;
+ }
+#endif
+
+ DTRACE_PROBE1(zio__delay__skip, zio_t *, zio);
+ zio_interrupt(zio);
+}
+
/*
* Execute the I/O pipeline until one of the following occurs:
*
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c
index 6ba64e0..dac118a 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c
@@ -138,10 +138,16 @@ zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS] = {
#endif
};
+/*
+ * The flag corresponding to the "verify" in dedup=[checksum,]verify
+ * must be cleared first, so callers should use ZIO_CHECKSUM_MASK.
+ */
spa_feature_t
zio_checksum_to_feature(enum zio_checksum cksum)
{
#ifdef illumos
+ VERIFY((cksum & ~ZIO_CHECKSUM_MASK) == 0);
+
switch (cksum) {
case ZIO_CHECKSUM_SHA512:
return (SPA_FEATURE_SHA512);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c
index 0a7f4e4..26f59af 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
*/
/*
@@ -49,15 +49,53 @@
uint32_t zio_injection_enabled;
+/*
+ * Data describing each zinject handler registered on the system, and
+ * contains the list node linking the handler in the global zinject
+ * handler list.
+ */
typedef struct inject_handler {
int zi_id;
spa_t *zi_spa;
zinject_record_t zi_record;
+ uint64_t *zi_lanes;
+ int zi_next_lane;
list_node_t zi_link;
} inject_handler_t;
+/*
+ * List of all zinject handlers registered on the system, protected by
+ * the inject_lock defined below.
+ */
static list_t inject_handlers;
+
+/*
+ * This protects insertion into, and traversal of, the inject handler
+ * list defined above; as well as the inject_delay_count. Any time a
+ * handler is inserted or removed from the list, this lock should be
+ * taken as a RW_WRITER; and any time traversal is done over the list
+ * (without modification to it) this lock should be taken as a RW_READER.
+ */
static krwlock_t inject_lock;
+
+/*
+ * This holds the number of zinject delay handlers that have been
+ * registered on the system. It is protected by the inject_lock defined
+ * above. Thus modifications to this count must be a RW_WRITER of the
+ * inject_lock, and reads of this count must be (at least) a RW_READER
+ * of the lock.
+ */
+static int inject_delay_count = 0;
+
+/*
+ * This lock is used only in zio_handle_io_delay(), refer to the comment
+ * in that function for more details.
+ */
+static kmutex_t inject_delay_mtx;
+
+/*
+ * Used to assign unique identifying numbers to each new zinject handler.
+ */
static int inject_next_id = 1;
/*
@@ -360,32 +398,164 @@ spa_handle_ignored_writes(spa_t *spa)
rw_exit(&inject_lock);
}
-uint64_t
+hrtime_t
zio_handle_io_delay(zio_t *zio)
{
vdev_t *vd = zio->io_vd;
- inject_handler_t *handler;
- uint64_t seconds = 0;
-
- if (zio_injection_enabled == 0)
- return (0);
+ inject_handler_t *min_handler = NULL;
+ hrtime_t min_target = 0;
rw_enter(&inject_lock, RW_READER);
- for (handler = list_head(&inject_handlers); handler != NULL;
- handler = list_next(&inject_handlers, handler)) {
+ /*
+ * inject_delay_count is a subset of zio_injection_enabled that
+ * is only incremented for delay handlers. These checks are
+ * mainly added to remind the reader why we're not explicitly
+ * checking zio_injection_enabled like the other functions.
+ */
+ IMPLY(inject_delay_count > 0, zio_injection_enabled > 0);
+ IMPLY(zio_injection_enabled == 0, inject_delay_count == 0);
+
+ /*
+ * If there aren't any inject delay handlers registered, then we
+ * can short circuit and simply return 0 here. A value of zero
+ * informs zio_delay_interrupt() that this request should not be
+ * delayed. This short circuit keeps us from acquiring the
+ * inject_delay_mutex unnecessarily.
+ */
+ if (inject_delay_count == 0) {
+ rw_exit(&inject_lock);
+ return (0);
+ }
+
+ /*
+ * Each inject handler has a number of "lanes" associated with
+ * it. Each lane is able to handle requests independently of one
+ * another, and at a latency defined by the inject handler
+ * record's zi_timer field. Thus if a handler in configured with
+ * a single lane with a 10ms latency, it will delay requests
+ * such that only a single request is completed every 10ms. So,
+ * if more than one request is attempted per each 10ms interval,
+ * the average latency of the requests will be greater than
+ * 10ms; but if only a single request is submitted each 10ms
+ * interval the average latency will be 10ms.
+ *
+ * We need to acquire this mutex to prevent multiple concurrent
+ * threads being assigned to the same lane of a given inject
+ * handler. The mutex allows us to perform the following two
+ * operations atomically:
+ *
+ * 1. determine the minimum handler and minimum target
+ * value of all the possible handlers
+ * 2. update that minimum handler's lane array
+ *
+ * Without atomicity, two (or more) threads could pick the same
+ * lane in step (1), and then conflict with each other in step
+ * (2). This could allow a single lane handler to process
+ * multiple requests simultaneously, which shouldn't be possible.
+ */
+ mutex_enter(&inject_delay_mtx);
+ for (inject_handler_t *handler = list_head(&inject_handlers);
+ handler != NULL; handler = list_next(&inject_handlers, handler)) {
if (handler->zi_record.zi_cmd != ZINJECT_DELAY_IO)
continue;
- if (vd->vdev_guid == handler->zi_record.zi_guid) {
- seconds = handler->zi_record.zi_timer;
- break;
+ if (vd->vdev_guid != handler->zi_record.zi_guid)
+ continue;
+
+ /*
+ * Defensive; should never happen as the array allocation
+ * occurs prior to inserting this handler on the list.
+ */
+ ASSERT3P(handler->zi_lanes, !=, NULL);
+
+ /*
+ * This should never happen, the zinject command should
+ * prevent a user from setting an IO delay with zero lanes.
+ */
+ ASSERT3U(handler->zi_record.zi_nlanes, !=, 0);
+
+ ASSERT3U(handler->zi_record.zi_nlanes, >,
+ handler->zi_next_lane);
+
+ /*
+ * We want to issue this IO to the lane that will become
+ * idle the soonest, so we compare the soonest this
+ * specific handler can complete the IO with all other
+ * handlers, to find the lowest value of all possible
+ * lanes. We then use this lane to submit the request.
+ *
+ * Since each handler has a constant value for its
+ * delay, we can just use the "next" lane for that
+ * handler; as it will always be the lane with the
+ * lowest value for that particular handler (i.e. the
+ * lane that will become idle the soonest). This saves a
+ * scan of each handler's lanes array.
+ *
+ * There's two cases to consider when determining when
+ * this specific IO request should complete. If this
+ * lane is idle, we want to "submit" the request now so
+ * it will complete after zi_timer milliseconds. Thus,
+ * we set the target to now + zi_timer.
+ *
+ * If the lane is busy, we want this request to complete
+ * zi_timer milliseconds after the lane becomes idle.
+ * Since the 'zi_lanes' array holds the time at which
+ * each lane will become idle, we use that value to
+ * determine when this request should complete.
+ */
+ hrtime_t idle = handler->zi_record.zi_timer + gethrtime();
+ hrtime_t busy = handler->zi_record.zi_timer +
+ handler->zi_lanes[handler->zi_next_lane];
+ hrtime_t target = MAX(idle, busy);
+
+ if (min_handler == NULL) {
+ min_handler = handler;
+ min_target = target;
+ continue;
}
+ ASSERT3P(min_handler, !=, NULL);
+ ASSERT3U(min_target, !=, 0);
+
+ /*
+ * We don't yet increment the "next lane" variable since
+ * we still might find a lower value lane in another
+ * handler during any remaining iterations. Once we're
+ * sure we've selected the absolute minimum, we'll claim
+ * the lane and increment the handler's "next lane"
+ * field below.
+ */
+
+ if (target < min_target) {
+ min_handler = handler;
+ min_target = target;
+ }
}
+
+ /*
+ * 'min_handler' will be NULL if no IO delays are registered for
+ * this vdev, otherwise it will point to the handler containing
+ * the lane that will become idle the soonest.
+ */
+ if (min_handler != NULL) {
+ ASSERT3U(min_target, !=, 0);
+ min_handler->zi_lanes[min_handler->zi_next_lane] = min_target;
+
+ /*
+ * If we've used all possible lanes for this handler,
+ * loop back and start using the first lane again;
+ * otherwise, just increment the lane index.
+ */
+ min_handler->zi_next_lane = (min_handler->zi_next_lane + 1) %
+ min_handler->zi_record.zi_nlanes;
+ }
+
+ mutex_exit(&inject_delay_mtx);
rw_exit(&inject_lock);
- return (seconds);
+
+ return (min_target);
}
/*
@@ -409,6 +579,24 @@ zio_inject_fault(char *name, int flags, int *id, zinject_record_t *record)
if ((error = spa_reset(name)) != 0)
return (error);
+ if (record->zi_cmd == ZINJECT_DELAY_IO) {
+ /*
+ * A value of zero for the number of lanes or for the
+ * delay time doesn't make sense.
+ */
+ if (record->zi_timer == 0 || record->zi_nlanes == 0)
+ return (SET_ERROR(EINVAL));
+
+ /*
+ * The number of lanes is directly mapped to the size of
+ * an array used by the handler. Thus, to ensure the
+ * user doesn't trigger an allocation that's "too large"
+ * we cap the number of lanes here.
+ */
+ if (record->zi_nlanes >= UINT16_MAX)
+ return (SET_ERROR(EINVAL));
+ }
+
if (!(flags & ZINJECT_NULL)) {
/*
* spa_inject_ref() will add an injection reference, which will
@@ -420,11 +608,34 @@ zio_inject_fault(char *name, int flags, int *id, zinject_record_t *record)
handler = kmem_alloc(sizeof (inject_handler_t), KM_SLEEP);
+ handler->zi_spa = spa;
+ handler->zi_record = *record;
+
+ if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) {
+ handler->zi_lanes = kmem_zalloc(
+ sizeof (*handler->zi_lanes) *
+ handler->zi_record.zi_nlanes, KM_SLEEP);
+ handler->zi_next_lane = 0;
+ } else {
+ handler->zi_lanes = NULL;
+ handler->zi_next_lane = 0;
+ }
+
rw_enter(&inject_lock, RW_WRITER);
+ /*
+ * We can't move this increment into the conditional
+ * above because we need to hold the RW_WRITER lock of
+ * inject_lock, and we don't want to hold that while
+ * allocating the handler's zi_lanes array.
+ */
+ if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) {
+ ASSERT3S(inject_delay_count, >=, 0);
+ inject_delay_count++;
+ ASSERT3S(inject_delay_count, >, 0);
+ }
+
*id = handler->zi_id = inject_next_id++;
- handler->zi_spa = spa;
- handler->zi_record = *record;
list_insert_tail(&inject_handlers, handler);
atomic_inc_32(&zio_injection_enabled);
@@ -502,9 +713,23 @@ zio_clear_fault(int id)
return (SET_ERROR(ENOENT));
}
+ if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) {
+ ASSERT3S(inject_delay_count, >, 0);
+ inject_delay_count--;
+ ASSERT3S(inject_delay_count, >=, 0);
+ }
+
list_remove(&inject_handlers, handler);
rw_exit(&inject_lock);
+ if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) {
+ ASSERT3P(handler->zi_lanes, !=, NULL);
+ kmem_free(handler->zi_lanes, sizeof (*handler->zi_lanes) *
+ handler->zi_record.zi_nlanes);
+ } else {
+ ASSERT3P(handler->zi_lanes, ==, NULL);
+ }
+
spa_inject_delref(handler->zi_spa);
kmem_free(handler, sizeof (inject_handler_t));
atomic_dec_32(&zio_injection_enabled);
@@ -516,6 +741,7 @@ void
zio_inject_init(void)
{
rw_init(&inject_lock, NULL, RW_DEFAULT, NULL);
+ mutex_init(&inject_delay_mtx, NULL, MUTEX_DEFAULT, NULL);
list_create(&inject_handlers, sizeof (inject_handler_t),
offsetof(inject_handler_t, zi_link));
}
@@ -524,5 +750,6 @@ void
zio_inject_fini(void)
{
list_destroy(&inject_handlers);
+ mutex_destroy(&inject_delay_mtx);
rw_destroy(&inject_lock);
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
index 5eb9df1..0c3cfce 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
@@ -29,6 +29,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2011 Martin Matuska <mm@FreeBSD.org> */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h
index cae9193..c104e79 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h
@@ -206,6 +206,10 @@ extern fasttrap_scrspace_t *fasttrap_scraddr(struct thread *,
extern dtrace_id_t fasttrap_probe_id;
extern fasttrap_hash_t fasttrap_tpoints;
+#ifndef illumos
+extern struct rmlock fasttrap_tp_lock;
+#endif
+
#define FASTTRAP_TPOINTS_INDEX(pid, pc) \
(((pc) / sizeof (fasttrap_instr_t) + (pid)) & fasttrap_tpoints.fth_mask)
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
index 809ce9b..3818616 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
@@ -25,6 +25,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
* Copyright (c) 2012, Martin Matuska <mm@FreeBSD.org>. All rights reserved.
+ * Copyright (c) 2014 Integros [integros.com]
*/
/* Portions Copyright 2010 Robert Milkowski */
diff --git a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
index 4c9fc0f..5b3f485 100644
--- a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
+++ b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
@@ -46,6 +46,7 @@
#include <cddl/dev/dtrace/dtrace_cddl.h>
#include <sys/types.h>
#include <sys/proc.h>
+#include <sys/rmlock.h>
#include <sys/dtrace_bsd.h>
#include <cddl/dev/dtrace/x86/regset.h>
#include <machine/segments.h>
@@ -737,11 +738,13 @@ fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
fasttrap_id_t *id;
#ifdef illumos
kmutex_t *pid_mtx;
-#endif
-#ifdef illumos
pid_mtx = &cpu_core[CPU->cpu_id].cpuc_pid_lock;
mutex_enter(pid_mtx);
+#else
+ struct rm_priotracker tracker;
+
+ rm_rlock(&fasttrap_tp_lock, &tracker);
#endif
bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
@@ -759,6 +762,8 @@ fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
if (tp == NULL) {
#ifdef illumos
mutex_exit(pid_mtx);
+#else
+ rm_runlock(&fasttrap_tp_lock, &tracker);
#endif
return;
}
@@ -782,6 +787,8 @@ fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
#ifdef illumos
mutex_exit(pid_mtx);
+#else
+ rm_runlock(&fasttrap_tp_lock, &tracker);
#endif
}
@@ -990,6 +997,7 @@ fasttrap_pid_probe(struct reg *rp)
{
proc_t *p = curproc;
#ifndef illumos
+ struct rm_priotracker tracker;
proc_t *pp;
#endif
uintptr_t pc = rp->r_rip - 1;
@@ -1049,8 +1057,7 @@ fasttrap_pid_probe(struct reg *rp)
sx_sunlock(&proctree_lock);
pp = NULL;
- PROC_LOCK(p);
- _PHOLD(p);
+ rm_rlock(&fasttrap_tp_lock, &tracker);
#endif
bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
@@ -1073,8 +1080,7 @@ fasttrap_pid_probe(struct reg *rp)
#ifdef illumos
mutex_exit(pid_mtx);
#else
- _PRELE(p);
- PROC_UNLOCK(p);
+ rm_runlock(&fasttrap_tp_lock, &tracker);
#endif
return (-1);
}
@@ -1200,7 +1206,7 @@ fasttrap_pid_probe(struct reg *rp)
#ifdef illumos
mutex_exit(pid_mtx);
#else
- PROC_UNLOCK(p);
+ rm_runlock(&fasttrap_tp_lock, &tracker);
#endif
tp = &tp_local;
@@ -1813,7 +1819,6 @@ done:
#ifndef illumos
PROC_LOCK(p);
proc_write_regs(curthread, rp);
- _PRELE(p);
PROC_UNLOCK(p);
#endif
diff --git a/sys/cddl/contrib/opensolaris/uts/powerpc/dtrace/fasttrap_isa.c b/sys/cddl/contrib/opensolaris/uts/powerpc/dtrace/fasttrap_isa.c
index 8e4c647..e8dd684 100644
--- a/sys/cddl/contrib/opensolaris/uts/powerpc/dtrace/fasttrap_isa.c
+++ b/sys/cddl/contrib/opensolaris/uts/powerpc/dtrace/fasttrap_isa.c
@@ -33,6 +33,7 @@
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/ptrace.h>
+#include <sys/rmlock.h>
#include <sys/sysent.h>
#define OP(x) ((x) >> 26)
@@ -288,10 +289,12 @@ static void
fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
uintptr_t new_pc)
{
+ struct rm_priotracker tracker;
fasttrap_tracepoint_t *tp;
fasttrap_bucket_t *bucket;
fasttrap_id_t *id;
+ rm_rlock(&fasttrap_tp_lock, &tracker);
bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
for (tp = bucket->ftb_data; tp != NULL; tp = tp->ftt_next) {
@@ -306,6 +309,7 @@ fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
* is not essential to the correct execution of the process.
*/
if (tp == NULL) {
+ rm_runlock(&fasttrap_tp_lock, &tracker);
return;
}
@@ -323,6 +327,7 @@ fasttrap_return_common(struct reg *rp, uintptr_t pc, pid_t pid,
pc - id->fti_probe->ftp_faddr,
rp->fixreg[3], rp->fixreg[4], 0, 0);
}
+ rm_runlock(&fasttrap_tp_lock, &tracker);
}
@@ -351,6 +356,7 @@ fasttrap_branch_taken(int bo, int bi, struct reg *regs)
int
fasttrap_pid_probe(struct reg *rp)
{
+ struct rm_priotracker tracker;
proc_t *p = curproc;
uintptr_t pc = rp->pc;
uintptr_t new_pc = 0;
@@ -381,8 +387,7 @@ fasttrap_pid_probe(struct reg *rp)
curthread->t_dtrace_scrpc = 0;
curthread->t_dtrace_astpc = 0;
-
- PROC_LOCK(p);
+ rm_rlock(&fasttrap_tp_lock, &tracker);
pid = p->p_pid;
bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
@@ -401,7 +406,7 @@ fasttrap_pid_probe(struct reg *rp)
* fasttrap_ioctl), or somehow we have mislaid this tracepoint.
*/
if (tp == NULL) {
- PROC_UNLOCK(p);
+ rm_runlock(&fasttrap_tp_lock, &tracker);
return (-1);
}
@@ -455,7 +460,7 @@ fasttrap_pid_probe(struct reg *rp)
* tracepoint again later if we need to light up any return probes.
*/
tp_local = *tp;
- PROC_UNLOCK(p);
+ rm_runlock(&fasttrap_tp_lock, &tracker);
tp = &tp_local;
/*
diff --git a/sys/cddl/contrib/opensolaris/uts/sparc/dtrace/fasttrap_isa.c b/sys/cddl/contrib/opensolaris/uts/sparc/dtrace/fasttrap_isa.c
deleted file mode 100644
index 43315a0..0000000
--- a/sys/cddl/contrib/opensolaris/uts/sparc/dtrace/fasttrap_isa.c
+++ /dev/null
@@ -1,1595 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/fasttrap_isa.h>
-#include <sys/fasttrap_impl.h>
-#include <sys/dtrace.h>
-#include <sys/dtrace_impl.h>
-#include <sys/cmn_err.h>
-#include <sys/frame.h>
-#include <sys/stack.h>
-#include <sys/sysmacros.h>
-#include <sys/trap.h>
-
-#include <v9/sys/machpcb.h>
-#include <v9/sys/privregs.h>
-
-/*
- * Lossless User-Land Tracing on SPARC
- * -----------------------------------
- *
- * The Basic Idea
- *
- * The most important design constraint is, of course, correct execution of
- * the user thread above all else. The next most important goal is rapid
- * execution. We combine execution of instructions in user-land with
- * emulation of certain instructions in the kernel to aim for complete
- * correctness and maximal performance.
- *
- * We take advantage of the split PC/NPC architecture to speed up logical
- * single-stepping; when we copy an instruction out to the scratch space in
- * the ulwp_t structure (held in the %g7 register on SPARC), we can
- * effectively single step by setting the PC to our scratch space and leaving
- * the NPC alone. This executes the replaced instruction and then continues
- * on without having to reenter the kernel as with single- stepping. The
- * obvious caveat is for instructions whose execution is PC dependant --
- * branches, call and link instructions (call and jmpl), and the rdpc
- * instruction. These instructions cannot be executed in the manner described
- * so they must be emulated in the kernel.
- *
- * Emulation for this small set of instructions if fairly simple; the most
- * difficult part being emulating branch conditions.
- *
- *
- * A Cache Heavy Portfolio
- *
- * It's important to note at this time that copying an instruction out to the
- * ulwp_t scratch space in user-land is rather complicated. SPARC has
- * separate data and instruction caches so any writes to the D$ (using a
- * store instruction for example) aren't necessarily reflected in the I$.
- * The flush instruction can be used to synchronize the two and must be used
- * for any self-modifying code, but the flush instruction only applies to the
- * primary address space (the absence of a flusha analogue to the flush
- * instruction that accepts an ASI argument is an obvious omission from SPARC
- * v9 where the notion of the alternate address space was introduced on
- * SPARC). To correctly copy out the instruction we must use a block store
- * that doesn't allocate in the D$ and ensures synchronization with the I$;
- * see dtrace_blksuword32() for the implementation (this function uses
- * ASI_BLK_COMMIT_S to write a block through the secondary ASI in the manner
- * described). Refer to the UltraSPARC I/II manual for details on the
- * ASI_BLK_COMMIT_S ASI.
- *
- *
- * Return Subtleties
- *
- * When we're firing a return probe we need to expose the value returned by
- * the function being traced. Since the function can set the return value
- * in its last instruction, we need to fire the return probe only _after_
- * the effects of the instruction are apparent. For instructions that we
- * emulate, we can call dtrace_probe() after we've performed the emulation;
- * for instructions that we execute after we return to user-land, we set
- * %pc to the instruction we copied out (as described above) and set %npc
- * to a trap instruction stashed in the ulwp_t structure. After the traced
- * instruction is executed, the trap instruction returns control to the
- * kernel where we can fire the return probe.
- *
- * This need for a second trap in cases where we execute the traced
- * instruction makes it all the more important to emulate the most common
- * instructions to avoid the second trip in and out of the kernel.
- *
- *
- * Making it Fast
- *
- * Since copying out an instruction is neither simple nor inexpensive for the
- * CPU, we should attempt to avoid doing it in as many cases as possible.
- * Since function entry and return are usually the most interesting probe
- * sites, we attempt to tune the performance of the fasttrap provider around
- * instructions typically in those places.
- *
- * Looking at a bunch of functions in libraries and executables reveals that
- * most functions begin with either a save or a sethi (to setup a larger
- * argument to the save) and end with a restore or an or (in the case of leaf
- * functions). To try to improve performance, we emulate all of these
- * instructions in the kernel.
- *
- * The save and restore instructions are a little tricky since they perform
- * register window maniplulation. Rather than trying to tinker with the
- * register windows from the kernel, we emulate the implicit add that takes
- * place as part of those instructions and set the %pc to point to a simple
- * save or restore we've hidden in the ulwp_t structure. If we're in a return
- * probe so want to make it seem as though the tracepoint has been completely
- * executed we need to remember that we've pulled this trick with restore and
- * pull registers from the previous window (the one that we'll switch to once
- * the simple store instruction is executed) rather than the current one. This
- * is why in the case of emulating a restore we set the DTrace CPU flag
- * CPU_DTRACE_FAKERESTORE before calling dtrace_probe() for the return probes
- * (see fasttrap_return_common()).
- */
-
-#define OP(x) ((x) >> 30)
-#define OP2(x) (((x) >> 22) & 0x07)
-#define OP3(x) (((x) >> 19) & 0x3f)
-#define RCOND(x) (((x) >> 25) & 0x07)
-#define COND(x) (((x) >> 25) & 0x0f)
-#define A(x) (((x) >> 29) & 0x01)
-#define I(x) (((x) >> 13) & 0x01)
-#define RD(x) (((x) >> 25) & 0x1f)
-#define RS1(x) (((x) >> 14) & 0x1f)
-#define RS2(x) (((x) >> 0) & 0x1f)
-#define CC(x) (((x) >> 20) & 0x03)
-#define DISP16(x) ((((x) >> 6) & 0xc000) | ((x) & 0x3fff))
-#define DISP22(x) ((x) & 0x3fffff)
-#define DISP19(x) ((x) & 0x7ffff)
-#define DISP30(x) ((x) & 0x3fffffff)
-#define SW_TRAP(x) ((x) & 0x7f)
-
-#define OP3_OR 0x02
-#define OP3_RD 0x28
-#define OP3_JMPL 0x38
-#define OP3_RETURN 0x39
-#define OP3_TCC 0x3a
-#define OP3_SAVE 0x3c
-#define OP3_RESTORE 0x3d
-
-#define OP3_PREFETCH 0x2d
-#define OP3_CASA 0x3c
-#define OP3_PREFETCHA 0x3d
-#define OP3_CASXA 0x3e
-
-#define OP2_ILLTRAP 0x0
-#define OP2_BPcc 0x1
-#define OP2_Bicc 0x2
-#define OP2_BPr 0x3
-#define OP2_SETHI 0x4
-#define OP2_FBPfcc 0x5
-#define OP2_FBfcc 0x6
-
-#define R_G0 0
-#define R_O0 8
-#define R_SP 14
-#define R_I0 24
-#define R_I1 25
-#define R_I2 26
-#define R_I3 27
-#define R_I4 28
-
-/*
- * Check the comment in fasttrap.h when changing these offsets or adding
- * new instructions.
- */
-#define FASTTRAP_OFF_SAVE 64
-#define FASTTRAP_OFF_RESTORE 68
-#define FASTTRAP_OFF_FTRET 72
-#define FASTTRAP_OFF_RETURN 76
-
-#define BREAKPOINT_INSTR 0x91d02001 /* ta 1 */
-
-/*
- * Tunable to let users turn off the fancy save instruction optimization.
- * If a program is non-ABI compliant, there's a possibility that the save
- * instruction optimization could cause an error.
- */
-int fasttrap_optimize_save = 1;
-
-static uint64_t
-fasttrap_anarg(struct regs *rp, int argno)
-{
- uint64_t value;
-
- if (argno < 6)
- return ((&rp->r_o0)[argno]);
-
- if (curproc->p_model == DATAMODEL_NATIVE) {
- struct frame *fr = (struct frame *)(rp->r_sp + STACK_BIAS);
-
- DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
- value = dtrace_fulword(&fr->fr_argd[argno]);
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT | CPU_DTRACE_BADADDR |
- CPU_DTRACE_BADALIGN);
- } else {
- struct frame32 *fr = (struct frame32 *)rp->r_sp;
-
- DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
- value = dtrace_fuword32(&fr->fr_argd[argno]);
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT | CPU_DTRACE_BADADDR |
- CPU_DTRACE_BADALIGN);
- }
-
- return (value);
-}
-
-static ulong_t fasttrap_getreg(struct regs *, uint_t);
-static void fasttrap_putreg(struct regs *, uint_t, ulong_t);
-
-static void
-fasttrap_usdt_args(fasttrap_probe_t *probe, struct regs *rp,
- uint_t fake_restore, int argc, uintptr_t *argv)
-{
- int i, x, cap = MIN(argc, probe->ftp_nargs);
- int inc = (fake_restore ? 16 : 0);
-
- /*
- * The only way we'll hit the fake_restore case is if a USDT probe is
- * invoked as a tail-call. While it wouldn't be incorrect, we can
- * avoid a call to fasttrap_getreg(), and safely use rp->r_sp
- * directly since a tail-call can't be made if the invoked function
- * would use the argument dump space (i.e. if there were more than
- * 6 arguments). We take this shortcut because unconditionally rooting
- * around for R_FP (R_SP + 16) would be unnecessarily painful.
- */
-
- if (curproc->p_model == DATAMODEL_NATIVE) {
- struct frame *fr = (struct frame *)(rp->r_sp + STACK_BIAS);
- uintptr_t v;
-
- for (i = 0; i < cap; i++) {
- x = probe->ftp_argmap[i];
-
- if (x < 6)
- argv[i] = fasttrap_getreg(rp, R_O0 + x + inc);
- else if (fasttrap_fulword(&fr->fr_argd[x], &v) != 0)
- argv[i] = 0;
- }
-
- } else {
- struct frame32 *fr = (struct frame32 *)rp->r_sp;
- uint32_t v;
-
- for (i = 0; i < cap; i++) {
- x = probe->ftp_argmap[i];
-
- if (x < 6)
- argv[i] = fasttrap_getreg(rp, R_O0 + x + inc);
- else if (fasttrap_fuword32(&fr->fr_argd[x], &v) != 0)
- argv[i] = 0;
- }
- }
-
- for (; i < argc; i++) {
- argv[i] = 0;
- }
-}
-
-static void
-fasttrap_return_common(struct regs *rp, uintptr_t pc, pid_t pid,
- uint_t fake_restore)
-{
- fasttrap_tracepoint_t *tp;
- fasttrap_bucket_t *bucket;
- fasttrap_id_t *id;
- kmutex_t *pid_mtx;
- dtrace_icookie_t cookie;
-
- pid_mtx = &cpu_core[CPU->cpu_id].cpuc_pid_lock;
- mutex_enter(pid_mtx);
- bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
-
- for (tp = bucket->ftb_data; tp != NULL; tp = tp->ftt_next) {
- if (pid == tp->ftt_pid && pc == tp->ftt_pc &&
- tp->ftt_proc->ftpc_acount != 0)
- break;
- }
-
- /*
- * Don't sweat it if we can't find the tracepoint again; unlike
- * when we're in fasttrap_pid_probe(), finding the tracepoint here
- * is not essential to the correct execution of the process.
- */
- if (tp == NULL || tp->ftt_retids == NULL) {
- mutex_exit(pid_mtx);
- return;
- }
-
- for (id = tp->ftt_retids; id != NULL; id = id->fti_next) {
- fasttrap_probe_t *probe = id->fti_probe;
-
- if (id->fti_ptype == DTFTP_POST_OFFSETS) {
- if (probe->ftp_argmap != NULL && fake_restore) {
- uintptr_t t[5];
-
- fasttrap_usdt_args(probe, rp, fake_restore,
- sizeof (t) / sizeof (t[0]), t);
-
- cookie = dtrace_interrupt_disable();
- DTRACE_CPUFLAG_SET(CPU_DTRACE_FAKERESTORE);
- dtrace_probe(probe->ftp_id, t[0], t[1],
- t[2], t[3], t[4]);
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_FAKERESTORE);
- dtrace_interrupt_enable(cookie);
-
- } else if (probe->ftp_argmap != NULL) {
- uintptr_t t[5];
-
- fasttrap_usdt_args(probe, rp, fake_restore,
- sizeof (t) / sizeof (t[0]), t);
-
- dtrace_probe(probe->ftp_id, t[0], t[1],
- t[2], t[3], t[4]);
-
- } else if (fake_restore) {
- uintptr_t arg0 = fasttrap_getreg(rp, R_I0);
- uintptr_t arg1 = fasttrap_getreg(rp, R_I1);
- uintptr_t arg2 = fasttrap_getreg(rp, R_I2);
- uintptr_t arg3 = fasttrap_getreg(rp, R_I3);
- uintptr_t arg4 = fasttrap_getreg(rp, R_I4);
-
- cookie = dtrace_interrupt_disable();
- DTRACE_CPUFLAG_SET(CPU_DTRACE_FAKERESTORE);
- dtrace_probe(probe->ftp_id, arg0, arg1,
- arg2, arg3, arg4);
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_FAKERESTORE);
- dtrace_interrupt_enable(cookie);
-
- } else {
- dtrace_probe(probe->ftp_id, rp->r_o0, rp->r_o1,
- rp->r_o2, rp->r_o3, rp->r_o4);
- }
-
- continue;
- }
-
- /*
- * If this is only a possible return point, we must
- * be looking at a potential tail call in leaf context.
- * If the %npc is still within this function, then we
- * must have misidentified a jmpl as a tail-call when it
- * is, in fact, part of a jump table. It would be nice to
- * remove this tracepoint, but this is neither the time
- * nor the place.
- */
- if ((tp->ftt_flags & FASTTRAP_F_RETMAYBE) &&
- rp->r_npc - probe->ftp_faddr < probe->ftp_fsize)
- continue;
-
- /*
- * It's possible for a function to branch to the delay slot
- * of an instruction that we've identified as a return site.
- * We can dectect this spurious return probe activation by
- * observing that in this case %npc will be %pc + 4 and %npc
- * will be inside the current function (unless the user is
- * doing _crazy_ instruction picking in which case there's
- * very little we can do). The second check is important
- * in case the last instructions of a function make a tail-
- * call to the function located immediately subsequent.
- */
- if (rp->r_npc == rp->r_pc + 4 &&
- rp->r_npc - probe->ftp_faddr < probe->ftp_fsize)
- continue;
-
- /*
- * The first argument is the offset of return tracepoint
- * in the function; the remaining arguments are the return
- * values.
- *
- * If fake_restore is set, we need to pull the return values
- * out of the %i's rather than the %o's -- a little trickier.
- */
- if (!fake_restore) {
- dtrace_probe(probe->ftp_id, pc - probe->ftp_faddr,
- rp->r_o0, rp->r_o1, rp->r_o2, rp->r_o3);
- } else {
- uintptr_t arg0 = fasttrap_getreg(rp, R_I0);
- uintptr_t arg1 = fasttrap_getreg(rp, R_I1);
- uintptr_t arg2 = fasttrap_getreg(rp, R_I2);
- uintptr_t arg3 = fasttrap_getreg(rp, R_I3);
-
- cookie = dtrace_interrupt_disable();
- DTRACE_CPUFLAG_SET(CPU_DTRACE_FAKERESTORE);
- dtrace_probe(probe->ftp_id, pc - probe->ftp_faddr,
- arg0, arg1, arg2, arg3);
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_FAKERESTORE);
- dtrace_interrupt_enable(cookie);
- }
- }
-
- mutex_exit(pid_mtx);
-}
-
-int
-fasttrap_pid_probe(struct regs *rp)
-{
- proc_t *p = curproc;
- fasttrap_tracepoint_t *tp, tp_local;
- fasttrap_id_t *id;
- pid_t pid;
- uintptr_t pc = rp->r_pc;
- uintptr_t npc = rp->r_npc;
- uintptr_t orig_pc = pc;
- fasttrap_bucket_t *bucket;
- kmutex_t *pid_mtx;
- uint_t fake_restore = 0, is_enabled = 0;
- dtrace_icookie_t cookie;
-
- /*
- * It's possible that a user (in a veritable orgy of bad planning)
- * could redirect this thread's flow of control before it reached the
- * return probe fasttrap. In this case we need to kill the process
- * since it's in a unrecoverable state.
- */
- if (curthread->t_dtrace_step) {
- ASSERT(curthread->t_dtrace_on);
- fasttrap_sigtrap(p, curthread, pc);
- return (0);
- }
-
- /*
- * Clear all user tracing flags.
- */
- curthread->t_dtrace_ft = 0;
- curthread->t_dtrace_pc = 0;
- curthread->t_dtrace_npc = 0;
- curthread->t_dtrace_scrpc = 0;
- curthread->t_dtrace_astpc = 0;
-
- /*
- * Treat a child created by a call to vfork(2) as if it were its
- * parent. We know that there's only one thread of control in such a
- * process: this one.
- */
- while (p->p_flag & SVFORK) {
- p = p->p_parent;
- }
-
- pid = p->p_pid;
- pid_mtx = &cpu_core[CPU->cpu_id].cpuc_pid_lock;
- mutex_enter(pid_mtx);
- bucket = &fasttrap_tpoints.fth_table[FASTTRAP_TPOINTS_INDEX(pid, pc)];
-
- /*
- * Lookup the tracepoint that the process just hit.
- */
- for (tp = bucket->ftb_data; tp != NULL; tp = tp->ftt_next) {
- if (pid == tp->ftt_pid && pc == tp->ftt_pc &&
- tp->ftt_proc->ftpc_acount != 0)
- break;
- }
-
- /*
- * If we couldn't find a matching tracepoint, either a tracepoint has
- * been inserted without using the pid<pid> ioctl interface (see
- * fasttrap_ioctl), or somehow we have mislaid this tracepoint.
- */
- if (tp == NULL) {
- mutex_exit(pid_mtx);
- return (-1);
- }
-
- for (id = tp->ftt_ids; id != NULL; id = id->fti_next) {
- fasttrap_probe_t *probe = id->fti_probe;
- int isentry = (id->fti_ptype == DTFTP_ENTRY);
-
- if (id->fti_ptype == DTFTP_IS_ENABLED) {
- is_enabled = 1;
- continue;
- }
-
- /*
- * We note that this was an entry probe to help ustack() find
- * the first caller.
- */
- if (isentry) {
- cookie = dtrace_interrupt_disable();
- DTRACE_CPUFLAG_SET(CPU_DTRACE_ENTRY);
- }
- dtrace_probe(probe->ftp_id, rp->r_o0, rp->r_o1, rp->r_o2,
- rp->r_o3, rp->r_o4);
- if (isentry) {
- DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_ENTRY);
- dtrace_interrupt_enable(cookie);
- }
- }
-
- /*
- * We're about to do a bunch of work so we cache a local copy of
- * the tracepoint to emulate the instruction, and then find the
- * tracepoint again later if we need to light up any return probes.
- */
- tp_local = *tp;
- mutex_exit(pid_mtx);
- tp = &tp_local;
-
- /*
- * If there's an is-enabled probe conntected to this tracepoint it
- * means that there was a 'mov %g0, %o0' instruction that was placed
- * there by DTrace when the binary was linked. As this probe is, in
- * fact, enabled, we need to stuff 1 into %o0. Accordingly, we can
- * bypass all the instruction emulation logic since we know the
- * inevitable result. It's possible that a user could construct a
- * scenario where the 'is-enabled' probe was on some other
- * instruction, but that would be a rather exotic way to shoot oneself
- * in the foot.
- */
- if (is_enabled) {
- rp->r_o0 = 1;
- pc = rp->r_npc;
- npc = pc + 4;
- goto done;
- }
-
- /*
- * We emulate certain types of instructions to ensure correctness
- * (in the case of position dependent instructions) or optimize
- * common cases. The rest we have the thread execute back in user-
- * land.
- */
- switch (tp->ftt_type) {
- case FASTTRAP_T_SAVE:
- {
- int32_t imm;
-
- /*
- * This an optimization to let us handle function entry
- * probes more efficiently. Many functions begin with a save
- * instruction that follows the pattern:
- * save %sp, <imm>, %sp
- *
- * Meanwhile, we've stashed the instruction:
- * save %g1, %g0, %sp
- *
- * off of %g7, so all we have to do is stick the right value
- * into %g1 and reset %pc to point to the instruction we've
- * cleverly hidden (%npc should not be touched).
- */
-
- imm = tp->ftt_instr << 19;
- imm >>= 19;
- rp->r_g1 = rp->r_sp + imm;
- pc = rp->r_g7 + FASTTRAP_OFF_SAVE;
- break;
- }
-
- case FASTTRAP_T_RESTORE:
- {
- ulong_t value;
- uint_t rd;
-
- /*
- * This is an optimization to let us handle function
- * return probes more efficiently. Most non-leaf functions
- * end with the sequence:
- * ret
- * restore <reg>, <reg_or_imm>, %oX
- *
- * We've stashed the instruction:
- * restore %g0, %g0, %g0
- *
- * off of %g7 so we just need to place the correct value
- * in the right %i register (since after our fake-o
- * restore, the %i's will become the %o's) and set the %pc
- * to point to our hidden restore. We also set fake_restore to
- * let fasttrap_return_common() know that it will find the
- * return values in the %i's rather than the %o's.
- */
-
- if (I(tp->ftt_instr)) {
- int32_t imm;
-
- imm = tp->ftt_instr << 19;
- imm >>= 19;
- value = fasttrap_getreg(rp, RS1(tp->ftt_instr)) + imm;
- } else {
- value = fasttrap_getreg(rp, RS1(tp->ftt_instr)) +
- fasttrap_getreg(rp, RS2(tp->ftt_instr));
- }
-
- /*
- * Convert %o's to %i's; leave %g's as they are.
- */
- rd = RD(tp->ftt_instr);
- fasttrap_putreg(rp, ((rd & 0x18) == 0x8) ? rd + 16 : rd, value);
-
- pc = rp->r_g7 + FASTTRAP_OFF_RESTORE;
- fake_restore = 1;
- break;
- }
-
- case FASTTRAP_T_RETURN:
- {
- uintptr_t target;
-
- /*
- * A return instruction is like a jmpl (without the link
- * part) that executes an implicit restore. We've stashed
- * the instruction:
- * return %o0
- *
- * off of %g7 so we just need to place the target in %o0
- * and set the %pc to point to the stashed return instruction.
- * We use %o0 since that register disappears after the return
- * executes, erasing any evidence of this tampering.
- */
- if (I(tp->ftt_instr)) {
- int32_t imm;
-
- imm = tp->ftt_instr << 19;
- imm >>= 19;
- target = fasttrap_getreg(rp, RS1(tp->ftt_instr)) + imm;
- } else {
- target = fasttrap_getreg(rp, RS1(tp->ftt_instr)) +
- fasttrap_getreg(rp, RS2(tp->ftt_instr));
- }
-
- fasttrap_putreg(rp, R_O0, target);
-
- pc = rp->r_g7 + FASTTRAP_OFF_RETURN;
- fake_restore = 1;
- break;
- }
-
- case FASTTRAP_T_OR:
- {
- ulong_t value;
-
- if (I(tp->ftt_instr)) {
- int32_t imm;
-
- imm = tp->ftt_instr << 19;
- imm >>= 19;
- value = fasttrap_getreg(rp, RS1(tp->ftt_instr)) | imm;
- } else {
- value = fasttrap_getreg(rp, RS1(tp->ftt_instr)) |
- fasttrap_getreg(rp, RS2(tp->ftt_instr));
- }
-
- fasttrap_putreg(rp, RD(tp->ftt_instr), value);
- pc = rp->r_npc;
- npc = pc + 4;
- break;
- }
-
- case FASTTRAP_T_SETHI:
- if (RD(tp->ftt_instr) != R_G0) {
- uint32_t imm32 = tp->ftt_instr << 10;
- fasttrap_putreg(rp, RD(tp->ftt_instr), (ulong_t)imm32);
- }
- pc = rp->r_npc;
- npc = pc + 4;
- break;
-
- case FASTTRAP_T_CCR:
- {
- uint_t c, v, z, n, taken;
- uint_t ccr = rp->r_tstate >> TSTATE_CCR_SHIFT;
-
- if (tp->ftt_cc != 0)
- ccr >>= 4;
-
- c = (ccr >> 0) & 1;
- v = (ccr >> 1) & 1;
- z = (ccr >> 2) & 1;
- n = (ccr >> 3) & 1;
-
- switch (tp->ftt_code) {
- case 0x0: /* BN */
- taken = 0; break;
- case 0x1: /* BE */
- taken = z; break;
- case 0x2: /* BLE */
- taken = z | (n ^ v); break;
- case 0x3: /* BL */
- taken = n ^ v; break;
- case 0x4: /* BLEU */
- taken = c | z; break;
- case 0x5: /* BCS (BLU) */
- taken = c; break;
- case 0x6: /* BNEG */
- taken = n; break;
- case 0x7: /* BVS */
- taken = v; break;
- case 0x8: /* BA */
- /*
- * We handle the BA case differently since the annul
- * bit means something slightly different.
- */
- panic("fasttrap: mishandled a branch");
- taken = 1; break;
- case 0x9: /* BNE */
- taken = ~z; break;
- case 0xa: /* BG */
- taken = ~(z | (n ^ v)); break;
- case 0xb: /* BGE */
- taken = ~(n ^ v); break;
- case 0xc: /* BGU */
- taken = ~(c | z); break;
- case 0xd: /* BCC (BGEU) */
- taken = ~c; break;
- case 0xe: /* BPOS */
- taken = ~n; break;
- case 0xf: /* BVC */
- taken = ~v; break;
- }
-
- if (taken & 1) {
- pc = rp->r_npc;
- npc = tp->ftt_dest;
- } else if (tp->ftt_flags & FASTTRAP_F_ANNUL) {
- /*
- * Untaken annulled branches don't execute the
- * instruction in the delay slot.
- */
- pc = rp->r_npc + 4;
- npc = pc + 4;
- } else {
- pc = rp->r_npc;
- npc = pc + 4;
- }
- break;
- }
-
- case FASTTRAP_T_FCC:
- {
- uint_t fcc;
- uint_t taken;
- uint64_t fsr;
-
- dtrace_getfsr(&fsr);
-
- if (tp->ftt_cc == 0) {
- fcc = (fsr >> 10) & 0x3;
- } else {
- uint_t shift;
- ASSERT(tp->ftt_cc <= 3);
- shift = 30 + tp->ftt_cc * 2;
- fcc = (fsr >> shift) & 0x3;
- }
-
- switch (tp->ftt_code) {
- case 0x0: /* FBN */
- taken = (1 << fcc) & (0|0|0|0); break;
- case 0x1: /* FBNE */
- taken = (1 << fcc) & (8|4|2|0); break;
- case 0x2: /* FBLG */
- taken = (1 << fcc) & (0|4|2|0); break;
- case 0x3: /* FBUL */
- taken = (1 << fcc) & (8|0|2|0); break;
- case 0x4: /* FBL */
- taken = (1 << fcc) & (0|0|2|0); break;
- case 0x5: /* FBUG */
- taken = (1 << fcc) & (8|4|0|0); break;
- case 0x6: /* FBG */
- taken = (1 << fcc) & (0|4|0|0); break;
- case 0x7: /* FBU */
- taken = (1 << fcc) & (8|0|0|0); break;
- case 0x8: /* FBA */
- /*
- * We handle the FBA case differently since the annul
- * bit means something slightly different.
- */
- panic("fasttrap: mishandled a branch");
- taken = (1 << fcc) & (8|4|2|1); break;
- case 0x9: /* FBE */
- taken = (1 << fcc) & (0|0|0|1); break;
- case 0xa: /* FBUE */
- taken = (1 << fcc) & (8|0|0|1); break;
- case 0xb: /* FBGE */
- taken = (1 << fcc) & (0|4|0|1); break;
- case 0xc: /* FBUGE */
- taken = (1 << fcc) & (8|4|0|1); break;
- case 0xd: /* FBLE */
- taken = (1 << fcc) & (0|0|2|1); break;
- case 0xe: /* FBULE */
- taken = (1 << fcc) & (8|0|2|1); break;
- case 0xf: /* FBO */
- taken = (1 << fcc) & (0|4|2|1); break;
- }
-
- if (taken) {
- pc = rp->r_npc;
- npc = tp->ftt_dest;
- } else if (tp->ftt_flags & FASTTRAP_F_ANNUL) {
- /*
- * Untaken annulled branches don't execute the
- * instruction in the delay slot.
- */
- pc = rp->r_npc + 4;
- npc = pc + 4;
- } else {
- pc = rp->r_npc;
- npc = pc + 4;
- }
- break;
- }
-
- case FASTTRAP_T_REG:
- {
- int64_t value;
- uint_t taken;
- uint_t reg = RS1(tp->ftt_instr);
-
- /*
- * An ILP32 process shouldn't be using a branch predicated on
- * an %i or an %l since it would violate the ABI. It's a
- * violation of the ABI because we can't ensure deterministic
- * behavior. We should have identified this case when we
- * enabled the probe.
- */
- ASSERT(p->p_model == DATAMODEL_LP64 || reg < 16);
-
- value = (int64_t)fasttrap_getreg(rp, reg);
-
- switch (tp->ftt_code) {
- case 0x1: /* BRZ */
- taken = (value == 0); break;
- case 0x2: /* BRLEZ */
- taken = (value <= 0); break;
- case 0x3: /* BRLZ */
- taken = (value < 0); break;
- case 0x5: /* BRNZ */
- taken = (value != 0); break;
- case 0x6: /* BRGZ */
- taken = (value > 0); break;
- case 0x7: /* BRGEZ */
- taken = (value >= 0); break;
- default:
- case 0x0:
- case 0x4:
- panic("fasttrap: mishandled a branch");
- }
-
- if (taken) {
- pc = rp->r_npc;
- npc = tp->ftt_dest;
- } else if (tp->ftt_flags & FASTTRAP_F_ANNUL) {
- /*
- * Untaken annulled branches don't execute the
- * instruction in the delay slot.
- */
- pc = rp->r_npc + 4;
- npc = pc + 4;
- } else {
- pc = rp->r_npc;
- npc = pc + 4;
- }
- break;
- }
-
- case FASTTRAP_T_ALWAYS:
- /*
- * BAs, BA,As...
- */
-
- if (tp->ftt_flags & FASTTRAP_F_ANNUL) {
- /*
- * Annulled branch always instructions never execute
- * the instruction in the delay slot.
- */
- pc = tp->ftt_dest;
- npc = tp->ftt_dest + 4;
- } else {
- pc = rp->r_npc;
- npc = tp->ftt_dest;
- }
- break;
-
- case FASTTRAP_T_RDPC:
- fasttrap_putreg(rp, RD(tp->ftt_instr), rp->r_pc);
- pc = rp->r_npc;
- npc = pc + 4;
- break;
-
- case FASTTRAP_T_CALL:
- /*
- * It's a call _and_ link remember...
- */
- rp->r_o7 = rp->r_pc;
- pc = rp->r_npc;
- npc = tp->ftt_dest;
- break;
-
- case FASTTRAP_T_JMPL:
- pc = rp->r_npc;
-
- if (I(tp->ftt_instr)) {
- uint_t rs1 = RS1(tp->ftt_instr);
- int32_t imm;
-
- imm = tp->ftt_instr << 19;
- imm >>= 19;
- npc = fasttrap_getreg(rp, rs1) + imm;
- } else {
- uint_t rs1 = RS1(tp->ftt_instr);
- uint_t rs2 = RS2(tp->ftt_instr);
-
- npc = fasttrap_getreg(rp, rs1) +
- fasttrap_getreg(rp, rs2);
- }
-
- /*
- * Do the link part of the jump-and-link instruction.
- */
- fasttrap_putreg(rp, RD(tp->ftt_instr), rp->r_pc);
-
- break;
-
- case FASTTRAP_T_COMMON:
- {
- curthread->t_dtrace_scrpc = rp->r_g7;
- curthread->t_dtrace_astpc = rp->r_g7 + FASTTRAP_OFF_FTRET;
-
- /*
- * Copy the instruction to a reserved location in the
- * user-land thread structure, then set the PC to that
- * location and leave the NPC alone. We take pains to ensure
- * consistency in the instruction stream (See SPARC
- * Architecture Manual Version 9, sections 8.4.7, A.20, and
- * H.1.6; UltraSPARC I/II User's Manual, sections 3.1.1.1,
- * and 13.6.4) by using the ASI ASI_BLK_COMMIT_S to copy the
- * instruction into the user's address space without
- * bypassing the I$. There's no AS_USER version of this ASI
- * (as exist for other ASIs) so we use the lofault
- * mechanism to catch faults.
- */
- if (dtrace_blksuword32(rp->r_g7, &tp->ftt_instr, 1) == -1) {
- /*
- * If the copyout fails, then the process's state
- * is not consistent (the effects of the traced
- * instruction will never be seen). This process
- * cannot be allowed to continue execution.
- */
- fasttrap_sigtrap(curproc, curthread, pc);
- return (0);
- }
-
- curthread->t_dtrace_pc = pc;
- curthread->t_dtrace_npc = npc;
- curthread->t_dtrace_on = 1;
-
- pc = curthread->t_dtrace_scrpc;
-
- if (tp->ftt_retids != NULL) {
- curthread->t_dtrace_step = 1;
- curthread->t_dtrace_ret = 1;
- npc = curthread->t_dtrace_astpc;
- }
- break;
- }
-
- default:
- panic("fasttrap: mishandled an instruction");
- }
-
- /*
- * This bit me in the ass a couple of times, so lets toss this
- * in as a cursory sanity check.
- */
- ASSERT(pc != rp->r_g7 + 4);
- ASSERT(pc != rp->r_g7 + 8);
-
-done:
- /*
- * If there were no return probes when we first found the tracepoint,
- * we should feel no obligation to honor any return probes that were
- * subsequently enabled -- they'll just have to wait until the next
- * time around.
- */
- if (tp->ftt_retids != NULL) {
- /*
- * We need to wait until the results of the instruction are
- * apparent before invoking any return probes. If this
- * instruction was emulated we can just call
- * fasttrap_return_common(); if it needs to be executed, we
- * need to wait until we return to the kernel.
- */
- if (tp->ftt_type != FASTTRAP_T_COMMON) {
- fasttrap_return_common(rp, orig_pc, pid, fake_restore);
- } else {
- ASSERT(curthread->t_dtrace_ret != 0);
- ASSERT(curthread->t_dtrace_pc == orig_pc);
- ASSERT(curthread->t_dtrace_scrpc == rp->r_g7);
- ASSERT(npc == curthread->t_dtrace_astpc);
- }
- }
-
- ASSERT(pc != 0);
- rp->r_pc = pc;
- rp->r_npc = npc;
-
- return (0);
-}
-
-int
-fasttrap_return_probe(struct regs *rp)
-{
- proc_t *p = ttoproc(curthread);
- pid_t pid;
- uintptr_t pc = curthread->t_dtrace_pc;
- uintptr_t npc = curthread->t_dtrace_npc;
-
- curthread->t_dtrace_pc = 0;
- curthread->t_dtrace_npc = 0;
- curthread->t_dtrace_scrpc = 0;
- curthread->t_dtrace_astpc = 0;
-
- /*
- * Treat a child created by a call to vfork(2) as if it were its
- * parent. We know there's only one thread of control in such a
- * process: this one.
- */
- while (p->p_flag & SVFORK) {
- p = p->p_parent;
- }
-
- /*
- * We set the %pc and %npc to their values when the traced
- * instruction was initially executed so that it appears to
- * dtrace_probe() that we're on the original instruction, and so that
- * the user can't easily detect our complex web of lies.
- * dtrace_return_probe() (our caller) will correctly set %pc and %npc
- * after we return.
- */
- rp->r_pc = pc;
- rp->r_npc = npc;
-
- pid = p->p_pid;
- fasttrap_return_common(rp, pc, pid, 0);
-
- return (0);
-}
-
-int
-fasttrap_tracepoint_install(proc_t *p, fasttrap_tracepoint_t *tp)
-{
- fasttrap_instr_t instr = FASTTRAP_INSTR;
-
- if (uwrite(p, &instr, 4, tp->ftt_pc) != 0)
- return (-1);
-
- return (0);
-}
-
-int
-fasttrap_tracepoint_remove(proc_t *p, fasttrap_tracepoint_t *tp)
-{
- fasttrap_instr_t instr;
-
- /*
- * Distinguish between read or write failures and a changed
- * instruction.
- */
- if (uread(p, &instr, 4, tp->ftt_pc) != 0)
- return (0);
- if (instr != FASTTRAP_INSTR && instr != BREAKPOINT_INSTR)
- return (0);
- if (uwrite(p, &tp->ftt_instr, 4, tp->ftt_pc) != 0)
- return (-1);
-
- return (0);
-}
-
-int
-fasttrap_tracepoint_init(proc_t *p, fasttrap_tracepoint_t *tp, uintptr_t pc,
- fasttrap_probe_type_t type)
-{
- uint32_t instr;
- int32_t disp;
-
- /*
- * Read the instruction at the given address out of the process's
- * address space. We don't have to worry about a debugger
- * changing this instruction before we overwrite it with our trap
- * instruction since P_PR_LOCK is set.
- */
- if (uread(p, &instr, 4, pc) != 0)
- return (-1);
-
- /*
- * Decode the instruction to fill in the probe flags. We can have
- * the process execute most instructions on its own using a pc/npc
- * trick, but pc-relative control transfer present a problem since
- * we're relocating the instruction. We emulate these instructions
- * in the kernel. We assume a default type and over-write that as
- * needed.
- *
- * pc-relative instructions must be emulated for correctness;
- * other instructions (which represent a large set of commonly traced
- * instructions) are emulated or otherwise optimized for performance.
- */
- tp->ftt_type = FASTTRAP_T_COMMON;
- if (OP(instr) == 1) {
- /*
- * Call instructions.
- */
- tp->ftt_type = FASTTRAP_T_CALL;
- disp = DISP30(instr) << 2;
- tp->ftt_dest = pc + (intptr_t)disp;
-
- } else if (OP(instr) == 0) {
- /*
- * Branch instructions.
- *
- * Unconditional branches need careful attention when they're
- * annulled: annulled unconditional branches never execute
- * the instruction in the delay slot.
- */
- switch (OP2(instr)) {
- case OP2_ILLTRAP:
- case 0x7:
- /*
- * The compiler may place an illtrap after a call to
- * a function that returns a structure. In the case of
- * a returned structure, the compiler places an illtrap
- * whose const22 field is the size of the returned
- * structure immediately following the delay slot of
- * the call. To stay out of the way, we refuse to
- * place tracepoints on top of illtrap instructions.
- *
- * This is one of the dumbest architectural decisions
- * I've ever had to work around.
- *
- * We also identify the only illegal op2 value (See
- * SPARC Architecture Manual Version 9, E.2 table 31).
- */
- return (-1);
-
- case OP2_BPcc:
- if (COND(instr) == 8) {
- tp->ftt_type = FASTTRAP_T_ALWAYS;
- } else {
- /*
- * Check for an illegal instruction.
- */
- if (CC(instr) & 1)
- return (-1);
- tp->ftt_type = FASTTRAP_T_CCR;
- tp->ftt_cc = CC(instr);
- tp->ftt_code = COND(instr);
- }
-
- if (A(instr) != 0)
- tp->ftt_flags |= FASTTRAP_F_ANNUL;
-
- disp = DISP19(instr);
- disp <<= 13;
- disp >>= 11;
- tp->ftt_dest = pc + (intptr_t)disp;
- break;
-
- case OP2_Bicc:
- if (COND(instr) == 8) {
- tp->ftt_type = FASTTRAP_T_ALWAYS;
- } else {
- tp->ftt_type = FASTTRAP_T_CCR;
- tp->ftt_cc = 0;
- tp->ftt_code = COND(instr);
- }
-
- if (A(instr) != 0)
- tp->ftt_flags |= FASTTRAP_F_ANNUL;
-
- disp = DISP22(instr);
- disp <<= 10;
- disp >>= 8;
- tp->ftt_dest = pc + (intptr_t)disp;
- break;
-
- case OP2_BPr:
- /*
- * Check for an illegal instruction.
- */
- if ((RCOND(instr) & 3) == 0)
- return (-1);
-
- /*
- * It's a violation of the v8plus ABI to use a
- * register-predicated branch in a 32-bit app if
- * the register used is an %l or an %i (%gs and %os
- * are legit because they're not saved to the stack
- * in 32-bit words when we take a trap).
- */
- if (p->p_model == DATAMODEL_ILP32 && RS1(instr) >= 16)
- return (-1);
-
- tp->ftt_type = FASTTRAP_T_REG;
- if (A(instr) != 0)
- tp->ftt_flags |= FASTTRAP_F_ANNUL;
- disp = DISP16(instr);
- disp <<= 16;
- disp >>= 14;
- tp->ftt_dest = pc + (intptr_t)disp;
- tp->ftt_code = RCOND(instr);
- break;
-
- case OP2_SETHI:
- tp->ftt_type = FASTTRAP_T_SETHI;
- break;
-
- case OP2_FBPfcc:
- if (COND(instr) == 8) {
- tp->ftt_type = FASTTRAP_T_ALWAYS;
- } else {
- tp->ftt_type = FASTTRAP_T_FCC;
- tp->ftt_cc = CC(instr);
- tp->ftt_code = COND(instr);
- }
-
- if (A(instr) != 0)
- tp->ftt_flags |= FASTTRAP_F_ANNUL;
-
- disp = DISP19(instr);
- disp <<= 13;
- disp >>= 11;
- tp->ftt_dest = pc + (intptr_t)disp;
- break;
-
- case OP2_FBfcc:
- if (COND(instr) == 8) {
- tp->ftt_type = FASTTRAP_T_ALWAYS;
- } else {
- tp->ftt_type = FASTTRAP_T_FCC;
- tp->ftt_cc = 0;
- tp->ftt_code = COND(instr);
- }
-
- if (A(instr) != 0)
- tp->ftt_flags |= FASTTRAP_F_ANNUL;
-
- disp = DISP22(instr);
- disp <<= 10;
- disp >>= 8;
- tp->ftt_dest = pc + (intptr_t)disp;
- break;
- }
-
- } else if (OP(instr) == 2) {
- switch (OP3(instr)) {
- case OP3_RETURN:
- tp->ftt_type = FASTTRAP_T_RETURN;
- break;
-
- case OP3_JMPL:
- tp->ftt_type = FASTTRAP_T_JMPL;
- break;
-
- case OP3_RD:
- if (RS1(instr) == 5)
- tp->ftt_type = FASTTRAP_T_RDPC;
- break;
-
- case OP3_SAVE:
- /*
- * We optimize for save instructions at function
- * entry; see the comment in fasttrap_pid_probe()
- * (near FASTTRAP_T_SAVE) for details.
- */
- if (fasttrap_optimize_save != 0 &&
- type == DTFTP_ENTRY &&
- I(instr) == 1 && RD(instr) == R_SP)
- tp->ftt_type = FASTTRAP_T_SAVE;
- break;
-
- case OP3_RESTORE:
- /*
- * We optimize restore instructions at function
- * return; see the comment in fasttrap_pid_probe()
- * (near FASTTRAP_T_RESTORE) for details.
- *
- * rd must be an %o or %g register.
- */
- if ((RD(instr) & 0x10) == 0)
- tp->ftt_type = FASTTRAP_T_RESTORE;
- break;
-
- case OP3_OR:
- /*
- * A large proportion of instructions in the delay
- * slot of retl instructions are or's so we emulate
- * these downstairs as an optimization.
- */
- tp->ftt_type = FASTTRAP_T_OR;
- break;
-
- case OP3_TCC:
- /*
- * Breakpoint instructions are effectively position-
- * dependent since the debugger uses the %pc value
- * to lookup which breakpoint was executed. As a
- * result, we can't actually instrument breakpoints.
- */
- if (SW_TRAP(instr) == ST_BREAKPOINT)
- return (-1);
- break;
-
- case 0x19:
- case 0x1d:
- case 0x29:
- case 0x33:
- case 0x3f:
- /*
- * Identify illegal instructions (See SPARC
- * Architecture Manual Version 9, E.2 table 32).
- */
- return (-1);
- }
- } else if (OP(instr) == 3) {
- uint32_t op3 = OP3(instr);
-
- /*
- * Identify illegal instructions (See SPARC Architecture
- * Manual Version 9, E.2 table 33).
- */
- if ((op3 & 0x28) == 0x28) {
- if (op3 != OP3_PREFETCH && op3 != OP3_CASA &&
- op3 != OP3_PREFETCHA && op3 != OP3_CASXA)
- return (-1);
- } else {
- if ((op3 & 0x0f) == 0x0c || (op3 & 0x3b) == 0x31)
- return (-1);
- }
- }
-
- tp->ftt_instr = instr;
-
- /*
- * We don't know how this tracepoint is going to be used, but in case
- * it's used as part of a function return probe, we need to indicate
- * whether it's always a return site or only potentially a return
- * site. If it's part of a return probe, it's always going to be a
- * return from that function if it's a restore instruction or if
- * the previous instruction was a return. If we could reliably
- * distinguish jump tables from return sites, this wouldn't be
- * necessary.
- */
- if (tp->ftt_type != FASTTRAP_T_RESTORE &&
- (uread(p, &instr, 4, pc - sizeof (instr)) != 0 ||
- !(OP(instr) == 2 && OP3(instr) == OP3_RETURN)))
- tp->ftt_flags |= FASTTRAP_F_RETMAYBE;
-
- return (0);
-}
-
-/*ARGSUSED*/
-uint64_t
-fasttrap_pid_getarg(void *arg, dtrace_id_t id, void *parg, int argno,
- int aframes)
-{
- return (fasttrap_anarg(ttolwp(curthread)->lwp_regs, argno));
-}
-
-/*ARGSUSED*/
-uint64_t
-fasttrap_usdt_getarg(void *arg, dtrace_id_t id, void *parg, int argno,
- int aframes)
-{
- return (fasttrap_anarg(ttolwp(curthread)->lwp_regs, argno));
-}
-
-static uint64_t fasttrap_getreg_fast_cnt;
-static uint64_t fasttrap_getreg_mpcb_cnt;
-static uint64_t fasttrap_getreg_slow_cnt;
-
-static ulong_t
-fasttrap_getreg(struct regs *rp, uint_t reg)
-{
- ulong_t value;
- dtrace_icookie_t cookie;
- struct machpcb *mpcb;
- extern ulong_t dtrace_getreg_win(uint_t, uint_t);
-
- /*
- * We have the %os and %gs in our struct regs, but if we need to
- * snag a %l or %i we need to go scrounging around in the process's
- * address space.
- */
- if (reg == 0)
- return (0);
-
- if (reg < 16)
- return ((&rp->r_g1)[reg - 1]);
-
- /*
- * Before we look at the user's stack, we'll check the register
- * windows to see if the information we want is in there.
- */
- cookie = dtrace_interrupt_disable();
- if (dtrace_getotherwin() > 0) {
- value = dtrace_getreg_win(reg, 1);
- dtrace_interrupt_enable(cookie);
-
- atomic_inc_64(&fasttrap_getreg_fast_cnt);
-
- return (value);
- }
- dtrace_interrupt_enable(cookie);
-
- /*
- * First check the machpcb structure to see if we've already read
- * in the register window we're looking for; if we haven't, (and
- * we probably haven't) try to copy in the value of the register.
- */
- /* LINTED - alignment */
- mpcb = (struct machpcb *)((caddr_t)rp - REGOFF);
-
- if (get_udatamodel() == DATAMODEL_NATIVE) {
- struct frame *fr = (struct frame *)(rp->r_sp + STACK_BIAS);
-
- if (mpcb->mpcb_wbcnt > 0) {
- struct rwindow *rwin = (void *)mpcb->mpcb_wbuf;
- int i = mpcb->mpcb_wbcnt;
- do {
- i--;
- if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
- continue;
-
- atomic_inc_64(&fasttrap_getreg_mpcb_cnt);
- return (rwin[i].rw_local[reg - 16]);
- } while (i > 0);
- }
-
- if (fasttrap_fulword(&fr->fr_local[reg - 16], &value) != 0)
- goto err;
- } else {
- struct frame32 *fr =
- (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp;
- uint32_t *v32 = (uint32_t *)&value;
-
- if (mpcb->mpcb_wbcnt > 0) {
- struct rwindow32 *rwin = (void *)mpcb->mpcb_wbuf;
- int i = mpcb->mpcb_wbcnt;
- do {
- i--;
- if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
- continue;
-
- atomic_inc_64(&fasttrap_getreg_mpcb_cnt);
- return (rwin[i].rw_local[reg - 16]);
- } while (i > 0);
- }
-
- if (fasttrap_fuword32(&fr->fr_local[reg - 16], &v32[1]) != 0)
- goto err;
-
- v32[0] = 0;
- }
-
- atomic_inc_64(&fasttrap_getreg_slow_cnt);
- return (value);
-
-err:
- /*
- * If the copy in failed, the process will be in a irrecoverable
- * state, and we have no choice but to kill it.
- */
- kern_psignal(ttoproc(curthread), SIGILL);
- return (0);
-}
-
-static uint64_t fasttrap_putreg_fast_cnt;
-static uint64_t fasttrap_putreg_mpcb_cnt;
-static uint64_t fasttrap_putreg_slow_cnt;
-
-static void
-fasttrap_putreg(struct regs *rp, uint_t reg, ulong_t value)
-{
- dtrace_icookie_t cookie;
- struct machpcb *mpcb;
- extern void dtrace_putreg_win(uint_t, ulong_t);
-
- if (reg == 0)
- return;
-
- if (reg < 16) {
- (&rp->r_g1)[reg - 1] = value;
- return;
- }
-
- /*
- * If the user process is still using some register windows, we
- * can just place the value in the correct window.
- */
- cookie = dtrace_interrupt_disable();
- if (dtrace_getotherwin() > 0) {
- dtrace_putreg_win(reg, value);
- dtrace_interrupt_enable(cookie);
- atomic_inc_64(&fasttrap_putreg_fast_cnt);
- return;
- }
- dtrace_interrupt_enable(cookie);
-
- /*
- * First see if there's a copy of the register window in the
- * machpcb structure that we can modify; if there isn't try to
- * copy out the value. If that fails, we try to create a new
- * register window in the machpcb structure. While this isn't
- * _precisely_ the intended use of the machpcb structure, it
- * can't cause any problems since we know at this point in the
- * code that all of the user's data have been flushed out of the
- * register file (since %otherwin is 0).
- */
- /* LINTED - alignment */
- mpcb = (struct machpcb *)((caddr_t)rp - REGOFF);
-
- if (get_udatamodel() == DATAMODEL_NATIVE) {
- struct frame *fr = (struct frame *)(rp->r_sp + STACK_BIAS);
- /* LINTED - alignment */
- struct rwindow *rwin = (struct rwindow *)mpcb->mpcb_wbuf;
-
- if (mpcb->mpcb_wbcnt > 0) {
- int i = mpcb->mpcb_wbcnt;
- do {
- i--;
- if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
- continue;
-
- rwin[i].rw_local[reg - 16] = value;
- atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
- return;
- } while (i > 0);
- }
-
- if (fasttrap_sulword(&fr->fr_local[reg - 16], value) != 0) {
- if (mpcb->mpcb_wbcnt >= MAXWIN || copyin(fr,
- &rwin[mpcb->mpcb_wbcnt], sizeof (*rwin)) != 0)
- goto err;
-
- rwin[mpcb->mpcb_wbcnt].rw_local[reg - 16] = value;
- mpcb->mpcb_spbuf[mpcb->mpcb_wbcnt] = (caddr_t)rp->r_sp;
- mpcb->mpcb_wbcnt++;
- atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
- return;
- }
- } else {
- struct frame32 *fr =
- (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp;
- /* LINTED - alignment */
- struct rwindow32 *rwin = (struct rwindow32 *)mpcb->mpcb_wbuf;
- uint32_t v32 = (uint32_t)value;
-
- if (mpcb->mpcb_wbcnt > 0) {
- int i = mpcb->mpcb_wbcnt;
- do {
- i--;
- if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
- continue;
-
- rwin[i].rw_local[reg - 16] = v32;
- atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
- return;
- } while (i > 0);
- }
-
- if (fasttrap_suword32(&fr->fr_local[reg - 16], v32) != 0) {
- if (mpcb->mpcb_wbcnt >= MAXWIN || copyin(fr,
- &rwin[mpcb->mpcb_wbcnt], sizeof (*rwin)) != 0)
- goto err;
-
- rwin[mpcb->mpcb_wbcnt].rw_local[reg - 16] = v32;
- mpcb->mpcb_spbuf[mpcb->mpcb_wbcnt] = (caddr_t)rp->r_sp;
- mpcb->mpcb_wbcnt++;
- atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
- return;
- }
- }
-
- atomic_inc_64(&fasttrap_putreg_slow_cnt);
- return;
-
-err:
- /*
- * If we couldn't record this register's value, the process is in an
- * irrecoverable state and we have no choice but to euthanize it.
- */
- kern_psignal(ttoproc(curthread), SIGILL);
-}
diff --git a/sys/cddl/contrib/opensolaris/uts/sparc/sys/fasttrap_isa.h b/sys/cddl/contrib/opensolaris/uts/sparc/sys/fasttrap_isa.h
deleted file mode 100644
index 10361cbe..0000000
--- a/sys/cddl/contrib/opensolaris/uts/sparc/sys/fasttrap_isa.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _FASTTRAP_ISA_H
-#define _FASTTRAP_ISA_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * This is our reserved trap instruction: ta 0x38
- */
-#define FASTTRAP_INSTR 0x91d02038
-
-#define FASTTRAP_SUNWDTRACE_SIZE 128
-
-typedef uint32_t fasttrap_instr_t;
-
-typedef struct fasttrap_machtp {
- fasttrap_instr_t ftmt_instr; /* original instruction */
- uintptr_t ftmt_dest; /* destination of DCTI */
- uint8_t ftmt_type; /* emulation type */
- uint8_t ftmt_flags; /* emulation flags */
- uint8_t ftmt_cc; /* which cc to look at */
- uint8_t ftmt_code; /* branch condition */
-} fasttrap_machtp_t;
-
-#define ftt_instr ftt_mtp.ftmt_instr
-#define ftt_dest ftt_mtp.ftmt_dest
-#define ftt_type ftt_mtp.ftmt_type
-#define ftt_flags ftt_mtp.ftmt_flags
-#define ftt_cc ftt_mtp.ftmt_cc
-#define ftt_code ftt_mtp.ftmt_code
-
-#define FASTTRAP_T_COMMON 0x00 /* common case -- no emulation */
-#define FASTTRAP_T_CCR 0x01 /* integer condition code branch */
-#define FASTTRAP_T_FCC 0x02 /* floating-point branch */
-#define FASTTRAP_T_REG 0x03 /* register predicated branch */
-#define FASTTRAP_T_ALWAYS 0x04 /* branch always */
-#define FASTTRAP_T_CALL 0x05 /* call instruction */
-#define FASTTRAP_T_JMPL 0x06 /* jmpl instruction */
-#define FASTTRAP_T_RDPC 0x07 /* rdpc instruction */
-#define FASTTRAP_T_RETURN 0x08 /* return instruction */
-
-/*
- * For performance rather than correctness.
- */
-#define FASTTRAP_T_SAVE 0x10 /* save instruction (func entry only) */
-#define FASTTRAP_T_RESTORE 0x11 /* restore instruction */
-#define FASTTRAP_T_OR 0x12 /* mov instruction */
-#define FASTTRAP_T_SETHI 0x13 /* sethi instruction (includes nop) */
-
-#define FASTTRAP_F_ANNUL 0x01 /* branch is annulled */
-#define FASTTRAP_F_RETMAYBE 0x02 /* not definitely a return site */
-
-#define FASTTRAP_AFRAMES 3
-#define FASTTRAP_RETURN_AFRAMES 4
-#define FASTTRAP_ENTRY_AFRAMES 3
-#define FASTTRAP_OFFSET_AFRAMES 3
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _FASTTRAP_ISA_H */
diff --git a/sys/cddl/dev/dtrace/dtrace_ioctl.c b/sys/cddl/dev/dtrace/dtrace_ioctl.c
index 666c077..6e2b558 100644
--- a/sys/cddl/dev/dtrace/dtrace_ioctl.c
+++ b/sys/cddl/dev/dtrace/dtrace_ioctl.c
@@ -47,14 +47,14 @@ dtrace_ioctl_helper(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
/* FALLTHROUGH */
case DTRACEHIOC_ADD:
p = curproc;
- if (p->p_pid == dhp->dofhp_pid) {
+ if (dhp == NULL || p->p_pid == dhp->dofhp_pid) {
dof = dtrace_dof_copyin((uintptr_t)addr, &rval);
} else {
p = pfind(dhp->dofhp_pid);
if (p == NULL)
return (EINVAL);
if (!P_SHOULDSTOP(p) ||
- (p->p_flag & P_TRACED|P_WEXIT) == 0 ||
+ (p->p_flag & (P_TRACED | P_WEXIT)) != P_TRACED ||
p->p_pptr != curproc) {
PROC_UNLOCK(p);
return (EINVAL);
diff --git a/sys/compat/freebsd32/freebsd32_proto.h b/sys/compat/freebsd32/freebsd32_proto.h
index bf9253d..023dac8 100644
--- a/sys/compat/freebsd32/freebsd32_proto.h
+++ b/sys/compat/freebsd32/freebsd32_proto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 277610 2015-01-23 21:07:08Z jilles
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#ifndef _FREEBSD32_SYSPROTO_H_
@@ -285,25 +285,9 @@ struct freebsd32_aio_suspend_args {
char nent_l_[PADL_(int)]; int nent; char nent_r_[PADR_(int)];
char timeout_l_[PADL_(const struct timespec32 *)]; const struct timespec32 * timeout; char timeout_r_[PADR_(const struct timespec32 *)];
};
-struct freebsd32_aio_cancel_args {
- char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char aiocbp_l_[PADL_(struct aiocb32 *)]; struct aiocb32 * aiocbp; char aiocbp_r_[PADR_(struct aiocb32 *)];
-};
struct freebsd32_aio_error_args {
char aiocbp_l_[PADL_(struct aiocb32 *)]; struct aiocb32 * aiocbp; char aiocbp_r_[PADR_(struct aiocb32 *)];
};
-struct freebsd32_oaio_read_args {
- char aiocbp_l_[PADL_(struct oaiocb32 *)]; struct oaiocb32 * aiocbp; char aiocbp_r_[PADR_(struct oaiocb32 *)];
-};
-struct freebsd32_oaio_write_args {
- char aiocbp_l_[PADL_(struct oaiocb32 *)]; struct oaiocb32 * aiocbp; char aiocbp_r_[PADR_(struct oaiocb32 *)];
-};
-struct freebsd32_olio_listio_args {
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
- char acb_list_l_[PADL_(struct oaiocb32 *const *)]; struct oaiocb32 *const * acb_list; char acb_list_r_[PADR_(struct oaiocb32 *const *)];
- char nent_l_[PADL_(int)]; int nent; char nent_r_[PADR_(int)];
- char sig_l_[PADL_(struct osigevent32 *)]; struct osigevent32 * sig; char sig_r_[PADR_(struct osigevent32 *)];
-};
struct freebsd32_jail_args {
char jail_l_[PADL_(struct jail32 *)]; struct jail32 * jail; char jail_r_[PADR_(struct jail32 *)];
};
@@ -755,11 +739,7 @@ int freebsd32_modstat(struct thread *, struct freebsd32_modstat_args *);
int freebsd32_kldstat(struct thread *, struct freebsd32_kldstat_args *);
int freebsd32_aio_return(struct thread *, struct freebsd32_aio_return_args *);
int freebsd32_aio_suspend(struct thread *, struct freebsd32_aio_suspend_args *);
-int freebsd32_aio_cancel(struct thread *, struct freebsd32_aio_cancel_args *);
int freebsd32_aio_error(struct thread *, struct freebsd32_aio_error_args *);
-int freebsd32_oaio_read(struct thread *, struct freebsd32_oaio_read_args *);
-int freebsd32_oaio_write(struct thread *, struct freebsd32_oaio_write_args *);
-int freebsd32_olio_listio(struct thread *, struct freebsd32_olio_listio_args *);
int freebsd32_jail(struct thread *, struct freebsd32_jail_args *);
int freebsd32_sigtimedwait(struct thread *, struct freebsd32_sigtimedwait_args *);
int freebsd32_sigwaitinfo(struct thread *, struct freebsd32_sigwaitinfo_args *);
@@ -1043,6 +1023,18 @@ struct freebsd6_freebsd32_ftruncate_args {
char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
+struct freebsd6_freebsd32_aio_read_args {
+ char aiocbp_l_[PADL_(struct oaiocb32 *)]; struct oaiocb32 * aiocbp; char aiocbp_r_[PADR_(struct oaiocb32 *)];
+};
+struct freebsd6_freebsd32_aio_write_args {
+ char aiocbp_l_[PADL_(struct oaiocb32 *)]; struct oaiocb32 * aiocbp; char aiocbp_r_[PADR_(struct oaiocb32 *)];
+};
+struct freebsd6_freebsd32_lio_listio_args {
+ char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char acb_list_l_[PADL_(struct oaiocb32 *const *)]; struct oaiocb32 *const * acb_list; char acb_list_r_[PADR_(struct oaiocb32 *const *)];
+ char nent_l_[PADL_(int)]; int nent; char nent_r_[PADR_(int)];
+ char sig_l_[PADL_(struct osigevent32 *)]; struct osigevent32 * sig; char sig_r_[PADR_(struct osigevent32 *)];
+};
#ifdef PAD64_REQUIRED
#else
#endif
@@ -1061,6 +1053,9 @@ int freebsd6_freebsd32_mmap(struct thread *, struct freebsd6_freebsd32_mmap_args
int freebsd6_freebsd32_lseek(struct thread *, struct freebsd6_freebsd32_lseek_args *);
int freebsd6_freebsd32_truncate(struct thread *, struct freebsd6_freebsd32_truncate_args *);
int freebsd6_freebsd32_ftruncate(struct thread *, struct freebsd6_freebsd32_ftruncate_args *);
+int freebsd6_freebsd32_aio_read(struct thread *, struct freebsd6_freebsd32_aio_read_args *);
+int freebsd6_freebsd32_aio_write(struct thread *, struct freebsd6_freebsd32_aio_write_args *);
+int freebsd6_freebsd32_lio_listio(struct thread *, struct freebsd6_freebsd32_lio_listio_args *);
#endif /* COMPAT_FREEBSD6 */
@@ -1181,11 +1176,10 @@ int freebsd7_freebsd32_shmctl(struct thread *, struct freebsd7_freebsd32_shmctl_
#define FREEBSD32_SYS_AUE_freebsd32_kldstat AUE_NULL
#define FREEBSD32_SYS_AUE_freebsd32_aio_return AUE_NULL
#define FREEBSD32_SYS_AUE_freebsd32_aio_suspend AUE_NULL
-#define FREEBSD32_SYS_AUE_freebsd32_aio_cancel AUE_NULL
#define FREEBSD32_SYS_AUE_freebsd32_aio_error AUE_NULL
-#define FREEBSD32_SYS_AUE_freebsd32_oaio_read AUE_NULL
-#define FREEBSD32_SYS_AUE_freebsd32_oaio_write AUE_NULL
-#define FREEBSD32_SYS_AUE_freebsd32_olio_listio AUE_NULL
+#define FREEBSD32_SYS_AUE_freebsd6_freebsd32_aio_read AUE_NULL
+#define FREEBSD32_SYS_AUE_freebsd6_freebsd32_aio_write AUE_NULL
+#define FREEBSD32_SYS_AUE_freebsd6_freebsd32_lio_listio AUE_NULL
#define FREEBSD32_SYS_AUE_freebsd4_freebsd32_sendfile AUE_SENDFILE
#define FREEBSD32_SYS_AUE_freebsd32_jail AUE_JAIL
#define FREEBSD32_SYS_AUE_freebsd4_freebsd32_sigaction AUE_SIGACTION
diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h
index 91bf4b7..54851d3 100644
--- a/sys/compat/freebsd32/freebsd32_syscall.h
+++ b/sys/compat/freebsd32/freebsd32_syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 277610 2015-01-23 21:07:08Z jilles
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#define FREEBSD32_SYS_syscall 0
@@ -253,11 +253,11 @@
/* 313 is obsolete signanosleep */
#define FREEBSD32_SYS_freebsd32_aio_return 314
#define FREEBSD32_SYS_freebsd32_aio_suspend 315
-#define FREEBSD32_SYS_freebsd32_aio_cancel 316
+#define FREEBSD32_SYS_aio_cancel 316
#define FREEBSD32_SYS_freebsd32_aio_error 317
-#define FREEBSD32_SYS_freebsd32_oaio_read 318
-#define FREEBSD32_SYS_freebsd32_oaio_write 319
-#define FREEBSD32_SYS_freebsd32_olio_listio 320
+#define FREEBSD32_SYS_freebsd6_freebsd32_aio_read 318
+#define FREEBSD32_SYS_freebsd6_freebsd32_aio_write 319
+#define FREEBSD32_SYS_freebsd6_freebsd32_lio_listio 320
#define FREEBSD32_SYS_yield 321
/* 322 is obsolete thr_sleep */
/* 323 is obsolete thr_wakeup */
diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c
index 5b5b52f..2d56d49 100644
--- a/sys/compat/freebsd32/freebsd32_syscalls.c
+++ b/sys/compat/freebsd32/freebsd32_syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 277610 2015-01-23 21:07:08Z jilles
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
const char *freebsd32_syscallnames[] = {
@@ -326,11 +326,11 @@ const char *freebsd32_syscallnames[] = {
"obs_signanosleep", /* 313 = obsolete signanosleep */
"freebsd32_aio_return", /* 314 = freebsd32_aio_return */
"freebsd32_aio_suspend", /* 315 = freebsd32_aio_suspend */
- "freebsd32_aio_cancel", /* 316 = freebsd32_aio_cancel */
+ "aio_cancel", /* 316 = aio_cancel */
"freebsd32_aio_error", /* 317 = freebsd32_aio_error */
- "freebsd32_oaio_read", /* 318 = freebsd32_oaio_read */
- "freebsd32_oaio_write", /* 319 = freebsd32_oaio_write */
- "freebsd32_olio_listio", /* 320 = freebsd32_olio_listio */
+ "compat6.freebsd32_aio_read", /* 318 = freebsd6 freebsd32_aio_read */
+ "compat6.freebsd32_aio_write", /* 319 = freebsd6 freebsd32_aio_write */
+ "compat6.freebsd32_lio_listio", /* 320 = freebsd6 freebsd32_lio_listio */
"yield", /* 321 = yield */
"obs_thr_sleep", /* 322 = obsolete thr_sleep */
"obs_thr_wakeup", /* 323 = obsolete thr_wakeup */
diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c
index 14d357c..51ba050 100644
--- a/sys/compat/freebsd32/freebsd32_sysent.c
+++ b/sys/compat/freebsd32/freebsd32_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 277610 2015-01-23 21:07:08Z jilles
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#include "opt_compat.h"
@@ -302,9 +302,9 @@ struct sysent freebsd32_sysent[] = {
{ AS(openbsd_poll_args), (sy_call_t *)sys_openbsd_poll, AUE_POLL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 252 = openbsd_poll */
{ 0, (sy_call_t *)sys_issetugid, AUE_ISSETUGID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 253 = issetugid */
{ AS(lchown_args), (sy_call_t *)sys_lchown, AUE_LCHOWN, NULL, 0, 0, 0, SY_THR_STATIC }, /* 254 = lchown */
- { AS(freebsd32_aio_read_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 255 = freebsd32_aio_read */
- { AS(freebsd32_aio_write_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 256 = freebsd32_aio_write */
- { AS(freebsd32_lio_listio_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 257 = freebsd32_lio_listio */
+ { AS(freebsd32_aio_read_args), (sy_call_t *)freebsd32_aio_read, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 255 = freebsd32_aio_read */
+ { AS(freebsd32_aio_write_args), (sy_call_t *)freebsd32_aio_write, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 256 = freebsd32_aio_write */
+ { AS(freebsd32_lio_listio_args), (sy_call_t *)freebsd32_lio_listio, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 257 = freebsd32_lio_listio */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 258 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 259 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 260 = nosys */
@@ -361,13 +361,13 @@ struct sysent freebsd32_sysent[] = {
{ AS(setresuid_args), (sy_call_t *)sys_setresuid, AUE_SETRESUID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 311 = setresuid */
{ AS(setresgid_args), (sy_call_t *)sys_setresgid, AUE_SETRESGID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 312 = setresgid */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 313 = obsolete signanosleep */
- { AS(freebsd32_aio_return_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 314 = freebsd32_aio_return */
- { AS(freebsd32_aio_suspend_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 315 = freebsd32_aio_suspend */
- { AS(freebsd32_aio_cancel_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 316 = freebsd32_aio_cancel */
- { AS(freebsd32_aio_error_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 317 = freebsd32_aio_error */
- { AS(freebsd32_oaio_read_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 318 = freebsd32_oaio_read */
- { AS(freebsd32_oaio_write_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 319 = freebsd32_oaio_write */
- { AS(freebsd32_olio_listio_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 320 = freebsd32_olio_listio */
+ { AS(freebsd32_aio_return_args), (sy_call_t *)freebsd32_aio_return, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 314 = freebsd32_aio_return */
+ { AS(freebsd32_aio_suspend_args), (sy_call_t *)freebsd32_aio_suspend, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 315 = freebsd32_aio_suspend */
+ { AS(aio_cancel_args), (sy_call_t *)sys_aio_cancel, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 316 = aio_cancel */
+ { AS(freebsd32_aio_error_args), (sy_call_t *)freebsd32_aio_error, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 317 = freebsd32_aio_error */
+ { compat6(AS(freebsd6_freebsd32_aio_read_args),freebsd32_aio_read), AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 318 = freebsd6 freebsd32_aio_read */
+ { compat6(AS(freebsd6_freebsd32_aio_write_args),freebsd32_aio_write), AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 319 = freebsd6 freebsd32_aio_write */
+ { compat6(AS(freebsd6_freebsd32_lio_listio_args),freebsd32_lio_listio), AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 320 = freebsd6 freebsd32_lio_listio */
{ 0, (sy_call_t *)sys_yield, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 321 = yield */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 322 = obsolete thr_sleep */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 323 = obsolete thr_wakeup */
@@ -406,7 +406,7 @@ struct sysent freebsd32_sysent[] = {
{ AS(extattr_set_file_args), (sy_call_t *)sys_extattr_set_file, AUE_EXTATTR_SET_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 356 = extattr_set_file */
{ AS(extattr_get_file_args), (sy_call_t *)sys_extattr_get_file, AUE_EXTATTR_GET_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 357 = extattr_get_file */
{ AS(extattr_delete_file_args), (sy_call_t *)sys_extattr_delete_file, AUE_EXTATTR_DELETE_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 358 = extattr_delete_file */
- { AS(freebsd32_aio_waitcomplete_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 359 = freebsd32_aio_waitcomplete */
+ { AS(freebsd32_aio_waitcomplete_args), (sy_call_t *)freebsd32_aio_waitcomplete, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 359 = freebsd32_aio_waitcomplete */
{ AS(getresuid_args), (sy_call_t *)sys_getresuid, AUE_GETRESUID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 360 = getresuid */
{ AS(getresgid_args), (sy_call_t *)sys_getresgid, AUE_GETRESGID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 361 = getresgid */
{ 0, (sy_call_t *)sys_kqueue, AUE_KQUEUE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 362 = kqueue */
@@ -512,7 +512,7 @@ struct sysent freebsd32_sysent[] = {
{ AS(kmq_unlink_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 462 = kmq_unlink */
{ AS(abort2_args), (sy_call_t *)sys_abort2, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 463 = abort2 */
{ AS(thr_set_name_args), (sy_call_t *)sys_thr_set_name, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 464 = thr_set_name */
- { AS(freebsd32_aio_fsync_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 465 = freebsd32_aio_fsync */
+ { AS(freebsd32_aio_fsync_args), (sy_call_t *)freebsd32_aio_fsync, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 465 = freebsd32_aio_fsync */
{ AS(rtprio_thread_args), (sy_call_t *)sys_rtprio_thread, AUE_RTPRIO, NULL, 0, 0, 0, SY_THR_STATIC }, /* 466 = rtprio_thread */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 467 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 468 = nosys */
@@ -609,7 +609,7 @@ struct sysent freebsd32_sysent[] = {
{ AS(chflagsat_args), (sy_call_t *)sys_chflagsat, AUE_CHFLAGSAT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 540 = chflagsat */
{ AS(accept4_args), (sy_call_t *)sys_accept4, AUE_ACCEPT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 541 = accept4 */
{ AS(pipe2_args), (sy_call_t *)sys_pipe2, AUE_PIPE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 542 = pipe2 */
- { AS(freebsd32_aio_mlock_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 543 = freebsd32_aio_mlock */
+ { AS(freebsd32_aio_mlock_args), (sy_call_t *)freebsd32_aio_mlock, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 543 = freebsd32_aio_mlock */
#ifdef PAD64_REQUIRED
{ AS(freebsd32_procctl_args), (sy_call_t *)freebsd32_procctl, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 544 = freebsd32_procctl */
#else
diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c
index 26e7a6d..765f5d5 100644
--- a/sys/compat/freebsd32/freebsd32_systrace_args.c
+++ b/sys/compat/freebsd32/freebsd32_systrace_args.c
@@ -1556,11 +1556,11 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 3;
break;
}
- /* freebsd32_aio_cancel */
+ /* aio_cancel */
case 316: {
- struct freebsd32_aio_cancel_args *p = params;
+ struct aio_cancel_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->aiocbp; /* struct aiocb32 * */
+ uarg[1] = (intptr_t) p->aiocbp; /* struct aiocb * */
*n_args = 2;
break;
}
@@ -1571,30 +1571,6 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 1;
break;
}
- /* freebsd32_oaio_read */
- case 318: {
- struct freebsd32_oaio_read_args *p = params;
- uarg[0] = (intptr_t) p->aiocbp; /* struct oaiocb32 * */
- *n_args = 1;
- break;
- }
- /* freebsd32_oaio_write */
- case 319: {
- struct freebsd32_oaio_write_args *p = params;
- uarg[0] = (intptr_t) p->aiocbp; /* struct oaiocb32 * */
- *n_args = 1;
- break;
- }
- /* freebsd32_olio_listio */
- case 320: {
- struct freebsd32_olio_listio_args *p = params;
- iarg[0] = p->mode; /* int */
- uarg[1] = (intptr_t) p->acb_list; /* struct oaiocb32 *const * */
- iarg[2] = p->nent; /* int */
- uarg[3] = (intptr_t) p->sig; /* struct osigevent32 * */
- *n_args = 4;
- break;
- }
/* yield */
case 321: {
*n_args = 0;
@@ -5813,14 +5789,14 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
- /* freebsd32_aio_cancel */
+ /* aio_cancel */
case 316:
switch(ndx) {
case 0:
p = "int";
break;
case 1:
- p = "struct aiocb32 *";
+ p = "struct aiocb *";
break;
default:
break;
@@ -5836,45 +5812,6 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
- /* freebsd32_oaio_read */
- case 318:
- switch(ndx) {
- case 0:
- p = "struct oaiocb32 *";
- break;
- default:
- break;
- };
- break;
- /* freebsd32_oaio_write */
- case 319:
- switch(ndx) {
- case 0:
- p = "struct oaiocb32 *";
- break;
- default:
- break;
- };
- break;
- /* freebsd32_olio_listio */
- case 320:
- switch(ndx) {
- case 0:
- p = "int";
- break;
- case 1:
- p = "struct oaiocb32 *const *";
- break;
- case 2:
- p = "int";
- break;
- case 3:
- p = "struct osigevent32 *";
- break;
- default:
- break;
- };
- break;
/* yield */
case 321:
break;
@@ -9884,7 +9821,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
- /* freebsd32_aio_cancel */
+ /* aio_cancel */
case 316:
if (ndx == 0 || ndx == 1)
p = "int";
@@ -9894,21 +9831,6 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
- /* freebsd32_oaio_read */
- case 318:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
- /* freebsd32_oaio_write */
- case 319:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
- /* freebsd32_olio_listio */
- case 320:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
/* yield */
case 321:
/* mlockall */
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index 23c2826..2303591 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -477,11 +477,11 @@
u_int nfds, int timeout); }
253 AUE_ISSETUGID NOPROTO { int issetugid(void); }
254 AUE_LCHOWN NOPROTO { int lchown(char *path, int uid, int gid); }
-255 AUE_NULL NOSTD { int freebsd32_aio_read( \
+255 AUE_NULL STD { int freebsd32_aio_read( \
struct aiocb32 *aiocbp); }
-256 AUE_NULL NOSTD { int freebsd32_aio_write( \
+256 AUE_NULL STD { int freebsd32_aio_write( \
struct aiocb32 *aiocbp); }
-257 AUE_NULL NOSTD { int freebsd32_lio_listio(int mode, \
+257 AUE_NULL STD { int freebsd32_lio_listio(int mode, \
struct aiocb32 * const *acb_list, \
int nent, struct sigevent32 *sig); }
258 AUE_NULL UNIMPL nosys
@@ -562,20 +562,20 @@
312 AUE_SETRESGID NOPROTO { int setresgid(gid_t rgid, gid_t egid, \
gid_t sgid); }
313 AUE_NULL OBSOL signanosleep
-314 AUE_NULL NOSTD { int freebsd32_aio_return( \
+314 AUE_NULL STD { int freebsd32_aio_return( \
struct aiocb32 *aiocbp); }
-315 AUE_NULL NOSTD { int freebsd32_aio_suspend( \
+315 AUE_NULL STD { int freebsd32_aio_suspend( \
struct aiocb32 * const * aiocbp, int nent, \
const struct timespec32 *timeout); }
-316 AUE_NULL NOSTD { int freebsd32_aio_cancel(int fd, \
+316 AUE_NULL NOPROTO { int aio_cancel(int fd, \
+ struct aiocb *aiocbp); }
+317 AUE_NULL STD { int freebsd32_aio_error( \
struct aiocb32 *aiocbp); }
-317 AUE_NULL NOSTD { int freebsd32_aio_error( \
- struct aiocb32 *aiocbp); }
-318 AUE_NULL NOSTD { int freebsd32_oaio_read( \
+318 AUE_NULL COMPAT6 { int freebsd32_aio_read( \
struct oaiocb32 *aiocbp); }
-319 AUE_NULL NOSTD { int freebsd32_oaio_write( \
+319 AUE_NULL COMPAT6 { int freebsd32_aio_write( \
struct oaiocb32 *aiocbp); }
-320 AUE_NULL NOSTD { int freebsd32_olio_listio(int mode, \
+320 AUE_NULL COMPAT6 { int freebsd32_lio_listio(int mode, \
struct oaiocb32 * const *acb_list, \
int nent, struct osigevent32 *sig); }
321 AUE_NULL NOPROTO { int yield(void); }
@@ -653,7 +653,7 @@
358 AUE_EXTATTR_DELETE_FILE NOPROTO { int extattr_delete_file( \
const char *path, int attrnamespace, \
const char *attrname); }
-359 AUE_NULL NOSTD { int freebsd32_aio_waitcomplete( \
+359 AUE_NULL STD { int freebsd32_aio_waitcomplete( \
struct aiocb32 **aiocbp, \
struct timespec32 *timeout); }
360 AUE_GETRESUID NOPROTO { int getresuid(uid_t *ruid, uid_t *euid, \
@@ -837,7 +837,7 @@
462 AUE_NULL NOPROTO|NOSTD { int kmq_unlink(const char *path); }
463 AUE_NULL NOPROTO { int abort2(const char *why, int nargs, void **args); }
464 AUE_NULL NOPROTO { int thr_set_name(long id, const char *name); }
-465 AUE_NULL NOSTD { int freebsd32_aio_fsync(int op, \
+465 AUE_NULL STD { int freebsd32_aio_fsync(int op, \
struct aiocb32 *aiocbp); }
466 AUE_RTPRIO NOPROTO { int rtprio_thread(int function, \
lwpid_t lwpid, struct rtprio *rtp); }
@@ -1055,7 +1055,7 @@
__socklen_t * __restrict anamelen, \
int flags); }
542 AUE_PIPE NOPROTO { int pipe2(int *fildes, int flags); }
-543 AUE_NULL NOSTD { int freebsd32_aio_mlock( \
+543 AUE_NULL STD { int freebsd32_aio_mlock( \
struct aiocb32 *aiocbp); }
#ifdef PAD64_REQUIRED
544 AUE_NULL STD { int freebsd32_procctl(int idtype, int pad, \
diff --git a/sys/compat/linux/linux_fork.c b/sys/compat/linux/linux_fork.c
index c12f198..94d9df5 100644
--- a/sys/compat/linux/linux_fork.c
+++ b/sys/compat/linux/linux_fork.c
@@ -222,6 +222,18 @@ linux_clone_proc(struct thread *td, struct linux_clone_args *args)
if (args->flags & LINUX_CLONE_SETTLS)
linux_set_cloned_tls(td2, args->tls);
+ /*
+ * If CLONE_PARENT is set, then the parent of the new process will be
+ * the same as that of the calling process.
+ */
+ if (args->flags & LINUX_CLONE_PARENT) {
+ sx_xlock(&proctree_lock);
+ PROC_LOCK(p2);
+ proc_reparent(p2, td->td_proc->p_pptr);
+ PROC_UNLOCK(p2);
+ sx_xunlock(&proctree_lock);
+ }
+
#ifdef DEBUG
if (ldebug(clone))
printf(LMSG("clone: successful rfork to %d, "
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index fe4dbf6..7e9a0d5 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -191,7 +191,6 @@ linux_alarm(struct thread *td, struct linux_alarm_args *args)
{
struct itimerval it, old_it;
u_int secs;
- int error;
#ifdef DEBUG
if (ldebug(alarm))
@@ -207,9 +206,12 @@ linux_alarm(struct thread *td, struct linux_alarm_args *args)
it.it_value.tv_usec = 0;
it.it_interval.tv_sec = 0;
it.it_interval.tv_usec = 0;
- error = kern_setitimer(td, ITIMER_REAL, &it, &old_it);
- if (error)
- return (error);
+ /*
+ * According to POSIX and Linux implementation
+ * the alarm() system call is always successfull.
+ * Ignore errors and return 0 as a Linux does.
+ */
+ kern_setitimer(td, ITIMER_REAL, &it, &old_it);
if (timevalisset(&old_it.it_value)) {
if (old_it.it_value.tv_usec != 0)
old_it.it_value.tv_sec++;
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index a3f3d0e..01b007c 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -289,6 +289,63 @@ linux_to_bsd_ip_sockopt(int opt)
}
static int
+linux_to_bsd_ip6_sockopt(int opt)
+{
+
+ switch (opt) {
+ case LINUX_IPV6_NEXTHOP:
+ return (IPV6_NEXTHOP);
+ case LINUX_IPV6_UNICAST_HOPS:
+ return (IPV6_UNICAST_HOPS);
+ case LINUX_IPV6_MULTICAST_IF:
+ return (IPV6_MULTICAST_IF);
+ case LINUX_IPV6_MULTICAST_HOPS:
+ return (IPV6_MULTICAST_HOPS);
+ case LINUX_IPV6_MULTICAST_LOOP:
+ return (IPV6_MULTICAST_LOOP);
+ case LINUX_IPV6_ADD_MEMBERSHIP:
+ return (IPV6_JOIN_GROUP);
+ case LINUX_IPV6_DROP_MEMBERSHIP:
+ return (IPV6_LEAVE_GROUP);
+ case LINUX_IPV6_V6ONLY:
+ return (IPV6_V6ONLY);
+ case LINUX_IPV6_DONTFRAG:
+ return (IPV6_DONTFRAG);
+#if 0
+ case LINUX_IPV6_CHECKSUM:
+ return (IPV6_CHECKSUM);
+ case LINUX_IPV6_RECVPKTINFO:
+ return (IPV6_RECVPKTINFO);
+ case LINUX_IPV6_PKTINFO:
+ return (IPV6_PKTINFO);
+ case LINUX_IPV6_RECVHOPLIMIT:
+ return (IPV6_RECVHOPLIMIT);
+ case LINUX_IPV6_HOPLIMIT:
+ return (IPV6_HOPLIMIT);
+ case LINUX_IPV6_RECVHOPOPTS:
+ return (IPV6_RECVHOPOPTS);
+ case LINUX_IPV6_HOPOPTS:
+ return (IPV6_HOPOPTS);
+ case LINUX_IPV6_RTHDRDSTOPTS:
+ return (IPV6_RTHDRDSTOPTS);
+ case LINUX_IPV6_RECVRTHDR:
+ return (IPV6_RECVRTHDR);
+ case LINUX_IPV6_RTHDR:
+ return (IPV6_RTHDR);
+ case LINUX_IPV6_RECVDSTOPTS:
+ return (IPV6_RECVDSTOPTS);
+ case LINUX_IPV6_DSTOPTS:
+ return (IPV6_DSTOPTS);
+ case LINUX_IPV6_RECVPATHMTU:
+ return (IPV6_RECVPATHMTU);
+ case LINUX_IPV6_PATHMTU:
+ return (IPV6_PATHMTU);
+#endif
+ }
+ return (-1);
+}
+
+static int
linux_to_bsd_so_sockopt(int opt)
{
@@ -781,7 +838,10 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
socklen_t * __restrict anamelen;
int flags;
} */ bsd_args;
- int error;
+ cap_rights_t rights;
+ struct socket *so;
+ struct file *fp;
+ int error, error1;
bsd_args.s = s;
/* XXX: */
@@ -796,6 +856,17 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
if (error) {
if (error == EFAULT && namelen != sizeof(struct sockaddr_in))
return (EINVAL);
+ if (error == EINVAL) {
+ error1 = getsock_cap(td, s, &rights, &fp, NULL);
+ if (error1 != 0)
+ return (error1);
+ so = fp->f_data;
+ if (so->so_type == SOCK_DGRAM) {
+ fdrop(fp, td);
+ return (EOPNOTSUPP);
+ }
+ fdrop(fp, td);
+ }
return (error);
}
if (addr)
@@ -1515,6 +1586,9 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args)
case IPPROTO_IP:
name = linux_to_bsd_ip_sockopt(args->optname);
break;
+ case IPPROTO_IPV6:
+ name = linux_to_bsd_ip6_sockopt(args->optname);
+ break;
case IPPROTO_TCP:
name = linux_to_bsd_tcp_sockopt(args->optname);
break;
@@ -1601,6 +1675,9 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args)
case IPPROTO_IP:
name = linux_to_bsd_ip_sockopt(args->optname);
break;
+ case IPPROTO_IPV6:
+ name = linux_to_bsd_ip6_sockopt(args->optname);
+ break;
case IPPROTO_TCP:
name = linux_to_bsd_tcp_sockopt(args->optname);
break;
diff --git a/sys/compat/linux/linux_socket.h b/sys/compat/linux/linux_socket.h
index b32a969..25c0ec3 100644
--- a/sys/compat/linux/linux_socket.h
+++ b/sys/compat/linux/linux_socket.h
@@ -302,6 +302,31 @@ int linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args);
#define LINUX_IP_ADD_MEMBERSHIP 35
#define LINUX_IP_DROP_MEMBERSHIP 36
+#define LINUX_IPV6_CHECKSUM 7
+#define LINUX_IPV6_NEXTHOP 9
+#define LINUX_IPV6_UNICAST_HOPS 16
+#define LINUX_IPV6_MULTICAST_IF 17
+#define LINUX_IPV6_MULTICAST_HOPS 18
+#define LINUX_IPV6_MULTICAST_LOOP 19
+#define LINUX_IPV6_ADD_MEMBERSHIP 20
+#define LINUX_IPV6_DROP_MEMBERSHIP 21
+#define LINUX_IPV6_V6ONLY 26
+
+#define LINUX_IPV6_RECVPKTINFO 49
+#define LINUX_IPV6_PKTINFO 50
+#define LINUX_IPV6_RECVHOPLIMIT 51
+#define LINUX_IPV6_HOPLIMIT 52
+#define LINUX_IPV6_RECVHOPOPTS 53
+#define LINUX_IPV6_HOPOPTS 54
+#define LINUX_IPV6_RTHDRDSTOPTS 55
+#define LINUX_IPV6_RECVRTHDR 56
+#define LINUX_IPV6_RTHDR 57
+#define LINUX_IPV6_RECVDSTOPTS 58
+#define LINUX_IPV6_DSTOPTS 59
+#define LINUX_IPV6_RECVPATHMTU 60
+#define LINUX_IPV6_PATHMTU 61
+#define LINUX_IPV6_DONTFRAG 62
+
#define LINUX_TCP_NODELAY 1
#define LINUX_TCP_MAXSEG 2
#define LINUX_TCP_KEEPIDLE 4
diff --git a/sys/conf/Makefile.riscv b/sys/conf/Makefile.riscv
index 27338b4..8721b53 100644
--- a/sys/conf/Makefile.riscv
+++ b/sys/conf/Makefile.riscv
@@ -29,7 +29,7 @@ S= ../../..
INCLUDES+= -I$S/contrib/libfdt
.if !empty(DDB_ENABLED)
-CFLAGS += -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
+CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
.endif
%BEFORE_DEPEND
diff --git a/sys/conf/files.riscv b/sys/conf/files.riscv
index cfce99b..7b1a040 100644
--- a/sys/conf/files.riscv
+++ b/sys/conf/files.riscv
@@ -23,6 +23,9 @@ riscv/riscv/clock.c standard
riscv/riscv/copyinout.S standard
riscv/riscv/copystr.c standard
riscv/riscv/cpufunc_asm.S standard
+riscv/riscv/db_disasm.c optional ddb
+riscv/riscv/db_interface.c optional ddb
+riscv/riscv/db_trace.c optional ddb
riscv/riscv/devmap.c standard
riscv/riscv/dump_machdep.c standard
riscv/riscv/elf_machdep.c standard
@@ -44,4 +47,5 @@ riscv/riscv/trap.c standard
riscv/riscv/timer.c standard
riscv/riscv/uio_machdep.c standard
riscv/riscv/uma_machdep.c standard
+riscv/riscv/unwind.c optional ddb | kdtrace_hooks | stack
riscv/riscv/vm_machdep.c standard
diff --git a/sys/conf/options.mips b/sys/conf/options.mips
index e85f5b1..69708cc 100644
--- a/sys/conf/options.mips
+++ b/sys/conf/options.mips
@@ -140,3 +140,8 @@ RT305X_USE_UART opt_rt305x.h
# Options that affect the pmap.
#
PV_STATS opt_pmap.h
+
+#
+# Options to use INTRNG code
+#
+MIPS_INTRNG opt_global.h
diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c
index 0db332b..c9ebcc5 100644
--- a/sys/dev/agp/agp_i810.c
+++ b/sys/dev/agp/agp_i810.c
@@ -250,6 +250,10 @@ struct agp_i810_driver {
void (*chipset_flush)(device_t);
};
+static struct {
+ struct intel_gtt base;
+} intel_private;
+
static const struct agp_i810_driver agp_i810_i810_driver = {
.chiptype = CHIP_I810,
.gen = 1,
@@ -526,6 +530,29 @@ static const struct agp_i810_driver agp_i810_hsw_driver = {
.chipset_flush = agp_i810_chipset_flush,
};
+static const struct agp_i810_driver agp_i810_valleyview_driver = {
+ .chiptype = CHIP_SB,
+ .gen = 7,
+ .busdma_addr_mask_sz = 40,
+ .res_spec = agp_g4x_res_spec,
+ .check_active = agp_sb_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_sb_dump_regs,
+ .get_stolen_size = agp_sb_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_sb_get_gtt_total_entries,
+ .install_gatt = agp_g4x_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_sb_write_gtt,
+ .install_gtt_pte = agp_sb_install_gtt_pte,
+ .read_gtt_pte = agp_g4x_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_sb_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i810_chipset_flush,
+};
+
/* For adding new devices, devid is the id of the graphics controller
* (pci:0:2:0, for example). The placeholder (usually at pci:0:2:1) for the
* second head should never be added. The bridge_offset is the offset to
@@ -763,40 +790,200 @@ static const struct agp_i810_match {
},
{
.devid = 0x04028086,
- .name = "Haswell desktop GT1",
+ .name = "Haswell GT1 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x04068086,
+ .name = "Haswell GT1 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x040A8086,
+ .name = "Haswell GT1 server",
.driver = &agp_i810_hsw_driver
},
{
.devid = 0x04128086,
- .name = "Haswell desktop GT2",
+ .name = "Haswell GT2 desktop",
.driver = &agp_i810_hsw_driver
},
{
- .devid = 0x040a8086,
- .name = "Haswell server GT1",
+ .devid = 0x04168086,
+ .name = "Haswell GT2 mobile",
.driver = &agp_i810_hsw_driver
},
{
- .devid = 0x041a8086,
- .name = "Haswell server GT2",
+ .devid = 0x041A8086,
+ .name = "Haswell GT2 server",
.driver = &agp_i810_hsw_driver
},
{
- .devid = 0x04068086,
- .name = "Haswell mobile GT1",
+ .devid = 0x04228086,
+ .name = "Haswell GT2 desktop",
.driver = &agp_i810_hsw_driver
},
{
- .devid = 0x04168086,
- .name = "Haswell mobile GT2",
+ .devid = 0x04268086,
+ .name = "Haswell GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x042A8086,
+ .name = "Haswell GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A028086,
+ .name = "Haswell ULT GT1 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A068086,
+ .name = "Haswell ULT GT1 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A0A8086,
+ .name = "Haswell ULT GT1 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A128086,
+ .name = "Haswell ULT GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A168086,
+ .name = "Haswell ULT GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A1A8086,
+ .name = "Haswell ULT GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A228086,
+ .name = "Haswell ULT GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A268086,
+ .name = "Haswell ULT GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0A2A8086,
+ .name = "Haswell ULT GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C028086,
+ .name = "Haswell SDV GT1 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C068086,
+ .name = "Haswell SDV GT1 mobile",
.driver = &agp_i810_hsw_driver
},
{
- .devid = 0x0c168086,
- .name = "Haswell SDV",
+ .devid = 0x0C0A8086,
+ .name = "Haswell SDV GT1 server",
.driver = &agp_i810_hsw_driver
},
{
+ .devid = 0x0C128086,
+ .name = "Haswell SDV GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C168086,
+ .name = "Haswell SDV GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C1A8086,
+ .name = "Haswell SDV GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C228086,
+ .name = "Haswell SDV GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C268086,
+ .name = "Haswell SDV GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0C2A8086,
+ .name = "Haswell SDV GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D028086,
+ .name = "Haswell CRW GT1 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D068086,
+ .name = "Haswell CRW GT1 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D0A8086,
+ .name = "Haswell CRW GT1 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D128086,
+ .name = "Haswell CRW GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D168086,
+ .name = "Haswell CRW GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D1A8086,
+ .name = "Haswell CRW GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D228086,
+ .name = "Haswell CRW GT2 desktop",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D268086,
+ .name = "Haswell CRW GT2 mobile",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x0D2A8086,
+ .name = "Haswell CRW GT2 server",
+ .driver = &agp_i810_hsw_driver
+ },
+ {
+ .devid = 0x01558086,
+ .name = "Valleyview (desktop)",
+ .driver = &agp_i810_valleyview_driver
+ },
+ {
+ .devid = 0x01578086,
+ .name = "Valleyview (mobile)",
+ .driver = &agp_i810_valleyview_driver
+ },
+ {
+ .devid = 0x0F308086,
+ .name = "Valleyview (mobile)",
+ .driver = &agp_i810_valleyview_driver
+ },
+ {
.devid = 0,
}
};
@@ -2285,6 +2472,10 @@ agp_intel_gtt_get(device_t dev)
res.gtt_mappable_entries = sc->gtt_mappable_entries;
res.do_idle_maps = 0;
res.scratch_page_dma = VM_PAGE_TO_PHYS(bogus_page);
+ if (sc->agp.as_aperture != NULL)
+ res.gma_bus_addr = rman_get_start(sc->agp.as_aperture);
+ else
+ res.gma_bus_addr = 0;
return (res);
}
@@ -2588,11 +2779,12 @@ intel_gtt_insert_pages(u_int first_entry, u_int num_entries, vm_page_t *pages,
pages, flags);
}
-struct intel_gtt
+struct intel_gtt *
intel_gtt_get(void)
{
- return (agp_intel_gtt_get(intel_agp));
+ intel_private.base = agp_intel_gtt_get(intel_agp);
+ return (&intel_private.base);
}
int
diff --git a/sys/dev/agp/agp_i810.h b/sys/dev/agp/agp_i810.h
index 68cad87..2cb71eb 100644
--- a/sys/dev/agp/agp_i810.h
+++ b/sys/dev/agp/agp_i810.h
@@ -33,6 +33,7 @@
#define AGP_AGP_I810_H
#include <sys/param.h>
+#include <sys/rman.h>
#include <sys/sglist.h>
#include <vm/vm.h>
@@ -51,24 +52,23 @@
struct intel_gtt {
/* Size of memory reserved for graphics by the BIOS */
- u_int stolen_size;
+ unsigned int stolen_size;
/* Total number of gtt entries. */
- u_int gtt_total_entries;
- /*
- * Part of the gtt that is mappable by the cpu, for those
- * chips where this is not the full gtt.
- */
- u_int gtt_mappable_entries;
-
- /*
- * Always false.
- */
- u_int do_idle_maps;
-
- /*
- * Share the scratch page dma with ppgtts.
- */
+ unsigned int gtt_total_entries;
+ /* Part of the gtt that is mappable by the cpu, for those chips where
+ * this is not the full gtt. */
+ unsigned int gtt_mappable_entries;
+ /* Whether i915 needs to use the dmar apis or not. */
+ unsigned int needs_dmar : 1;
+ /* Whether we idle the gpu before mapping/unmapping */
+ unsigned int do_idle_maps : 1;
+ /* Share the scratch page dma with ppgtts. */
vm_paddr_t scratch_page_dma;
+ vm_page_t scratch_page;
+ /* for ppgtt PDE access */
+ uint32_t *gtt;
+ /* needed for ioremap in drm/i915 */
+ bus_addr_t gma_bus_addr;
};
struct intel_gtt agp_intel_gtt_get(device_t dev);
@@ -83,7 +83,7 @@ void agp_intel_gtt_insert_sg_entries(device_t dev, struct sglist *sg_list,
void agp_intel_gtt_insert_pages(device_t dev, u_int first_entry,
u_int num_entries, vm_page_t *pages, u_int flags);
-struct intel_gtt intel_gtt_get(void);
+struct intel_gtt *intel_gtt_get(void);
int intel_gtt_chipset_flush(void);
void intel_gtt_unmap_memory(struct sglist *sg_list);
void intel_gtt_clear_range(u_int first_entry, u_int num_entries);
diff --git a/sys/dev/amr/amr.c b/sys/dev/amr/amr.c
index faa92d0..0b52d9f8 100644
--- a/sys/dev/amr/amr.c
+++ b/sys/dev/amr/amr.c
@@ -1319,7 +1319,7 @@ amr_bio_command(struct amr_softc *sc, struct amr_command **acp)
blkcount = (bio->bio_bcount + AMR_BLKSIZE - 1) / AMR_BLKSIZE;
ac->ac_mailbox.mb_command = cmd;
- if (bio->bio_cmd & (BIO_READ|BIO_WRITE)) {
+ if (bio->bio_cmd == BIO_READ || bio->bio_cmd == BIO_WRITE) {
ac->ac_mailbox.mb_blkcount = blkcount;
ac->ac_mailbox.mb_lba = bio->bio_pblkno;
if ((bio->bio_pblkno + blkcount) > sc->amr_drive[driveno].al_size) {
diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c
index 12d8025..d944395 100644
--- a/sys/dev/bxe/bxe.c
+++ b/sys/dev/bxe/bxe.c
@@ -669,6 +669,8 @@ static void bxe_handle_fp_tq(void *context, int pending);
static int bxe_add_cdev(struct bxe_softc *sc);
static void bxe_del_cdev(struct bxe_softc *sc);
static int bxe_grc_dump(struct bxe_softc *sc);
+static int bxe_alloc_buf_rings(struct bxe_softc *sc);
+static void bxe_free_buf_rings(struct bxe_softc *sc);
/* calculate crc32 on a buffer (NOTE: crc32_length MUST be aligned to 8) */
uint32_t
@@ -4193,9 +4195,20 @@ bxe_nic_unload(struct bxe_softc *sc,
{
uint8_t global = FALSE;
uint32_t val;
+ int i;
BXE_CORE_LOCK_ASSERT(sc);
+ if_setdrvflagbits(sc->ifp, 0, IFF_DRV_RUNNING);
+
+ for (i = 0; i < sc->num_queues; i++) {
+ struct bxe_fastpath *fp;
+
+ fp = &sc->fp[i];
+ BXE_FP_TX_LOCK(fp);
+ BXE_FP_TX_UNLOCK(fp);
+ }
+
BLOGD(sc, DBG_LOAD, "Starting NIC unload...\n");
/* mark driver as unloaded in shmem2 */
@@ -5726,7 +5739,7 @@ bxe_tx_mq_start_locked(struct bxe_softc *sc,
}
if (!sc->link_vars.link_up ||
- (ifp->if_drv_flags &
+ (if_getdrvflags(ifp) &
(IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) {
rc = drbr_enqueue_drv(ifp, tx_br, m);
goto bxe_tx_mq_start_locked_exit;
@@ -6239,8 +6252,6 @@ bxe_free_fp_buffers(struct bxe_softc *sc)
m_freem(m);
BXE_FP_TX_UNLOCK(fp);
}
- buf_ring_free(fp->tx_br, M_DEVBUF);
- fp->tx_br = NULL;
}
#endif
@@ -6270,14 +6281,6 @@ bxe_free_fp_buffers(struct bxe_softc *sc)
}
/* XXX verify all mbufs were reclaimed */
-
- if (mtx_initialized(&fp->tx_mtx)) {
- mtx_destroy(&fp->tx_mtx);
- }
-
- if (mtx_initialized(&fp->rx_mtx)) {
- mtx_destroy(&fp->rx_mtx);
- }
}
}
@@ -6499,15 +6502,6 @@ bxe_alloc_fp_buffers(struct bxe_softc *sc)
for (i = 0; i < sc->num_queues; i++) {
fp = &sc->fp[i];
-#if __FreeBSD_version >= 800000
- fp->tx_br = buf_ring_alloc(BXE_BR_SIZE, M_DEVBUF,
- M_NOWAIT, &fp->tx_mtx);
- if (fp->tx_br == NULL) {
- BLOGE(sc, "buf_ring alloc fail for fp[%02d]\n", i);
- goto bxe_alloc_fp_buffers_error;
- }
-#endif
-
ring_prod = cqe_ring_prod = 0;
fp->rx_bd_cons = 0;
fp->rx_cq_cons = 0;
@@ -9615,14 +9609,6 @@ bxe_init_eth_fp(struct bxe_softc *sc,
fp->sc = sc;
fp->index = idx;
- snprintf(fp->tx_mtx_name, sizeof(fp->tx_mtx_name),
- "bxe%d_fp%d_tx_lock", sc->unit, idx);
- mtx_init(&fp->tx_mtx, fp->tx_mtx_name, NULL, MTX_DEF);
-
- snprintf(fp->rx_mtx_name, sizeof(fp->rx_mtx_name),
- "bxe%d_fp%d_rx_lock", sc->unit, idx);
- mtx_init(&fp->rx_mtx, fp->rx_mtx_name, NULL, MTX_DEF);
-
fp->igu_sb_id = (sc->igu_base_sb + idx + CNIC_SUPPORT(sc));
fp->fw_sb_id = (sc->base_fw_ndsb + idx + CNIC_SUPPORT(sc));
@@ -15788,6 +15774,89 @@ bxe_add_sysctls(struct bxe_softc *sc)
}
}
+static int
+bxe_alloc_buf_rings(struct bxe_softc *sc)
+{
+#if __FreeBSD_version >= 800000
+
+ int i;
+ struct bxe_fastpath *fp;
+
+ for (i = 0; i < sc->num_queues; i++) {
+
+ fp = &sc->fp[i];
+
+ fp->tx_br = buf_ring_alloc(BXE_BR_SIZE, M_DEVBUF,
+ M_NOWAIT, &fp->tx_mtx);
+ if (fp->tx_br == NULL)
+ return (-1);
+ }
+#endif
+ return (0);
+}
+
+static void
+bxe_free_buf_rings(struct bxe_softc *sc)
+{
+#if __FreeBSD_version >= 800000
+
+ int i;
+ struct bxe_fastpath *fp;
+
+ for (i = 0; i < sc->num_queues; i++) {
+
+ fp = &sc->fp[i];
+
+ if (fp->tx_br) {
+ buf_ring_free(fp->tx_br, M_DEVBUF);
+ fp->tx_br = NULL;
+ }
+ }
+
+#endif
+}
+
+static void
+bxe_init_fp_mutexs(struct bxe_softc *sc)
+{
+ int i;
+ struct bxe_fastpath *fp;
+
+ for (i = 0; i < sc->num_queues; i++) {
+
+ fp = &sc->fp[i];
+
+ snprintf(fp->tx_mtx_name, sizeof(fp->tx_mtx_name),
+ "bxe%d_fp%d_tx_lock", sc->unit, i);
+ mtx_init(&fp->tx_mtx, fp->tx_mtx_name, NULL, MTX_DEF);
+
+ snprintf(fp->rx_mtx_name, sizeof(fp->rx_mtx_name),
+ "bxe%d_fp%d_rx_lock", sc->unit, i);
+ mtx_init(&fp->rx_mtx, fp->rx_mtx_name, NULL, MTX_DEF);
+ }
+}
+
+static void
+bxe_destroy_fp_mutexs(struct bxe_softc *sc)
+{
+ int i;
+ struct bxe_fastpath *fp;
+
+ for (i = 0; i < sc->num_queues; i++) {
+
+ fp = &sc->fp[i];
+
+ if (mtx_initialized(&fp->tx_mtx)) {
+ mtx_destroy(&fp->tx_mtx);
+ }
+
+ if (mtx_initialized(&fp->rx_mtx)) {
+ mtx_destroy(&fp->rx_mtx);
+ }
+ }
+}
+
+
/*
* Device attach function.
*
@@ -15899,8 +15968,25 @@ bxe_attach(device_t dev)
return (ENXIO);
}
+ bxe_init_fp_mutexs(sc);
+
+ if (bxe_alloc_buf_rings(sc) != 0) {
+ bxe_free_buf_rings(sc);
+ bxe_interrupt_free(sc);
+ bxe_del_cdev(sc);
+ if (sc->ifp != NULL) {
+ ether_ifdetach(sc->ifp);
+ }
+ ifmedia_removeall(&sc->ifmedia);
+ bxe_release_mutexes(sc);
+ bxe_deallocate_bars(sc);
+ pci_disable_busmaster(dev);
+ return (ENXIO);
+ }
+
/* allocate ilt */
if (bxe_alloc_ilt_mem(sc) != 0) {
+ bxe_free_buf_rings(sc);
bxe_interrupt_free(sc);
bxe_del_cdev(sc);
if (sc->ifp != NULL) {
@@ -15916,6 +16002,7 @@ bxe_attach(device_t dev)
/* allocate the host hardware/software hsi structures */
if (bxe_alloc_hsi_mem(sc) != 0) {
bxe_free_ilt_mem(sc);
+ bxe_free_buf_rings(sc);
bxe_interrupt_free(sc);
bxe_del_cdev(sc);
if (sc->ifp != NULL) {
@@ -16023,12 +16110,16 @@ bxe_detach(device_t dev)
/* free ilt */
bxe_free_ilt_mem(sc);
+ bxe_free_buf_rings(sc);
+
/* release the interrupts */
bxe_interrupt_free(sc);
/* Release the mutexes*/
+ bxe_destroy_fp_mutexs(sc);
bxe_release_mutexes(sc);
+
/* Release the PCIe BAR mapped memory */
bxe_deallocate_bars(sc);
diff --git a/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c b/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c
index b41f0c6..6343d4d 100644
--- a/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c
+++ b/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c
@@ -286,7 +286,7 @@ release_tid(struct toedev *tod, unsigned int tid, int qset)
struct tid_info *t = &td->tid_maps;
#endif
- KASSERT(tid >= 0 && tid < t->ntids,
+ KASSERT(tid < t->ntids,
("%s: tid=%d, ntids=%d", __func__, tid, t->ntids));
m = M_GETHDR_OFLD(qset, CPL_PRIORITY_CONTROL, cpl);
diff --git a/sys/dev/cxgbe/adapter.h b/sys/dev/cxgbe/adapter.h
index c91e6a5..32c9c2b 100644
--- a/sys/dev/cxgbe/adapter.h
+++ b/sys/dev/cxgbe/adapter.h
@@ -438,6 +438,29 @@ struct hw_buf_info {
};
enum {
+ NUM_MEMWIN = 3,
+
+ MEMWIN0_APERTURE = 2048,
+ MEMWIN0_BASE = 0x1b800,
+
+ MEMWIN1_APERTURE = 32768,
+ MEMWIN1_BASE = 0x28000,
+
+ MEMWIN2_APERTURE_T4 = 65536,
+ MEMWIN2_BASE_T4 = 0x30000,
+
+ MEMWIN2_APERTURE_T5 = 128 * 1024,
+ MEMWIN2_BASE_T5 = 0x60000,
+};
+
+struct memwin {
+ struct rwlock mw_lock __aligned(CACHE_LINE_SIZE);
+ uint32_t mw_base; /* constant after setup_memwin */
+ uint32_t mw_aperture; /* ditto */
+ uint32_t mw_curpos; /* protected by mw_lock */
+};
+
+enum {
FL_STARVING = (1 << 0), /* on the adapter's list of starving fl's */
FL_DOOMED = (1 << 1), /* about to be destroyed */
FL_BUF_PACKING = (1 << 2), /* buffer packing enabled */
@@ -671,13 +694,6 @@ struct sge_nm_txq {
#endif
struct sge {
- int timer_val[SGE_NTIMERS];
- int counter_val[SGE_NCOUNTERS];
- int fl_starve_threshold;
- int fl_starve_threshold2;
- int eq_s_qpp;
- int iq_s_qpp;
-
int nrxq; /* total # of Ethernet rx queues */
int ntxq; /* total # of Ethernet tx tx queues */
#ifdef TCP_OFFLOAD
@@ -710,8 +726,6 @@ struct sge {
struct sge_iq **iqmap; /* iq->cntxt_id to iq mapping */
struct sge_eq **eqmap; /* eq->cntxt_id to eq mapping */
- int pad_boundary;
- int pack_boundary;
int8_t safe_hwidx1; /* may not have room for metadata */
int8_t safe_hwidx2; /* with room for metadata and maybe more */
struct sw_zone_info sw_zone_info[SW_ZONE_SIZES];
@@ -743,6 +757,8 @@ struct adapter {
unsigned int pf;
unsigned int mbox;
+ unsigned int vpd_busy;
+ unsigned int vpd_flag;
/* Interrupt information */
int intr_type;
@@ -811,7 +827,9 @@ struct adapter {
TAILQ_HEAD(, sge_fl) sfl;
struct callout sfl_callout;
- struct mtx regwin_lock; /* for indirect reads and memory windows */
+ struct mtx reg_lock; /* for indirect register access */
+
+ struct memwin memwin[NUM_MEMWIN]; /* memory windows */
an_handler_t an_handler __aligned(CACHE_LINE_SIZE);
fw_msg_handler_t fw_msg_handler[7]; /* NUM_FW6_TYPES */
@@ -1035,6 +1053,17 @@ tx_resume_threshold(struct sge_eq *eq)
return (eq->sidx / 4);
}
+static inline int
+t4_use_ldst(struct adapter *sc)
+{
+
+#ifdef notyet
+ return (sc->flags & FW_OK || !sc->use_bd);
+#else
+ return (0);
+#endif
+}
+
/* t4_main.c */
int t4_os_find_pci_capability(struct adapter *, int);
int t4_os_pci_save_state(struct adapter *);
diff --git a/sys/dev/cxgbe/common/common.h b/sys/dev/cxgbe/common/common.h
index f12ad29..d499f74 100644
--- a/sys/dev/cxgbe/common/common.h
+++ b/sys/dev/cxgbe/common/common.h
@@ -32,6 +32,9 @@
#include "t4_hw.h"
+#define GLBL_INTR_MASK (F_CIM | F_MPS | F_PL | F_PCIE | F_MC0 | F_EDC0 | \
+ F_EDC1 | F_LE | F_TP | F_MA | F_PM_TX | F_PM_RX | F_ULP_RX | \
+ F_CPL_SWITCH | F_SGE | F_ULP_TX)
enum {
MAX_NPORTS = 4, /* max # of ports */
@@ -42,22 +45,13 @@ enum {
MACADDR_LEN = 12, /* MAC Address length */
};
-enum { MEM_EDC0, MEM_EDC1, MEM_MC, MEM_MC0 = MEM_MC, MEM_MC1 };
-
enum {
- MEMWIN0_APERTURE = 2048,
- MEMWIN0_BASE = 0x1b800,
-
- MEMWIN1_APERTURE = 32768,
- MEMWIN1_BASE = 0x28000,
-
- MEMWIN2_APERTURE_T4 = 65536,
- MEMWIN2_BASE_T4 = 0x30000,
-
- MEMWIN2_APERTURE_T5 = 128 * 1024,
- MEMWIN2_BASE_T5 = 0x60000,
+ T4_REGMAP_SIZE = (160 * 1024),
+ T5_REGMAP_SIZE = (332 * 1024),
};
+enum { MEM_EDC0, MEM_EDC1, MEM_MC, MEM_MC0 = MEM_MC, MEM_MC1 };
+
enum dev_master { MASTER_CANT, MASTER_MAY, MASTER_MUST };
enum dev_state { DEV_STATE_UNINIT, DEV_STATE_INIT, DEV_STATE_ERR };
@@ -68,11 +62,6 @@ enum {
PAUSE_AUTONEG = 1 << 2
};
-struct memwin {
- uint32_t base;
- uint32_t aperture;
-};
-
struct port_stats {
u64 tx_octets; /* total # of octets in good frames */
u64 tx_frames; /* all good frames */
@@ -214,18 +203,40 @@ struct tp_rdma_stats {
u32 rqe_dfr_mod;
};
+struct sge_params {
+ int timer_val[SGE_NTIMERS];
+ int counter_val[SGE_NCOUNTERS];
+ int fl_starve_threshold;
+ int fl_starve_threshold2;
+ int page_shift;
+ int eq_s_qpp;
+ int iq_s_qpp;
+ int spg_len;
+ int pad_boundary;
+ int pack_boundary;
+ int fl_pktshift;
+};
+
struct tp_params {
- unsigned int ntxchan; /* # of Tx channels */
unsigned int tre; /* log2 of core clocks per TP tick */
unsigned int dack_re; /* DACK timer resolution */
unsigned int la_mask; /* what events are recorded by TP LA */
unsigned short tx_modq[MAX_NCHAN]; /* channel to modulation queue map */
+
uint32_t vlan_pri_map;
uint32_t ingress_config;
- int8_t vlan_shift;
- int8_t vnic_shift;
+ uint32_t rx_pkt_encap;
+
+ int8_t fcoe_shift;
int8_t port_shift;
+ int8_t vnic_shift;
+ int8_t vlan_shift;
+ int8_t tos_shift;
int8_t protocol_shift;
+ int8_t ethertype_shift;
+ int8_t macmatch_shift;
+ int8_t matchtype_shift;
+ int8_t frag_shift;
};
struct vpd_params {
@@ -267,6 +278,7 @@ struct chip_params {
};
struct adapter_params {
+ struct sge_params sge;
struct tp_params tp;
struct vpd_params vpd;
struct pci_params pci;
@@ -307,6 +319,18 @@ struct adapter_params {
#define CHELSIO_T5 0x5
#define CHELSIO_T6 0x6
+/*
+ * State needed to monitor the forward progress of SGE Ingress DMA activities
+ * and possible hangs.
+ */
+struct sge_idma_monitor_state {
+ unsigned int idma_1s_thresh; /* 1s threshold in Core Clock ticks */
+ unsigned int idma_stalled[2]; /* synthesized stalled timers in HZ */
+ unsigned int idma_state[2]; /* IDMA Hang detect state */
+ unsigned int idma_qid[2]; /* IDMA Hung Ingress Queue ID */
+ unsigned int idma_warn[2]; /* time to warning in HZ */
+};
+
struct trace_params {
u32 data[TRACE_LEN / 4];
u32 mask[TRACE_LEN / 4];
@@ -401,6 +425,14 @@ static inline unsigned int us_to_core_ticks(const struct adapter *adap,
return (us * adap->params.vpd.cclk) / 1000;
}
+static inline unsigned int core_ticks_to_us(const struct adapter *adapter,
+ unsigned int ticks)
+{
+ /* add Core Clock / 2 to round ticks to nearest uS */
+ return ((ticks * 1000 + adapter->params.vpd.cclk/2) /
+ adapter->params.vpd.cclk);
+}
+
static inline unsigned int dack_ticks_to_usec(const struct adapter *adap,
unsigned int ticks)
{
@@ -409,9 +441,19 @@ static inline unsigned int dack_ticks_to_usec(const struct adapter *adap,
void t4_set_reg_field(struct adapter *adap, unsigned int addr, u32 mask, u32 val);
+int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
+ int size, void *rpl, bool sleep_ok, int timeout);
int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
void *rpl, bool sleep_ok);
+static inline int t4_wr_mbox_timeout(struct adapter *adap, int mbox,
+ const void *cmd, int size, void *rpl,
+ int timeout)
+{
+ return t4_wr_mbox_meat_timeout(adap, mbox, cmd, size, rpl, true,
+ timeout);
+}
+
static inline int t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd,
int size, void *rpl)
{
@@ -450,21 +492,31 @@ int t4_eeprom_ptov(unsigned int phys_addr, unsigned int fn, unsigned int sz);
int t4_seeprom_wp(struct adapter *adapter, int enable);
int t4_read_flash(struct adapter *adapter, unsigned int addr, unsigned int nwords,
u32 *data, int byte_oriented);
+int t4_write_flash(struct adapter *adapter, unsigned int addr,
+ unsigned int n, const u8 *data, int byte_oriented);
int t4_load_fw(struct adapter *adapter, const u8 *fw_data, unsigned int size);
+int t4_fwcache(struct adapter *adap, enum fw_params_param_dev_fwcache op);
+int t5_fw_init_extern_mem(struct adapter *adap);
+int t4_load_bootcfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size);
int t4_load_boot(struct adapter *adap, u8 *boot_data,
unsigned int boot_addr, unsigned int size);
+int t4_flash_erase_sectors(struct adapter *adapter, int start, int end);
int t4_flash_cfg_addr(struct adapter *adapter);
int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size);
int t4_get_fw_version(struct adapter *adapter, u32 *vers);
int t4_get_tp_version(struct adapter *adapter, u32 *vers);
-int t4_check_fw_version(struct adapter *adapter);
+int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
int t4_init_hw(struct adapter *adapter, u32 fw_params);
-int t4_prep_adapter(struct adapter *adapter);
+int t4_prep_adapter(struct adapter *adapter, u8 *buf);
+int t4_shutdown_adapter(struct adapter *adapter);
+int t4_init_devlog_params(struct adapter *adapter, int fw_attach);
+int t4_init_sge_params(struct adapter *adapter);
int t4_init_tp_params(struct adapter *adap);
int t4_filter_field_shift(const struct adapter *adap, int filter_sel);
-int t4_port_init(struct port_info *p, int mbox, int pf, int vf);
-int t4_reinit_adapter(struct adapter *adap);
+int t4_port_init(struct adapter *adap, int mbox, int pf, int vf, int port_id);
void t4_fatal_err(struct adapter *adapter);
+void t4_db_full(struct adapter *adapter);
+void t4_db_dropped(struct adapter *adapter);
int t4_set_trace_filter(struct adapter *adapter, const struct trace_params *tp,
int filter_index, int enable);
void t4_get_trace_filter(struct adapter *adapter, struct trace_params *tp,
@@ -476,8 +528,10 @@ int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode,
int t4_config_vi_rss(struct adapter *adapter, int mbox, unsigned int viid,
unsigned int flags, unsigned int defq);
int t4_read_rss(struct adapter *adapter, u16 *entries);
+void t4_fw_tp_pio_rw(struct adapter *adap, u32 *vals, unsigned int nregs,
+ unsigned int start_index, unsigned int rw);
void t4_read_rss_key(struct adapter *adapter, u32 *key);
-void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx);
+void t4_write_rss_key(struct adapter *adap, u32 *key, int idx);
void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index, u32 *valp);
void t4_write_rss_pf_config(struct adapter *adapter, unsigned int index, u32 val);
void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
@@ -504,11 +558,22 @@ int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr);
void t4_cim_read_pif_la(struct adapter *adap, u32 *pif_req, u32 *pif_rsp,
unsigned int *pif_req_wrptr, unsigned int *pif_rsp_wrptr);
void t4_cim_read_ma_la(struct adapter *adap, u32 *ma_req, u32 *ma_rsp);
+int t4_get_flash_params(struct adapter *adapter);
+
+u32 t4_read_pcie_cfg4(struct adapter *adap, int reg, int drv_fw_attach);
int t4_mc_read(struct adapter *adap, int idx, u32 addr,
__be32 *data, u64 *parity);
int t4_edc_read(struct adapter *adap, int idx, u32 addr, __be32 *data, u64 *parity);
int t4_mem_read(struct adapter *adap, int mtype, u32 addr, u32 size,
__be32 *data);
+void t4_idma_monitor_init(struct adapter *adapter,
+ struct sge_idma_monitor_state *idma);
+void t4_idma_monitor(struct adapter *adapter,
+ struct sge_idma_monitor_state *idma,
+ int hz, int ticks);
+
+unsigned int t4_get_regs_len(struct adapter *adapter);
+void t4_get_regs(struct adapter *adap, u8 *buf, size_t buf_size);
const char *t4_get_port_type_description(enum fw_port_type port_type);
void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p);
@@ -564,6 +629,13 @@ int t4_fw_initialize(struct adapter *adap, unsigned int mbox);
int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
unsigned int vf, unsigned int nparams, const u32 *params,
u32 *val);
+int t4_query_params_rw(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int vf, unsigned int nparams, const u32 *params,
+ u32 *val, int rw);
+int t4_set_params_timeout(struct adapter *adap, unsigned int mbox,
+ unsigned int pf, unsigned int vf,
+ unsigned int nparams, const u32 *params,
+ const u32 *val, int timeout);
int t4_set_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
unsigned int vf, unsigned int nparams, const u32 *params,
const u32 *val);
@@ -592,6 +664,8 @@ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
int idx, const u8 *addr, bool persist, bool add_smt);
int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
bool ucast, u64 vec, bool sleep_ok);
+int t4_enable_vi_params(struct adapter *adap, unsigned int mbox,
+ unsigned int viid, bool rx_en, bool tx_en, bool dcb_en);
int t4_enable_vi(struct adapter *adap, unsigned int mbox, unsigned int viid,
bool rx_en, bool tx_en);
int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid,
@@ -608,6 +682,9 @@ int t4_i2c_wr(struct adapter *adap, unsigned int mbox,
int port, unsigned int devid,
unsigned int offset, unsigned int len,
u8 *buf);
+int t4_iq_stop(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int vf, unsigned int iqtype, unsigned int iqid,
+ unsigned int fl0id, unsigned int fl1id);
int t4_iq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
unsigned int vf, unsigned int iqtype, unsigned int iqid,
unsigned int fl0id, unsigned int fl1id);
@@ -622,6 +699,7 @@ int t4_sge_ctxt_rd(struct adapter *adap, unsigned int mbox, unsigned int cid,
int t4_sge_ctxt_rd_bd(struct adapter *adap, unsigned int cid, enum ctxt_type ctype,
u32 *data);
int t4_sge_ctxt_flush(struct adapter *adap, unsigned int mbox);
+const char *t4_link_down_rc_str(unsigned char link_down_rc);
int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl);
int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox, u32 addr, u32 val);
int t4_sched_config(struct adapter *adapter, int type, int minmaxen,
@@ -630,4 +708,10 @@ int t4_sched_params(struct adapter *adapter, int type, int level, int mode,
int rateunit, int ratemode, int channel, int cl,
int minrate, int maxrate, int weight, int pktsize,
int sleep_ok);
+int t4_config_watchdog(struct adapter *adapter, unsigned int mbox,
+ unsigned int pf, unsigned int vf,
+ unsigned int timeout, unsigned int action);
+int t4_get_devlog_level(struct adapter *adapter, unsigned int *level);
+int t4_set_devlog_level(struct adapter *adapter, unsigned int level);
+void t4_sge_decode_idma_state(struct adapter *adapter, int state);
#endif /* __CHELSIO_COMMON_H */
diff --git a/sys/dev/cxgbe/common/t4_hw.c b/sys/dev/cxgbe/common/t4_hw.c
index 980ee96..92104c8 100644
--- a/sys/dev/cxgbe/common/t4_hw.c
+++ b/sys/dev/cxgbe/common/t4_hw.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2012 Chelsio Communications, Inc.
+ * Copyright (c) 2012, 2016 Chelsio Communications, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -117,8 +117,8 @@ void t4_set_reg_field(struct adapter *adapter, unsigned int addr, u32 mask,
* register pair.
*/
void t4_read_indirect(struct adapter *adap, unsigned int addr_reg,
- unsigned int data_reg, u32 *vals, unsigned int nregs,
- unsigned int start_idx)
+ unsigned int data_reg, u32 *vals,
+ unsigned int nregs, unsigned int start_idx)
{
while (nregs--) {
t4_write_reg(adap, addr_reg, start_idx);
@@ -211,7 +211,7 @@ static void t4_report_fw_error(struct adapter *adap)
pcie_fw = t4_read_reg(adap, A_PCIE_FW);
if (pcie_fw & F_PCIE_FW_ERR)
CH_ERR(adap, "Firmware reports adapter error: %s\n",
- reason[G_PCIE_FW_EVAL(pcie_fw)]);
+ reason[G_PCIE_FW_EVAL(pcie_fw)]);
}
/*
@@ -227,25 +227,27 @@ static void get_mbox_rpl(struct adapter *adap, __be64 *rpl, int nflit,
/*
* Handle a FW assertion reported in a mailbox.
*/
-static void fw_asrt(struct adapter *adap, u32 mbox_addr)
+static void fw_asrt(struct adapter *adap, struct fw_debug_cmd *asrt)
{
- struct fw_debug_cmd asrt;
-
- get_mbox_rpl(adap, (__be64 *)&asrt, sizeof(asrt) / 8, mbox_addr);
- CH_ALERT(adap, "FW assertion at %.16s:%u, val0 %#x, val1 %#x\n",
- asrt.u.assert.filename_0_7, ntohl(asrt.u.assert.line),
- ntohl(asrt.u.assert.x), ntohl(asrt.u.assert.y));
+ CH_ALERT(adap,
+ "FW assertion at %.16s:%u, val0 %#x, val1 %#x\n",
+ asrt->u.assert.filename_0_7,
+ be32_to_cpu(asrt->u.assert.line),
+ be32_to_cpu(asrt->u.assert.x),
+ be32_to_cpu(asrt->u.assert.y));
}
#define X_CIM_PF_NOACCESS 0xeeeeeeee
/**
- * t4_wr_mbox_meat - send a command to FW through the given mailbox
+ * t4_wr_mbox_meat_timeout - send a command to FW through the given mailbox
* @adap: the adapter
* @mbox: index of the mailbox to use
* @cmd: the command to write
* @size: command length in bytes
* @rpl: where to optionally store the reply
* @sleep_ok: if true we may sleep while awaiting command completion
+ * @timeout: time to wait for command to finish before timing out
+ * (negative implies @sleep_ok=false)
*
* Sends the given command to FW through the selected mailbox and waits
* for the FW to execute the command. If @rpl is not %NULL it is used to
@@ -254,14 +256,17 @@ static void fw_asrt(struct adapter *adap, u32 mbox_addr)
* INITIALIZE can take a considerable amount of time to execute.
* @sleep_ok determines whether we may sleep while awaiting the response.
* If sleeping is allowed we use progressive backoff otherwise we spin.
+ * Note that passing in a negative @timeout is an alternate mechanism
+ * for specifying @sleep_ok=false. This is useful when a higher level
+ * interface allows for specification of @timeout but not @sleep_ok ...
*
* The return value is 0 on success or a negative errno on failure. A
* failure can happen either because we are not able to execute the
* command or FW executes it but signals an error. In the latter case
* the return value is the error code indicated by FW (negated).
*/
-int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
- void *rpl, bool sleep_ok)
+int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
+ int size, void *rpl, bool sleep_ok, int timeout)
{
/*
* We delay in small increments at first in an effort to maintain
@@ -271,43 +276,97 @@ int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
static const int delay[] = {
1, 1, 3, 5, 10, 10, 20, 50, 100
};
-
u32 v;
u64 res;
- int i, ms, delay_idx;
+ int i, ms, delay_idx, ret;
const __be64 *p = cmd;
u32 data_reg = PF_REG(mbox, A_CIM_PF_MAILBOX_DATA);
u32 ctl_reg = PF_REG(mbox, A_CIM_PF_MAILBOX_CTRL);
+ u32 ctl;
+ __be64 cmd_rpl[MBOX_LEN/8];
+ u32 pcie_fw;
if ((size & 15) || size > MBOX_LEN)
return -EINVAL;
- v = G_MBOWNER(t4_read_reg(adap, ctl_reg));
- for (i = 0; v == X_MBOWNER_NONE && i < 3; i++)
- v = G_MBOWNER(t4_read_reg(adap, ctl_reg));
+ /*
+ * If we have a negative timeout, that implies that we can't sleep.
+ */
+ if (timeout < 0) {
+ sleep_ok = false;
+ timeout = -timeout;
+ }
- if (v != X_MBOWNER_PL)
- return v ? -EBUSY : -ETIMEDOUT;
+ /*
+ * Attempt to gain access to the mailbox.
+ */
+ for (i = 0; i < 4; i++) {
+ ctl = t4_read_reg(adap, ctl_reg);
+ v = G_MBOWNER(ctl);
+ if (v != X_MBOWNER_NONE)
+ break;
+ }
+ /*
+ * If we were unable to gain access, dequeue ourselves from the
+ * mailbox atomic access list and report the error to our caller.
+ */
+ if (v != X_MBOWNER_PL) {
+ t4_report_fw_error(adap);
+ ret = (v == X_MBOWNER_FW) ? -EBUSY : -ETIMEDOUT;
+ return ret;
+ }
+
+ /*
+ * If we gain ownership of the mailbox and there's a "valid" message
+ * in it, this is likely an asynchronous error message from the
+ * firmware. So we'll report that and then proceed on with attempting
+ * to issue our own command ... which may well fail if the error
+ * presaged the firmware crashing ...
+ */
+ if (ctl & F_MBMSGVALID) {
+ CH_ERR(adap, "found VALID command in mbox %u: "
+ "%llx %llx %llx %llx %llx %llx %llx %llx\n", mbox,
+ (unsigned long long)t4_read_reg64(adap, data_reg),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 8),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 16),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 24),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 32),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 40),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 48),
+ (unsigned long long)t4_read_reg64(adap, data_reg + 56));
+ }
+
+ /*
+ * Copy in the new mailbox command and send it on its way ...
+ */
for (i = 0; i < size; i += 8, p++)
t4_write_reg64(adap, data_reg + i, be64_to_cpu(*p));
CH_DUMP_MBOX(adap, mbox, data_reg);
t4_write_reg(adap, ctl_reg, F_MBMSGVALID | V_MBOWNER(X_MBOWNER_FW));
- t4_read_reg(adap, ctl_reg); /* flush write */
+ t4_read_reg(adap, ctl_reg); /* flush write */
delay_idx = 0;
ms = delay[0];
- for (i = 0; i < FW_CMD_MAX_TIMEOUT; i += ms) {
+ /*
+ * Loop waiting for the reply; bail out if we time out or the firmware
+ * reports an error.
+ */
+ for (i = 0;
+ !((pcie_fw = t4_read_reg(adap, A_PCIE_FW)) & F_PCIE_FW_ERR) &&
+ i < timeout;
+ i += ms) {
if (sleep_ok) {
ms = delay[delay_idx]; /* last element may repeat */
if (delay_idx < ARRAY_SIZE(delay) - 1)
delay_idx++;
msleep(ms);
- } else
+ } else {
mdelay(ms);
+ }
v = t4_read_reg(adap, ctl_reg);
if (v == X_CIM_PF_NOACCESS)
@@ -319,15 +378,20 @@ int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
continue;
}
+ /*
+ * Retrieve the command reply and release the mailbox.
+ */
+ get_mbox_rpl(adap, cmd_rpl, size/8, data_reg);
+ t4_write_reg(adap, ctl_reg, V_MBOWNER(X_MBOWNER_NONE));
+
CH_DUMP_MBOX(adap, mbox, data_reg);
- res = t4_read_reg64(adap, data_reg);
+ res = be64_to_cpu(cmd_rpl[0]);
if (G_FW_CMD_OP(res >> 32) == FW_DEBUG_CMD) {
- fw_asrt(adap, data_reg);
+ fw_asrt(adap, (struct fw_debug_cmd *)cmd_rpl);
res = V_FW_CMD_RETVAL(EIO);
} else if (rpl)
- get_mbox_rpl(adap, rpl, size / 8, data_reg);
- t4_write_reg(adap, ctl_reg, V_MBOWNER(X_MBOWNER_NONE));
+ memcpy(rpl, cmd_rpl, size);
return -G_FW_CMD_RETVAL((int)res);
}
}
@@ -337,11 +401,58 @@ int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
* the error and also check to see if the firmware reported any
* errors ...
*/
+ ret = (pcie_fw & F_PCIE_FW_ERR) ? -ENXIO : -ETIMEDOUT;
CH_ERR(adap, "command %#x in mailbox %d timed out\n",
*(const u8 *)cmd, mbox);
- if (t4_read_reg(adap, A_PCIE_FW) & F_PCIE_FW_ERR)
- t4_report_fw_error(adap);
- return -ETIMEDOUT;
+
+ t4_report_fw_error(adap);
+ t4_fatal_err(adap);
+ return ret;
+}
+
+int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
+ void *rpl, bool sleep_ok)
+{
+ return t4_wr_mbox_meat_timeout(adap, mbox, cmd, size, rpl,
+ sleep_ok, FW_CMD_MAX_TIMEOUT);
+
+}
+
+static int t4_edc_err_read(struct adapter *adap, int idx)
+{
+ u32 edc_ecc_err_addr_reg;
+ u32 edc_bist_status_rdata_reg;
+
+ if (is_t4(adap)) {
+ CH_WARN(adap, "%s: T4 NOT supported.\n", __func__);
+ return 0;
+ }
+ if (idx != 0 && idx != 1) {
+ CH_WARN(adap, "%s: idx %d NOT supported.\n", __func__, idx);
+ return 0;
+ }
+
+ edc_ecc_err_addr_reg = EDC_T5_REG(A_EDC_H_ECC_ERR_ADDR, idx);
+ edc_bist_status_rdata_reg = EDC_T5_REG(A_EDC_H_BIST_STATUS_RDATA, idx);
+
+ CH_WARN(adap,
+ "edc%d err addr 0x%x: 0x%x.\n",
+ idx, edc_ecc_err_addr_reg,
+ t4_read_reg(adap, edc_ecc_err_addr_reg));
+ CH_WARN(adap,
+ "bist: 0x%x, status %llx %llx %llx %llx %llx %llx %llx %llx %llx.\n",
+ edc_bist_status_rdata_reg,
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 8),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 16),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 24),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 32),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 40),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 48),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 56),
+ (unsigned long long)t4_read_reg64(adap, edc_bist_status_rdata_reg + 64));
+
+ return 0;
}
/**
@@ -526,8 +637,1956 @@ int t4_mem_read(struct adapter *adap, int mtype, u32 addr, u32 len,
}
/*
+ * Return the specified PCI-E Configuration Space register from our Physical
+ * Function. We try first via a Firmware LDST Command (if fw_attach != 0)
+ * since we prefer to let the firmware own all of these registers, but if that
+ * fails we go for it directly ourselves.
+ */
+u32 t4_read_pcie_cfg4(struct adapter *adap, int reg, int drv_fw_attach)
+{
+
+ /*
+ * If fw_attach != 0, construct and send the Firmware LDST Command to
+ * retrieve the specified PCI-E Configuration Space register.
+ */
+ if (drv_fw_attach != 0) {
+ struct fw_ldst_cmd ldst_cmd;
+ int ret;
+
+ memset(&ldst_cmd, 0, sizeof(ldst_cmd));
+ ldst_cmd.op_to_addrspace =
+ cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_READ |
+ V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_FUNC_PCIE));
+ ldst_cmd.cycles_to_len16 = cpu_to_be32(FW_LEN16(ldst_cmd));
+ ldst_cmd.u.pcie.select_naccess = V_FW_LDST_CMD_NACCESS(1);
+ ldst_cmd.u.pcie.ctrl_to_fn =
+ (F_FW_LDST_CMD_LC | V_FW_LDST_CMD_FN(adap->pf));
+ ldst_cmd.u.pcie.r = reg;
+
+ /*
+ * If the LDST Command succeeds, return the result, otherwise
+ * fall through to reading it directly ourselves ...
+ */
+ ret = t4_wr_mbox(adap, adap->mbox, &ldst_cmd, sizeof(ldst_cmd),
+ &ldst_cmd);
+ if (ret == 0)
+ return be32_to_cpu(ldst_cmd.u.pcie.data[0]);
+
+ CH_WARN(adap, "Firmware failed to return "
+ "Configuration Space register %d, err = %d\n",
+ reg, -ret);
+ }
+
+ /*
+ * Read the desired Configuration Space register via the PCI-E
+ * Backdoor mechanism.
+ */
+ return t4_hw_pci_read_cfg4(adap, reg);
+}
+
+/**
+ * t4_get_regs_len - return the size of the chips register set
+ * @adapter: the adapter
+ *
+ * Returns the size of the chip's BAR0 register space.
+ */
+unsigned int t4_get_regs_len(struct adapter *adapter)
+{
+ unsigned int chip_version = chip_id(adapter);
+
+ switch (chip_version) {
+ case CHELSIO_T4:
+ return T4_REGMAP_SIZE;
+
+ case CHELSIO_T5:
+ case CHELSIO_T6:
+ return T5_REGMAP_SIZE;
+ }
+
+ CH_ERR(adapter,
+ "Unsupported chip version %d\n", chip_version);
+ return 0;
+}
+
+/**
+ * t4_get_regs - read chip registers into provided buffer
+ * @adap: the adapter
+ * @buf: register buffer
+ * @buf_size: size (in bytes) of register buffer
+ *
+ * If the provided register buffer isn't large enough for the chip's
+ * full register range, the register dump will be truncated to the
+ * register buffer's size.
+ */
+void t4_get_regs(struct adapter *adap, u8 *buf, size_t buf_size)
+{
+ static const unsigned int t4_reg_ranges[] = {
+ 0x1008, 0x1108,
+ 0x1180, 0x1184,
+ 0x1190, 0x1194,
+ 0x11a0, 0x11a4,
+ 0x11b0, 0x11b4,
+ 0x11fc, 0x123c,
+ 0x1300, 0x173c,
+ 0x1800, 0x18fc,
+ 0x3000, 0x30d8,
+ 0x30e0, 0x30e4,
+ 0x30ec, 0x5910,
+ 0x5920, 0x5924,
+ 0x5960, 0x5960,
+ 0x5968, 0x5968,
+ 0x5970, 0x5970,
+ 0x5978, 0x5978,
+ 0x5980, 0x5980,
+ 0x5988, 0x5988,
+ 0x5990, 0x5990,
+ 0x5998, 0x5998,
+ 0x59a0, 0x59d4,
+ 0x5a00, 0x5ae0,
+ 0x5ae8, 0x5ae8,
+ 0x5af0, 0x5af0,
+ 0x5af8, 0x5af8,
+ 0x6000, 0x6098,
+ 0x6100, 0x6150,
+ 0x6200, 0x6208,
+ 0x6240, 0x6248,
+ 0x6280, 0x62b0,
+ 0x62c0, 0x6338,
+ 0x6370, 0x638c,
+ 0x6400, 0x643c,
+ 0x6500, 0x6524,
+ 0x6a00, 0x6a04,
+ 0x6a14, 0x6a38,
+ 0x6a60, 0x6a70,
+ 0x6a78, 0x6a78,
+ 0x6b00, 0x6b0c,
+ 0x6b1c, 0x6b84,
+ 0x6bf0, 0x6bf8,
+ 0x6c00, 0x6c0c,
+ 0x6c1c, 0x6c84,
+ 0x6cf0, 0x6cf8,
+ 0x6d00, 0x6d0c,
+ 0x6d1c, 0x6d84,
+ 0x6df0, 0x6df8,
+ 0x6e00, 0x6e0c,
+ 0x6e1c, 0x6e84,
+ 0x6ef0, 0x6ef8,
+ 0x6f00, 0x6f0c,
+ 0x6f1c, 0x6f84,
+ 0x6ff0, 0x6ff8,
+ 0x7000, 0x700c,
+ 0x701c, 0x7084,
+ 0x70f0, 0x70f8,
+ 0x7100, 0x710c,
+ 0x711c, 0x7184,
+ 0x71f0, 0x71f8,
+ 0x7200, 0x720c,
+ 0x721c, 0x7284,
+ 0x72f0, 0x72f8,
+ 0x7300, 0x730c,
+ 0x731c, 0x7384,
+ 0x73f0, 0x73f8,
+ 0x7400, 0x7450,
+ 0x7500, 0x7530,
+ 0x7600, 0x760c,
+ 0x7614, 0x761c,
+ 0x7680, 0x76cc,
+ 0x7700, 0x7798,
+ 0x77c0, 0x77fc,
+ 0x7900, 0x79fc,
+ 0x7b00, 0x7b58,
+ 0x7b60, 0x7b84,
+ 0x7b8c, 0x7c38,
+ 0x7d00, 0x7d38,
+ 0x7d40, 0x7d80,
+ 0x7d8c, 0x7ddc,
+ 0x7de4, 0x7e04,
+ 0x7e10, 0x7e1c,
+ 0x7e24, 0x7e38,
+ 0x7e40, 0x7e44,
+ 0x7e4c, 0x7e78,
+ 0x7e80, 0x7ea4,
+ 0x7eac, 0x7edc,
+ 0x7ee8, 0x7efc,
+ 0x8dc0, 0x8e04,
+ 0x8e10, 0x8e1c,
+ 0x8e30, 0x8e78,
+ 0x8ea0, 0x8eb8,
+ 0x8ec0, 0x8f6c,
+ 0x8fc0, 0x9008,
+ 0x9010, 0x9058,
+ 0x9060, 0x9060,
+ 0x9068, 0x9074,
+ 0x90fc, 0x90fc,
+ 0x9400, 0x9408,
+ 0x9410, 0x9458,
+ 0x9600, 0x9600,
+ 0x9608, 0x9638,
+ 0x9640, 0x96bc,
+ 0x9800, 0x9808,
+ 0x9820, 0x983c,
+ 0x9850, 0x9864,
+ 0x9c00, 0x9c6c,
+ 0x9c80, 0x9cec,
+ 0x9d00, 0x9d6c,
+ 0x9d80, 0x9dec,
+ 0x9e00, 0x9e6c,
+ 0x9e80, 0x9eec,
+ 0x9f00, 0x9f6c,
+ 0x9f80, 0x9fec,
+ 0xd004, 0xd004,
+ 0xd010, 0xd03c,
+ 0xdfc0, 0xdfe0,
+ 0xe000, 0xea7c,
+ 0xf000, 0x11190,
+ 0x19040, 0x1906c,
+ 0x19078, 0x19080,
+ 0x1908c, 0x190e4,
+ 0x190f0, 0x190f8,
+ 0x19100, 0x19110,
+ 0x19120, 0x19124,
+ 0x19150, 0x19194,
+ 0x1919c, 0x191b0,
+ 0x191d0, 0x191e8,
+ 0x19238, 0x1924c,
+ 0x193f8, 0x1943c,
+ 0x1944c, 0x19474,
+ 0x19490, 0x194e0,
+ 0x194f0, 0x194f8,
+ 0x19800, 0x19c08,
+ 0x19c10, 0x19c90,
+ 0x19ca0, 0x19ce4,
+ 0x19cf0, 0x19d40,
+ 0x19d50, 0x19d94,
+ 0x19da0, 0x19de8,
+ 0x19df0, 0x19e40,
+ 0x19e50, 0x19e90,
+ 0x19ea0, 0x19f4c,
+ 0x1a000, 0x1a004,
+ 0x1a010, 0x1a06c,
+ 0x1a0b0, 0x1a0e4,
+ 0x1a0ec, 0x1a0f4,
+ 0x1a100, 0x1a108,
+ 0x1a114, 0x1a120,
+ 0x1a128, 0x1a130,
+ 0x1a138, 0x1a138,
+ 0x1a190, 0x1a1c4,
+ 0x1a1fc, 0x1a1fc,
+ 0x1e040, 0x1e04c,
+ 0x1e284, 0x1e28c,
+ 0x1e2c0, 0x1e2c0,
+ 0x1e2e0, 0x1e2e0,
+ 0x1e300, 0x1e384,
+ 0x1e3c0, 0x1e3c8,
+ 0x1e440, 0x1e44c,
+ 0x1e684, 0x1e68c,
+ 0x1e6c0, 0x1e6c0,
+ 0x1e6e0, 0x1e6e0,
+ 0x1e700, 0x1e784,
+ 0x1e7c0, 0x1e7c8,
+ 0x1e840, 0x1e84c,
+ 0x1ea84, 0x1ea8c,
+ 0x1eac0, 0x1eac0,
+ 0x1eae0, 0x1eae0,
+ 0x1eb00, 0x1eb84,
+ 0x1ebc0, 0x1ebc8,
+ 0x1ec40, 0x1ec4c,
+ 0x1ee84, 0x1ee8c,
+ 0x1eec0, 0x1eec0,
+ 0x1eee0, 0x1eee0,
+ 0x1ef00, 0x1ef84,
+ 0x1efc0, 0x1efc8,
+ 0x1f040, 0x1f04c,
+ 0x1f284, 0x1f28c,
+ 0x1f2c0, 0x1f2c0,
+ 0x1f2e0, 0x1f2e0,
+ 0x1f300, 0x1f384,
+ 0x1f3c0, 0x1f3c8,
+ 0x1f440, 0x1f44c,
+ 0x1f684, 0x1f68c,
+ 0x1f6c0, 0x1f6c0,
+ 0x1f6e0, 0x1f6e0,
+ 0x1f700, 0x1f784,
+ 0x1f7c0, 0x1f7c8,
+ 0x1f840, 0x1f84c,
+ 0x1fa84, 0x1fa8c,
+ 0x1fac0, 0x1fac0,
+ 0x1fae0, 0x1fae0,
+ 0x1fb00, 0x1fb84,
+ 0x1fbc0, 0x1fbc8,
+ 0x1fc40, 0x1fc4c,
+ 0x1fe84, 0x1fe8c,
+ 0x1fec0, 0x1fec0,
+ 0x1fee0, 0x1fee0,
+ 0x1ff00, 0x1ff84,
+ 0x1ffc0, 0x1ffc8,
+ 0x20000, 0x2002c,
+ 0x20100, 0x2013c,
+ 0x20190, 0x201a0,
+ 0x201a8, 0x201b8,
+ 0x201c4, 0x201c8,
+ 0x20200, 0x20318,
+ 0x20400, 0x204b4,
+ 0x204c0, 0x20528,
+ 0x20540, 0x20614,
+ 0x21000, 0x21040,
+ 0x2104c, 0x21060,
+ 0x210c0, 0x210ec,
+ 0x21200, 0x21268,
+ 0x21270, 0x21284,
+ 0x212fc, 0x21388,
+ 0x21400, 0x21404,
+ 0x21500, 0x21500,
+ 0x21510, 0x21518,
+ 0x2152c, 0x21530,
+ 0x2153c, 0x2153c,
+ 0x21550, 0x21554,
+ 0x21600, 0x21600,
+ 0x21608, 0x2161c,
+ 0x21624, 0x21628,
+ 0x21630, 0x21634,
+ 0x2163c, 0x2163c,
+ 0x21700, 0x2171c,
+ 0x21780, 0x2178c,
+ 0x21800, 0x21818,
+ 0x21820, 0x21828,
+ 0x21830, 0x21848,
+ 0x21850, 0x21854,
+ 0x21860, 0x21868,
+ 0x21870, 0x21870,
+ 0x21878, 0x21898,
+ 0x218a0, 0x218a8,
+ 0x218b0, 0x218c8,
+ 0x218d0, 0x218d4,
+ 0x218e0, 0x218e8,
+ 0x218f0, 0x218f0,
+ 0x218f8, 0x21a18,
+ 0x21a20, 0x21a28,
+ 0x21a30, 0x21a48,
+ 0x21a50, 0x21a54,
+ 0x21a60, 0x21a68,
+ 0x21a70, 0x21a70,
+ 0x21a78, 0x21a98,
+ 0x21aa0, 0x21aa8,
+ 0x21ab0, 0x21ac8,
+ 0x21ad0, 0x21ad4,
+ 0x21ae0, 0x21ae8,
+ 0x21af0, 0x21af0,
+ 0x21af8, 0x21c18,
+ 0x21c20, 0x21c20,
+ 0x21c28, 0x21c30,
+ 0x21c38, 0x21c38,
+ 0x21c80, 0x21c98,
+ 0x21ca0, 0x21ca8,
+ 0x21cb0, 0x21cc8,
+ 0x21cd0, 0x21cd4,
+ 0x21ce0, 0x21ce8,
+ 0x21cf0, 0x21cf0,
+ 0x21cf8, 0x21d7c,
+ 0x21e00, 0x21e04,
+ 0x22000, 0x2202c,
+ 0x22100, 0x2213c,
+ 0x22190, 0x221a0,
+ 0x221a8, 0x221b8,
+ 0x221c4, 0x221c8,
+ 0x22200, 0x22318,
+ 0x22400, 0x224b4,
+ 0x224c0, 0x22528,
+ 0x22540, 0x22614,
+ 0x23000, 0x23040,
+ 0x2304c, 0x23060,
+ 0x230c0, 0x230ec,
+ 0x23200, 0x23268,
+ 0x23270, 0x23284,
+ 0x232fc, 0x23388,
+ 0x23400, 0x23404,
+ 0x23500, 0x23500,
+ 0x23510, 0x23518,
+ 0x2352c, 0x23530,
+ 0x2353c, 0x2353c,
+ 0x23550, 0x23554,
+ 0x23600, 0x23600,
+ 0x23608, 0x2361c,
+ 0x23624, 0x23628,
+ 0x23630, 0x23634,
+ 0x2363c, 0x2363c,
+ 0x23700, 0x2371c,
+ 0x23780, 0x2378c,
+ 0x23800, 0x23818,
+ 0x23820, 0x23828,
+ 0x23830, 0x23848,
+ 0x23850, 0x23854,
+ 0x23860, 0x23868,
+ 0x23870, 0x23870,
+ 0x23878, 0x23898,
+ 0x238a0, 0x238a8,
+ 0x238b0, 0x238c8,
+ 0x238d0, 0x238d4,
+ 0x238e0, 0x238e8,
+ 0x238f0, 0x238f0,
+ 0x238f8, 0x23a18,
+ 0x23a20, 0x23a28,
+ 0x23a30, 0x23a48,
+ 0x23a50, 0x23a54,
+ 0x23a60, 0x23a68,
+ 0x23a70, 0x23a70,
+ 0x23a78, 0x23a98,
+ 0x23aa0, 0x23aa8,
+ 0x23ab0, 0x23ac8,
+ 0x23ad0, 0x23ad4,
+ 0x23ae0, 0x23ae8,
+ 0x23af0, 0x23af0,
+ 0x23af8, 0x23c18,
+ 0x23c20, 0x23c20,
+ 0x23c28, 0x23c30,
+ 0x23c38, 0x23c38,
+ 0x23c80, 0x23c98,
+ 0x23ca0, 0x23ca8,
+ 0x23cb0, 0x23cc8,
+ 0x23cd0, 0x23cd4,
+ 0x23ce0, 0x23ce8,
+ 0x23cf0, 0x23cf0,
+ 0x23cf8, 0x23d7c,
+ 0x23e00, 0x23e04,
+ 0x24000, 0x2402c,
+ 0x24100, 0x2413c,
+ 0x24190, 0x241a0,
+ 0x241a8, 0x241b8,
+ 0x241c4, 0x241c8,
+ 0x24200, 0x24318,
+ 0x24400, 0x244b4,
+ 0x244c0, 0x24528,
+ 0x24540, 0x24614,
+ 0x25000, 0x25040,
+ 0x2504c, 0x25060,
+ 0x250c0, 0x250ec,
+ 0x25200, 0x25268,
+ 0x25270, 0x25284,
+ 0x252fc, 0x25388,
+ 0x25400, 0x25404,
+ 0x25500, 0x25500,
+ 0x25510, 0x25518,
+ 0x2552c, 0x25530,
+ 0x2553c, 0x2553c,
+ 0x25550, 0x25554,
+ 0x25600, 0x25600,
+ 0x25608, 0x2561c,
+ 0x25624, 0x25628,
+ 0x25630, 0x25634,
+ 0x2563c, 0x2563c,
+ 0x25700, 0x2571c,
+ 0x25780, 0x2578c,
+ 0x25800, 0x25818,
+ 0x25820, 0x25828,
+ 0x25830, 0x25848,
+ 0x25850, 0x25854,
+ 0x25860, 0x25868,
+ 0x25870, 0x25870,
+ 0x25878, 0x25898,
+ 0x258a0, 0x258a8,
+ 0x258b0, 0x258c8,
+ 0x258d0, 0x258d4,
+ 0x258e0, 0x258e8,
+ 0x258f0, 0x258f0,
+ 0x258f8, 0x25a18,
+ 0x25a20, 0x25a28,
+ 0x25a30, 0x25a48,
+ 0x25a50, 0x25a54,
+ 0x25a60, 0x25a68,
+ 0x25a70, 0x25a70,
+ 0x25a78, 0x25a98,
+ 0x25aa0, 0x25aa8,
+ 0x25ab0, 0x25ac8,
+ 0x25ad0, 0x25ad4,
+ 0x25ae0, 0x25ae8,
+ 0x25af0, 0x25af0,
+ 0x25af8, 0x25c18,
+ 0x25c20, 0x25c20,
+ 0x25c28, 0x25c30,
+ 0x25c38, 0x25c38,
+ 0x25c80, 0x25c98,
+ 0x25ca0, 0x25ca8,
+ 0x25cb0, 0x25cc8,
+ 0x25cd0, 0x25cd4,
+ 0x25ce0, 0x25ce8,
+ 0x25cf0, 0x25cf0,
+ 0x25cf8, 0x25d7c,
+ 0x25e00, 0x25e04,
+ 0x26000, 0x2602c,
+ 0x26100, 0x2613c,
+ 0x26190, 0x261a0,
+ 0x261a8, 0x261b8,
+ 0x261c4, 0x261c8,
+ 0x26200, 0x26318,
+ 0x26400, 0x264b4,
+ 0x264c0, 0x26528,
+ 0x26540, 0x26614,
+ 0x27000, 0x27040,
+ 0x2704c, 0x27060,
+ 0x270c0, 0x270ec,
+ 0x27200, 0x27268,
+ 0x27270, 0x27284,
+ 0x272fc, 0x27388,
+ 0x27400, 0x27404,
+ 0x27500, 0x27500,
+ 0x27510, 0x27518,
+ 0x2752c, 0x27530,
+ 0x2753c, 0x2753c,
+ 0x27550, 0x27554,
+ 0x27600, 0x27600,
+ 0x27608, 0x2761c,
+ 0x27624, 0x27628,
+ 0x27630, 0x27634,
+ 0x2763c, 0x2763c,
+ 0x27700, 0x2771c,
+ 0x27780, 0x2778c,
+ 0x27800, 0x27818,
+ 0x27820, 0x27828,
+ 0x27830, 0x27848,
+ 0x27850, 0x27854,
+ 0x27860, 0x27868,
+ 0x27870, 0x27870,
+ 0x27878, 0x27898,
+ 0x278a0, 0x278a8,
+ 0x278b0, 0x278c8,
+ 0x278d0, 0x278d4,
+ 0x278e0, 0x278e8,
+ 0x278f0, 0x278f0,
+ 0x278f8, 0x27a18,
+ 0x27a20, 0x27a28,
+ 0x27a30, 0x27a48,
+ 0x27a50, 0x27a54,
+ 0x27a60, 0x27a68,
+ 0x27a70, 0x27a70,
+ 0x27a78, 0x27a98,
+ 0x27aa0, 0x27aa8,
+ 0x27ab0, 0x27ac8,
+ 0x27ad0, 0x27ad4,
+ 0x27ae0, 0x27ae8,
+ 0x27af0, 0x27af0,
+ 0x27af8, 0x27c18,
+ 0x27c20, 0x27c20,
+ 0x27c28, 0x27c30,
+ 0x27c38, 0x27c38,
+ 0x27c80, 0x27c98,
+ 0x27ca0, 0x27ca8,
+ 0x27cb0, 0x27cc8,
+ 0x27cd0, 0x27cd4,
+ 0x27ce0, 0x27ce8,
+ 0x27cf0, 0x27cf0,
+ 0x27cf8, 0x27d7c,
+ 0x27e00, 0x27e04,
+ };
+
+ static const unsigned int t5_reg_ranges[] = {
+ 0x1008, 0x10c0,
+ 0x10cc, 0x10f8,
+ 0x1100, 0x1100,
+ 0x110c, 0x1148,
+ 0x1180, 0x1184,
+ 0x1190, 0x1194,
+ 0x11a0, 0x11a4,
+ 0x11b0, 0x11b4,
+ 0x11fc, 0x123c,
+ 0x1280, 0x173c,
+ 0x1800, 0x18fc,
+ 0x3000, 0x3028,
+ 0x3060, 0x30b0,
+ 0x30b8, 0x30d8,
+ 0x30e0, 0x30fc,
+ 0x3140, 0x357c,
+ 0x35a8, 0x35cc,
+ 0x35ec, 0x35ec,
+ 0x3600, 0x5624,
+ 0x56cc, 0x56ec,
+ 0x56f4, 0x5720,
+ 0x5728, 0x575c,
+ 0x580c, 0x5814,
+ 0x5890, 0x589c,
+ 0x58a4, 0x58ac,
+ 0x58b8, 0x58bc,
+ 0x5940, 0x59c8,
+ 0x59d0, 0x59dc,
+ 0x59fc, 0x5a18,
+ 0x5a60, 0x5a70,
+ 0x5a80, 0x5a9c,
+ 0x5b94, 0x5bfc,
+ 0x6000, 0x6020,
+ 0x6028, 0x6040,
+ 0x6058, 0x609c,
+ 0x60a8, 0x614c,
+ 0x7700, 0x7798,
+ 0x77c0, 0x78fc,
+ 0x7b00, 0x7b58,
+ 0x7b60, 0x7b84,
+ 0x7b8c, 0x7c54,
+ 0x7d00, 0x7d38,
+ 0x7d40, 0x7d80,
+ 0x7d8c, 0x7ddc,
+ 0x7de4, 0x7e04,
+ 0x7e10, 0x7e1c,
+ 0x7e24, 0x7e38,
+ 0x7e40, 0x7e44,
+ 0x7e4c, 0x7e78,
+ 0x7e80, 0x7edc,
+ 0x7ee8, 0x7efc,
+ 0x8dc0, 0x8de0,
+ 0x8df8, 0x8e04,
+ 0x8e10, 0x8e84,
+ 0x8ea0, 0x8f84,
+ 0x8fc0, 0x9058,
+ 0x9060, 0x9060,
+ 0x9068, 0x90f8,
+ 0x9400, 0x9408,
+ 0x9410, 0x9470,
+ 0x9600, 0x9600,
+ 0x9608, 0x9638,
+ 0x9640, 0x96f4,
+ 0x9800, 0x9808,
+ 0x9820, 0x983c,
+ 0x9850, 0x9864,
+ 0x9c00, 0x9c6c,
+ 0x9c80, 0x9cec,
+ 0x9d00, 0x9d6c,
+ 0x9d80, 0x9dec,
+ 0x9e00, 0x9e6c,
+ 0x9e80, 0x9eec,
+ 0x9f00, 0x9f6c,
+ 0x9f80, 0xa020,
+ 0xd004, 0xd004,
+ 0xd010, 0xd03c,
+ 0xdfc0, 0xdfe0,
+ 0xe000, 0x1106c,
+ 0x11074, 0x11088,
+ 0x1109c, 0x1117c,
+ 0x11190, 0x11204,
+ 0x19040, 0x1906c,
+ 0x19078, 0x19080,
+ 0x1908c, 0x190e8,
+ 0x190f0, 0x190f8,
+ 0x19100, 0x19110,
+ 0x19120, 0x19124,
+ 0x19150, 0x19194,
+ 0x1919c, 0x191b0,
+ 0x191d0, 0x191e8,
+ 0x19238, 0x19290,
+ 0x193f8, 0x19428,
+ 0x19430, 0x19444,
+ 0x1944c, 0x1946c,
+ 0x19474, 0x19474,
+ 0x19490, 0x194cc,
+ 0x194f0, 0x194f8,
+ 0x19c00, 0x19c08,
+ 0x19c10, 0x19c60,
+ 0x19c94, 0x19ce4,
+ 0x19cf0, 0x19d40,
+ 0x19d50, 0x19d94,
+ 0x19da0, 0x19de8,
+ 0x19df0, 0x19e10,
+ 0x19e50, 0x19e90,
+ 0x19ea0, 0x19f24,
+ 0x19f34, 0x19f34,
+ 0x19f40, 0x19f50,
+ 0x19f90, 0x19fb4,
+ 0x19fc4, 0x19fe4,
+ 0x1a000, 0x1a004,
+ 0x1a010, 0x1a06c,
+ 0x1a0b0, 0x1a0e4,
+ 0x1a0ec, 0x1a0f8,
+ 0x1a100, 0x1a108,
+ 0x1a114, 0x1a120,
+ 0x1a128, 0x1a130,
+ 0x1a138, 0x1a138,
+ 0x1a190, 0x1a1c4,
+ 0x1a1fc, 0x1a1fc,
+ 0x1e008, 0x1e00c,
+ 0x1e040, 0x1e044,
+ 0x1e04c, 0x1e04c,
+ 0x1e284, 0x1e290,
+ 0x1e2c0, 0x1e2c0,
+ 0x1e2e0, 0x1e2e0,
+ 0x1e300, 0x1e384,
+ 0x1e3c0, 0x1e3c8,
+ 0x1e408, 0x1e40c,
+ 0x1e440, 0x1e444,
+ 0x1e44c, 0x1e44c,
+ 0x1e684, 0x1e690,
+ 0x1e6c0, 0x1e6c0,
+ 0x1e6e0, 0x1e6e0,
+ 0x1e700, 0x1e784,
+ 0x1e7c0, 0x1e7c8,
+ 0x1e808, 0x1e80c,
+ 0x1e840, 0x1e844,
+ 0x1e84c, 0x1e84c,
+ 0x1ea84, 0x1ea90,
+ 0x1eac0, 0x1eac0,
+ 0x1eae0, 0x1eae0,
+ 0x1eb00, 0x1eb84,
+ 0x1ebc0, 0x1ebc8,
+ 0x1ec08, 0x1ec0c,
+ 0x1ec40, 0x1ec44,
+ 0x1ec4c, 0x1ec4c,
+ 0x1ee84, 0x1ee90,
+ 0x1eec0, 0x1eec0,
+ 0x1eee0, 0x1eee0,
+ 0x1ef00, 0x1ef84,
+ 0x1efc0, 0x1efc8,
+ 0x1f008, 0x1f00c,
+ 0x1f040, 0x1f044,
+ 0x1f04c, 0x1f04c,
+ 0x1f284, 0x1f290,
+ 0x1f2c0, 0x1f2c0,
+ 0x1f2e0, 0x1f2e0,
+ 0x1f300, 0x1f384,
+ 0x1f3c0, 0x1f3c8,
+ 0x1f408, 0x1f40c,
+ 0x1f440, 0x1f444,
+ 0x1f44c, 0x1f44c,
+ 0x1f684, 0x1f690,
+ 0x1f6c0, 0x1f6c0,
+ 0x1f6e0, 0x1f6e0,
+ 0x1f700, 0x1f784,
+ 0x1f7c0, 0x1f7c8,
+ 0x1f808, 0x1f80c,
+ 0x1f840, 0x1f844,
+ 0x1f84c, 0x1f84c,
+ 0x1fa84, 0x1fa90,
+ 0x1fac0, 0x1fac0,
+ 0x1fae0, 0x1fae0,
+ 0x1fb00, 0x1fb84,
+ 0x1fbc0, 0x1fbc8,
+ 0x1fc08, 0x1fc0c,
+ 0x1fc40, 0x1fc44,
+ 0x1fc4c, 0x1fc4c,
+ 0x1fe84, 0x1fe90,
+ 0x1fec0, 0x1fec0,
+ 0x1fee0, 0x1fee0,
+ 0x1ff00, 0x1ff84,
+ 0x1ffc0, 0x1ffc8,
+ 0x30000, 0x30030,
+ 0x30038, 0x30038,
+ 0x30040, 0x30040,
+ 0x30100, 0x30144,
+ 0x30190, 0x301a0,
+ 0x301a8, 0x301b8,
+ 0x301c4, 0x301c8,
+ 0x301d0, 0x301d0,
+ 0x30200, 0x30318,
+ 0x30400, 0x304b4,
+ 0x304c0, 0x3052c,
+ 0x30540, 0x3061c,
+ 0x30800, 0x30828,
+ 0x30834, 0x30834,
+ 0x308c0, 0x30908,
+ 0x30910, 0x309ac,
+ 0x30a00, 0x30a14,
+ 0x30a1c, 0x30a2c,
+ 0x30a44, 0x30a50,
+ 0x30a74, 0x30a74,
+ 0x30a7c, 0x30afc,
+ 0x30b08, 0x30c24,
+ 0x30d00, 0x30d00,
+ 0x30d08, 0x30d14,
+ 0x30d1c, 0x30d20,
+ 0x30d3c, 0x30d3c,
+ 0x30d48, 0x30d50,
+ 0x31200, 0x3120c,
+ 0x31220, 0x31220,
+ 0x31240, 0x31240,
+ 0x31600, 0x3160c,
+ 0x31a00, 0x31a1c,
+ 0x31e00, 0x31e20,
+ 0x31e38, 0x31e3c,
+ 0x31e80, 0x31e80,
+ 0x31e88, 0x31ea8,
+ 0x31eb0, 0x31eb4,
+ 0x31ec8, 0x31ed4,
+ 0x31fb8, 0x32004,
+ 0x32200, 0x32200,
+ 0x32208, 0x32240,
+ 0x32248, 0x32280,
+ 0x32288, 0x322c0,
+ 0x322c8, 0x322fc,
+ 0x32600, 0x32630,
+ 0x32a00, 0x32abc,
+ 0x32b00, 0x32b10,
+ 0x32b20, 0x32b30,
+ 0x32b40, 0x32b50,
+ 0x32b60, 0x32b70,
+ 0x33000, 0x33028,
+ 0x33030, 0x33048,
+ 0x33060, 0x33068,
+ 0x33070, 0x3309c,
+ 0x330f0, 0x33128,
+ 0x33130, 0x33148,
+ 0x33160, 0x33168,
+ 0x33170, 0x3319c,
+ 0x331f0, 0x33238,
+ 0x33240, 0x33240,
+ 0x33248, 0x33250,
+ 0x3325c, 0x33264,
+ 0x33270, 0x332b8,
+ 0x332c0, 0x332e4,
+ 0x332f8, 0x33338,
+ 0x33340, 0x33340,
+ 0x33348, 0x33350,
+ 0x3335c, 0x33364,
+ 0x33370, 0x333b8,
+ 0x333c0, 0x333e4,
+ 0x333f8, 0x33428,
+ 0x33430, 0x33448,
+ 0x33460, 0x33468,
+ 0x33470, 0x3349c,
+ 0x334f0, 0x33528,
+ 0x33530, 0x33548,
+ 0x33560, 0x33568,
+ 0x33570, 0x3359c,
+ 0x335f0, 0x33638,
+ 0x33640, 0x33640,
+ 0x33648, 0x33650,
+ 0x3365c, 0x33664,
+ 0x33670, 0x336b8,
+ 0x336c0, 0x336e4,
+ 0x336f8, 0x33738,
+ 0x33740, 0x33740,
+ 0x33748, 0x33750,
+ 0x3375c, 0x33764,
+ 0x33770, 0x337b8,
+ 0x337c0, 0x337e4,
+ 0x337f8, 0x337fc,
+ 0x33814, 0x33814,
+ 0x3382c, 0x3382c,
+ 0x33880, 0x3388c,
+ 0x338e8, 0x338ec,
+ 0x33900, 0x33928,
+ 0x33930, 0x33948,
+ 0x33960, 0x33968,
+ 0x33970, 0x3399c,
+ 0x339f0, 0x33a38,
+ 0x33a40, 0x33a40,
+ 0x33a48, 0x33a50,
+ 0x33a5c, 0x33a64,
+ 0x33a70, 0x33ab8,
+ 0x33ac0, 0x33ae4,
+ 0x33af8, 0x33b10,
+ 0x33b28, 0x33b28,
+ 0x33b3c, 0x33b50,
+ 0x33bf0, 0x33c10,
+ 0x33c28, 0x33c28,
+ 0x33c3c, 0x33c50,
+ 0x33cf0, 0x33cfc,
+ 0x34000, 0x34030,
+ 0x34038, 0x34038,
+ 0x34040, 0x34040,
+ 0x34100, 0x34144,
+ 0x34190, 0x341a0,
+ 0x341a8, 0x341b8,
+ 0x341c4, 0x341c8,
+ 0x341d0, 0x341d0,
+ 0x34200, 0x34318,
+ 0x34400, 0x344b4,
+ 0x344c0, 0x3452c,
+ 0x34540, 0x3461c,
+ 0x34800, 0x34828,
+ 0x34834, 0x34834,
+ 0x348c0, 0x34908,
+ 0x34910, 0x349ac,
+ 0x34a00, 0x34a14,
+ 0x34a1c, 0x34a2c,
+ 0x34a44, 0x34a50,
+ 0x34a74, 0x34a74,
+ 0x34a7c, 0x34afc,
+ 0x34b08, 0x34c24,
+ 0x34d00, 0x34d00,
+ 0x34d08, 0x34d14,
+ 0x34d1c, 0x34d20,
+ 0x34d3c, 0x34d3c,
+ 0x34d48, 0x34d50,
+ 0x35200, 0x3520c,
+ 0x35220, 0x35220,
+ 0x35240, 0x35240,
+ 0x35600, 0x3560c,
+ 0x35a00, 0x35a1c,
+ 0x35e00, 0x35e20,
+ 0x35e38, 0x35e3c,
+ 0x35e80, 0x35e80,
+ 0x35e88, 0x35ea8,
+ 0x35eb0, 0x35eb4,
+ 0x35ec8, 0x35ed4,
+ 0x35fb8, 0x36004,
+ 0x36200, 0x36200,
+ 0x36208, 0x36240,
+ 0x36248, 0x36280,
+ 0x36288, 0x362c0,
+ 0x362c8, 0x362fc,
+ 0x36600, 0x36630,
+ 0x36a00, 0x36abc,
+ 0x36b00, 0x36b10,
+ 0x36b20, 0x36b30,
+ 0x36b40, 0x36b50,
+ 0x36b60, 0x36b70,
+ 0x37000, 0x37028,
+ 0x37030, 0x37048,
+ 0x37060, 0x37068,
+ 0x37070, 0x3709c,
+ 0x370f0, 0x37128,
+ 0x37130, 0x37148,
+ 0x37160, 0x37168,
+ 0x37170, 0x3719c,
+ 0x371f0, 0x37238,
+ 0x37240, 0x37240,
+ 0x37248, 0x37250,
+ 0x3725c, 0x37264,
+ 0x37270, 0x372b8,
+ 0x372c0, 0x372e4,
+ 0x372f8, 0x37338,
+ 0x37340, 0x37340,
+ 0x37348, 0x37350,
+ 0x3735c, 0x37364,
+ 0x37370, 0x373b8,
+ 0x373c0, 0x373e4,
+ 0x373f8, 0x37428,
+ 0x37430, 0x37448,
+ 0x37460, 0x37468,
+ 0x37470, 0x3749c,
+ 0x374f0, 0x37528,
+ 0x37530, 0x37548,
+ 0x37560, 0x37568,
+ 0x37570, 0x3759c,
+ 0x375f0, 0x37638,
+ 0x37640, 0x37640,
+ 0x37648, 0x37650,
+ 0x3765c, 0x37664,
+ 0x37670, 0x376b8,
+ 0x376c0, 0x376e4,
+ 0x376f8, 0x37738,
+ 0x37740, 0x37740,
+ 0x37748, 0x37750,
+ 0x3775c, 0x37764,
+ 0x37770, 0x377b8,
+ 0x377c0, 0x377e4,
+ 0x377f8, 0x377fc,
+ 0x37814, 0x37814,
+ 0x3782c, 0x3782c,
+ 0x37880, 0x3788c,
+ 0x378e8, 0x378ec,
+ 0x37900, 0x37928,
+ 0x37930, 0x37948,
+ 0x37960, 0x37968,
+ 0x37970, 0x3799c,
+ 0x379f0, 0x37a38,
+ 0x37a40, 0x37a40,
+ 0x37a48, 0x37a50,
+ 0x37a5c, 0x37a64,
+ 0x37a70, 0x37ab8,
+ 0x37ac0, 0x37ae4,
+ 0x37af8, 0x37b10,
+ 0x37b28, 0x37b28,
+ 0x37b3c, 0x37b50,
+ 0x37bf0, 0x37c10,
+ 0x37c28, 0x37c28,
+ 0x37c3c, 0x37c50,
+ 0x37cf0, 0x37cfc,
+ 0x38000, 0x38030,
+ 0x38038, 0x38038,
+ 0x38040, 0x38040,
+ 0x38100, 0x38144,
+ 0x38190, 0x381a0,
+ 0x381a8, 0x381b8,
+ 0x381c4, 0x381c8,
+ 0x381d0, 0x381d0,
+ 0x38200, 0x38318,
+ 0x38400, 0x384b4,
+ 0x384c0, 0x3852c,
+ 0x38540, 0x3861c,
+ 0x38800, 0x38828,
+ 0x38834, 0x38834,
+ 0x388c0, 0x38908,
+ 0x38910, 0x389ac,
+ 0x38a00, 0x38a14,
+ 0x38a1c, 0x38a2c,
+ 0x38a44, 0x38a50,
+ 0x38a74, 0x38a74,
+ 0x38a7c, 0x38afc,
+ 0x38b08, 0x38c24,
+ 0x38d00, 0x38d00,
+ 0x38d08, 0x38d14,
+ 0x38d1c, 0x38d20,
+ 0x38d3c, 0x38d3c,
+ 0x38d48, 0x38d50,
+ 0x39200, 0x3920c,
+ 0x39220, 0x39220,
+ 0x39240, 0x39240,
+ 0x39600, 0x3960c,
+ 0x39a00, 0x39a1c,
+ 0x39e00, 0x39e20,
+ 0x39e38, 0x39e3c,
+ 0x39e80, 0x39e80,
+ 0x39e88, 0x39ea8,
+ 0x39eb0, 0x39eb4,
+ 0x39ec8, 0x39ed4,
+ 0x39fb8, 0x3a004,
+ 0x3a200, 0x3a200,
+ 0x3a208, 0x3a240,
+ 0x3a248, 0x3a280,
+ 0x3a288, 0x3a2c0,
+ 0x3a2c8, 0x3a2fc,
+ 0x3a600, 0x3a630,
+ 0x3aa00, 0x3aabc,
+ 0x3ab00, 0x3ab10,
+ 0x3ab20, 0x3ab30,
+ 0x3ab40, 0x3ab50,
+ 0x3ab60, 0x3ab70,
+ 0x3b000, 0x3b028,
+ 0x3b030, 0x3b048,
+ 0x3b060, 0x3b068,
+ 0x3b070, 0x3b09c,
+ 0x3b0f0, 0x3b128,
+ 0x3b130, 0x3b148,
+ 0x3b160, 0x3b168,
+ 0x3b170, 0x3b19c,
+ 0x3b1f0, 0x3b238,
+ 0x3b240, 0x3b240,
+ 0x3b248, 0x3b250,
+ 0x3b25c, 0x3b264,
+ 0x3b270, 0x3b2b8,
+ 0x3b2c0, 0x3b2e4,
+ 0x3b2f8, 0x3b338,
+ 0x3b340, 0x3b340,
+ 0x3b348, 0x3b350,
+ 0x3b35c, 0x3b364,
+ 0x3b370, 0x3b3b8,
+ 0x3b3c0, 0x3b3e4,
+ 0x3b3f8, 0x3b428,
+ 0x3b430, 0x3b448,
+ 0x3b460, 0x3b468,
+ 0x3b470, 0x3b49c,
+ 0x3b4f0, 0x3b528,
+ 0x3b530, 0x3b548,
+ 0x3b560, 0x3b568,
+ 0x3b570, 0x3b59c,
+ 0x3b5f0, 0x3b638,
+ 0x3b640, 0x3b640,
+ 0x3b648, 0x3b650,
+ 0x3b65c, 0x3b664,
+ 0x3b670, 0x3b6b8,
+ 0x3b6c0, 0x3b6e4,
+ 0x3b6f8, 0x3b738,
+ 0x3b740, 0x3b740,
+ 0x3b748, 0x3b750,
+ 0x3b75c, 0x3b764,
+ 0x3b770, 0x3b7b8,
+ 0x3b7c0, 0x3b7e4,
+ 0x3b7f8, 0x3b7fc,
+ 0x3b814, 0x3b814,
+ 0x3b82c, 0x3b82c,
+ 0x3b880, 0x3b88c,
+ 0x3b8e8, 0x3b8ec,
+ 0x3b900, 0x3b928,
+ 0x3b930, 0x3b948,
+ 0x3b960, 0x3b968,
+ 0x3b970, 0x3b99c,
+ 0x3b9f0, 0x3ba38,
+ 0x3ba40, 0x3ba40,
+ 0x3ba48, 0x3ba50,
+ 0x3ba5c, 0x3ba64,
+ 0x3ba70, 0x3bab8,
+ 0x3bac0, 0x3bae4,
+ 0x3baf8, 0x3bb10,
+ 0x3bb28, 0x3bb28,
+ 0x3bb3c, 0x3bb50,
+ 0x3bbf0, 0x3bc10,
+ 0x3bc28, 0x3bc28,
+ 0x3bc3c, 0x3bc50,
+ 0x3bcf0, 0x3bcfc,
+ 0x3c000, 0x3c030,
+ 0x3c038, 0x3c038,
+ 0x3c040, 0x3c040,
+ 0x3c100, 0x3c144,
+ 0x3c190, 0x3c1a0,
+ 0x3c1a8, 0x3c1b8,
+ 0x3c1c4, 0x3c1c8,
+ 0x3c1d0, 0x3c1d0,
+ 0x3c200, 0x3c318,
+ 0x3c400, 0x3c4b4,
+ 0x3c4c0, 0x3c52c,
+ 0x3c540, 0x3c61c,
+ 0x3c800, 0x3c828,
+ 0x3c834, 0x3c834,
+ 0x3c8c0, 0x3c908,
+ 0x3c910, 0x3c9ac,
+ 0x3ca00, 0x3ca14,
+ 0x3ca1c, 0x3ca2c,
+ 0x3ca44, 0x3ca50,
+ 0x3ca74, 0x3ca74,
+ 0x3ca7c, 0x3cafc,
+ 0x3cb08, 0x3cc24,
+ 0x3cd00, 0x3cd00,
+ 0x3cd08, 0x3cd14,
+ 0x3cd1c, 0x3cd20,
+ 0x3cd3c, 0x3cd3c,
+ 0x3cd48, 0x3cd50,
+ 0x3d200, 0x3d20c,
+ 0x3d220, 0x3d220,
+ 0x3d240, 0x3d240,
+ 0x3d600, 0x3d60c,
+ 0x3da00, 0x3da1c,
+ 0x3de00, 0x3de20,
+ 0x3de38, 0x3de3c,
+ 0x3de80, 0x3de80,
+ 0x3de88, 0x3dea8,
+ 0x3deb0, 0x3deb4,
+ 0x3dec8, 0x3ded4,
+ 0x3dfb8, 0x3e004,
+ 0x3e200, 0x3e200,
+ 0x3e208, 0x3e240,
+ 0x3e248, 0x3e280,
+ 0x3e288, 0x3e2c0,
+ 0x3e2c8, 0x3e2fc,
+ 0x3e600, 0x3e630,
+ 0x3ea00, 0x3eabc,
+ 0x3eb00, 0x3eb10,
+ 0x3eb20, 0x3eb30,
+ 0x3eb40, 0x3eb50,
+ 0x3eb60, 0x3eb70,
+ 0x3f000, 0x3f028,
+ 0x3f030, 0x3f048,
+ 0x3f060, 0x3f068,
+ 0x3f070, 0x3f09c,
+ 0x3f0f0, 0x3f128,
+ 0x3f130, 0x3f148,
+ 0x3f160, 0x3f168,
+ 0x3f170, 0x3f19c,
+ 0x3f1f0, 0x3f238,
+ 0x3f240, 0x3f240,
+ 0x3f248, 0x3f250,
+ 0x3f25c, 0x3f264,
+ 0x3f270, 0x3f2b8,
+ 0x3f2c0, 0x3f2e4,
+ 0x3f2f8, 0x3f338,
+ 0x3f340, 0x3f340,
+ 0x3f348, 0x3f350,
+ 0x3f35c, 0x3f364,
+ 0x3f370, 0x3f3b8,
+ 0x3f3c0, 0x3f3e4,
+ 0x3f3f8, 0x3f428,
+ 0x3f430, 0x3f448,
+ 0x3f460, 0x3f468,
+ 0x3f470, 0x3f49c,
+ 0x3f4f0, 0x3f528,
+ 0x3f530, 0x3f548,
+ 0x3f560, 0x3f568,
+ 0x3f570, 0x3f59c,
+ 0x3f5f0, 0x3f638,
+ 0x3f640, 0x3f640,
+ 0x3f648, 0x3f650,
+ 0x3f65c, 0x3f664,
+ 0x3f670, 0x3f6b8,
+ 0x3f6c0, 0x3f6e4,
+ 0x3f6f8, 0x3f738,
+ 0x3f740, 0x3f740,
+ 0x3f748, 0x3f750,
+ 0x3f75c, 0x3f764,
+ 0x3f770, 0x3f7b8,
+ 0x3f7c0, 0x3f7e4,
+ 0x3f7f8, 0x3f7fc,
+ 0x3f814, 0x3f814,
+ 0x3f82c, 0x3f82c,
+ 0x3f880, 0x3f88c,
+ 0x3f8e8, 0x3f8ec,
+ 0x3f900, 0x3f928,
+ 0x3f930, 0x3f948,
+ 0x3f960, 0x3f968,
+ 0x3f970, 0x3f99c,
+ 0x3f9f0, 0x3fa38,
+ 0x3fa40, 0x3fa40,
+ 0x3fa48, 0x3fa50,
+ 0x3fa5c, 0x3fa64,
+ 0x3fa70, 0x3fab8,
+ 0x3fac0, 0x3fae4,
+ 0x3faf8, 0x3fb10,
+ 0x3fb28, 0x3fb28,
+ 0x3fb3c, 0x3fb50,
+ 0x3fbf0, 0x3fc10,
+ 0x3fc28, 0x3fc28,
+ 0x3fc3c, 0x3fc50,
+ 0x3fcf0, 0x3fcfc,
+ 0x40000, 0x4000c,
+ 0x40040, 0x40050,
+ 0x40060, 0x40068,
+ 0x4007c, 0x4008c,
+ 0x40094, 0x400b0,
+ 0x400c0, 0x40144,
+ 0x40180, 0x4018c,
+ 0x40200, 0x40254,
+ 0x40260, 0x40264,
+ 0x40270, 0x40288,
+ 0x40290, 0x40298,
+ 0x402ac, 0x402c8,
+ 0x402d0, 0x402e0,
+ 0x402f0, 0x402f0,
+ 0x40300, 0x4033c,
+ 0x403f8, 0x403fc,
+ 0x41304, 0x413c4,
+ 0x41400, 0x4140c,
+ 0x41414, 0x4141c,
+ 0x41480, 0x414d0,
+ 0x44000, 0x44054,
+ 0x4405c, 0x44078,
+ 0x440c0, 0x44174,
+ 0x44180, 0x441ac,
+ 0x441b4, 0x441b8,
+ 0x441c0, 0x44254,
+ 0x4425c, 0x44278,
+ 0x442c0, 0x44374,
+ 0x44380, 0x443ac,
+ 0x443b4, 0x443b8,
+ 0x443c0, 0x44454,
+ 0x4445c, 0x44478,
+ 0x444c0, 0x44574,
+ 0x44580, 0x445ac,
+ 0x445b4, 0x445b8,
+ 0x445c0, 0x44654,
+ 0x4465c, 0x44678,
+ 0x446c0, 0x44774,
+ 0x44780, 0x447ac,
+ 0x447b4, 0x447b8,
+ 0x447c0, 0x44854,
+ 0x4485c, 0x44878,
+ 0x448c0, 0x44974,
+ 0x44980, 0x449ac,
+ 0x449b4, 0x449b8,
+ 0x449c0, 0x449fc,
+ 0x45000, 0x45004,
+ 0x45010, 0x45030,
+ 0x45040, 0x45060,
+ 0x45068, 0x45068,
+ 0x45080, 0x45084,
+ 0x450a0, 0x450b0,
+ 0x45200, 0x45204,
+ 0x45210, 0x45230,
+ 0x45240, 0x45260,
+ 0x45268, 0x45268,
+ 0x45280, 0x45284,
+ 0x452a0, 0x452b0,
+ 0x460c0, 0x460e4,
+ 0x47000, 0x4703c,
+ 0x47044, 0x4708c,
+ 0x47200, 0x47250,
+ 0x47400, 0x47408,
+ 0x47414, 0x47420,
+ 0x47600, 0x47618,
+ 0x47800, 0x47814,
+ 0x48000, 0x4800c,
+ 0x48040, 0x48050,
+ 0x48060, 0x48068,
+ 0x4807c, 0x4808c,
+ 0x48094, 0x480b0,
+ 0x480c0, 0x48144,
+ 0x48180, 0x4818c,
+ 0x48200, 0x48254,
+ 0x48260, 0x48264,
+ 0x48270, 0x48288,
+ 0x48290, 0x48298,
+ 0x482ac, 0x482c8,
+ 0x482d0, 0x482e0,
+ 0x482f0, 0x482f0,
+ 0x48300, 0x4833c,
+ 0x483f8, 0x483fc,
+ 0x49304, 0x493c4,
+ 0x49400, 0x4940c,
+ 0x49414, 0x4941c,
+ 0x49480, 0x494d0,
+ 0x4c000, 0x4c054,
+ 0x4c05c, 0x4c078,
+ 0x4c0c0, 0x4c174,
+ 0x4c180, 0x4c1ac,
+ 0x4c1b4, 0x4c1b8,
+ 0x4c1c0, 0x4c254,
+ 0x4c25c, 0x4c278,
+ 0x4c2c0, 0x4c374,
+ 0x4c380, 0x4c3ac,
+ 0x4c3b4, 0x4c3b8,
+ 0x4c3c0, 0x4c454,
+ 0x4c45c, 0x4c478,
+ 0x4c4c0, 0x4c574,
+ 0x4c580, 0x4c5ac,
+ 0x4c5b4, 0x4c5b8,
+ 0x4c5c0, 0x4c654,
+ 0x4c65c, 0x4c678,
+ 0x4c6c0, 0x4c774,
+ 0x4c780, 0x4c7ac,
+ 0x4c7b4, 0x4c7b8,
+ 0x4c7c0, 0x4c854,
+ 0x4c85c, 0x4c878,
+ 0x4c8c0, 0x4c974,
+ 0x4c980, 0x4c9ac,
+ 0x4c9b4, 0x4c9b8,
+ 0x4c9c0, 0x4c9fc,
+ 0x4d000, 0x4d004,
+ 0x4d010, 0x4d030,
+ 0x4d040, 0x4d060,
+ 0x4d068, 0x4d068,
+ 0x4d080, 0x4d084,
+ 0x4d0a0, 0x4d0b0,
+ 0x4d200, 0x4d204,
+ 0x4d210, 0x4d230,
+ 0x4d240, 0x4d260,
+ 0x4d268, 0x4d268,
+ 0x4d280, 0x4d284,
+ 0x4d2a0, 0x4d2b0,
+ 0x4e0c0, 0x4e0e4,
+ 0x4f000, 0x4f03c,
+ 0x4f044, 0x4f08c,
+ 0x4f200, 0x4f250,
+ 0x4f400, 0x4f408,
+ 0x4f414, 0x4f420,
+ 0x4f600, 0x4f618,
+ 0x4f800, 0x4f814,
+ 0x50000, 0x50084,
+ 0x50090, 0x500cc,
+ 0x50400, 0x50400,
+ 0x50800, 0x50884,
+ 0x50890, 0x508cc,
+ 0x50c00, 0x50c00,
+ 0x51000, 0x5101c,
+ 0x51300, 0x51308,
+ };
+
+ static const unsigned int t6_reg_ranges[] = {
+ 0x1008, 0x101c,
+ 0x1024, 0x10a8,
+ 0x10b4, 0x10f8,
+ 0x1100, 0x1114,
+ 0x111c, 0x112c,
+ 0x1138, 0x113c,
+ 0x1144, 0x114c,
+ 0x1180, 0x1184,
+ 0x1190, 0x1194,
+ 0x11a0, 0x11a4,
+ 0x11b0, 0x11b4,
+ 0x11fc, 0x1274,
+ 0x1280, 0x133c,
+ 0x1800, 0x18fc,
+ 0x3000, 0x302c,
+ 0x3060, 0x30b0,
+ 0x30b8, 0x30d8,
+ 0x30e0, 0x30fc,
+ 0x3140, 0x357c,
+ 0x35a8, 0x35cc,
+ 0x35ec, 0x35ec,
+ 0x3600, 0x5624,
+ 0x56cc, 0x56ec,
+ 0x56f4, 0x5720,
+ 0x5728, 0x575c,
+ 0x580c, 0x5814,
+ 0x5890, 0x589c,
+ 0x58a4, 0x58ac,
+ 0x58b8, 0x58bc,
+ 0x5940, 0x595c,
+ 0x5980, 0x598c,
+ 0x59b0, 0x59c8,
+ 0x59d0, 0x59dc,
+ 0x59fc, 0x5a18,
+ 0x5a60, 0x5a6c,
+ 0x5a80, 0x5a8c,
+ 0x5a94, 0x5a9c,
+ 0x5b94, 0x5bfc,
+ 0x5c10, 0x5e48,
+ 0x5e50, 0x5e94,
+ 0x5ea0, 0x5eb0,
+ 0x5ec0, 0x5ec0,
+ 0x5ec8, 0x5ed0,
+ 0x5ee0, 0x5ee0,
+ 0x5ef0, 0x5ef0,
+ 0x5f00, 0x5f00,
+ 0x6000, 0x6020,
+ 0x6028, 0x6040,
+ 0x6058, 0x609c,
+ 0x60a8, 0x619c,
+ 0x7700, 0x7798,
+ 0x77c0, 0x7880,
+ 0x78cc, 0x78fc,
+ 0x7b00, 0x7b58,
+ 0x7b60, 0x7b84,
+ 0x7b8c, 0x7c54,
+ 0x7d00, 0x7d38,
+ 0x7d40, 0x7d84,
+ 0x7d8c, 0x7ddc,
+ 0x7de4, 0x7e04,
+ 0x7e10, 0x7e1c,
+ 0x7e24, 0x7e38,
+ 0x7e40, 0x7e44,
+ 0x7e4c, 0x7e78,
+ 0x7e80, 0x7edc,
+ 0x7ee8, 0x7efc,
+ 0x8dc0, 0x8de4,
+ 0x8df8, 0x8e04,
+ 0x8e10, 0x8e84,
+ 0x8ea0, 0x8f88,
+ 0x8fb8, 0x9058,
+ 0x9060, 0x9060,
+ 0x9068, 0x90f8,
+ 0x9100, 0x9124,
+ 0x9400, 0x9470,
+ 0x9600, 0x9600,
+ 0x9608, 0x9638,
+ 0x9640, 0x9704,
+ 0x9710, 0x971c,
+ 0x9800, 0x9808,
+ 0x9820, 0x983c,
+ 0x9850, 0x9864,
+ 0x9c00, 0x9c6c,
+ 0x9c80, 0x9cec,
+ 0x9d00, 0x9d6c,
+ 0x9d80, 0x9dec,
+ 0x9e00, 0x9e6c,
+ 0x9e80, 0x9eec,
+ 0x9f00, 0x9f6c,
+ 0x9f80, 0xa020,
+ 0xd004, 0xd03c,
+ 0xd100, 0xd118,
+ 0xd200, 0xd214,
+ 0xd220, 0xd234,
+ 0xd240, 0xd254,
+ 0xd260, 0xd274,
+ 0xd280, 0xd294,
+ 0xd2a0, 0xd2b4,
+ 0xd2c0, 0xd2d4,
+ 0xd2e0, 0xd2f4,
+ 0xd300, 0xd31c,
+ 0xdfc0, 0xdfe0,
+ 0xe000, 0xf008,
+ 0xf010, 0xf018,
+ 0xf020, 0xf028,
+ 0x11000, 0x11014,
+ 0x11048, 0x1106c,
+ 0x11074, 0x11088,
+ 0x11098, 0x11120,
+ 0x1112c, 0x1117c,
+ 0x11190, 0x112e0,
+ 0x11300, 0x1130c,
+ 0x12000, 0x1206c,
+ 0x19040, 0x1906c,
+ 0x19078, 0x19080,
+ 0x1908c, 0x190e8,
+ 0x190f0, 0x190f8,
+ 0x19100, 0x19110,
+ 0x19120, 0x19124,
+ 0x19150, 0x19194,
+ 0x1919c, 0x191b0,
+ 0x191d0, 0x191e8,
+ 0x19238, 0x19290,
+ 0x192a4, 0x192b0,
+ 0x192bc, 0x192bc,
+ 0x19348, 0x1934c,
+ 0x193f8, 0x19418,
+ 0x19420, 0x19428,
+ 0x19430, 0x19444,
+ 0x1944c, 0x1946c,
+ 0x19474, 0x19474,
+ 0x19490, 0x194cc,
+ 0x194f0, 0x194f8,
+ 0x19c00, 0x19c48,
+ 0x19c50, 0x19c80,
+ 0x19c94, 0x19c98,
+ 0x19ca0, 0x19cbc,
+ 0x19ce4, 0x19ce4,
+ 0x19cf0, 0x19cf8,
+ 0x19d00, 0x19d28,
+ 0x19d50, 0x19d78,
+ 0x19d94, 0x19d98,
+ 0x19da0, 0x19dc8,
+ 0x19df0, 0x19e10,
+ 0x19e50, 0x19e6c,
+ 0x19ea0, 0x19ebc,
+ 0x19ec4, 0x19ef4,
+ 0x19f04, 0x19f2c,
+ 0x19f34, 0x19f34,
+ 0x19f40, 0x19f50,
+ 0x19f90, 0x19fac,
+ 0x19fc4, 0x19fc8,
+ 0x19fd0, 0x19fe4,
+ 0x1a000, 0x1a004,
+ 0x1a010, 0x1a06c,
+ 0x1a0b0, 0x1a0e4,
+ 0x1a0ec, 0x1a0f8,
+ 0x1a100, 0x1a108,
+ 0x1a114, 0x1a120,
+ 0x1a128, 0x1a130,
+ 0x1a138, 0x1a138,
+ 0x1a190, 0x1a1c4,
+ 0x1a1fc, 0x1a1fc,
+ 0x1e008, 0x1e00c,
+ 0x1e040, 0x1e044,
+ 0x1e04c, 0x1e04c,
+ 0x1e284, 0x1e290,
+ 0x1e2c0, 0x1e2c0,
+ 0x1e2e0, 0x1e2e0,
+ 0x1e300, 0x1e384,
+ 0x1e3c0, 0x1e3c8,
+ 0x1e408, 0x1e40c,
+ 0x1e440, 0x1e444,
+ 0x1e44c, 0x1e44c,
+ 0x1e684, 0x1e690,
+ 0x1e6c0, 0x1e6c0,
+ 0x1e6e0, 0x1e6e0,
+ 0x1e700, 0x1e784,
+ 0x1e7c0, 0x1e7c8,
+ 0x1e808, 0x1e80c,
+ 0x1e840, 0x1e844,
+ 0x1e84c, 0x1e84c,
+ 0x1ea84, 0x1ea90,
+ 0x1eac0, 0x1eac0,
+ 0x1eae0, 0x1eae0,
+ 0x1eb00, 0x1eb84,
+ 0x1ebc0, 0x1ebc8,
+ 0x1ec08, 0x1ec0c,
+ 0x1ec40, 0x1ec44,
+ 0x1ec4c, 0x1ec4c,
+ 0x1ee84, 0x1ee90,
+ 0x1eec0, 0x1eec0,
+ 0x1eee0, 0x1eee0,
+ 0x1ef00, 0x1ef84,
+ 0x1efc0, 0x1efc8,
+ 0x1f008, 0x1f00c,
+ 0x1f040, 0x1f044,
+ 0x1f04c, 0x1f04c,
+ 0x1f284, 0x1f290,
+ 0x1f2c0, 0x1f2c0,
+ 0x1f2e0, 0x1f2e0,
+ 0x1f300, 0x1f384,
+ 0x1f3c0, 0x1f3c8,
+ 0x1f408, 0x1f40c,
+ 0x1f440, 0x1f444,
+ 0x1f44c, 0x1f44c,
+ 0x1f684, 0x1f690,
+ 0x1f6c0, 0x1f6c0,
+ 0x1f6e0, 0x1f6e0,
+ 0x1f700, 0x1f784,
+ 0x1f7c0, 0x1f7c8,
+ 0x1f808, 0x1f80c,
+ 0x1f840, 0x1f844,
+ 0x1f84c, 0x1f84c,
+ 0x1fa84, 0x1fa90,
+ 0x1fac0, 0x1fac0,
+ 0x1fae0, 0x1fae0,
+ 0x1fb00, 0x1fb84,
+ 0x1fbc0, 0x1fbc8,
+ 0x1fc08, 0x1fc0c,
+ 0x1fc40, 0x1fc44,
+ 0x1fc4c, 0x1fc4c,
+ 0x1fe84, 0x1fe90,
+ 0x1fec0, 0x1fec0,
+ 0x1fee0, 0x1fee0,
+ 0x1ff00, 0x1ff84,
+ 0x1ffc0, 0x1ffc8,
+ 0x30000, 0x30030,
+ 0x30038, 0x30038,
+ 0x30040, 0x30040,
+ 0x30048, 0x30048,
+ 0x30050, 0x30050,
+ 0x3005c, 0x30060,
+ 0x30068, 0x30068,
+ 0x30070, 0x30070,
+ 0x30100, 0x30168,
+ 0x30190, 0x301a0,
+ 0x301a8, 0x301b8,
+ 0x301c4, 0x301c8,
+ 0x301d0, 0x301d0,
+ 0x30200, 0x30320,
+ 0x30400, 0x304b4,
+ 0x304c0, 0x3052c,
+ 0x30540, 0x3061c,
+ 0x30800, 0x308a0,
+ 0x308c0, 0x30908,
+ 0x30910, 0x309b8,
+ 0x30a00, 0x30a04,
+ 0x30a0c, 0x30a14,
+ 0x30a1c, 0x30a2c,
+ 0x30a44, 0x30a50,
+ 0x30a74, 0x30a74,
+ 0x30a7c, 0x30afc,
+ 0x30b08, 0x30c24,
+ 0x30d00, 0x30d14,
+ 0x30d1c, 0x30d3c,
+ 0x30d44, 0x30d4c,
+ 0x30d54, 0x30d74,
+ 0x30d7c, 0x30d7c,
+ 0x30de0, 0x30de0,
+ 0x30e00, 0x30ed4,
+ 0x30f00, 0x30fa4,
+ 0x30fc0, 0x30fc4,
+ 0x31000, 0x31004,
+ 0x31080, 0x310fc,
+ 0x31208, 0x31220,
+ 0x3123c, 0x31254,
+ 0x31300, 0x31300,
+ 0x31308, 0x3131c,
+ 0x31338, 0x3133c,
+ 0x31380, 0x31380,
+ 0x31388, 0x313a8,
+ 0x313b4, 0x313b4,
+ 0x31400, 0x31420,
+ 0x31438, 0x3143c,
+ 0x31480, 0x31480,
+ 0x314a8, 0x314a8,
+ 0x314b0, 0x314b4,
+ 0x314c8, 0x314d4,
+ 0x31a40, 0x31a4c,
+ 0x31af0, 0x31b20,
+ 0x31b38, 0x31b3c,
+ 0x31b80, 0x31b80,
+ 0x31ba8, 0x31ba8,
+ 0x31bb0, 0x31bb4,
+ 0x31bc8, 0x31bd4,
+ 0x32140, 0x3218c,
+ 0x321f0, 0x321f4,
+ 0x32200, 0x32200,
+ 0x32218, 0x32218,
+ 0x32400, 0x32400,
+ 0x32408, 0x3241c,
+ 0x32618, 0x32620,
+ 0x32664, 0x32664,
+ 0x326a8, 0x326a8,
+ 0x326ec, 0x326ec,
+ 0x32a00, 0x32abc,
+ 0x32b00, 0x32b38,
+ 0x32b40, 0x32b58,
+ 0x32b60, 0x32b78,
+ 0x32c00, 0x32c00,
+ 0x32c08, 0x32c3c,
+ 0x32e00, 0x32e2c,
+ 0x32f00, 0x32f2c,
+ 0x33000, 0x3302c,
+ 0x33034, 0x33050,
+ 0x33058, 0x33058,
+ 0x33060, 0x3308c,
+ 0x3309c, 0x330ac,
+ 0x330c0, 0x330c0,
+ 0x330c8, 0x330d0,
+ 0x330d8, 0x330e0,
+ 0x330ec, 0x3312c,
+ 0x33134, 0x33150,
+ 0x33158, 0x33158,
+ 0x33160, 0x3318c,
+ 0x3319c, 0x331ac,
+ 0x331c0, 0x331c0,
+ 0x331c8, 0x331d0,
+ 0x331d8, 0x331e0,
+ 0x331ec, 0x33290,
+ 0x33298, 0x332c4,
+ 0x332e4, 0x33390,
+ 0x33398, 0x333c4,
+ 0x333e4, 0x3342c,
+ 0x33434, 0x33450,
+ 0x33458, 0x33458,
+ 0x33460, 0x3348c,
+ 0x3349c, 0x334ac,
+ 0x334c0, 0x334c0,
+ 0x334c8, 0x334d0,
+ 0x334d8, 0x334e0,
+ 0x334ec, 0x3352c,
+ 0x33534, 0x33550,
+ 0x33558, 0x33558,
+ 0x33560, 0x3358c,
+ 0x3359c, 0x335ac,
+ 0x335c0, 0x335c0,
+ 0x335c8, 0x335d0,
+ 0x335d8, 0x335e0,
+ 0x335ec, 0x33690,
+ 0x33698, 0x336c4,
+ 0x336e4, 0x33790,
+ 0x33798, 0x337c4,
+ 0x337e4, 0x337fc,
+ 0x33814, 0x33814,
+ 0x33854, 0x33868,
+ 0x33880, 0x3388c,
+ 0x338c0, 0x338d0,
+ 0x338e8, 0x338ec,
+ 0x33900, 0x3392c,
+ 0x33934, 0x33950,
+ 0x33958, 0x33958,
+ 0x33960, 0x3398c,
+ 0x3399c, 0x339ac,
+ 0x339c0, 0x339c0,
+ 0x339c8, 0x339d0,
+ 0x339d8, 0x339e0,
+ 0x339ec, 0x33a90,
+ 0x33a98, 0x33ac4,
+ 0x33ae4, 0x33b10,
+ 0x33b24, 0x33b28,
+ 0x33b38, 0x33b50,
+ 0x33bf0, 0x33c10,
+ 0x33c24, 0x33c28,
+ 0x33c38, 0x33c50,
+ 0x33cf0, 0x33cfc,
+ 0x34000, 0x34030,
+ 0x34038, 0x34038,
+ 0x34040, 0x34040,
+ 0x34048, 0x34048,
+ 0x34050, 0x34050,
+ 0x3405c, 0x34060,
+ 0x34068, 0x34068,
+ 0x34070, 0x34070,
+ 0x34100, 0x34168,
+ 0x34190, 0x341a0,
+ 0x341a8, 0x341b8,
+ 0x341c4, 0x341c8,
+ 0x341d0, 0x341d0,
+ 0x34200, 0x34320,
+ 0x34400, 0x344b4,
+ 0x344c0, 0x3452c,
+ 0x34540, 0x3461c,
+ 0x34800, 0x348a0,
+ 0x348c0, 0x34908,
+ 0x34910, 0x349b8,
+ 0x34a00, 0x34a04,
+ 0x34a0c, 0x34a14,
+ 0x34a1c, 0x34a2c,
+ 0x34a44, 0x34a50,
+ 0x34a74, 0x34a74,
+ 0x34a7c, 0x34afc,
+ 0x34b08, 0x34c24,
+ 0x34d00, 0x34d14,
+ 0x34d1c, 0x34d3c,
+ 0x34d44, 0x34d4c,
+ 0x34d54, 0x34d74,
+ 0x34d7c, 0x34d7c,
+ 0x34de0, 0x34de0,
+ 0x34e00, 0x34ed4,
+ 0x34f00, 0x34fa4,
+ 0x34fc0, 0x34fc4,
+ 0x35000, 0x35004,
+ 0x35080, 0x350fc,
+ 0x35208, 0x35220,
+ 0x3523c, 0x35254,
+ 0x35300, 0x35300,
+ 0x35308, 0x3531c,
+ 0x35338, 0x3533c,
+ 0x35380, 0x35380,
+ 0x35388, 0x353a8,
+ 0x353b4, 0x353b4,
+ 0x35400, 0x35420,
+ 0x35438, 0x3543c,
+ 0x35480, 0x35480,
+ 0x354a8, 0x354a8,
+ 0x354b0, 0x354b4,
+ 0x354c8, 0x354d4,
+ 0x35a40, 0x35a4c,
+ 0x35af0, 0x35b20,
+ 0x35b38, 0x35b3c,
+ 0x35b80, 0x35b80,
+ 0x35ba8, 0x35ba8,
+ 0x35bb0, 0x35bb4,
+ 0x35bc8, 0x35bd4,
+ 0x36140, 0x3618c,
+ 0x361f0, 0x361f4,
+ 0x36200, 0x36200,
+ 0x36218, 0x36218,
+ 0x36400, 0x36400,
+ 0x36408, 0x3641c,
+ 0x36618, 0x36620,
+ 0x36664, 0x36664,
+ 0x366a8, 0x366a8,
+ 0x366ec, 0x366ec,
+ 0x36a00, 0x36abc,
+ 0x36b00, 0x36b38,
+ 0x36b40, 0x36b58,
+ 0x36b60, 0x36b78,
+ 0x36c00, 0x36c00,
+ 0x36c08, 0x36c3c,
+ 0x36e00, 0x36e2c,
+ 0x36f00, 0x36f2c,
+ 0x37000, 0x3702c,
+ 0x37034, 0x37050,
+ 0x37058, 0x37058,
+ 0x37060, 0x3708c,
+ 0x3709c, 0x370ac,
+ 0x370c0, 0x370c0,
+ 0x370c8, 0x370d0,
+ 0x370d8, 0x370e0,
+ 0x370ec, 0x3712c,
+ 0x37134, 0x37150,
+ 0x37158, 0x37158,
+ 0x37160, 0x3718c,
+ 0x3719c, 0x371ac,
+ 0x371c0, 0x371c0,
+ 0x371c8, 0x371d0,
+ 0x371d8, 0x371e0,
+ 0x371ec, 0x37290,
+ 0x37298, 0x372c4,
+ 0x372e4, 0x37390,
+ 0x37398, 0x373c4,
+ 0x373e4, 0x3742c,
+ 0x37434, 0x37450,
+ 0x37458, 0x37458,
+ 0x37460, 0x3748c,
+ 0x3749c, 0x374ac,
+ 0x374c0, 0x374c0,
+ 0x374c8, 0x374d0,
+ 0x374d8, 0x374e0,
+ 0x374ec, 0x3752c,
+ 0x37534, 0x37550,
+ 0x37558, 0x37558,
+ 0x37560, 0x3758c,
+ 0x3759c, 0x375ac,
+ 0x375c0, 0x375c0,
+ 0x375c8, 0x375d0,
+ 0x375d8, 0x375e0,
+ 0x375ec, 0x37690,
+ 0x37698, 0x376c4,
+ 0x376e4, 0x37790,
+ 0x37798, 0x377c4,
+ 0x377e4, 0x377fc,
+ 0x37814, 0x37814,
+ 0x37854, 0x37868,
+ 0x37880, 0x3788c,
+ 0x378c0, 0x378d0,
+ 0x378e8, 0x378ec,
+ 0x37900, 0x3792c,
+ 0x37934, 0x37950,
+ 0x37958, 0x37958,
+ 0x37960, 0x3798c,
+ 0x3799c, 0x379ac,
+ 0x379c0, 0x379c0,
+ 0x379c8, 0x379d0,
+ 0x379d8, 0x379e0,
+ 0x379ec, 0x37a90,
+ 0x37a98, 0x37ac4,
+ 0x37ae4, 0x37b10,
+ 0x37b24, 0x37b28,
+ 0x37b38, 0x37b50,
+ 0x37bf0, 0x37c10,
+ 0x37c24, 0x37c28,
+ 0x37c38, 0x37c50,
+ 0x37cf0, 0x37cfc,
+ 0x40040, 0x40040,
+ 0x40080, 0x40084,
+ 0x40100, 0x40100,
+ 0x40140, 0x401bc,
+ 0x40200, 0x40214,
+ 0x40228, 0x40228,
+ 0x40240, 0x40258,
+ 0x40280, 0x40280,
+ 0x40304, 0x40304,
+ 0x40330, 0x4033c,
+ 0x41304, 0x413c8,
+ 0x413d0, 0x413dc,
+ 0x413f0, 0x413f0,
+ 0x41400, 0x4140c,
+ 0x41414, 0x4141c,
+ 0x41480, 0x414d0,
+ 0x44000, 0x4407c,
+ 0x440c0, 0x441ac,
+ 0x441b4, 0x4427c,
+ 0x442c0, 0x443ac,
+ 0x443b4, 0x4447c,
+ 0x444c0, 0x445ac,
+ 0x445b4, 0x4467c,
+ 0x446c0, 0x447ac,
+ 0x447b4, 0x4487c,
+ 0x448c0, 0x449ac,
+ 0x449b4, 0x44a7c,
+ 0x44ac0, 0x44bac,
+ 0x44bb4, 0x44c7c,
+ 0x44cc0, 0x44dac,
+ 0x44db4, 0x44e7c,
+ 0x44ec0, 0x44fac,
+ 0x44fb4, 0x4507c,
+ 0x450c0, 0x451ac,
+ 0x451b4, 0x451fc,
+ 0x45800, 0x45804,
+ 0x45810, 0x45830,
+ 0x45840, 0x45860,
+ 0x45868, 0x45868,
+ 0x45880, 0x45884,
+ 0x458a0, 0x458b0,
+ 0x45a00, 0x45a04,
+ 0x45a10, 0x45a30,
+ 0x45a40, 0x45a60,
+ 0x45a68, 0x45a68,
+ 0x45a80, 0x45a84,
+ 0x45aa0, 0x45ab0,
+ 0x460c0, 0x460e4,
+ 0x47000, 0x4703c,
+ 0x47044, 0x4708c,
+ 0x47200, 0x47250,
+ 0x47400, 0x47408,
+ 0x47414, 0x47420,
+ 0x47600, 0x47618,
+ 0x47800, 0x47814,
+ 0x47820, 0x4782c,
+ 0x50000, 0x50084,
+ 0x50090, 0x500cc,
+ 0x50300, 0x50384,
+ 0x50400, 0x50400,
+ 0x50800, 0x50884,
+ 0x50890, 0x508cc,
+ 0x50b00, 0x50b84,
+ 0x50c00, 0x50c00,
+ 0x51000, 0x51020,
+ 0x51028, 0x510b0,
+ 0x51300, 0x51324,
+ };
+
+ u32 *buf_end = (u32 *)(buf + buf_size);
+ const unsigned int *reg_ranges;
+ int reg_ranges_size, range;
+ unsigned int chip_version = chip_id(adap);
+
+ /*
+ * Select the right set of register ranges to dump depending on the
+ * adapter chip type.
+ */
+ switch (chip_version) {
+ case CHELSIO_T4:
+ reg_ranges = t4_reg_ranges;
+ reg_ranges_size = ARRAY_SIZE(t4_reg_ranges);
+ break;
+
+ case CHELSIO_T5:
+ reg_ranges = t5_reg_ranges;
+ reg_ranges_size = ARRAY_SIZE(t5_reg_ranges);
+ break;
+
+ case CHELSIO_T6:
+ reg_ranges = t6_reg_ranges;
+ reg_ranges_size = ARRAY_SIZE(t6_reg_ranges);
+ break;
+
+ default:
+ CH_ERR(adap,
+ "Unsupported chip version %d\n", chip_version);
+ return;
+ }
+
+ /*
+ * Clear the register buffer and insert the appropriate register
+ * values selected by the above register ranges.
+ */
+ memset(buf, 0, buf_size);
+ for (range = 0; range < reg_ranges_size; range += 2) {
+ unsigned int reg = reg_ranges[range];
+ unsigned int last_reg = reg_ranges[range + 1];
+ u32 *bufp = (u32 *)(buf + reg);
+
+ /*
+ * Iterate across the register range filling in the register
+ * buffer but don't write past the end of the register buffer.
+ */
+ while (reg <= last_reg && bufp < buf_end) {
+ *bufp++ = t4_read_reg(adap, reg);
+ reg += sizeof(u32);
+ }
+ }
+}
+
+/*
* Partial EEPROM Vital Product Data structure. Includes only the ID and
- * VPD-R header.
+ * VPD-R sections.
*/
struct t4_vpd_hdr {
u8 id_tag;
@@ -540,14 +2599,65 @@ struct t4_vpd_hdr {
/*
* EEPROM reads take a few tens of us while writes can take a bit over 5 ms.
*/
-#define EEPROM_MAX_RD_POLL 40
-#define EEPROM_MAX_WR_POLL 6
-#define EEPROM_STAT_ADDR 0x7bfc
-#define VPD_BASE 0x400
-#define VPD_BASE_OLD 0
-#define VPD_LEN 1024
+#define EEPROM_DELAY 10 /* 10us per poll spin */
+#define EEPROM_MAX_POLL 5000 /* x 5000 == 50ms */
+
+#define EEPROM_STAT_ADDR 0x7bfc
+#define VPD_BASE 0x400
+#define VPD_BASE_OLD 0
+#define VPD_LEN 1024
#define VPD_INFO_FLD_HDR_SIZE 3
-#define CHELSIO_VPD_UNIQUE_ID 0x82
+#define CHELSIO_VPD_UNIQUE_ID 0x82
+
+/*
+ * Small utility function to wait till any outstanding VPD Access is complete.
+ * We have a per-adapter state variable "VPD Busy" to indicate when we have a
+ * VPD Access in flight. This allows us to handle the problem of having a
+ * previous VPD Access time out and prevent an attempt to inject a new VPD
+ * Request before any in-flight VPD reguest has completed.
+ */
+static int t4_seeprom_wait(struct adapter *adapter)
+{
+ unsigned int base = adapter->params.pci.vpd_cap_addr;
+ int max_poll;
+
+ /*
+ * If no VPD Access is in flight, we can just return success right
+ * away.
+ */
+ if (!adapter->vpd_busy)
+ return 0;
+
+ /*
+ * Poll the VPD Capability Address/Flag register waiting for it
+ * to indicate that the operation is complete.
+ */
+ max_poll = EEPROM_MAX_POLL;
+ do {
+ u16 val;
+
+ udelay(EEPROM_DELAY);
+ t4_os_pci_read_cfg2(adapter, base + PCI_VPD_ADDR, &val);
+
+ /*
+ * If the operation is complete, mark the VPD as no longer
+ * busy and return success.
+ */
+ if ((val & PCI_VPD_ADDR_F) == adapter->vpd_flag) {
+ adapter->vpd_busy = 0;
+ return 0;
+ }
+ } while (--max_poll);
+
+ /*
+ * Failure! Note that we leave the VPD Busy status set in order to
+ * avoid pushing a new VPD Access request into the VPD Capability till
+ * the current operation eventually succeeds. It's a bug to issue a
+ * new request when an existing request is in flight and will result
+ * in corrupt hardware state.
+ */
+ return -ETIMEDOUT;
+}
/**
* t4_seeprom_read - read a serial EEPROM location
@@ -561,23 +2671,44 @@ struct t4_vpd_hdr {
*/
int t4_seeprom_read(struct adapter *adapter, u32 addr, u32 *data)
{
- u16 val;
- int attempts = EEPROM_MAX_RD_POLL;
unsigned int base = adapter->params.pci.vpd_cap_addr;
+ int ret;
+ /*
+ * VPD Accesses must alway be 4-byte aligned!
+ */
if (addr >= EEPROMVSIZE || (addr & 3))
return -EINVAL;
- t4_os_pci_write_cfg2(adapter, base + PCI_VPD_ADDR, (u16)addr);
- do {
- udelay(10);
- t4_os_pci_read_cfg2(adapter, base + PCI_VPD_ADDR, &val);
- } while (!(val & PCI_VPD_ADDR_F) && --attempts);
+ /*
+ * Wait for any previous operation which may still be in flight to
+ * complete.
+ */
+ ret = t4_seeprom_wait(adapter);
+ if (ret) {
+ CH_ERR(adapter, "VPD still busy from previous operation\n");
+ return ret;
+ }
- if (!(val & PCI_VPD_ADDR_F)) {
- CH_ERR(adapter, "reading EEPROM address 0x%x failed\n", addr);
- return -EIO;
+ /*
+ * Issue our new VPD Read request, mark the VPD as being busy and wait
+ * for our request to complete. If it doesn't complete, note the
+ * error and return it to our caller. Note that we do not reset the
+ * VPD Busy status!
+ */
+ t4_os_pci_write_cfg2(adapter, base + PCI_VPD_ADDR, (u16)addr);
+ adapter->vpd_busy = 1;
+ adapter->vpd_flag = PCI_VPD_ADDR_F;
+ ret = t4_seeprom_wait(adapter);
+ if (ret) {
+ CH_ERR(adapter, "VPD read of address %#x failed\n", addr);
+ return ret;
}
+
+ /*
+ * Grab the returned data, swizzle it into our endianess and
+ * return success.
+ */
t4_os_pci_read_cfg4(adapter, base + PCI_VPD_DATA, data);
*data = le32_to_cpu(*data);
return 0;
@@ -595,26 +2726,59 @@ int t4_seeprom_read(struct adapter *adapter, u32 addr, u32 *data)
*/
int t4_seeprom_write(struct adapter *adapter, u32 addr, u32 data)
{
- u16 val;
- int attempts = EEPROM_MAX_WR_POLL;
unsigned int base = adapter->params.pci.vpd_cap_addr;
+ int ret;
+ u32 stats_reg;
+ int max_poll;
+ /*
+ * VPD Accesses must alway be 4-byte aligned!
+ */
if (addr >= EEPROMVSIZE || (addr & 3))
return -EINVAL;
+ /*
+ * Wait for any previous operation which may still be in flight to
+ * complete.
+ */
+ ret = t4_seeprom_wait(adapter);
+ if (ret) {
+ CH_ERR(adapter, "VPD still busy from previous operation\n");
+ return ret;
+ }
+
+ /*
+ * Issue our new VPD Read request, mark the VPD as being busy and wait
+ * for our request to complete. If it doesn't complete, note the
+ * error and return it to our caller. Note that we do not reset the
+ * VPD Busy status!
+ */
t4_os_pci_write_cfg4(adapter, base + PCI_VPD_DATA,
cpu_to_le32(data));
t4_os_pci_write_cfg2(adapter, base + PCI_VPD_ADDR,
(u16)addr | PCI_VPD_ADDR_F);
+ adapter->vpd_busy = 1;
+ adapter->vpd_flag = 0;
+ ret = t4_seeprom_wait(adapter);
+ if (ret) {
+ CH_ERR(adapter, "VPD write of address %#x failed\n", addr);
+ return ret;
+ }
+
+ /*
+ * Reset PCI_VPD_DATA register after a transaction and wait for our
+ * request to complete. If it doesn't complete, return error.
+ */
+ t4_os_pci_write_cfg4(adapter, base + PCI_VPD_DATA, 0);
+ max_poll = EEPROM_MAX_POLL;
do {
- msleep(1);
- t4_os_pci_read_cfg2(adapter, base + PCI_VPD_ADDR, &val);
- } while ((val & PCI_VPD_ADDR_F) && --attempts);
+ udelay(EEPROM_DELAY);
+ t4_seeprom_read(adapter, EEPROM_STAT_ADDR, &stats_reg);
+ } while ((stats_reg & 0x1) && --max_poll);
+ if (!max_poll)
+ return -ETIMEDOUT;
- if (val & PCI_VPD_ADDR_F) {
- CH_ERR(adapter, "write to EEPROM address 0x%x failed\n", addr);
- return -EIO;
- }
+ /* Return success! */
return 0;
}
@@ -663,33 +2827,33 @@ int t4_seeprom_wp(struct adapter *adapter, int enable)
* get_vpd_keyword_val - Locates an information field keyword in the VPD
* @v: Pointer to buffered vpd data structure
* @kw: The keyword to search for
- *
+ *
* Returns the value of the information field keyword or
* -ENOENT otherwise.
*/
static int get_vpd_keyword_val(const struct t4_vpd_hdr *v, const char *kw)
{
- int i;
- unsigned int offset , len;
- const u8 *buf = &v->id_tag;
- const u8 *vpdr_len = &v->vpdr_tag;
- offset = sizeof(struct t4_vpd_hdr);
- len = (u16)vpdr_len[1] + ((u16)vpdr_len[2] << 8);
-
- if (len + sizeof(struct t4_vpd_hdr) > VPD_LEN) {
- return -ENOENT;
- }
+ int i;
+ unsigned int offset , len;
+ const u8 *buf = (const u8 *)v;
+ const u8 *vpdr_len = &v->vpdr_len[0];
+ offset = sizeof(struct t4_vpd_hdr);
+ len = (u16)vpdr_len[0] + ((u16)vpdr_len[1] << 8);
+
+ if (len + sizeof(struct t4_vpd_hdr) > VPD_LEN) {
+ return -ENOENT;
+ }
- for (i = offset; i + VPD_INFO_FLD_HDR_SIZE <= offset + len;) {
- if(memcmp(buf + i , kw , 2) == 0){
- i += VPD_INFO_FLD_HDR_SIZE;
- return i;
- }
+ for (i = offset; i + VPD_INFO_FLD_HDR_SIZE <= offset + len;) {
+ if(memcmp(buf + i , kw , 2) == 0){
+ i += VPD_INFO_FLD_HDR_SIZE;
+ return i;
+ }
- i += VPD_INFO_FLD_HDR_SIZE + buf[i+2];
- }
+ i += VPD_INFO_FLD_HDR_SIZE + buf[i+2];
+ }
- return -ENOENT;
+ return -ENOENT;
}
@@ -697,14 +2861,16 @@ static int get_vpd_keyword_val(const struct t4_vpd_hdr *v, const char *kw)
* get_vpd_params - read VPD parameters from VPD EEPROM
* @adapter: adapter to read
* @p: where to store the parameters
+ * @vpd: caller provided temporary space to read the VPD into
*
* Reads card parameters stored in VPD EEPROM.
*/
-static int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
+static int get_vpd_params(struct adapter *adapter, struct vpd_params *p,
+ u8 *vpd)
{
int i, ret, addr;
int ec, sn, pn, na;
- u8 vpd[VPD_LEN], csum;
+ u8 csum;
const struct t4_vpd_hdr *v;
/*
@@ -712,31 +2878,43 @@ static int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
* it at 0.
*/
ret = t4_seeprom_read(adapter, VPD_BASE, (u32 *)(vpd));
+ if (ret)
+ return (ret);
+
+ /*
+ * The VPD shall have a unique identifier specified by the PCI SIG.
+ * For chelsio adapters, the identifier is 0x82. The first byte of a VPD
+ * shall be CHELSIO_VPD_UNIQUE_ID (0x82). The VPD programming software
+ * is expected to automatically put this entry at the
+ * beginning of the VPD.
+ */
addr = *vpd == CHELSIO_VPD_UNIQUE_ID ? VPD_BASE : VPD_BASE_OLD;
- for (i = 0; i < sizeof(vpd); i += 4) {
+ for (i = 0; i < VPD_LEN; i += 4) {
ret = t4_seeprom_read(adapter, addr + i, (u32 *)(vpd + i));
if (ret)
return ret;
}
v = (const struct t4_vpd_hdr *)vpd;
-
+
#define FIND_VPD_KW(var,name) do { \
var = get_vpd_keyword_val(v , name); \
if (var < 0) { \
CH_ERR(adapter, "missing VPD keyword " name "\n"); \
return -EINVAL; \
} \
-} while (0)
+} while (0)
FIND_VPD_KW(i, "RV");
for (csum = 0; i >= 0; i--)
csum += vpd[i];
if (csum) {
- CH_ERR(adapter, "corrupted VPD EEPROM, actual csum %u\n", csum);
+ CH_ERR(adapter,
+ "corrupted VPD EEPROM, actual csum %u\n", csum);
return -EINVAL;
}
+
FIND_VPD_KW(ec, "EC");
FIND_VPD_KW(sn, "SN");
FIND_VPD_KW(pn, "PN");
@@ -762,16 +2940,16 @@ static int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
/* serial flash and firmware constants and flash config file constants */
enum {
- SF_ATTEMPTS = 10, /* max retries for SF operations */
+ SF_ATTEMPTS = 10, /* max retries for SF operations */
/* flash command opcodes */
- SF_PROG_PAGE = 2, /* program page */
- SF_WR_DISABLE = 4, /* disable writes */
- SF_RD_STATUS = 5, /* read status register */
- SF_WR_ENABLE = 6, /* enable writes */
- SF_RD_DATA_FAST = 0xb, /* read flash */
- SF_RD_ID = 0x9f, /* read ID */
- SF_ERASE_SECTOR = 0xd8, /* erase sector */
+ SF_PROG_PAGE = 2, /* program page */
+ SF_WR_DISABLE = 4, /* disable writes */
+ SF_RD_STATUS = 5, /* read status register */
+ SF_WR_ENABLE = 6, /* enable writes */
+ SF_RD_DATA_FAST = 0xb, /* read flash */
+ SF_RD_ID = 0x9f, /* read ID */
+ SF_ERASE_SECTOR = 0xd8, /* erase sector */
};
/**
@@ -865,7 +3043,7 @@ static int flash_wait_op(struct adapter *adapter, int attempts, int delay)
* Read the specified number of 32-bit words from the serial flash.
* If @byte_oriented is set the read data is stored as a byte array
* (i.e., big-endian), otherwise as 32-bit words in the platform's
- * natural endianess.
+ * natural endianness.
*/
int t4_read_flash(struct adapter *adapter, unsigned int addr,
unsigned int nwords, u32 *data, int byte_oriented)
@@ -888,7 +3066,7 @@ int t4_read_flash(struct adapter *adapter, unsigned int addr,
if (ret)
return ret;
if (byte_oriented)
- *data = htonl(*data);
+ *data = (__force __u32)(cpu_to_be32(*data));
}
return 0;
}
@@ -903,10 +3081,10 @@ int t4_read_flash(struct adapter *adapter, unsigned int addr,
*
* Writes up to a page of data (256 bytes) to the serial flash starting
* at the given address. All the data must be written to the same page.
- * If @byte_oriented is set the write data is stored as byte stream
+ * If @byte_oriented is set the write data is stored as byte stream
* (i.e. matches what on disk), otherwise in big-endian.
*/
-static int t4_write_flash(struct adapter *adapter, unsigned int addr,
+int t4_write_flash(struct adapter *adapter, unsigned int addr,
unsigned int n, const u8 *data, int byte_oriented)
{
int ret;
@@ -928,7 +3106,7 @@ static int t4_write_flash(struct adapter *adapter, unsigned int addr,
val = (val << 8) + *data++;
if (!byte_oriented)
- val = htonl(val);
+ val = cpu_to_be32(val);
ret = sf1_write(adapter, c, c != left, 1, val);
if (ret)
@@ -947,8 +3125,9 @@ static int t4_write_flash(struct adapter *adapter, unsigned int addr,
return ret;
if (memcmp(data - n, (u8 *)buf + offset, n)) {
- CH_ERR(adapter, "failed to correctly write the flash page "
- "at %#x\n", addr);
+ CH_ERR(adapter,
+ "failed to correctly write the flash page at %#x\n",
+ addr);
return -EIO;
}
return 0;
@@ -967,8 +3146,8 @@ unlock:
*/
int t4_get_fw_version(struct adapter *adapter, u32 *vers)
{
- return t4_read_flash(adapter,
- FLASH_FW_START + offsetof(struct fw_hdr, fw_ver), 1,
+ return t4_read_flash(adapter, FLASH_FW_START +
+ offsetof(struct fw_hdr, fw_ver), 1,
vers, 0);
}
@@ -981,63 +3160,46 @@ int t4_get_fw_version(struct adapter *adapter, u32 *vers)
*/
int t4_get_tp_version(struct adapter *adapter, u32 *vers)
{
- return t4_read_flash(adapter, FLASH_FW_START + offsetof(struct fw_hdr,
- tp_microcode_ver),
+ return t4_read_flash(adapter, FLASH_FW_START +
+ offsetof(struct fw_hdr, tp_microcode_ver),
1, vers, 0);
}
/**
- * t4_check_fw_version - check if the FW is compatible with this driver
+ * t4_get_exprom_version - return the Expansion ROM version (if any)
* @adapter: the adapter
+ * @vers: where to place the version
*
- * Checks if an adapter's FW is compatible with the driver. Returns 0
- * if there's exact match, a negative error if the version could not be
- * read or there's a major version mismatch, and a positive value if the
- * expected major version is found but there's a minor version mismatch.
+ * Reads the Expansion ROM header from FLASH and returns the version
+ * number (if present) through the @vers return value pointer. We return
+ * this in the Firmware Version Format since it's convenient. Return
+ * 0 on success, -ENOENT if no Expansion ROM is present.
*/
-int t4_check_fw_version(struct adapter *adapter)
+int t4_get_exprom_version(struct adapter *adap, u32 *vers)
{
- int ret, major, minor, micro;
- int exp_major, exp_minor, exp_micro;
+ struct exprom_header {
+ unsigned char hdr_arr[16]; /* must start with 0x55aa */
+ unsigned char hdr_ver[4]; /* Expansion ROM version */
+ } *hdr;
+ u32 exprom_header_buf[DIV_ROUND_UP(sizeof(struct exprom_header),
+ sizeof(u32))];
+ int ret;
- ret = t4_get_fw_version(adapter, &adapter->params.fw_vers);
- if (!ret)
- ret = t4_get_tp_version(adapter, &adapter->params.tp_vers);
+ ret = t4_read_flash(adap, FLASH_EXP_ROM_START,
+ ARRAY_SIZE(exprom_header_buf), exprom_header_buf,
+ 0);
if (ret)
return ret;
- major = G_FW_HDR_FW_VER_MAJOR(adapter->params.fw_vers);
- minor = G_FW_HDR_FW_VER_MINOR(adapter->params.fw_vers);
- micro = G_FW_HDR_FW_VER_MICRO(adapter->params.fw_vers);
-
- switch (chip_id(adapter)) {
- case CHELSIO_T4:
- exp_major = T4FW_VERSION_MAJOR;
- exp_minor = T4FW_VERSION_MINOR;
- exp_micro = T4FW_VERSION_MICRO;
- break;
- case CHELSIO_T5:
- exp_major = T5FW_VERSION_MAJOR;
- exp_minor = T5FW_VERSION_MINOR;
- exp_micro = T5FW_VERSION_MICRO;
- break;
- default:
- CH_ERR(adapter, "Unsupported chip type, %x\n",
- chip_id(adapter));
- return -EINVAL;
- }
-
- if (major != exp_major) { /* major mismatch - fail */
- CH_ERR(adapter, "card FW has major version %u, driver wants "
- "%u\n", major, exp_major);
- return -EINVAL;
- }
-
- if (minor == exp_minor && micro == exp_micro)
- return 0; /* perfect match */
+ hdr = (struct exprom_header *)exprom_header_buf;
+ if (hdr->hdr_arr[0] != 0x55 || hdr->hdr_arr[1] != 0xaa)
+ return -ENOENT;
- /* Minor/micro version mismatch. Report it but often it's OK. */
- return 1;
+ *vers = (V_FW_HDR_FW_VER_MAJOR(hdr->hdr_ver[0]) |
+ V_FW_HDR_FW_VER_MINOR(hdr->hdr_ver[1]) |
+ V_FW_HDR_FW_VER_MICRO(hdr->hdr_ver[2]) |
+ V_FW_HDR_FW_VER_BUILD(hdr->hdr_ver[3]));
+ return 0;
}
/**
@@ -1048,17 +3210,21 @@ int t4_check_fw_version(struct adapter *adapter)
*
* Erases the sectors in the given inclusive range.
*/
-static int t4_flash_erase_sectors(struct adapter *adapter, int start, int end)
+int t4_flash_erase_sectors(struct adapter *adapter, int start, int end)
{
int ret = 0;
+ if (end >= adapter->params.sf_nsec)
+ return -EINVAL;
+
while (start <= end) {
if ((ret = sf1_write(adapter, 1, 0, 1, SF_WR_ENABLE)) != 0 ||
(ret = sf1_write(adapter, 4, 0, 1,
SF_ERASE_SECTOR | (start << 8))) != 0 ||
(ret = flash_wait_op(adapter, 14, 500)) != 0) {
- CH_ERR(adapter, "erase of flash sector %d failed, "
- "error %d\n", start, ret);
+ CH_ERR(adapter,
+ "erase of flash sector %d failed, error %d\n",
+ start, ret);
break;
}
start++;
@@ -1087,67 +3253,30 @@ int t4_flash_cfg_addr(struct adapter *adapter)
return FLASH_CFG_START;
}
-/**
- * t4_load_cfg - download config file
- * @adap: the adapter
- * @cfg_data: the cfg text file to write
- * @size: text file size
- *
- * Write the supplied config text file to the card's serial flash.
+/*
+ * Return TRUE if the specified firmware matches the adapter. I.e. T4
+ * firmware for T4 adapters, T5 firmware for T5 adapters, etc. We go ahead
+ * and emit an error message for mismatched firmware to save our caller the
+ * effort ...
*/
-int t4_load_cfg(struct adapter *adap, const u8 *cfg_data, unsigned int size)
+static int t4_fw_matches_chip(struct adapter *adap,
+ const struct fw_hdr *hdr)
{
- int ret, i, n, cfg_addr;
- unsigned int addr;
- unsigned int flash_cfg_start_sec;
- unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
-
- cfg_addr = t4_flash_cfg_addr(adap);
- if (cfg_addr < 0)
- return cfg_addr;
-
- addr = cfg_addr;
- flash_cfg_start_sec = addr / SF_SEC_SIZE;
-
- if (size > FLASH_CFG_MAX_SIZE) {
- CH_ERR(adap, "cfg file too large, max is %u bytes\n",
- FLASH_CFG_MAX_SIZE);
- return -EFBIG;
- }
-
- i = DIV_ROUND_UP(FLASH_CFG_MAX_SIZE, /* # of sectors spanned */
- sf_sec_size);
- ret = t4_flash_erase_sectors(adap, flash_cfg_start_sec,
- flash_cfg_start_sec + i - 1);
/*
- * If size == 0 then we're simply erasing the FLASH sectors associated
- * with the on-adapter Firmware Configuration File.
+ * The expression below will return FALSE for any unsupported adapter
+ * which will keep us "honest" in the future ...
*/
- if (ret || size == 0)
- goto out;
-
- /* this will write to the flash up to SF_PAGE_SIZE at a time */
- for (i = 0; i< size; i+= SF_PAGE_SIZE) {
- if ( (size - i) < SF_PAGE_SIZE)
- n = size - i;
- else
- n = SF_PAGE_SIZE;
- ret = t4_write_flash(adap, addr, n, cfg_data, 1);
- if (ret)
- goto out;
-
- addr += SF_PAGE_SIZE;
- cfg_data += SF_PAGE_SIZE;
- }
-
-out:
- if (ret)
- CH_ERR(adap, "config file %s failed %d\n",
- (size == 0 ? "clear" : "download"), ret);
- return ret;
+ if ((is_t4(adap) && hdr->chip == FW_HDR_CHIP_T4) ||
+ (is_t5(adap) && hdr->chip == FW_HDR_CHIP_T5) ||
+ (is_t6(adap) && hdr->chip == FW_HDR_CHIP_T6))
+ return 1;
+
+ CH_ERR(adap,
+ "FW image (%d) is not suitable for this adapter (%d)\n",
+ hdr->chip, chip_id(adap));
+ return 0;
}
-
/**
* t4_load_fw - download firmware
* @adap: the adapter
@@ -1178,40 +3307,39 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
fw_start = FLASH_FW_START;
fw_size = FLASH_FW_MAX_SIZE;
}
+
if (!size) {
CH_ERR(adap, "FW image has no data\n");
return -EINVAL;
}
if (size & 511) {
- CH_ERR(adap, "FW image size not multiple of 512 bytes\n");
+ CH_ERR(adap,
+ "FW image size not multiple of 512 bytes\n");
return -EINVAL;
}
- if (ntohs(hdr->len512) * 512 != size) {
- CH_ERR(adap, "FW image size differs from size in FW header\n");
+ if ((unsigned int) be16_to_cpu(hdr->len512) * 512 != size) {
+ CH_ERR(adap,
+ "FW image size differs from size in FW header\n");
return -EINVAL;
}
if (size > fw_size) {
- CH_ERR(adap, "FW image too large, max is %u bytes\n", fw_size);
+ CH_ERR(adap, "FW image too large, max is %u bytes\n",
+ fw_size);
return -EFBIG;
}
- if ((is_t4(adap) && hdr->chip != FW_HDR_CHIP_T4) ||
- (is_t5(adap) && hdr->chip != FW_HDR_CHIP_T5)) {
- CH_ERR(adap,
- "FW image (%d) is not suitable for this adapter (%d)\n",
- hdr->chip, chip_id(adap));
+ if (!t4_fw_matches_chip(adap, hdr))
return -EINVAL;
- }
for (csum = 0, i = 0; i < size / sizeof(csum); i++)
- csum += ntohl(p[i]);
+ csum += be32_to_cpu(p[i]);
if (csum != 0xffffffff) {
- CH_ERR(adap, "corrupted firmware image, checksum %#x\n",
- csum);
+ CH_ERR(adap,
+ "corrupted firmware image, checksum %#x\n", csum);
return -EINVAL;
}
- i = DIV_ROUND_UP(size, sf_sec_size); /* # of sectors spanned */
+ i = DIV_ROUND_UP(size, sf_sec_size); /* # of sectors spanned */
ret = t4_flash_erase_sectors(adap, fw_start_sec, fw_start_sec + i - 1);
if (ret)
goto out;
@@ -1222,7 +3350,7 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
* first page with a bad version.
*/
memcpy(first_page, fw_data, SF_PAGE_SIZE);
- ((struct fw_hdr *)first_page)->fw_ver = htonl(0xffffffff);
+ ((struct fw_hdr *)first_page)->fw_ver = cpu_to_be32(0xffffffff);
ret = t4_write_flash(adap, fw_start, SF_PAGE_SIZE, first_page, 1);
if (ret)
goto out;
@@ -1241,547 +3369,33 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
sizeof(hdr->fw_ver), (const u8 *)&hdr->fw_ver, 1);
out:
if (ret)
- CH_ERR(adap, "firmware download failed, error %d\n", ret);
- return ret;
-}
-
-/* BIOS boot headers */
-typedef struct pci_expansion_rom_header {
- u8 signature[2]; /* ROM Signature. Should be 0xaa55 */
- u8 reserved[22]; /* Reserved per processor Architecture data */
- u8 pcir_offset[2]; /* Offset to PCI Data Structure */
-} pci_exp_rom_header_t; /* PCI_EXPANSION_ROM_HEADER */
-
-/* Legacy PCI Expansion ROM Header */
-typedef struct legacy_pci_expansion_rom_header {
- u8 signature[2]; /* ROM Signature. Should be 0xaa55 */
- u8 size512; /* Current Image Size in units of 512 bytes */
- u8 initentry_point[4];
- u8 cksum; /* Checksum computed on the entire Image */
- u8 reserved[16]; /* Reserved */
- u8 pcir_offset[2]; /* Offset to PCI Data Struture */
-} legacy_pci_exp_rom_header_t; /* LEGACY_PCI_EXPANSION_ROM_HEADER */
-
-/* EFI PCI Expansion ROM Header */
-typedef struct efi_pci_expansion_rom_header {
- u8 signature[2]; // ROM signature. The value 0xaa55
- u8 initialization_size[2]; /* Units 512. Includes this header */
- u8 efi_signature[4]; /* Signature from EFI image header. 0x0EF1 */
- u8 efi_subsystem[2]; /* Subsystem value for EFI image header */
- u8 efi_machine_type[2]; /* Machine type from EFI image header */
- u8 compression_type[2]; /* Compression type. */
- /*
- * Compression type definition
- * 0x0: uncompressed
- * 0x1: Compressed
- * 0x2-0xFFFF: Reserved
- */
- u8 reserved[8]; /* Reserved */
- u8 efi_image_header_offset[2]; /* Offset to EFI Image */
- u8 pcir_offset[2]; /* Offset to PCI Data Structure */
-} efi_pci_exp_rom_header_t; /* EFI PCI Expansion ROM Header */
-
-/* PCI Data Structure Format */
-typedef struct pcir_data_structure { /* PCI Data Structure */
- u8 signature[4]; /* Signature. The string "PCIR" */
- u8 vendor_id[2]; /* Vendor Identification */
- u8 device_id[2]; /* Device Identification */
- u8 vital_product[2]; /* Pointer to Vital Product Data */
- u8 length[2]; /* PCIR Data Structure Length */
- u8 revision; /* PCIR Data Structure Revision */
- u8 class_code[3]; /* Class Code */
- u8 image_length[2]; /* Image Length. Multiple of 512B */
- u8 code_revision[2]; /* Revision Level of Code/Data */
- u8 code_type; /* Code Type. */
- /*
- * PCI Expansion ROM Code Types
- * 0x00: Intel IA-32, PC-AT compatible. Legacy
- * 0x01: Open Firmware standard for PCI. FCODE
- * 0x02: Hewlett-Packard PA RISC. HP reserved
- * 0x03: EFI Image. EFI
- * 0x04-0xFF: Reserved.
- */
- u8 indicator; /* Indicator. Identifies the last image in the ROM */
- u8 reserved[2]; /* Reserved */
-} pcir_data_t; /* PCI__DATA_STRUCTURE */
-
-/* BOOT constants */
-enum {
- BOOT_FLASH_BOOT_ADDR = 0x0,/* start address of boot image in flash */
- BOOT_SIGNATURE = 0xaa55, /* signature of BIOS boot ROM */
- BOOT_SIZE_INC = 512, /* image size measured in 512B chunks */
- BOOT_MIN_SIZE = sizeof(pci_exp_rom_header_t), /* basic header */
- BOOT_MAX_SIZE = 1024*BOOT_SIZE_INC, /* 1 byte * length increment */
- VENDOR_ID = 0x1425, /* Vendor ID */
- PCIR_SIGNATURE = 0x52494350 /* PCIR signature */
-};
-
-/*
- * modify_device_id - Modifies the device ID of the Boot BIOS image
- * @adatper: the device ID to write.
- * @boot_data: the boot image to modify.
- *
- * Write the supplied device ID to the boot BIOS image.
- */
-static void modify_device_id(int device_id, u8 *boot_data)
-{
- legacy_pci_exp_rom_header_t *header;
- pcir_data_t *pcir_header;
- u32 cur_header = 0;
-
- /*
- * Loop through all chained images and change the device ID's
- */
- while (1) {
- header = (legacy_pci_exp_rom_header_t *) &boot_data[cur_header];
- pcir_header = (pcir_data_t *) &boot_data[cur_header +
- le16_to_cpu(*(u16*)header->pcir_offset)];
-
- /*
- * Only modify the Device ID if code type is Legacy or HP.
- * 0x00: Okay to modify
- * 0x01: FCODE. Do not be modify
- * 0x03: Okay to modify
- * 0x04-0xFF: Do not modify
- */
- if (pcir_header->code_type == 0x00) {
- u8 csum = 0;
- int i;
-
- /*
- * Modify Device ID to match current adatper
- */
- *(u16*) pcir_header->device_id = device_id;
-
- /*
- * Set checksum temporarily to 0.
- * We will recalculate it later.
- */
- header->cksum = 0x0;
-
- /*
- * Calculate and update checksum
- */
- for (i = 0; i < (header->size512 * 512); i++)
- csum += (u8)boot_data[cur_header + i];
-
- /*
- * Invert summed value to create the checksum
- * Writing new checksum value directly to the boot data
- */
- boot_data[cur_header + 7] = -csum;
-
- } else if (pcir_header->code_type == 0x03) {
-
- /*
- * Modify Device ID to match current adatper
- */
- *(u16*) pcir_header->device_id = device_id;
-
- }
-
-
- /*
- * Check indicator element to identify if this is the last
- * image in the ROM.
- */
- if (pcir_header->indicator & 0x80)
- break;
-
- /*
- * Move header pointer up to the next image in the ROM.
- */
- cur_header += header->size512 * 512;
- }
-}
-
-/*
- * t4_load_boot - download boot flash
- * @adapter: the adapter
- * @boot_data: the boot image to write
- * @boot_addr: offset in flash to write boot_data
- * @size: image size
- *
- * Write the supplied boot image to the card's serial flash.
- * The boot image has the following sections: a 28-byte header and the
- * boot image.
- */
-int t4_load_boot(struct adapter *adap, u8 *boot_data,
- unsigned int boot_addr, unsigned int size)
-{
- pci_exp_rom_header_t *header;
- int pcir_offset ;
- pcir_data_t *pcir_header;
- int ret, addr;
- uint16_t device_id;
- unsigned int i;
- unsigned int boot_sector = boot_addr * 1024;
- unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
-
- /*
- * Make sure the boot image does not encroach on the firmware region
- */
- if ((boot_sector + size) >> 16 > FLASH_FW_START_SEC) {
- CH_ERR(adap, "boot image encroaching on firmware region\n");
- return -EFBIG;
- }
-
- /*
- * Number of sectors spanned
- */
- i = DIV_ROUND_UP(size ? size : FLASH_BOOTCFG_MAX_SIZE,
- sf_sec_size);
- ret = t4_flash_erase_sectors(adap, boot_sector >> 16,
- (boot_sector >> 16) + i - 1);
-
- /*
- * If size == 0 then we're simply erasing the FLASH sectors associated
- * with the on-adapter option ROM file
- */
- if (ret || (size == 0))
- goto out;
-
- /* Get boot header */
- header = (pci_exp_rom_header_t *)boot_data;
- pcir_offset = le16_to_cpu(*(u16 *)header->pcir_offset);
- /* PCIR Data Structure */
- pcir_header = (pcir_data_t *) &boot_data[pcir_offset];
-
- /*
- * Perform some primitive sanity testing to avoid accidentally
- * writing garbage over the boot sectors. We ought to check for
- * more but it's not worth it for now ...
- */
- if (size < BOOT_MIN_SIZE || size > BOOT_MAX_SIZE) {
- CH_ERR(adap, "boot image too small/large\n");
- return -EFBIG;
- }
-
- /*
- * Check BOOT ROM header signature
- */
- if (le16_to_cpu(*(u16*)header->signature) != BOOT_SIGNATURE ) {
- CH_ERR(adap, "Boot image missing signature\n");
- return -EINVAL;
- }
-
- /*
- * Check PCI header signature
- */
- if (le32_to_cpu(*(u32*)pcir_header->signature) != PCIR_SIGNATURE) {
- CH_ERR(adap, "PCI header missing signature\n");
- return -EINVAL;
- }
-
- /*
- * Check Vendor ID matches Chelsio ID
- */
- if (le16_to_cpu(*(u16*)pcir_header->vendor_id) != VENDOR_ID) {
- CH_ERR(adap, "Vendor ID missing signature\n");
- return -EINVAL;
- }
-
- /*
- * Retrieve adapter's device ID
- */
- t4_os_pci_read_cfg2(adap, PCI_DEVICE_ID, &device_id);
- /* Want to deal with PF 0 so I strip off PF 4 indicator */
- device_id = (device_id & 0xff) | 0x4000;
-
- /*
- * Check PCIE Device ID
- */
- if (le16_to_cpu(*(u16*)pcir_header->device_id) != device_id) {
- /*
- * Change the device ID in the Boot BIOS image to match
- * the Device ID of the current adapter.
- */
- modify_device_id(device_id, boot_data);
- }
-
- /*
- * Skip over the first SF_PAGE_SIZE worth of data and write it after
- * we finish copying the rest of the boot image. This will ensure
- * that the BIOS boot header will only be written if the boot image
- * was written in full.
- */
- addr = boot_sector;
- for (size -= SF_PAGE_SIZE; size; size -= SF_PAGE_SIZE) {
- addr += SF_PAGE_SIZE;
- boot_data += SF_PAGE_SIZE;
- ret = t4_write_flash(adap, addr, SF_PAGE_SIZE, boot_data, 0);
- if (ret)
- goto out;
- }
-
- ret = t4_write_flash(adap, boot_sector, SF_PAGE_SIZE, boot_data, 0);
-
-out:
- if (ret)
- CH_ERR(adap, "boot image download failed, error %d\n", ret);
- return ret;
-}
-
-/**
- * t4_read_cimq_cfg - read CIM queue configuration
- * @adap: the adapter
- * @base: holds the queue base addresses in bytes
- * @size: holds the queue sizes in bytes
- * @thres: holds the queue full thresholds in bytes
- *
- * Returns the current configuration of the CIM queues, starting with
- * the IBQs, then the OBQs.
- */
-void t4_read_cimq_cfg(struct adapter *adap, u16 *base, u16 *size, u16 *thres)
-{
- unsigned int i, v;
-
- for (i = 0; i < CIM_NUM_IBQ; i++) {
- t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_IBQSELECT |
- V_QUENUMSELECT(i));
- v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
- *base++ = G_CIMQBASE(v) * 256; /* value is in 256-byte units */
- *size++ = G_CIMQSIZE(v) * 256; /* value is in 256-byte units */
- *thres++ = G_QUEFULLTHRSH(v) * 8; /* 8-byte unit */
- }
- for (i = 0; i < adap->chip_params->cim_num_obq; i++) {
- t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_OBQSELECT |
- V_QUENUMSELECT(i));
- v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
- *base++ = G_CIMQBASE(v) * 256; /* value is in 256-byte units */
- *size++ = G_CIMQSIZE(v) * 256; /* value is in 256-byte units */
- }
-}
-
-/**
- * t4_read_cim_ibq - read the contents of a CIM inbound queue
- * @adap: the adapter
- * @qid: the queue index
- * @data: where to store the queue contents
- * @n: capacity of @data in 32-bit words
- *
- * Reads the contents of the selected CIM queue starting at address 0 up
- * to the capacity of @data. @n must be a multiple of 4. Returns < 0 on
- * error and the number of 32-bit words actually read on success.
- */
-int t4_read_cim_ibq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
-{
- int i, err;
- unsigned int addr;
- const unsigned int nwords = CIM_IBQ_SIZE * 4;
-
- if (qid > 5 || (n & 3))
- return -EINVAL;
-
- addr = qid * nwords;
- if (n > nwords)
- n = nwords;
-
- for (i = 0; i < n; i++, addr++) {
- t4_write_reg(adap, A_CIM_IBQ_DBG_CFG, V_IBQDBGADDR(addr) |
- F_IBQDBGEN);
- /*
- * It might take 3-10ms before the IBQ debug read access is
- * allowed. Wait for 1 Sec with a delay of 1 usec.
- */
- err = t4_wait_op_done(adap, A_CIM_IBQ_DBG_CFG, F_IBQDBGBUSY, 0,
- 1000000, 1);
- if (err)
- return err;
- *data++ = t4_read_reg(adap, A_CIM_IBQ_DBG_DATA);
- }
- t4_write_reg(adap, A_CIM_IBQ_DBG_CFG, 0);
- return i;
-}
-
-/**
- * t4_read_cim_obq - read the contents of a CIM outbound queue
- * @adap: the adapter
- * @qid: the queue index
- * @data: where to store the queue contents
- * @n: capacity of @data in 32-bit words
- *
- * Reads the contents of the selected CIM queue starting at address 0 up
- * to the capacity of @data. @n must be a multiple of 4. Returns < 0 on
- * error and the number of 32-bit words actually read on success.
- */
-int t4_read_cim_obq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
-{
- int i, err;
- unsigned int addr, v, nwords;
-
- if (qid >= adap->chip_params->cim_num_obq || (n & 3))
- return -EINVAL;
-
- t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_OBQSELECT |
- V_QUENUMSELECT(qid));
- v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
-
- addr = G_CIMQBASE(v) * 64; /* muliple of 256 -> muliple of 4 */
- nwords = G_CIMQSIZE(v) * 64; /* same */
- if (n > nwords)
- n = nwords;
-
- for (i = 0; i < n; i++, addr++) {
- t4_write_reg(adap, A_CIM_OBQ_DBG_CFG, V_OBQDBGADDR(addr) |
- F_OBQDBGEN);
- err = t4_wait_op_done(adap, A_CIM_OBQ_DBG_CFG, F_OBQDBGBUSY, 0,
- 2, 1);
- if (err)
- return err;
- *data++ = t4_read_reg(adap, A_CIM_OBQ_DBG_DATA);
- }
- t4_write_reg(adap, A_CIM_OBQ_DBG_CFG, 0);
- return i;
-}
-
-enum {
- CIM_QCTL_BASE = 0,
- CIM_CTL_BASE = 0x2000,
- CIM_PBT_ADDR_BASE = 0x2800,
- CIM_PBT_LRF_BASE = 0x3000,
- CIM_PBT_DATA_BASE = 0x3800
-};
-
-/**
- * t4_cim_read - read a block from CIM internal address space
- * @adap: the adapter
- * @addr: the start address within the CIM address space
- * @n: number of words to read
- * @valp: where to store the result
- *
- * Reads a block of 4-byte words from the CIM intenal address space.
- */
-int t4_cim_read(struct adapter *adap, unsigned int addr, unsigned int n,
- unsigned int *valp)
-{
- int ret = 0;
-
- if (t4_read_reg(adap, A_CIM_HOST_ACC_CTRL) & F_HOSTBUSY)
- return -EBUSY;
-
- for ( ; !ret && n--; addr += 4) {
- t4_write_reg(adap, A_CIM_HOST_ACC_CTRL, addr);
- ret = t4_wait_op_done(adap, A_CIM_HOST_ACC_CTRL, F_HOSTBUSY,
- 0, 5, 2);
- if (!ret)
- *valp++ = t4_read_reg(adap, A_CIM_HOST_ACC_DATA);
- }
+ CH_ERR(adap, "firmware download failed, error %d\n",
+ ret);
return ret;
}
/**
- * t4_cim_write - write a block into CIM internal address space
+ * t4_fwcache - firmware cache operation
* @adap: the adapter
- * @addr: the start address within the CIM address space
- * @n: number of words to write
- * @valp: set of values to write
- *
- * Writes a block of 4-byte words into the CIM intenal address space.
- */
-int t4_cim_write(struct adapter *adap, unsigned int addr, unsigned int n,
- const unsigned int *valp)
-{
- int ret = 0;
-
- if (t4_read_reg(adap, A_CIM_HOST_ACC_CTRL) & F_HOSTBUSY)
- return -EBUSY;
-
- for ( ; !ret && n--; addr += 4) {
- t4_write_reg(adap, A_CIM_HOST_ACC_DATA, *valp++);
- t4_write_reg(adap, A_CIM_HOST_ACC_CTRL, addr | F_HOSTWRITE);
- ret = t4_wait_op_done(adap, A_CIM_HOST_ACC_CTRL, F_HOSTBUSY,
- 0, 5, 2);
- }
- return ret;
-}
-
-static int t4_cim_write1(struct adapter *adap, unsigned int addr, unsigned int val)
-{
- return t4_cim_write(adap, addr, 1, &val);
-}
-
-/**
- * t4_cim_ctl_read - read a block from CIM control region
- * @adap: the adapter
- * @addr: the start address within the CIM control region
- * @n: number of words to read
- * @valp: where to store the result
- *
- * Reads a block of 4-byte words from the CIM control region.
- */
-int t4_cim_ctl_read(struct adapter *adap, unsigned int addr, unsigned int n,
- unsigned int *valp)
-{
- return t4_cim_read(adap, addr + CIM_CTL_BASE, n, valp);
-}
-
-/**
- * t4_cim_read_la - read CIM LA capture buffer
- * @adap: the adapter
- * @la_buf: where to store the LA data
- * @wrptr: the HW write pointer within the capture buffer
- *
- * Reads the contents of the CIM LA buffer with the most recent entry at
- * the end of the returned data and with the entry at @wrptr first.
- * We try to leave the LA in the running state we find it in.
+ * @op : the operation (flush or flush and invalidate)
*/
-int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr)
+int t4_fwcache(struct adapter *adap, enum fw_params_param_dev_fwcache op)
{
- int i, ret;
- unsigned int cfg, val, idx;
-
- ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &cfg);
- if (ret)
- return ret;
-
- if (cfg & F_UPDBGLAEN) { /* LA is running, freeze it */
- ret = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG, 0);
- if (ret)
- return ret;
- }
-
- ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &val);
- if (ret)
- goto restart;
+ struct fw_params_cmd c;
- idx = G_UPDBGLAWRPTR(val);
- if (wrptr)
- *wrptr = idx;
+ memset(&c, 0, sizeof(c));
+ c.op_to_vfn =
+ cpu_to_be32(V_FW_CMD_OP(FW_PARAMS_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_PARAMS_CMD_PFN(adap->pf) |
+ V_FW_PARAMS_CMD_VFN(0));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+ c.param[0].mnem =
+ cpu_to_be32(V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
+ V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_FWCACHE));
+ c.param[0].val = (__force __be32)op;
- for (i = 0; i < adap->params.cim_la_size; i++) {
- ret = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG,
- V_UPDBGLARDPTR(idx) | F_UPDBGLARDEN);
- if (ret)
- break;
- ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &val);
- if (ret)
- break;
- if (val & F_UPDBGLARDEN) {
- ret = -ETIMEDOUT;
- break;
- }
- ret = t4_cim_read(adap, A_UP_UP_DBG_LA_DATA, 1, &la_buf[i]);
- if (ret)
- break;
- /* address can't exceed 0xfff (UpDbgLaRdPtr is of 12-bits) */
- idx = (idx + 1) & M_UPDBGLARDPTR;
- /*
- * Bits 0-3 of UpDbgLaRdPtr can be between 0000 to 1001 to
- * identify the 32-bit portion of the full 312-bit data
- */
- if (is_t6(adap))
- while ((idx & 0xf) > 9)
- idx = (idx + 1) % M_UPDBGLARDPTR;
- }
-restart:
- if (cfg & F_UPDBGLAEN) {
- int r = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG,
- cfg & ~F_UPDBGLARDEN);
- if (!ret)
- ret = r;
- }
- return ret;
+ return t4_wr_mbox(adap, adap->mbox, &c, sizeof(c), NULL);
}
void t4_cim_read_pif_la(struct adapter *adap, u32 *pif_req, u32 *pif_rsp,
@@ -1839,53 +3453,6 @@ void t4_cim_read_ma_la(struct adapter *adap, u32 *ma_req, u32 *ma_rsp)
t4_write_reg(adap, A_CIM_DEBUGCFG, cfg);
}
-/**
- * t4_tp_read_la - read TP LA capture buffer
- * @adap: the adapter
- * @la_buf: where to store the LA data
- * @wrptr: the HW write pointer within the capture buffer
- *
- * Reads the contents of the TP LA buffer with the most recent entry at
- * the end of the returned data and with the entry at @wrptr first.
- * We leave the LA in the running state we find it in.
- */
-void t4_tp_read_la(struct adapter *adap, u64 *la_buf, unsigned int *wrptr)
-{
- bool last_incomplete;
- unsigned int i, cfg, val, idx;
-
- cfg = t4_read_reg(adap, A_TP_DBG_LA_CONFIG) & 0xffff;
- if (cfg & F_DBGLAENABLE) /* freeze LA */
- t4_write_reg(adap, A_TP_DBG_LA_CONFIG,
- adap->params.tp.la_mask | (cfg ^ F_DBGLAENABLE));
-
- val = t4_read_reg(adap, A_TP_DBG_LA_CONFIG);
- idx = G_DBGLAWPTR(val);
- last_incomplete = G_DBGLAMODE(val) >= 2 && (val & F_DBGLAWHLF) == 0;
- if (last_incomplete)
- idx = (idx + 1) & M_DBGLARPTR;
- if (wrptr)
- *wrptr = idx;
-
- val &= 0xffff;
- val &= ~V_DBGLARPTR(M_DBGLARPTR);
- val |= adap->params.tp.la_mask;
-
- for (i = 0; i < TPLA_SIZE; i++) {
- t4_write_reg(adap, A_TP_DBG_LA_CONFIG, V_DBGLARPTR(idx) | val);
- la_buf[i] = t4_read_reg64(adap, A_TP_DBG_LA_DATAL);
- idx = (idx + 1) & M_DBGLARPTR;
- }
-
- /* Wipe out last entry if it isn't valid */
- if (last_incomplete)
- la_buf[TPLA_SIZE - 1] = ~0ULL;
-
- if (cfg & F_DBGLAENABLE) /* restore running state */
- t4_write_reg(adap, A_TP_DBG_LA_CONFIG,
- cfg | adap->params.tp.la_mask);
-}
-
void t4_ulprx_read_la(struct adapter *adap, u32 *la_buf)
{
unsigned int i, j;
@@ -1931,19 +3498,22 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port,
fc |= FW_PORT_CAP_FC_TX;
memset(&c, 0, sizeof(c));
- c.op_to_portid = htonl(V_FW_CMD_OP(FW_PORT_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_PORT_CMD_PORTID(port));
- c.action_to_len16 = htonl(V_FW_PORT_CMD_ACTION(FW_PORT_ACTION_L1_CFG) |
- FW_LEN16(c));
+ c.op_to_portid = cpu_to_be32(V_FW_CMD_OP(FW_PORT_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_PORT_CMD_PORTID(port));
+ c.action_to_len16 =
+ cpu_to_be32(V_FW_PORT_CMD_ACTION(FW_PORT_ACTION_L1_CFG) |
+ FW_LEN16(c));
if (!(lc->supported & FW_PORT_CAP_ANEG)) {
- c.u.l1cfg.rcap = htonl((lc->supported & ADVERT_MASK) | fc);
+ c.u.l1cfg.rcap = cpu_to_be32((lc->supported & ADVERT_MASK) |
+ fc);
lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
} else if (lc->autoneg == AUTONEG_DISABLE) {
- c.u.l1cfg.rcap = htonl(lc->requested_speed | fc | mdi);
+ c.u.l1cfg.rcap = cpu_to_be32(lc->requested_speed | fc | mdi);
lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
} else
- c.u.l1cfg.rcap = htonl(lc->advertising | fc | mdi);
+ c.u.l1cfg.rcap = cpu_to_be32(lc->advertising | fc | mdi);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -1961,19 +3531,24 @@ int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port)
struct fw_port_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_portid = htonl(V_FW_CMD_OP(FW_PORT_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_PORT_CMD_PORTID(port));
- c.action_to_len16 = htonl(V_FW_PORT_CMD_ACTION(FW_PORT_ACTION_L1_CFG) |
- FW_LEN16(c));
- c.u.l1cfg.rcap = htonl(FW_PORT_CAP_ANEG);
+ c.op_to_portid = cpu_to_be32(V_FW_CMD_OP(FW_PORT_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_PORT_CMD_PORTID(port));
+ c.action_to_len16 =
+ cpu_to_be32(V_FW_PORT_CMD_ACTION(FW_PORT_ACTION_L1_CFG) |
+ FW_LEN16(c));
+ c.u.l1cfg.rcap = cpu_to_be32(FW_PORT_CAP_ANEG);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
+typedef void (*int_handler_t)(struct adapter *adap);
+
struct intr_info {
- unsigned int mask; /* bits to check in interrupt status */
- const char *msg; /* message to print or NULL */
- short stat_idx; /* stat counter to increment or -1 */
- unsigned short fatal; /* whether the condition reported is fatal */
+ unsigned int mask; /* bits to check in interrupt status */
+ const char *msg; /* message to print or NULL */
+ short stat_idx; /* stat counter to increment or -1 */
+ unsigned short fatal; /* whether the condition reported is fatal */
+ int_handler_t int_handler; /* platform-specific int handler */
};
/**
@@ -1984,7 +3559,7 @@ struct intr_info {
*
* A table driven interrupt handler that applies a set of masks to an
* interrupt status word and performs the corresponding actions if the
- * interrupts described by the mask have occured. The actions include
+ * interrupts described by the mask have occurred. The actions include
* optionally emitting a warning or alert message. The table is terminated
* by an entry specifying mask 0. Returns the number of fatal interrupt
* conditions.
@@ -2001,15 +3576,17 @@ static int t4_handle_intr_status(struct adapter *adapter, unsigned int reg,
continue;
if (acts->fatal) {
fatal++;
- CH_ALERT(adapter, "%s (0x%x)\n",
- acts->msg, status & acts->mask);
+ CH_ALERT(adapter, "%s (0x%x)\n", acts->msg,
+ status & acts->mask);
} else if (acts->msg)
- CH_WARN_RATELIMIT(adapter, "%s (0x%x)\n",
- acts->msg, status & acts->mask);
+ CH_WARN_RATELIMIT(adapter, "%s (0x%x)\n", acts->msg,
+ status & acts->mask);
+ if (acts->int_handler)
+ acts->int_handler(adapter);
mask |= acts->mask;
}
status &= mask;
- if (status) /* clear processed interrupts */
+ if (status) /* clear processed interrupts */
t4_write_reg(adapter, reg, status);
return fatal;
}
@@ -2019,7 +3596,7 @@ static int t4_handle_intr_status(struct adapter *adapter, unsigned int reg,
*/
static void pcie_intr_handler(struct adapter *adapter)
{
- static struct intr_info sysbus_intr_info[] = {
+ static const struct intr_info sysbus_intr_info[] = {
{ F_RNPP, "RXNP array parity error", -1, 1 },
{ F_RPCP, "RXPC array parity error", -1, 1 },
{ F_RCIP, "RXCIF array parity error", -1, 1 },
@@ -2027,7 +3604,7 @@ static void pcie_intr_handler(struct adapter *adapter)
{ F_RFTP, "RXFT array parity error", -1, 1 },
{ 0 }
};
- static struct intr_info pcie_port_intr_info[] = {
+ static const struct intr_info pcie_port_intr_info[] = {
{ F_TPCP, "TXPC array parity error", -1, 1 },
{ F_TNPP, "TXNP array parity error", -1, 1 },
{ F_TFTP, "TXFT array parity error", -1, 1 },
@@ -2039,7 +3616,7 @@ static void pcie_intr_handler(struct adapter *adapter)
{ F_TDUE, "Tx uncorrectable data error", -1, 1 },
{ 0 }
};
- static struct intr_info pcie_intr_info[] = {
+ static const struct intr_info pcie_intr_info[] = {
{ F_MSIADDRLPERR, "MSI AddrL parity error", -1, 1 },
{ F_MSIADDRHPERR, "MSI AddrH parity error", -1, 1 },
{ F_MSIDATAPERR, "MSI data parity error", -1, 1 },
@@ -2074,7 +3651,7 @@ static void pcie_intr_handler(struct adapter *adapter)
{ 0 }
};
- static struct intr_info t5_pcie_intr_info[] = {
+ static const struct intr_info t5_pcie_intr_info[] = {
{ F_MSTGRPPERR, "Master Response Read Queue parity error",
-1, 1 },
{ F_MSTTIMEOUTPERR, "Master Timeout FIFO parity error", -1, 1 },
@@ -2119,13 +3696,13 @@ static void pcie_intr_handler(struct adapter *adapter)
if (is_t4(adapter))
fat = t4_handle_intr_status(adapter,
- A_PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS,
- sysbus_intr_info) +
- t4_handle_intr_status(adapter,
- A_PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS,
- pcie_port_intr_info) +
- t4_handle_intr_status(adapter, A_PCIE_INT_CAUSE,
- pcie_intr_info);
+ A_PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS,
+ sysbus_intr_info) +
+ t4_handle_intr_status(adapter,
+ A_PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS,
+ pcie_port_intr_info) +
+ t4_handle_intr_status(adapter, A_PCIE_INT_CAUSE,
+ pcie_intr_info);
else
fat = t4_handle_intr_status(adapter, A_PCIE_INT_CAUSE,
t5_pcie_intr_info);
@@ -2138,7 +3715,7 @@ static void pcie_intr_handler(struct adapter *adapter)
*/
static void tp_intr_handler(struct adapter *adapter)
{
- static struct intr_info tp_intr_info[] = {
+ static const struct intr_info tp_intr_info[] = {
{ 0x3fffffff, "TP parity error", -1, 1 },
{ F_FLMTXFLSTEMPTY, "TP out of Tx pages", -1, 1 },
{ 0 }
@@ -2156,13 +3733,13 @@ static void sge_intr_handler(struct adapter *adapter)
u64 v;
u32 err;
- static struct intr_info sge_intr_info[] = {
+ static const struct intr_info sge_intr_info[] = {
{ F_ERR_CPL_EXCEED_IQE_SIZE,
"SGE received CPL exceeding IQE size", -1, 1 },
{ F_ERR_INVALID_CIDX_INC,
"SGE GTS CIDX increment too large", -1, 0 },
{ F_ERR_CPL_OPCODE_0, "SGE received 0-length CPL", -1, 0 },
- { F_ERR_DROPPED_DB, "SGE doorbell dropped", -1, 0 },
+ { F_DBFIFO_LP_INT, NULL, -1, 0, t4_db_full },
{ F_ERR_DATA_CPL_ON_HIGH_QID1 | F_ERR_DATA_CPL_ON_HIGH_QID0,
"SGE IQID > 1023 received CPL for FL", -1, 0 },
{ F_ERR_BAD_DB_PIDX3, "SGE DBP 3 pidx increment too large", -1,
@@ -2175,23 +3752,47 @@ static void sge_intr_handler(struct adapter *adapter)
0 },
{ F_ERR_ING_CTXT_PRIO,
"SGE too many priority ingress contexts", -1, 0 },
- { F_ERR_EGR_CTXT_PRIO,
- "SGE too many priority egress contexts", -1, 0 },
{ F_INGRESS_SIZE_ERR, "SGE illegal ingress QID", -1, 0 },
{ F_EGRESS_SIZE_ERR, "SGE illegal egress QID", -1, 0 },
{ 0 }
};
+ static const struct intr_info t4t5_sge_intr_info[] = {
+ { F_ERR_DROPPED_DB, NULL, -1, 0, t4_db_dropped },
+ { F_DBFIFO_HP_INT, NULL, -1, 0, t4_db_full },
+ { F_ERR_EGR_CTXT_PRIO,
+ "SGE too many priority egress contexts", -1, 0 },
+ { 0 }
+ };
+
+ /*
+ * For now, treat below interrupts as fatal so that we disable SGE and
+ * get better debug */
+ static const struct intr_info t6_sge_intr_info[] = {
+ { F_ERR_PCIE_ERROR0 | F_ERR_PCIE_ERROR1,
+ "SGE PCIe error for a DBP thread", -1, 1 },
+ { F_FATAL_WRE_LEN,
+ "SGE Actual WRE packet is less than advertized length",
+ -1, 1 },
+ { 0 }
+ };
+
v = (u64)t4_read_reg(adapter, A_SGE_INT_CAUSE1) |
- ((u64)t4_read_reg(adapter, A_SGE_INT_CAUSE2) << 32);
+ ((u64)t4_read_reg(adapter, A_SGE_INT_CAUSE2) << 32);
if (v) {
CH_ALERT(adapter, "SGE parity error (%#llx)\n",
- (unsigned long long)v);
+ (unsigned long long)v);
t4_write_reg(adapter, A_SGE_INT_CAUSE1, v);
t4_write_reg(adapter, A_SGE_INT_CAUSE2, v >> 32);
}
v |= t4_handle_intr_status(adapter, A_SGE_INT_CAUSE3, sge_intr_info);
+ if (chip_id(adapter) <= CHELSIO_T5)
+ v |= t4_handle_intr_status(adapter, A_SGE_INT_CAUSE3,
+ t4t5_sge_intr_info);
+ else
+ v |= t4_handle_intr_status(adapter, A_SGE_INT_CAUSE3,
+ t6_sge_intr_info);
err = t4_read_reg(adapter, A_SGE_ERROR_STATS);
if (err & F_ERROR_QID_VALID) {
@@ -2216,7 +3817,7 @@ static void sge_intr_handler(struct adapter *adapter)
*/
static void cim_intr_handler(struct adapter *adapter)
{
- static struct intr_info cim_intr_info[] = {
+ static const struct intr_info cim_intr_info[] = {
{ F_PREFDROPINT, "CIM control register prefetch drop", -1, 1 },
{ CIM_OBQ_INTR, "CIM OBQ parity error", -1, 1 },
{ CIM_IBQ_INTR, "CIM IBQ parity error", -1, 1 },
@@ -2226,7 +3827,7 @@ static void cim_intr_handler(struct adapter *adapter)
{ F_TIEQOUTPARERRINT, "CIM TIEQ incoming parity error", -1, 1 },
{ 0 }
};
- static struct intr_info cim_upintr_info[] = {
+ static const struct intr_info cim_upintr_info[] = {
{ F_RSVDSPACEINT, "CIM reserved space access", -1, 1 },
{ F_ILLTRANSINT, "CIM illegal transaction", -1, 1 },
{ F_ILLWRINT, "CIM illegal write", -1, 1 },
@@ -2275,7 +3876,7 @@ static void cim_intr_handler(struct adapter *adapter)
*/
static void ulprx_intr_handler(struct adapter *adapter)
{
- static struct intr_info ulprx_intr_info[] = {
+ static const struct intr_info ulprx_intr_info[] = {
{ F_CAUSE_CTX_1, "ULPRX channel 1 context error", -1, 1 },
{ F_CAUSE_CTX_0, "ULPRX channel 0 context error", -1, 1 },
{ 0x7fffff, "ULPRX parity error", -1, 1 },
@@ -2291,7 +3892,7 @@ static void ulprx_intr_handler(struct adapter *adapter)
*/
static void ulptx_intr_handler(struct adapter *adapter)
{
- static struct intr_info ulptx_intr_info[] = {
+ static const struct intr_info ulptx_intr_info[] = {
{ F_PBL_BOUND_ERR_CH3, "ULPTX channel 3 PBL out of bounds", -1,
0 },
{ F_PBL_BOUND_ERR_CH2, "ULPTX channel 2 PBL out of bounds", -1,
@@ -2313,7 +3914,7 @@ static void ulptx_intr_handler(struct adapter *adapter)
*/
static void pmtx_intr_handler(struct adapter *adapter)
{
- static struct intr_info pmtx_intr_info[] = {
+ static const struct intr_info pmtx_intr_info[] = {
{ F_PCMD_LEN_OVFL0, "PMTX channel 0 pcmd too large", -1, 1 },
{ F_PCMD_LEN_OVFL1, "PMTX channel 1 pcmd too large", -1, 1 },
{ F_PCMD_LEN_OVFL2, "PMTX channel 2 pcmd too large", -1, 1 },
@@ -2336,7 +3937,7 @@ static void pmtx_intr_handler(struct adapter *adapter)
*/
static void pmrx_intr_handler(struct adapter *adapter)
{
- static struct intr_info pmrx_intr_info[] = {
+ static const struct intr_info pmrx_intr_info[] = {
{ F_ZERO_E_CMD_ERROR, "PMRX 0-length pcmd", -1, 1 },
{ 0x3ffff0, "PMRX framing error", -1, 1 },
{ F_OCSPI_PAR_ERROR, "PMRX ocspi parity error", -1, 1 },
@@ -2356,7 +3957,7 @@ static void pmrx_intr_handler(struct adapter *adapter)
*/
static void cplsw_intr_handler(struct adapter *adapter)
{
- static struct intr_info cplsw_intr_info[] = {
+ static const struct intr_info cplsw_intr_info[] = {
{ F_CIM_OP_MAP_PERR, "CPLSW CIM op_map parity error", -1, 1 },
{ F_CIM_OVFL_ERROR, "CPLSW CIM overflow", -1, 1 },
{ F_TP_FRAMING_ERROR, "CPLSW TP framing error", -1, 1 },
@@ -2375,7 +3976,8 @@ static void cplsw_intr_handler(struct adapter *adapter)
*/
static void le_intr_handler(struct adapter *adap)
{
- static struct intr_info le_intr_info[] = {
+ unsigned int chip_ver = chip_id(adap);
+ static const struct intr_info le_intr_info[] = {
{ F_LIPMISS, "LE LIP miss", -1, 0 },
{ F_LIP0, "LE 0 LIP error", -1, 0 },
{ F_PARITYERR, "LE parity error", -1, 1 },
@@ -2384,7 +3986,18 @@ static void le_intr_handler(struct adapter *adap)
{ 0 }
};
- if (t4_handle_intr_status(adap, A_LE_DB_INT_CAUSE, le_intr_info))
+ static const struct intr_info t6_le_intr_info[] = {
+ { F_T6_LIPMISS, "LE LIP miss", -1, 0 },
+ { F_T6_LIP0, "LE 0 LIP error", -1, 0 },
+ { F_TCAMINTPERR, "LE parity error", -1, 1 },
+ { F_T6_UNKNOWNCMD, "LE unknown command", -1, 1 },
+ { F_SSRAMINTPERR, "LE request queue parity error", -1, 1 },
+ { 0 }
+ };
+
+ if (t4_handle_intr_status(adap, A_LE_DB_INT_CAUSE,
+ (chip_ver <= CHELSIO_T5) ?
+ le_intr_info : t6_le_intr_info))
t4_fatal_err(adap);
}
@@ -2393,11 +4006,11 @@ static void le_intr_handler(struct adapter *adap)
*/
static void mps_intr_handler(struct adapter *adapter)
{
- static struct intr_info mps_rx_intr_info[] = {
+ static const struct intr_info mps_rx_intr_info[] = {
{ 0xffffff, "MPS Rx parity error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_tx_intr_info[] = {
+ static const struct intr_info mps_tx_intr_info[] = {
{ V_TPFIFO(M_TPFIFO), "MPS Tx TP FIFO parity error", -1, 1 },
{ F_NCSIFIFO, "MPS Tx NC-SI FIFO parity error", -1, 1 },
{ V_TXDATAFIFO(M_TXDATAFIFO), "MPS Tx data FIFO parity error",
@@ -2409,26 +4022,26 @@ static void mps_intr_handler(struct adapter *adapter)
{ F_FRMERR, "MPS Tx framing error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_trc_intr_info[] = {
+ static const struct intr_info mps_trc_intr_info[] = {
{ V_FILTMEM(M_FILTMEM), "MPS TRC filter parity error", -1, 1 },
{ V_PKTFIFO(M_PKTFIFO), "MPS TRC packet FIFO parity error", -1,
1 },
{ F_MISCPERR, "MPS TRC misc parity error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_stat_sram_intr_info[] = {
+ static const struct intr_info mps_stat_sram_intr_info[] = {
{ 0x1fffff, "MPS statistics SRAM parity error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_stat_tx_intr_info[] = {
+ static const struct intr_info mps_stat_tx_intr_info[] = {
{ 0xfffff, "MPS statistics Tx FIFO parity error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_stat_rx_intr_info[] = {
+ static const struct intr_info mps_stat_rx_intr_info[] = {
{ 0xffffff, "MPS statistics Rx FIFO parity error", -1, 1 },
{ 0 }
};
- static struct intr_info mps_cls_intr_info[] = {
+ static const struct intr_info mps_cls_intr_info[] = {
{ F_MATCHSRAM, "MPS match SRAM parity error", -1, 1 },
{ F_MATCHTCAM, "MPS match TCAM parity error", -1, 1 },
{ F_HASHSRAM, "MPS hash SRAM parity error", -1, 1 },
@@ -2453,26 +4066,27 @@ static void mps_intr_handler(struct adapter *adapter)
mps_cls_intr_info);
t4_write_reg(adapter, A_MPS_INT_CAUSE, 0);
- t4_read_reg(adapter, A_MPS_INT_CAUSE); /* flush */
+ t4_read_reg(adapter, A_MPS_INT_CAUSE); /* flush */
if (fat)
t4_fatal_err(adapter);
}
-#define MEM_INT_MASK (F_PERR_INT_CAUSE | F_ECC_CE_INT_CAUSE | F_ECC_UE_INT_CAUSE)
+#define MEM_INT_MASK (F_PERR_INT_CAUSE | F_ECC_CE_INT_CAUSE | \
+ F_ECC_UE_INT_CAUSE)
/*
* EDC/MC interrupt handler.
*/
static void mem_intr_handler(struct adapter *adapter, int idx)
{
- static const char name[3][5] = { "EDC0", "EDC1", "MC" };
+ static const char name[4][7] = { "EDC0", "EDC1", "MC/MC0", "MC1" };
unsigned int addr, cnt_addr, v;
if (idx <= MEM_EDC1) {
addr = EDC_REG(A_EDC_INT_CAUSE, idx);
cnt_addr = EDC_REG(A_EDC_ECC_STATUS, idx);
- } else {
+ } else if (idx == MEM_MC) {
if (is_t4(adapter)) {
addr = A_MC_INT_CAUSE;
cnt_addr = A_MC_ECC_STATUS;
@@ -2480,22 +4094,28 @@ static void mem_intr_handler(struct adapter *adapter, int idx)
addr = A_MC_P_INT_CAUSE;
cnt_addr = A_MC_P_ECC_STATUS;
}
+ } else {
+ addr = MC_REG(A_MC_P_INT_CAUSE, 1);
+ cnt_addr = MC_REG(A_MC_P_ECC_STATUS, 1);
}
v = t4_read_reg(adapter, addr) & MEM_INT_MASK;
if (v & F_PERR_INT_CAUSE)
- CH_ALERT(adapter, "%s FIFO parity error\n", name[idx]);
+ CH_ALERT(adapter, "%s FIFO parity error\n",
+ name[idx]);
if (v & F_ECC_CE_INT_CAUSE) {
u32 cnt = G_ECC_CECNT(t4_read_reg(adapter, cnt_addr));
+ t4_edc_err_read(adapter, idx);
+
t4_write_reg(adapter, cnt_addr, V_ECC_CECNT(M_ECC_CECNT));
CH_WARN_RATELIMIT(adapter,
"%u %s correctable ECC data error%s\n",
cnt, name[idx], cnt > 1 ? "s" : "");
}
if (v & F_ECC_UE_INT_CAUSE)
- CH_ALERT(adapter, "%s uncorrectable ECC data error\n",
- name[idx]);
+ CH_ALERT(adapter,
+ "%s uncorrectable ECC data error\n", name[idx]);
t4_write_reg(adapter, addr, v);
if (v & (F_PERR_INT_CAUSE | F_ECC_UE_INT_CAUSE))
@@ -2510,19 +4130,21 @@ static void ma_intr_handler(struct adapter *adapter)
u32 v, status = t4_read_reg(adapter, A_MA_INT_CAUSE);
if (status & F_MEM_PERR_INT_CAUSE) {
- CH_ALERT(adapter, "MA parity error, parity status %#x\n",
- t4_read_reg(adapter, A_MA_PARITY_ERROR_STATUS1));
+ CH_ALERT(adapter,
+ "MA parity error, parity status %#x\n",
+ t4_read_reg(adapter, A_MA_PARITY_ERROR_STATUS1));
if (is_t5(adapter))
CH_ALERT(adapter,
- "MA parity error, parity status %#x\n",
- t4_read_reg(adapter,
- A_MA_PARITY_ERROR_STATUS2));
+ "MA parity error, parity status %#x\n",
+ t4_read_reg(adapter,
+ A_MA_PARITY_ERROR_STATUS2));
}
if (status & F_MEM_WRAP_INT_CAUSE) {
v = t4_read_reg(adapter, A_MA_INT_WRAP_STATUS);
- CH_ALERT(adapter, "MA address wrap-around error by client %u to"
- " address %#x\n", G_MEM_WRAP_CLIENT_NUM(v),
- G_MEM_WRAP_ADDRESS(v) << 4);
+ CH_ALERT(adapter, "MA address wrap-around error by "
+ "client %u to address %#x\n",
+ G_MEM_WRAP_CLIENT_NUM(v),
+ G_MEM_WRAP_ADDRESS(v) << 4);
}
t4_write_reg(adapter, A_MA_INT_CAUSE, status);
t4_fatal_err(adapter);
@@ -2533,7 +4155,7 @@ static void ma_intr_handler(struct adapter *adapter)
*/
static void smb_intr_handler(struct adapter *adap)
{
- static struct intr_info smb_intr_info[] = {
+ static const struct intr_info smb_intr_info[] = {
{ F_MSTTXFIFOPARINT, "SMB master Tx FIFO parity error", -1, 1 },
{ F_MSTRXFIFOPARINT, "SMB master Rx FIFO parity error", -1, 1 },
{ F_SLVFIFOPARINT, "SMB slave FIFO parity error", -1, 1 },
@@ -2549,7 +4171,7 @@ static void smb_intr_handler(struct adapter *adap)
*/
static void ncsi_intr_handler(struct adapter *adap)
{
- static struct intr_info ncsi_intr_info[] = {
+ static const struct intr_info ncsi_intr_info[] = {
{ F_CIM_DM_PRTY_ERR, "NC-SI CIM parity error", -1, 1 },
{ F_MPS_DM_PRTY_ERR, "NC-SI MPS parity error", -1, 1 },
{ F_TXFIFO_PRTY_ERR, "NC-SI Tx FIFO parity error", -1, 1 },
@@ -2574,14 +4196,17 @@ static void xgmac_intr_handler(struct adapter *adap, int port)
int_cause_reg = T5_PORT_REG(port, A_MAC_PORT_INT_CAUSE);
v = t4_read_reg(adap, int_cause_reg);
+
v &= (F_TXFIFO_PRTY_ERR | F_RXFIFO_PRTY_ERR);
if (!v)
return;
if (v & F_TXFIFO_PRTY_ERR)
- CH_ALERT(adap, "XGMAC %d Tx FIFO parity error\n", port);
+ CH_ALERT(adap, "XGMAC %d Tx FIFO parity error\n",
+ port);
if (v & F_RXFIFO_PRTY_ERR)
- CH_ALERT(adap, "XGMAC %d Rx FIFO parity error\n", port);
+ CH_ALERT(adap, "XGMAC %d Rx FIFO parity error\n",
+ port);
t4_write_reg(adap, int_cause_reg, v);
t4_fatal_err(adap);
}
@@ -2591,27 +4216,24 @@ static void xgmac_intr_handler(struct adapter *adap, int port)
*/
static void pl_intr_handler(struct adapter *adap)
{
- static struct intr_info pl_intr_info[] = {
+ static const struct intr_info pl_intr_info[] = {
{ F_FATALPERR, "Fatal parity error", -1, 1 },
{ F_PERRVFID, "PL VFID_MAP parity error", -1, 1 },
{ 0 }
};
- static struct intr_info t5_pl_intr_info[] = {
- { F_PL_BUSPERR, "PL bus parity error", -1, 1 },
+ static const struct intr_info t5_pl_intr_info[] = {
{ F_FATALPERR, "Fatal parity error", -1, 1 },
{ 0 }
};
if (t4_handle_intr_status(adap, A_PL_PL_INT_CAUSE,
- is_t4(adap) ? pl_intr_info : t5_pl_intr_info))
+ is_t4(adap) ?
+ pl_intr_info : t5_pl_intr_info))
t4_fatal_err(adap);
}
#define PF_INTR_MASK (F_PFSW | F_PFCIM)
-#define GLBL_INTR_MASK (F_CIM | F_MPS | F_PL | F_PCIE | F_MC | F_EDC0 | \
- F_EDC1 | F_LE | F_TP | F_MA | F_PM_TX | F_PM_RX | F_ULP_RX | \
- F_CPL_SWITCH | F_SGE | F_ULP_TX)
/**
* t4_slow_intr_handler - control path interrupt handler
@@ -2637,18 +4259,20 @@ int t4_slow_intr_handler(struct adapter *adapter)
pl_intr_handler(adapter);
if (cause & F_SMB)
smb_intr_handler(adapter);
- if (cause & F_XGMAC0)
+ if (cause & F_MAC0)
xgmac_intr_handler(adapter, 0);
- if (cause & F_XGMAC1)
+ if (cause & F_MAC1)
xgmac_intr_handler(adapter, 1);
- if (cause & F_XGMAC_KR0)
+ if (cause & F_MAC2)
xgmac_intr_handler(adapter, 2);
- if (cause & F_XGMAC_KR1)
+ if (cause & F_MAC3)
xgmac_intr_handler(adapter, 3);
if (cause & F_PCIE)
pcie_intr_handler(adapter);
- if (cause & F_MC)
+ if (cause & F_MC0)
mem_intr_handler(adapter, MEM_MC);
+ if (is_t5(adapter) && (cause & F_MC1))
+ mem_intr_handler(adapter, MEM_MC1);
if (cause & F_EDC0)
mem_intr_handler(adapter, MEM_EDC0);
if (cause & F_EDC1)
@@ -2674,7 +4298,7 @@ int t4_slow_intr_handler(struct adapter *adapter)
/* Clear the interrupts just processed for which we are the master. */
t4_write_reg(adapter, A_PL_INT_CAUSE, cause & GLBL_INTR_MASK);
- (void) t4_read_reg(adapter, A_PL_INT_CAUSE); /* flush */
+ (void)t4_read_reg(adapter, A_PL_INT_CAUSE); /* flush */
return 1;
}
@@ -2693,16 +4317,23 @@ int t4_slow_intr_handler(struct adapter *adapter)
*/
void t4_intr_enable(struct adapter *adapter)
{
- u32 pf = G_SOURCEPF(t4_read_reg(adapter, A_PL_WHOAMI));
+ u32 val = 0;
+ u32 whoami = t4_read_reg(adapter, A_PL_WHOAMI);
+ u32 pf = (chip_id(adapter) <= CHELSIO_T5
+ ? G_SOURCEPF(whoami)
+ : G_T6_SOURCEPF(whoami));
+ if (chip_id(adapter) <= CHELSIO_T5)
+ val = F_ERR_DROPPED_DB | F_ERR_EGR_CTXT_PRIO | F_DBFIFO_HP_INT;
+ else
+ val = F_ERR_PCIE_ERROR0 | F_ERR_PCIE_ERROR1 | F_FATAL_WRE_LEN;
t4_write_reg(adapter, A_SGE_INT_ENABLE3, F_ERR_CPL_EXCEED_IQE_SIZE |
F_ERR_INVALID_CIDX_INC | F_ERR_CPL_OPCODE_0 |
- F_ERR_DROPPED_DB | F_ERR_DATA_CPL_ON_HIGH_QID1 |
+ F_ERR_DATA_CPL_ON_HIGH_QID1 | F_INGRESS_SIZE_ERR |
F_ERR_DATA_CPL_ON_HIGH_QID0 | F_ERR_BAD_DB_PIDX3 |
F_ERR_BAD_DB_PIDX2 | F_ERR_BAD_DB_PIDX1 |
F_ERR_BAD_DB_PIDX0 | F_ERR_ING_CTXT_PRIO |
- F_ERR_EGR_CTXT_PRIO | F_INGRESS_SIZE_ERR |
- F_EGRESS_SIZE_ERR);
+ F_DBFIFO_LP_INT | F_EGRESS_SIZE_ERR | val);
t4_write_reg(adapter, MYPF_REG(A_PL_PF_INT_ENABLE), PF_INTR_MASK);
t4_set_reg_field(adapter, A_PL_INT_MAP0, 0, 1 << pf);
}
@@ -2717,7 +4348,10 @@ void t4_intr_enable(struct adapter *adapter)
*/
void t4_intr_disable(struct adapter *adapter)
{
- u32 pf = G_SOURCEPF(t4_read_reg(adapter, A_PL_WHOAMI));
+ u32 whoami = t4_read_reg(adapter, A_PL_WHOAMI);
+ u32 pf = (chip_id(adapter) <= CHELSIO_T5
+ ? G_SOURCEPF(whoami)
+ : G_T6_SOURCEPF(whoami));
t4_write_reg(adapter, MYPF_REG(A_PL_PF_INT_ENABLE), 0);
t4_set_reg_field(adapter, A_PL_INT_MAP0, 1 << pf, 0);
@@ -2812,11 +4446,10 @@ int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
struct fw_rss_ind_tbl_cmd cmd;
memset(&cmd, 0, sizeof(cmd));
- cmd.op_to_viid = htonl(V_FW_CMD_OP(FW_RSS_IND_TBL_CMD) |
- F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
- V_FW_RSS_IND_TBL_CMD_VIID(viid));
- cmd.retval_len16 = htonl(FW_LEN16(cmd));
-
+ cmd.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_RSS_IND_TBL_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_RSS_IND_TBL_CMD_VIID(viid));
+ cmd.retval_len16 = cpu_to_be32(FW_LEN16(cmd));
/*
* Each firmware RSS command can accommodate up to 32 RSS Ingress
@@ -2833,8 +4466,8 @@ int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
* Set up the firmware RSS command header to send the next
* "nq" Ingress Queue IDs to the firmware.
*/
- cmd.niqid = htons(nq);
- cmd.startidx = htons(start);
+ cmd.niqid = cpu_to_be16(nq);
+ cmd.startidx = cpu_to_be16(start);
/*
* "nq" more done for the start of the next loop.
@@ -2880,7 +4513,6 @@ int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
if (ret)
return ret;
}
-
return 0;
}
@@ -2899,15 +4531,16 @@ int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode,
struct fw_rss_glb_config_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_write = htonl(V_FW_CMD_OP(FW_RSS_GLB_CONFIG_CMD) |
- F_FW_CMD_REQUEST | F_FW_CMD_WRITE);
- c.retval_len16 = htonl(FW_LEN16(c));
+ c.op_to_write = cpu_to_be32(V_FW_CMD_OP(FW_RSS_GLB_CONFIG_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE);
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
if (mode == FW_RSS_GLB_CONFIG_CMD_MODE_MANUAL) {
- c.u.manual.mode_pkd = htonl(V_FW_RSS_GLB_CONFIG_CMD_MODE(mode));
+ c.u.manual.mode_pkd =
+ cpu_to_be32(V_FW_RSS_GLB_CONFIG_CMD_MODE(mode));
} else if (mode == FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL) {
c.u.basicvirtual.mode_pkd =
- htonl(V_FW_RSS_GLB_CONFIG_CMD_MODE(mode));
- c.u.basicvirtual.synmapen_to_hashtoeplitz = htonl(flags);
+ cpu_to_be32(V_FW_RSS_GLB_CONFIG_CMD_MODE(mode));
+ c.u.basicvirtual.synmapen_to_hashtoeplitz = cpu_to_be32(flags);
} else
return -EINVAL;
return t4_wr_mbox(adapter, mbox, &c, sizeof(c), NULL);
@@ -2929,11 +4562,11 @@ int t4_config_vi_rss(struct adapter *adapter, int mbox, unsigned int viid,
struct fw_rss_vi_config_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_RSS_VI_CONFIG_CMD) |
- F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
- V_FW_RSS_VI_CONFIG_CMD_VIID(viid));
- c.retval_len16 = htonl(FW_LEN16(c));
- c.u.basicvirtual.defaultq_to_udpen = htonl(flags |
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_RSS_VI_CONFIG_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_RSS_VI_CONFIG_CMD_VIID(viid));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.basicvirtual.defaultq_to_udpen = cpu_to_be32(flags |
V_FW_RSS_VI_CONFIG_CMD_DEFAULTQ(defq));
return t4_wr_mbox(adapter, mbox, &c, sizeof(c), NULL);
}
@@ -2969,6 +4602,42 @@ int t4_read_rss(struct adapter *adapter, u16 *map)
}
/**
+ * t4_fw_tp_pio_rw - Access TP PIO through LDST
+ * @adap: the adapter
+ * @vals: where the indirect register values are stored/written
+ * @nregs: how many indirect registers to read/write
+ * @start_idx: index of first indirect register to read/write
+ * @rw: Read (1) or Write (0)
+ *
+ * Access TP PIO registers through LDST
+ */
+void t4_fw_tp_pio_rw(struct adapter *adap, u32 *vals, unsigned int nregs,
+ unsigned int start_index, unsigned int rw)
+{
+ int ret, i;
+ int cmd = FW_LDST_ADDRSPC_TP_PIO;
+ struct fw_ldst_cmd c;
+
+ for (i = 0 ; i < nregs; i++) {
+ memset(&c, 0, sizeof(c));
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST |
+ (rw ? F_FW_CMD_READ :
+ F_FW_CMD_WRITE) |
+ V_FW_LDST_CMD_ADDRSPACE(cmd));
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+
+ c.u.addrval.addr = cpu_to_be32(start_index + i);
+ c.u.addrval.val = rw ? 0 : cpu_to_be32(vals[i]);
+ ret = t4_wr_mbox(adap, adap->mbox, &c, sizeof(c), &c);
+ if (ret == 0) {
+ if (rw)
+ vals[i] = be32_to_cpu(c.u.addrval.val);
+ }
+ }
+}
+
+/**
* t4_read_rss_key - read the global RSS key
* @adap: the adapter
* @key: 10-entry array holding the 320-bit RSS key
@@ -2977,8 +4646,11 @@ int t4_read_rss(struct adapter *adapter, u16 *map)
*/
void t4_read_rss_key(struct adapter *adap, u32 *key)
{
- t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, key, 10,
- A_TP_RSS_SECRET_KEY0);
+ if (t4_use_ldst(adap))
+ t4_fw_tp_pio_rw(adap, key, 10, A_TP_RSS_SECRET_KEY0, 1);
+ else
+ t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, key, 10,
+ A_TP_RSS_SECRET_KEY0);
}
/**
@@ -2991,13 +4663,35 @@ void t4_read_rss_key(struct adapter *adap, u32 *key)
* 0..15 the corresponding entry in the RSS key table is written,
* otherwise the global RSS key is written.
*/
-void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx)
+void t4_write_rss_key(struct adapter *adap, u32 *key, int idx)
{
- t4_write_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, key, 10,
- A_TP_RSS_SECRET_KEY0);
- if (idx >= 0 && idx < 16)
- t4_write_reg(adap, A_TP_RSS_CONFIG_VRT,
- V_KEYWRADDR(idx) | F_KEYWREN);
+ u8 rss_key_addr_cnt = 16;
+ u32 vrt = t4_read_reg(adap, A_TP_RSS_CONFIG_VRT);
+
+ /*
+ * T6 and later: for KeyMode 3 (per-vf and per-vf scramble),
+ * allows access to key addresses 16-63 by using KeyWrAddrX
+ * as index[5:4](upper 2) into key table
+ */
+ if ((chip_id(adap) > CHELSIO_T5) &&
+ (vrt & F_KEYEXTEND) && (G_KEYMODE(vrt) == 3))
+ rss_key_addr_cnt = 32;
+
+ if (t4_use_ldst(adap))
+ t4_fw_tp_pio_rw(adap, key, 10, A_TP_RSS_SECRET_KEY0, 0);
+ else
+ t4_write_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, key, 10,
+ A_TP_RSS_SECRET_KEY0);
+
+ if (idx >= 0 && idx < rss_key_addr_cnt) {
+ if (rss_key_addr_cnt > 16)
+ t4_write_reg(adap, A_TP_RSS_CONFIG_VRT,
+ V_KEYWRADDRX(idx >> 4) |
+ V_T6_VFWRADDR(idx) | F_KEYWREN);
+ else
+ t4_write_reg(adap, A_TP_RSS_CONFIG_VRT,
+ V_KEYWRADDR(idx) | F_KEYWREN);
+ }
}
/**
@@ -3009,10 +4703,15 @@ void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx)
* Reads the PF RSS Configuration Table at the specified index and returns
* the value found there.
*/
-void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index, u32 *valp)
+void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index,
+ u32 *valp)
{
- t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- valp, 1, A_TP_RSS_PF0_CONFIG + index);
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, valp, 1,
+ A_TP_RSS_PF0_CONFIG + index, 1);
+ else
+ t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ valp, 1, A_TP_RSS_PF0_CONFIG + index);
}
/**
@@ -3024,10 +4723,15 @@ void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index, u32 *val
* Writes the PF RSS Configuration Table at the specified index with the
* specified value.
*/
-void t4_write_rss_pf_config(struct adapter *adapter, unsigned int index, u32 val)
+void t4_write_rss_pf_config(struct adapter *adapter, unsigned int index,
+ u32 val)
{
- t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &val, 1, A_TP_RSS_PF0_CONFIG + index);
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, &val, 1,
+ A_TP_RSS_PF0_CONFIG + index, 0);
+ else
+ t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &val, 1, A_TP_RSS_PF0_CONFIG + index);
}
/**
@@ -3043,28 +4747,40 @@ void t4_write_rss_pf_config(struct adapter *adapter, unsigned int index, u32 val
void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
u32 *vfl, u32 *vfh)
{
- u32 vrt;
+ u32 vrt, mask, data;
+ if (chip_id(adapter) <= CHELSIO_T5) {
+ mask = V_VFWRADDR(M_VFWRADDR);
+ data = V_VFWRADDR(index);
+ } else {
+ mask = V_T6_VFWRADDR(M_T6_VFWRADDR);
+ data = V_T6_VFWRADDR(index);
+ }
/*
* Request that the index'th VF Table values be read into VFL/VFH.
*/
vrt = t4_read_reg(adapter, A_TP_RSS_CONFIG_VRT);
- vrt &= ~(F_VFRDRG | V_VFWRADDR(M_VFWRADDR) | F_VFWREN | F_KEYWREN);
- vrt |= V_VFWRADDR(index) | F_VFRDEN;
+ vrt &= ~(F_VFRDRG | F_VFWREN | F_KEYWREN | mask);
+ vrt |= data | F_VFRDEN;
t4_write_reg(adapter, A_TP_RSS_CONFIG_VRT, vrt);
/*
* Grab the VFL/VFH values ...
*/
- t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- vfl, 1, A_TP_RSS_VFL_CONFIG);
- t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- vfh, 1, A_TP_RSS_VFH_CONFIG);
+ if (t4_use_ldst(adapter)) {
+ t4_fw_tp_pio_rw(adapter, vfl, 1, A_TP_RSS_VFL_CONFIG, 1);
+ t4_fw_tp_pio_rw(adapter, vfh, 1, A_TP_RSS_VFH_CONFIG, 1);
+ } else {
+ t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ vfl, 1, A_TP_RSS_VFL_CONFIG);
+ t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ vfh, 1, A_TP_RSS_VFH_CONFIG);
+ }
}
/**
* t4_write_rss_vf_config - write VF RSS Configuration Table
- *
+ *
* @adapter: the adapter
* @index: the entry in the VF RSS table to write
* @vfl: the VFL to store
@@ -3076,22 +4792,35 @@ void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
void t4_write_rss_vf_config(struct adapter *adapter, unsigned int index,
u32 vfl, u32 vfh)
{
- u32 vrt;
+ u32 vrt, mask, data;
+
+ if (chip_id(adapter) <= CHELSIO_T5) {
+ mask = V_VFWRADDR(M_VFWRADDR);
+ data = V_VFWRADDR(index);
+ } else {
+ mask = V_T6_VFWRADDR(M_T6_VFWRADDR);
+ data = V_T6_VFWRADDR(index);
+ }
/*
* Load up VFL/VFH with the values to be written ...
*/
- t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &vfl, 1, A_TP_RSS_VFL_CONFIG);
- t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &vfh, 1, A_TP_RSS_VFH_CONFIG);
+ if (t4_use_ldst(adapter)) {
+ t4_fw_tp_pio_rw(adapter, &vfl, 1, A_TP_RSS_VFL_CONFIG, 0);
+ t4_fw_tp_pio_rw(adapter, &vfh, 1, A_TP_RSS_VFH_CONFIG, 0);
+ } else {
+ t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &vfl, 1, A_TP_RSS_VFL_CONFIG);
+ t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &vfh, 1, A_TP_RSS_VFH_CONFIG);
+ }
/*
* Write the VFL/VFH into the VF Table at index'th location.
*/
vrt = t4_read_reg(adapter, A_TP_RSS_CONFIG_VRT);
- vrt &= ~(F_VFRDRG | F_VFRDEN | V_VFWRADDR(M_VFWRADDR) | F_KEYWREN);
- vrt |= V_VFWRADDR(index) | F_VFWREN;
+ vrt &= ~(F_VFRDRG | F_VFWREN | F_KEYWREN | mask);
+ vrt |= data | F_VFRDEN;
t4_write_reg(adapter, A_TP_RSS_CONFIG_VRT, vrt);
}
@@ -3105,8 +4834,11 @@ u32 t4_read_rss_pf_map(struct adapter *adapter)
{
u32 pfmap;
- t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &pfmap, 1, A_TP_RSS_PF_MAP);
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, &pfmap, 1, A_TP_RSS_PF_MAP, 1);
+ else
+ t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &pfmap, 1, A_TP_RSS_PF_MAP);
return pfmap;
}
@@ -3119,8 +4851,11 @@ u32 t4_read_rss_pf_map(struct adapter *adapter)
*/
void t4_write_rss_pf_map(struct adapter *adapter, u32 pfmap)
{
- t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &pfmap, 1, A_TP_RSS_PF_MAP);
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, &pfmap, 1, A_TP_RSS_PF_MAP, 0);
+ else
+ t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &pfmap, 1, A_TP_RSS_PF_MAP);
}
/**
@@ -3133,8 +4868,11 @@ u32 t4_read_rss_pf_mask(struct adapter *adapter)
{
u32 pfmask;
- t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &pfmask, 1, A_TP_RSS_PF_MSK);
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, &pfmask, 1, A_TP_RSS_PF_MSK, 1);
+ else
+ t4_read_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &pfmask, 1, A_TP_RSS_PF_MSK);
return pfmask;
}
@@ -3147,61 +4885,11 @@ u32 t4_read_rss_pf_mask(struct adapter *adapter)
*/
void t4_write_rss_pf_mask(struct adapter *adapter, u32 pfmask)
{
- t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &pfmask, 1, A_TP_RSS_PF_MSK);
-}
-
-static void refresh_vlan_pri_map(struct adapter *adap)
-{
-
- t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &adap->params.tp.vlan_pri_map, 1,
- A_TP_VLAN_PRI_MAP);
-
- /*
- * Now that we have TP_VLAN_PRI_MAP cached, we can calculate the field
- * shift positions of several elements of the Compressed Filter Tuple
- * for this adapter which we need frequently ...
- */
- adap->params.tp.vlan_shift = t4_filter_field_shift(adap, F_VLAN);
- adap->params.tp.vnic_shift = t4_filter_field_shift(adap, F_VNIC_ID);
- adap->params.tp.port_shift = t4_filter_field_shift(adap, F_PORT);
- adap->params.tp.protocol_shift = t4_filter_field_shift(adap, F_PROTOCOL);
-
- /*
- * If TP_INGRESS_CONFIG.VNID == 0, then TP_VLAN_PRI_MAP.VNIC_ID
- * represents the presense of an Outer VLAN instead of a VNIC ID.
- */
- if ((adap->params.tp.ingress_config & F_VNIC) == 0)
- adap->params.tp.vnic_shift = -1;
-}
-
-/**
- * t4_set_filter_mode - configure the optional components of filter tuples
- * @adap: the adapter
- * @mode_map: a bitmap selcting which optional filter components to enable
- *
- * Sets the filter mode by selecting the optional components to enable
- * in filter tuples. Returns 0 on success and a negative error if the
- * requested mode needs more bits than are available for optional
- * components.
- */
-int t4_set_filter_mode(struct adapter *adap, unsigned int mode_map)
-{
- static u8 width[] = { 1, 3, 17, 17, 8, 8, 16, 9, 3, 1 };
-
- int i, nbits = 0;
-
- for (i = S_FCOE; i <= S_FRAGMENTATION; i++)
- if (mode_map & (1 << i))
- nbits += width[i];
- if (nbits > FILTER_OPT_LEN)
- return -EINVAL;
- t4_write_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, &mode_map, 1,
- A_TP_VLAN_PRI_MAP);
- refresh_vlan_pri_map(adap);
-
- return 0;
+ if (t4_use_ldst(adapter))
+ t4_fw_tp_pio_rw(adapter, &pfmask, 1, A_TP_RSS_PF_MSK, 0);
+ else
+ t4_write_indirect(adapter, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &pfmask, 1, A_TP_RSS_PF_MSK);
}
/**
@@ -3316,7 +5004,7 @@ void t4_tp_get_cpl_stats(struct adapter *adap, struct tp_cpl_stats *st)
*/
void t4_tp_get_rdma_stats(struct adapter *adap, struct tp_rdma_stats *st)
{
- t4_read_indirect(adap, A_TP_MIB_INDEX, A_TP_MIB_DATA, &st->rqe_dfr_mod,
+ t4_read_indirect(adap, A_TP_MIB_INDEX, A_TP_MIB_DATA, &st->rqe_dfr_pkt,
2, A_TP_MIB_RQE_DFR_PKT);
}
@@ -3405,24 +5093,6 @@ void t4_read_cong_tbl(struct adapter *adap, u16 incr[NMTUS][NCCTRL_WIN])
}
/**
- * t4_read_pace_tbl - read the pace table
- * @adap: the adapter
- * @pace_vals: holds the returned values
- *
- * Returns the values of TP's pace table in microseconds.
- */
-void t4_read_pace_tbl(struct adapter *adap, unsigned int pace_vals[NTX_SCHED])
-{
- unsigned int i, v;
-
- for (i = 0; i < NTX_SCHED; i++) {
- t4_write_reg(adap, A_TP_PACE_TABLE, 0xffff0000 + i);
- v = t4_read_reg(adap, A_TP_PACE_TABLE);
- pace_vals[i] = dack_ticks_to_usec(adap, v);
- }
-}
-
-/**
* t4_tp_wr_bits_indirect - set/clear bits in an indirect TP register
* @adap: the adapter
* @addr: the indirect TP register address
@@ -3446,7 +5116,7 @@ void t4_tp_wr_bits_indirect(struct adapter *adap, unsigned int addr,
*
* Initialize the congestion control parameters.
*/
-static void __devinit init_cong_ctrl(unsigned short *a, unsigned short *b)
+static void init_cong_ctrl(unsigned short *a, unsigned short *b)
{
a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = 1;
a[9] = 2;
@@ -3547,7 +5217,7 @@ int t4_set_pace_tbl(struct adapter *adap, const unsigned int *pace_vals,
if (n > NTX_SCHED)
return -ERANGE;
-
+
/* convert values from us to dack ticks, rounding to closest value */
for (i = 0; i < n; i++, pace_vals++) {
vals[i] = (1000 * *pace_vals + tick_ns / 2) / tick_ns;
@@ -3634,46 +5304,6 @@ int t4_set_sched_ipg(struct adapter *adap, int sched, unsigned int ipg)
return 0;
}
-/**
- * t4_get_tx_sched - get the configuration of a Tx HW traffic scheduler
- * @adap: the adapter
- * @sched: the scheduler index
- * @kbps: the byte rate in Kbps
- * @ipg: the interpacket delay in tenths of nanoseconds
- *
- * Return the current configuration of a HW Tx scheduler.
- */
-void t4_get_tx_sched(struct adapter *adap, unsigned int sched, unsigned int *kbps,
- unsigned int *ipg)
-{
- unsigned int v, addr, bpt, cpt;
-
- if (kbps) {
- addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
- t4_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
- v = t4_read_reg(adap, A_TP_TM_PIO_DATA);
- if (sched & 1)
- v >>= 16;
- bpt = (v >> 8) & 0xff;
- cpt = v & 0xff;
- if (!cpt)
- *kbps = 0; /* scheduler disabled */
- else {
- v = (adap->params.vpd.cclk * 1000) / cpt; /* ticks/s */
- *kbps = (v * bpt) / 125;
- }
- }
- if (ipg) {
- addr = A_TP_TX_MOD_Q1_Q0_TIMER_SEPARATOR - sched / 2;
- t4_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
- v = t4_read_reg(adap, A_TP_TM_PIO_DATA);
- if (sched & 1)
- v >>= 16;
- v &= 0xffff;
- *ipg = (10000 * v) / core_ticks_per_usec(adap);
- }
-}
-
/*
* Calculates a rate in bytes/s given the number of 256-byte units per 4K core
* clocks. The formula is
@@ -3753,10 +5383,10 @@ int t4_set_trace_filter(struct adapter *adap, const struct trace_params *tp,
* TODO - After T4 data book is updated, specify the exact
* section below.
*
- * See T4 data book - MPS section for a complete description
- * of the below if..else handling of A_MPS_TRC_CFG register
+ * See T4 data book - MPS section for a complete description
+ * of the below if..else handling of A_MPS_TRC_CFG register
* value.
- */
+ */
cfg = t4_read_reg(adap, A_MPS_TRC_CFG);
if (cfg & F_TRCMULTIFILTER) {
/*
@@ -3765,10 +5395,10 @@ int t4_set_trace_filter(struct adapter *adap, const struct trace_params *tp,
* minus 2 flits for CPL_TRACE_PKT header.
*/
if (tp->snap_len > ((10 * 1024 / 4) - (2 * 8)))
- return -EINVAL;
+ return -EINVAL;
} else {
/*
- * If multiple tracers are disabled, to avoid deadlocks
+ * If multiple tracers are disabled, to avoid deadlocks
* maximum packet capture size of 9600 bytes is recommended.
* Also in this mode, only trace0 can be enabled and running.
*/
@@ -3891,9 +5521,9 @@ void t4_pmrx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[])
for (i = 0; i < adap->chip_params->pm_stats_cnt; i++) {
t4_write_reg(adap, A_PM_RX_STAT_CONFIG, i + 1);
cnt[i] = t4_read_reg(adap, A_PM_RX_STAT_COUNT);
- if (is_t4(adap))
+ if (is_t4(adap)) {
cycles[i] = t4_read_reg64(adap, A_PM_RX_STAT_LSB);
- else {
+ } else {
t4_read_indirect(adap, A_PM_RX_DBG_CTRL,
A_PM_RX_DBG_DATA, data, 2,
A_PM_RX_DBG_STAT_MSB);
@@ -3903,7 +5533,7 @@ void t4_pmrx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[])
}
/**
- * get_mps_bg_map - return the buffer groups associated with a port
+ * t4_get_mps_bg_map - return the buffer groups associated with a port
* @adap: the adapter
* @idx: the port index
*
@@ -3911,7 +5541,7 @@ void t4_pmrx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[])
* with the given port. Bit i is set if buffer group i is used by the
* port.
*/
-static unsigned int get_mps_bg_map(struct adapter *adap, int idx)
+static unsigned int t4_get_mps_bg_map(struct adapter *adap, int idx)
{
u32 n = G_NUMPORTS(t4_read_reg(adap, A_MPS_CMN_CTL));
@@ -3923,12 +5553,12 @@ static unsigned int get_mps_bg_map(struct adapter *adap, int idx)
}
/**
- * t4_get_port_type_description - return Port Type string description
- * @port_type: firmware Port Type enumeration
+ * t4_get_port_type_description - return Port Type string description
+ * @port_type: firmware Port Type enumeration
*/
const char *t4_get_port_type_description(enum fw_port_type port_type)
{
- static const char *port_type_description[] = {
+ static const char *const port_type_description[] = {
"Fiber_XFI",
"Fiber_XAUI",
"BT_SGMII",
@@ -3942,7 +5572,7 @@ const char *t4_get_port_type_description(enum fw_port_type port_type)
"BP_AP",
"BP4_AP",
"QSFP_10G",
- "",
+ "QSA",
"QSFP",
"BP40_BA",
};
@@ -3954,7 +5584,7 @@ const char *t4_get_port_type_description(enum fw_port_type port_type)
/**
* t4_get_port_stats_offset - collect port stats relative to a previous
- * snapshot
+ * snapshot
* @adap: The adapter
* @idx: The port
* @stats: Current stats to fill
@@ -3984,7 +5614,7 @@ void t4_get_port_stats_offset(struct adapter *adap, int idx,
*/
void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
{
- u32 bgmap = get_mps_bg_map(adap, idx);
+ u32 bgmap = t4_get_mps_bg_map(adap, idx);
#define GET_STAT(name) \
t4_read_reg64(adap, \
@@ -3992,57 +5622,57 @@ void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
T5_PORT_REG(idx, A_MPS_PORT_STAT_##name##_L)))
#define GET_STAT_COM(name) t4_read_reg64(adap, A_MPS_STAT_##name##_L)
- p->tx_pause = GET_STAT(TX_PORT_PAUSE);
- p->tx_octets = GET_STAT(TX_PORT_BYTES);
- p->tx_frames = GET_STAT(TX_PORT_FRAMES);
- p->tx_bcast_frames = GET_STAT(TX_PORT_BCAST);
- p->tx_mcast_frames = GET_STAT(TX_PORT_MCAST);
- p->tx_ucast_frames = GET_STAT(TX_PORT_UCAST);
- p->tx_error_frames = GET_STAT(TX_PORT_ERROR);
- p->tx_frames_64 = GET_STAT(TX_PORT_64B);
- p->tx_frames_65_127 = GET_STAT(TX_PORT_65B_127B);
- p->tx_frames_128_255 = GET_STAT(TX_PORT_128B_255B);
- p->tx_frames_256_511 = GET_STAT(TX_PORT_256B_511B);
- p->tx_frames_512_1023 = GET_STAT(TX_PORT_512B_1023B);
- p->tx_frames_1024_1518 = GET_STAT(TX_PORT_1024B_1518B);
- p->tx_frames_1519_max = GET_STAT(TX_PORT_1519B_MAX);
- p->tx_drop = GET_STAT(TX_PORT_DROP);
- p->tx_ppp0 = GET_STAT(TX_PORT_PPP0);
- p->tx_ppp1 = GET_STAT(TX_PORT_PPP1);
- p->tx_ppp2 = GET_STAT(TX_PORT_PPP2);
- p->tx_ppp3 = GET_STAT(TX_PORT_PPP3);
- p->tx_ppp4 = GET_STAT(TX_PORT_PPP4);
- p->tx_ppp5 = GET_STAT(TX_PORT_PPP5);
- p->tx_ppp6 = GET_STAT(TX_PORT_PPP6);
- p->tx_ppp7 = GET_STAT(TX_PORT_PPP7);
-
- p->rx_pause = GET_STAT(RX_PORT_PAUSE);
- p->rx_octets = GET_STAT(RX_PORT_BYTES);
- p->rx_frames = GET_STAT(RX_PORT_FRAMES);
- p->rx_bcast_frames = GET_STAT(RX_PORT_BCAST);
- p->rx_mcast_frames = GET_STAT(RX_PORT_MCAST);
- p->rx_ucast_frames = GET_STAT(RX_PORT_UCAST);
- p->rx_too_long = GET_STAT(RX_PORT_MTU_ERROR);
- p->rx_jabber = GET_STAT(RX_PORT_MTU_CRC_ERROR);
- p->rx_fcs_err = GET_STAT(RX_PORT_CRC_ERROR);
- p->rx_len_err = GET_STAT(RX_PORT_LEN_ERROR);
- p->rx_symbol_err = GET_STAT(RX_PORT_SYM_ERROR);
- p->rx_runt = GET_STAT(RX_PORT_LESS_64B);
- p->rx_frames_64 = GET_STAT(RX_PORT_64B);
- p->rx_frames_65_127 = GET_STAT(RX_PORT_65B_127B);
- p->rx_frames_128_255 = GET_STAT(RX_PORT_128B_255B);
- p->rx_frames_256_511 = GET_STAT(RX_PORT_256B_511B);
- p->rx_frames_512_1023 = GET_STAT(RX_PORT_512B_1023B);
- p->rx_frames_1024_1518 = GET_STAT(RX_PORT_1024B_1518B);
- p->rx_frames_1519_max = GET_STAT(RX_PORT_1519B_MAX);
- p->rx_ppp0 = GET_STAT(RX_PORT_PPP0);
- p->rx_ppp1 = GET_STAT(RX_PORT_PPP1);
- p->rx_ppp2 = GET_STAT(RX_PORT_PPP2);
- p->rx_ppp3 = GET_STAT(RX_PORT_PPP3);
- p->rx_ppp4 = GET_STAT(RX_PORT_PPP4);
- p->rx_ppp5 = GET_STAT(RX_PORT_PPP5);
- p->rx_ppp6 = GET_STAT(RX_PORT_PPP6);
- p->rx_ppp7 = GET_STAT(RX_PORT_PPP7);
+ p->tx_pause = GET_STAT(TX_PORT_PAUSE);
+ p->tx_octets = GET_STAT(TX_PORT_BYTES);
+ p->tx_frames = GET_STAT(TX_PORT_FRAMES);
+ p->tx_bcast_frames = GET_STAT(TX_PORT_BCAST);
+ p->tx_mcast_frames = GET_STAT(TX_PORT_MCAST);
+ p->tx_ucast_frames = GET_STAT(TX_PORT_UCAST);
+ p->tx_error_frames = GET_STAT(TX_PORT_ERROR);
+ p->tx_frames_64 = GET_STAT(TX_PORT_64B);
+ p->tx_frames_65_127 = GET_STAT(TX_PORT_65B_127B);
+ p->tx_frames_128_255 = GET_STAT(TX_PORT_128B_255B);
+ p->tx_frames_256_511 = GET_STAT(TX_PORT_256B_511B);
+ p->tx_frames_512_1023 = GET_STAT(TX_PORT_512B_1023B);
+ p->tx_frames_1024_1518 = GET_STAT(TX_PORT_1024B_1518B);
+ p->tx_frames_1519_max = GET_STAT(TX_PORT_1519B_MAX);
+ p->tx_drop = GET_STAT(TX_PORT_DROP);
+ p->tx_ppp0 = GET_STAT(TX_PORT_PPP0);
+ p->tx_ppp1 = GET_STAT(TX_PORT_PPP1);
+ p->tx_ppp2 = GET_STAT(TX_PORT_PPP2);
+ p->tx_ppp3 = GET_STAT(TX_PORT_PPP3);
+ p->tx_ppp4 = GET_STAT(TX_PORT_PPP4);
+ p->tx_ppp5 = GET_STAT(TX_PORT_PPP5);
+ p->tx_ppp6 = GET_STAT(TX_PORT_PPP6);
+ p->tx_ppp7 = GET_STAT(TX_PORT_PPP7);
+
+ p->rx_pause = GET_STAT(RX_PORT_PAUSE);
+ p->rx_octets = GET_STAT(RX_PORT_BYTES);
+ p->rx_frames = GET_STAT(RX_PORT_FRAMES);
+ p->rx_bcast_frames = GET_STAT(RX_PORT_BCAST);
+ p->rx_mcast_frames = GET_STAT(RX_PORT_MCAST);
+ p->rx_ucast_frames = GET_STAT(RX_PORT_UCAST);
+ p->rx_too_long = GET_STAT(RX_PORT_MTU_ERROR);
+ p->rx_jabber = GET_STAT(RX_PORT_MTU_CRC_ERROR);
+ p->rx_fcs_err = GET_STAT(RX_PORT_CRC_ERROR);
+ p->rx_len_err = GET_STAT(RX_PORT_LEN_ERROR);
+ p->rx_symbol_err = GET_STAT(RX_PORT_SYM_ERROR);
+ p->rx_runt = GET_STAT(RX_PORT_LESS_64B);
+ p->rx_frames_64 = GET_STAT(RX_PORT_64B);
+ p->rx_frames_65_127 = GET_STAT(RX_PORT_65B_127B);
+ p->rx_frames_128_255 = GET_STAT(RX_PORT_128B_255B);
+ p->rx_frames_256_511 = GET_STAT(RX_PORT_256B_511B);
+ p->rx_frames_512_1023 = GET_STAT(RX_PORT_512B_1023B);
+ p->rx_frames_1024_1518 = GET_STAT(RX_PORT_1024B_1518B);
+ p->rx_frames_1519_max = GET_STAT(RX_PORT_1519B_MAX);
+ p->rx_ppp0 = GET_STAT(RX_PORT_PPP0);
+ p->rx_ppp1 = GET_STAT(RX_PORT_PPP1);
+ p->rx_ppp2 = GET_STAT(RX_PORT_PPP2);
+ p->rx_ppp3 = GET_STAT(RX_PORT_PPP3);
+ p->rx_ppp4 = GET_STAT(RX_PORT_PPP4);
+ p->rx_ppp5 = GET_STAT(RX_PORT_PPP5);
+ p->rx_ppp6 = GET_STAT(RX_PORT_PPP6);
+ p->rx_ppp7 = GET_STAT(RX_PORT_PPP7);
p->rx_ovflow0 = (bgmap & 1) ? GET_STAT_COM(RX_BG_0_MAC_DROP_FRAME) : 0;
p->rx_ovflow1 = (bgmap & 2) ? GET_STAT_COM(RX_BG_1_MAC_DROP_FRAME) : 0;
@@ -4058,39 +5688,6 @@ void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
}
/**
- * t4_clr_port_stats - clear port statistics
- * @adap: the adapter
- * @idx: the port index
- *
- * Clear HW statistics for the given port.
- */
-void t4_clr_port_stats(struct adapter *adap, int idx)
-{
- unsigned int i;
- u32 bgmap = get_mps_bg_map(adap, idx);
- u32 port_base_addr;
-
- if (is_t4(adap))
- port_base_addr = PORT_BASE(idx);
- else
- port_base_addr = T5_PORT_BASE(idx);
-
- for (i = A_MPS_PORT_STAT_TX_PORT_BYTES_L;
- i <= A_MPS_PORT_STAT_TX_PORT_PPP7_H; i += 8)
- t4_write_reg(adap, port_base_addr + i, 0);
- for (i = A_MPS_PORT_STAT_RX_PORT_BYTES_L;
- i <= A_MPS_PORT_STAT_RX_PORT_LESS_64B_H; i += 8)
- t4_write_reg(adap, port_base_addr + i, 0);
- for (i = 0; i < 4; i++)
- if (bgmap & (1 << i)) {
- t4_write_reg(adap,
- A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L + i * 8, 0);
- t4_write_reg(adap,
- A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L + i * 8, 0);
- }
-}
-
-/**
* t4_get_lb_stats - collect loopback port statistics
* @adap: the adapter
* @idx: the loopback port index
@@ -4100,7 +5697,7 @@ void t4_clr_port_stats(struct adapter *adap, int idx)
*/
void t4_get_lb_stats(struct adapter *adap, int idx, struct lb_port_stats *p)
{
- u32 bgmap = get_mps_bg_map(adap, idx);
+ u32 bgmap = t4_get_mps_bg_map(adap, idx);
#define GET_STAT(name) \
t4_read_reg64(adap, \
@@ -4109,21 +5706,21 @@ void t4_get_lb_stats(struct adapter *adap, int idx, struct lb_port_stats *p)
T5_PORT_REG(idx, A_MPS_PORT_STAT_LB_PORT_##name##_L)))
#define GET_STAT_COM(name) t4_read_reg64(adap, A_MPS_STAT_##name##_L)
- p->octets = GET_STAT(BYTES);
- p->frames = GET_STAT(FRAMES);
- p->bcast_frames = GET_STAT(BCAST);
- p->mcast_frames = GET_STAT(MCAST);
- p->ucast_frames = GET_STAT(UCAST);
- p->error_frames = GET_STAT(ERROR);
-
- p->frames_64 = GET_STAT(64B);
- p->frames_65_127 = GET_STAT(65B_127B);
- p->frames_128_255 = GET_STAT(128B_255B);
- p->frames_256_511 = GET_STAT(256B_511B);
- p->frames_512_1023 = GET_STAT(512B_1023B);
- p->frames_1024_1518 = GET_STAT(1024B_1518B);
- p->frames_1519_max = GET_STAT(1519B_MAX);
- p->drop = GET_STAT(DROP_FRAMES);
+ p->octets = GET_STAT(BYTES);
+ p->frames = GET_STAT(FRAMES);
+ p->bcast_frames = GET_STAT(BCAST);
+ p->mcast_frames = GET_STAT(MCAST);
+ p->ucast_frames = GET_STAT(UCAST);
+ p->error_frames = GET_STAT(ERROR);
+
+ p->frames_64 = GET_STAT(64B);
+ p->frames_65_127 = GET_STAT(65B_127B);
+ p->frames_128_255 = GET_STAT(128B_255B);
+ p->frames_256_511 = GET_STAT(256B_511B);
+ p->frames_512_1023 = GET_STAT(512B_1023B);
+ p->frames_1024_1518 = GET_STAT(1024B_1518B);
+ p->frames_1519_max = GET_STAT(1519B_MAX);
+ p->drop = GET_STAT(DROP_FRAMES);
p->ovflow0 = (bgmap & 1) ? GET_STAT_COM(RX_BG_0_LB_DROP_FRAME) : 0;
p->ovflow1 = (bgmap & 2) ? GET_STAT_COM(RX_BG_1_LB_DROP_FRAME) : 0;
@@ -4237,43 +5834,49 @@ int t4_wol_pat_enable(struct adapter *adap, unsigned int port, unsigned int map,
return 0;
}
-/**
- * t4_mk_filtdelwr - create a delete filter WR
- * @ftid: the filter ID
- * @wr: the filter work request to populate
- * @qid: ingress queue to receive the delete notification
+/* t4_mk_filtdelwr - create a delete filter WR
+ * @ftid: the filter ID
+ * @wr: the filter work request to populate
+ * @qid: ingress queue to receive the delete notification
*
- * Creates a filter work request to delete the supplied filter. If @qid is
- * negative the delete notification is suppressed.
+ * Creates a filter work request to delete the supplied filter. If @qid is
+ * negative the delete notification is suppressed.
*/
void t4_mk_filtdelwr(unsigned int ftid, struct fw_filter_wr *wr, int qid)
{
memset(wr, 0, sizeof(*wr));
- wr->op_pkd = htonl(V_FW_WR_OP(FW_FILTER_WR));
- wr->len16_pkd = htonl(V_FW_WR_LEN16(sizeof(*wr) / 16));
- wr->tid_to_iq = htonl(V_FW_FILTER_WR_TID(ftid) |
- V_FW_FILTER_WR_NOREPLY(qid < 0));
- wr->del_filter_to_l2tix = htonl(F_FW_FILTER_WR_DEL_FILTER);
+ wr->op_pkd = cpu_to_be32(V_FW_WR_OP(FW_FILTER_WR));
+ wr->len16_pkd = cpu_to_be32(V_FW_WR_LEN16(sizeof(*wr) / 16));
+ wr->tid_to_iq = cpu_to_be32(V_FW_FILTER_WR_TID(ftid) |
+ V_FW_FILTER_WR_NOREPLY(qid < 0));
+ wr->del_filter_to_l2tix = cpu_to_be32(F_FW_FILTER_WR_DEL_FILTER);
if (qid >= 0)
- wr->rx_chan_rx_rpl_iq = htons(V_FW_FILTER_WR_RX_RPL_IQ(qid));
+ wr->rx_chan_rx_rpl_iq =
+ cpu_to_be16(V_FW_FILTER_WR_RX_RPL_IQ(qid));
}
#define INIT_CMD(var, cmd, rd_wr) do { \
- (var).op_to_write = htonl(V_FW_CMD_OP(FW_##cmd##_CMD) | \
- F_FW_CMD_REQUEST | F_FW_CMD_##rd_wr); \
- (var).retval_len16 = htonl(FW_LEN16(var)); \
+ (var).op_to_write = cpu_to_be32(V_FW_CMD_OP(FW_##cmd##_CMD) | \
+ F_FW_CMD_REQUEST | \
+ F_FW_CMD_##rd_wr); \
+ (var).retval_len16 = cpu_to_be32(FW_LEN16(var)); \
} while (0)
-int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox, u32 addr, u32 val)
+int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox,
+ u32 addr, u32 val)
{
+ u32 ldst_addrspace;
struct fw_ldst_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_FIRMWARE));
- c.cycles_to_len16 = htonl(FW_LEN16(c));
- c.u.addrval.addr = htonl(addr);
- c.u.addrval.val = htonl(val);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_FIRMWARE);
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE |
+ ldst_addrspace);
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.addrval.addr = cpu_to_be32(addr);
+ c.u.addrval.val = cpu_to_be32(val);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -4293,19 +5896,22 @@ int t4_mdio_rd(struct adapter *adap, unsigned int mbox, unsigned int phy_addr,
unsigned int mmd, unsigned int reg, unsigned int *valp)
{
int ret;
+ u32 ldst_addrspace;
struct fw_ldst_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_READ | V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_MDIO));
- c.cycles_to_len16 = htonl(FW_LEN16(c));
- c.u.mdio.paddr_mmd = htons(V_FW_LDST_CMD_PADDR(phy_addr) |
- V_FW_LDST_CMD_MMD(mmd));
- c.u.mdio.raddr = htons(reg);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_MDIO);
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ |
+ ldst_addrspace);
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.mdio.paddr_mmd = cpu_to_be16(V_FW_LDST_CMD_PADDR(phy_addr) |
+ V_FW_LDST_CMD_MMD(mmd));
+ c.u.mdio.raddr = cpu_to_be16(reg);
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
if (ret == 0)
- *valp = ntohs(c.u.mdio.rval);
+ *valp = be16_to_cpu(c.u.mdio.rval);
return ret;
}
@@ -4323,197 +5929,212 @@ int t4_mdio_rd(struct adapter *adap, unsigned int mbox, unsigned int phy_addr,
int t4_mdio_wr(struct adapter *adap, unsigned int mbox, unsigned int phy_addr,
unsigned int mmd, unsigned int reg, unsigned int val)
{
+ u32 ldst_addrspace;
struct fw_ldst_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_MDIO));
- c.cycles_to_len16 = htonl(FW_LEN16(c));
- c.u.mdio.paddr_mmd = htons(V_FW_LDST_CMD_PADDR(phy_addr) |
- V_FW_LDST_CMD_MMD(mmd));
- c.u.mdio.raddr = htons(reg);
- c.u.mdio.rval = htons(val);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_MDIO);
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ ldst_addrspace);
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.mdio.paddr_mmd = cpu_to_be16(V_FW_LDST_CMD_PADDR(phy_addr) |
+ V_FW_LDST_CMD_MMD(mmd));
+ c.u.mdio.raddr = cpu_to_be16(reg);
+ c.u.mdio.rval = cpu_to_be16(val);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
/**
- * t4_i2c_rd - read I2C data from adapter
- * @adap: the adapter
- * @port: Port number if per-port device; <0 if not
- * @devid: per-port device ID or absolute device ID
- * @offset: byte offset into device I2C space
- * @len: byte length of I2C space data
- * @buf: buffer in which to return I2C data
*
- * Reads the I2C data from the indicated device and location.
- */
-int t4_i2c_rd(struct adapter *adap, unsigned int mbox,
- int port, unsigned int devid,
- unsigned int offset, unsigned int len,
- u8 *buf)
-{
- struct fw_ldst_cmd ldst;
- int ret;
-
- if (port >= 4 ||
- devid >= 256 ||
- offset >= 256 ||
- len > sizeof ldst.u.i2c.data)
- return -EINVAL;
-
- memset(&ldst, 0, sizeof ldst);
- ldst.op_to_addrspace =
- cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
- F_FW_CMD_REQUEST |
- F_FW_CMD_READ |
- V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_I2C));
- ldst.cycles_to_len16 = cpu_to_be32(FW_LEN16(ldst));
- ldst.u.i2c.pid = (port < 0 ? 0xff : port);
- ldst.u.i2c.did = devid;
- ldst.u.i2c.boffset = offset;
- ldst.u.i2c.blen = len;
- ret = t4_wr_mbox(adap, mbox, &ldst, sizeof ldst, &ldst);
- if (!ret)
- memcpy(buf, ldst.u.i2c.data, len);
- return ret;
-}
-
-/**
- * t4_i2c_wr - write I2C data to adapter
+ * t4_sge_decode_idma_state - decode the idma state
* @adap: the adapter
- * @port: Port number if per-port device; <0 if not
- * @devid: per-port device ID or absolute device ID
- * @offset: byte offset into device I2C space
- * @len: byte length of I2C space data
- * @buf: buffer containing new I2C data
- *
- * Write the I2C data to the indicated device and location.
- */
-int t4_i2c_wr(struct adapter *adap, unsigned int mbox,
- int port, unsigned int devid,
- unsigned int offset, unsigned int len,
- u8 *buf)
-{
- struct fw_ldst_cmd ldst;
+ * @state: the state idma is stuck in
+ */
+void t4_sge_decode_idma_state(struct adapter *adapter, int state)
+{
+ static const char * const t4_decode[] = {
+ "IDMA_IDLE",
+ "IDMA_PUSH_MORE_CPL_FIFO",
+ "IDMA_PUSH_CPL_MSG_HEADER_TO_FIFO",
+ "Not used",
+ "IDMA_PHYSADDR_SEND_PCIEHDR",
+ "IDMA_PHYSADDR_SEND_PAYLOAD_FIRST",
+ "IDMA_PHYSADDR_SEND_PAYLOAD",
+ "IDMA_SEND_FIFO_TO_IMSG",
+ "IDMA_FL_REQ_DATA_FL_PREP",
+ "IDMA_FL_REQ_DATA_FL",
+ "IDMA_FL_DROP",
+ "IDMA_FL_H_REQ_HEADER_FL",
+ "IDMA_FL_H_SEND_PCIEHDR",
+ "IDMA_FL_H_PUSH_CPL_FIFO",
+ "IDMA_FL_H_SEND_CPL",
+ "IDMA_FL_H_SEND_IP_HDR_FIRST",
+ "IDMA_FL_H_SEND_IP_HDR",
+ "IDMA_FL_H_REQ_NEXT_HEADER_FL",
+ "IDMA_FL_H_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_H_SEND_IP_HDR_PADDING",
+ "IDMA_FL_D_SEND_PCIEHDR",
+ "IDMA_FL_D_SEND_CPL_AND_IP_HDR",
+ "IDMA_FL_D_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_PCIEHDR",
+ "IDMA_FL_PUSH_CPL_FIFO",
+ "IDMA_FL_SEND_CPL",
+ "IDMA_FL_SEND_PAYLOAD_FIRST",
+ "IDMA_FL_SEND_PAYLOAD",
+ "IDMA_FL_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_SEND_PADDING",
+ "IDMA_FL_SEND_COMPLETION_TO_IMSG",
+ "IDMA_FL_SEND_FIFO_TO_IMSG",
+ "IDMA_FL_REQ_DATAFL_DONE",
+ "IDMA_FL_REQ_HEADERFL_DONE",
+ };
+ static const char * const t5_decode[] = {
+ "IDMA_IDLE",
+ "IDMA_ALMOST_IDLE",
+ "IDMA_PUSH_MORE_CPL_FIFO",
+ "IDMA_PUSH_CPL_MSG_HEADER_TO_FIFO",
+ "IDMA_SGEFLRFLUSH_SEND_PCIEHDR",
+ "IDMA_PHYSADDR_SEND_PCIEHDR",
+ "IDMA_PHYSADDR_SEND_PAYLOAD_FIRST",
+ "IDMA_PHYSADDR_SEND_PAYLOAD",
+ "IDMA_SEND_FIFO_TO_IMSG",
+ "IDMA_FL_REQ_DATA_FL",
+ "IDMA_FL_DROP",
+ "IDMA_FL_DROP_SEND_INC",
+ "IDMA_FL_H_REQ_HEADER_FL",
+ "IDMA_FL_H_SEND_PCIEHDR",
+ "IDMA_FL_H_PUSH_CPL_FIFO",
+ "IDMA_FL_H_SEND_CPL",
+ "IDMA_FL_H_SEND_IP_HDR_FIRST",
+ "IDMA_FL_H_SEND_IP_HDR",
+ "IDMA_FL_H_REQ_NEXT_HEADER_FL",
+ "IDMA_FL_H_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_H_SEND_IP_HDR_PADDING",
+ "IDMA_FL_D_SEND_PCIEHDR",
+ "IDMA_FL_D_SEND_CPL_AND_IP_HDR",
+ "IDMA_FL_D_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_PCIEHDR",
+ "IDMA_FL_PUSH_CPL_FIFO",
+ "IDMA_FL_SEND_CPL",
+ "IDMA_FL_SEND_PAYLOAD_FIRST",
+ "IDMA_FL_SEND_PAYLOAD",
+ "IDMA_FL_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_SEND_PADDING",
+ "IDMA_FL_SEND_COMPLETION_TO_IMSG",
+ };
+ static const char * const t6_decode[] = {
+ "IDMA_IDLE",
+ "IDMA_PUSH_MORE_CPL_FIFO",
+ "IDMA_PUSH_CPL_MSG_HEADER_TO_FIFO",
+ "IDMA_SGEFLRFLUSH_SEND_PCIEHDR",
+ "IDMA_PHYSADDR_SEND_PCIEHDR",
+ "IDMA_PHYSADDR_SEND_PAYLOAD_FIRST",
+ "IDMA_PHYSADDR_SEND_PAYLOAD",
+ "IDMA_FL_REQ_DATA_FL",
+ "IDMA_FL_DROP",
+ "IDMA_FL_DROP_SEND_INC",
+ "IDMA_FL_H_REQ_HEADER_FL",
+ "IDMA_FL_H_SEND_PCIEHDR",
+ "IDMA_FL_H_PUSH_CPL_FIFO",
+ "IDMA_FL_H_SEND_CPL",
+ "IDMA_FL_H_SEND_IP_HDR_FIRST",
+ "IDMA_FL_H_SEND_IP_HDR",
+ "IDMA_FL_H_REQ_NEXT_HEADER_FL",
+ "IDMA_FL_H_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_H_SEND_IP_HDR_PADDING",
+ "IDMA_FL_D_SEND_PCIEHDR",
+ "IDMA_FL_D_SEND_CPL_AND_IP_HDR",
+ "IDMA_FL_D_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_PCIEHDR",
+ "IDMA_FL_PUSH_CPL_FIFO",
+ "IDMA_FL_SEND_CPL",
+ "IDMA_FL_SEND_PAYLOAD_FIRST",
+ "IDMA_FL_SEND_PAYLOAD",
+ "IDMA_FL_REQ_NEXT_DATA_FL",
+ "IDMA_FL_SEND_NEXT_PCIEHDR",
+ "IDMA_FL_SEND_PADDING",
+ "IDMA_FL_SEND_COMPLETION_TO_IMSG",
+ };
+ static const u32 sge_regs[] = {
+ A_SGE_DEBUG_DATA_LOW_INDEX_2,
+ A_SGE_DEBUG_DATA_LOW_INDEX_3,
+ A_SGE_DEBUG_DATA_HIGH_INDEX_10,
+ };
+ const char * const *sge_idma_decode;
+ int sge_idma_decode_nstates;
+ int i;
+ unsigned int chip_version = chip_id(adapter);
- if (port >= 4 ||
- devid >= 256 ||
- offset >= 256 ||
- len > sizeof ldst.u.i2c.data)
- return -EINVAL;
+ /* Select the right set of decode strings to dump depending on the
+ * adapter chip type.
+ */
+ switch (chip_version) {
+ case CHELSIO_T4:
+ sge_idma_decode = (const char * const *)t4_decode;
+ sge_idma_decode_nstates = ARRAY_SIZE(t4_decode);
+ break;
- memset(&ldst, 0, sizeof ldst);
- ldst.op_to_addrspace =
- cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
- F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE |
- V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_I2C));
- ldst.cycles_to_len16 = cpu_to_be32(FW_LEN16(ldst));
- ldst.u.i2c.pid = (port < 0 ? 0xff : port);
- ldst.u.i2c.did = devid;
- ldst.u.i2c.boffset = offset;
- ldst.u.i2c.blen = len;
- memcpy(ldst.u.i2c.data, buf, len);
- return t4_wr_mbox(adap, mbox, &ldst, sizeof ldst, &ldst);
-}
+ case CHELSIO_T5:
+ sge_idma_decode = (const char * const *)t5_decode;
+ sge_idma_decode_nstates = ARRAY_SIZE(t5_decode);
+ break;
-/**
- * t4_sge_ctxt_flush - flush the SGE context cache
- * @adap: the adapter
- * @mbox: mailbox to use for the FW command
- *
- * Issues a FW command through the given mailbox to flush the
- * SGE context cache.
- */
-int t4_sge_ctxt_flush(struct adapter *adap, unsigned int mbox)
-{
- int ret;
- struct fw_ldst_cmd c;
+ case CHELSIO_T6:
+ sge_idma_decode = (const char * const *)t6_decode;
+ sge_idma_decode_nstates = ARRAY_SIZE(t6_decode);
+ break;
- memset(&c, 0, sizeof(c));
- c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_READ |
- V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_SGE_EGRC));
- c.cycles_to_len16 = htonl(FW_LEN16(c));
- c.u.idctxt.msg_ctxtflush = htonl(F_FW_LDST_CMD_CTXTFLUSH);
+ default:
+ CH_ERR(adapter, "Unsupported chip version %d\n", chip_version);
+ return;
+ }
- ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
- return ret;
+ if (state < sge_idma_decode_nstates)
+ CH_WARN(adapter, "idma state %s\n", sge_idma_decode[state]);
+ else
+ CH_WARN(adapter, "idma state %d unknown\n", state);
+
+ for (i = 0; i < ARRAY_SIZE(sge_regs); i++)
+ CH_WARN(adapter, "SGE register %#x value %#x\n",
+ sge_regs[i], t4_read_reg(adapter, sge_regs[i]));
}
/**
- * t4_sge_ctxt_rd - read an SGE context through FW
- * @adap: the adapter
- * @mbox: mailbox to use for the FW command
- * @cid: the context id
- * @ctype: the context type
- * @data: where to store the context data
+ * t4_sge_ctxt_flush - flush the SGE context cache
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
*
- * Issues a FW command through the given mailbox to read an SGE context.
+ * Issues a FW command through the given mailbox to flush the
+ * SGE context cache.
*/
-int t4_sge_ctxt_rd(struct adapter *adap, unsigned int mbox, unsigned int cid,
- enum ctxt_type ctype, u32 *data)
+int t4_sge_ctxt_flush(struct adapter *adap, unsigned int mbox)
{
int ret;
+ u32 ldst_addrspace;
struct fw_ldst_cmd c;
- if (ctype == CTXT_EGRESS)
- ret = FW_LDST_ADDRSPC_SGE_EGRC;
- else if (ctype == CTXT_INGRESS)
- ret = FW_LDST_ADDRSPC_SGE_INGC;
- else if (ctype == CTXT_FLM)
- ret = FW_LDST_ADDRSPC_SGE_FLMC;
- else
- ret = FW_LDST_ADDRSPC_SGE_CONMC;
-
memset(&c, 0, sizeof(c));
- c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_READ | V_FW_LDST_CMD_ADDRSPACE(ret));
- c.cycles_to_len16 = htonl(FW_LEN16(c));
- c.u.idctxt.physid = htonl(cid);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_SGE_EGRC);
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ |
+ ldst_addrspace);
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.idctxt.msg_ctxtflush = cpu_to_be32(F_FW_LDST_CMD_CTXTFLUSH);
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
- if (ret == 0) {
- data[0] = ntohl(c.u.idctxt.ctxt_data0);
- data[1] = ntohl(c.u.idctxt.ctxt_data1);
- data[2] = ntohl(c.u.idctxt.ctxt_data2);
- data[3] = ntohl(c.u.idctxt.ctxt_data3);
- data[4] = ntohl(c.u.idctxt.ctxt_data4);
- data[5] = ntohl(c.u.idctxt.ctxt_data5);
- }
- return ret;
-}
-
-/**
- * t4_sge_ctxt_rd_bd - read an SGE context bypassing FW
- * @adap: the adapter
- * @cid: the context id
- * @ctype: the context type
- * @data: where to store the context data
- *
- * Reads an SGE context directly, bypassing FW. This is only for
- * debugging when FW is unavailable.
- */
-int t4_sge_ctxt_rd_bd(struct adapter *adap, unsigned int cid, enum ctxt_type ctype,
- u32 *data)
-{
- int i, ret;
-
- t4_write_reg(adap, A_SGE_CTXT_CMD, V_CTXTQID(cid) | V_CTXTTYPE(ctype));
- ret = t4_wait_op_done(adap, A_SGE_CTXT_CMD, F_BUSY, 0, 3, 1);
- if (!ret)
- for (i = A_SGE_CTXT_DATA0; i <= A_SGE_CTXT_DATA5; i += 4)
- *data++ = t4_read_reg(adap, i);
return ret;
}
/**
- * t4_fw_hello - establish communication with FW
- * @adap: the adapter
- * @mbox: mailbox to use for the FW command
- * @evt_mbox: mailbox to receive async FW events
- * @master: specifies the caller's willingness to be the device master
+ * t4_fw_hello - establish communication with FW
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @evt_mbox: mailbox to receive async FW events
+ * @master: specifies the caller's willingness to be the device master
* @state: returns the current device state (if non-NULL)
*
* Issues a command to establish communication with FW. Returns either
@@ -4531,11 +6152,11 @@ int t4_fw_hello(struct adapter *adap, unsigned int mbox, unsigned int evt_mbox,
retry:
memset(&c, 0, sizeof(c));
INIT_CMD(c, HELLO, WRITE);
- c.err_to_clearinit = htonl(
+ c.err_to_clearinit = cpu_to_be32(
V_FW_HELLO_CMD_MASTERDIS(master == MASTER_CANT) |
V_FW_HELLO_CMD_MASTERFORCE(master == MASTER_MUST) |
- V_FW_HELLO_CMD_MBMASTER(master == MASTER_MUST ? mbox :
- M_FW_HELLO_CMD_MBMASTER) |
+ V_FW_HELLO_CMD_MBMASTER(master == MASTER_MUST ?
+ mbox : M_FW_HELLO_CMD_MBMASTER) |
V_FW_HELLO_CMD_MBASYNCNOT(evt_mbox) |
V_FW_HELLO_CMD_STAGE(FW_HELLO_CMD_STAGE_OS) |
F_FW_HELLO_CMD_CLEARINIT);
@@ -4556,7 +6177,7 @@ retry:
return ret;
}
- v = ntohl(c.err_to_clearinit);
+ v = be32_to_cpu(c.err_to_clearinit);
master_mbox = G_FW_HELLO_CMD_MBMASTER(v);
if (state) {
if (v & F_FW_HELLO_CMD_ERR)
@@ -4668,7 +6289,7 @@ int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset)
memset(&c, 0, sizeof(c));
INIT_CMD(c, RESET, WRITE);
- c.val = htonl(reset);
+ c.val = cpu_to_be32(reset);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -4701,8 +6322,8 @@ int t4_fw_halt(struct adapter *adap, unsigned int mbox, int force)
memset(&c, 0, sizeof(c));
INIT_CMD(c, RESET, WRITE);
- c.val = htonl(F_PIORST | F_PIORSTMODE);
- c.halt_pkd = htonl(F_FW_RESET_CMD_HALT);
+ c.val = cpu_to_be32(F_PIORST | F_PIORSTMODE);
+ c.halt_pkd = cpu_to_be32(F_FW_RESET_CMD_HALT);
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -4721,7 +6342,8 @@ int t4_fw_halt(struct adapter *adap, unsigned int mbox, int force)
*/
if (ret == 0 || force) {
t4_set_reg_field(adap, A_CIM_BOOT_CFG, F_UPCRST, F_UPCRST);
- t4_set_reg_field(adap, A_PCIE_FW, F_PCIE_FW_HALT, F_PCIE_FW_HALT);
+ t4_set_reg_field(adap, A_PCIE_FW, F_PCIE_FW_HALT,
+ F_PCIE_FW_HALT);
}
/*
@@ -4819,9 +6441,13 @@ int t4_fw_upgrade(struct adapter *adap, unsigned int mbox,
const u8 *fw_data, unsigned int size, int force)
{
const struct fw_hdr *fw_hdr = (const struct fw_hdr *)fw_data;
- unsigned int bootstrap = ntohl(fw_hdr->magic) == FW_HDR_MAGIC_BOOTSTRAP;
+ unsigned int bootstrap =
+ be32_to_cpu(fw_hdr->magic) == FW_HDR_MAGIC_BOOTSTRAP;
int reset, ret;
+ if (!t4_fw_matches_chip(adap, fw_hdr))
+ return -EINVAL;
+
if (!bootstrap) {
ret = t4_fw_halt(adap, mbox, force);
if (ret < 0 && !force)
@@ -4840,7 +6466,7 @@ int t4_fw_upgrade(struct adapter *adap, unsigned int mbox,
* the newly loaded firmware will handle this right by checking
* its header flags to see if it advertises the capability.
*/
- reset = ((ntohl(fw_hdr->flags) & FW_HDR_FLAGS_RESET_HALT) == 0);
+ reset = ((be32_to_cpu(fw_hdr->flags) & FW_HDR_FLAGS_RESET_HALT) == 0);
return t4_fw_restart(adap, mbox, reset);
}
@@ -4862,7 +6488,7 @@ int t4_fw_initialize(struct adapter *adap, unsigned int mbox)
}
/**
- * t4_query_params - query FW or device parameters
+ * t4_query_params_rw - query FW or device parameters
* @adap: the adapter
* @mbox: mailbox to use for the FW command
* @pf: the PF
@@ -4870,13 +6496,14 @@ int t4_fw_initialize(struct adapter *adap, unsigned int mbox)
* @nparams: the number of parameters
* @params: the parameter names
* @val: the parameter values
+ * @rw: Write and read flag
*
* Reads the value of FW or device parameters. Up to 7 parameters can be
* queried at once.
*/
-int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
- unsigned int vf, unsigned int nparams, const u32 *params,
- u32 *val)
+int t4_query_params_rw(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int vf, unsigned int nparams, const u32 *params,
+ u32 *val, int rw)
{
int i, ret;
struct fw_params_cmd c;
@@ -4886,21 +6513,73 @@ int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
return -EINVAL;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_PARAMS_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_READ | V_FW_PARAMS_CMD_PFN(pf) |
- V_FW_PARAMS_CMD_VFN(vf));
- c.retval_len16 = htonl(FW_LEN16(c));
-
- for (i = 0; i < nparams; i++, p += 2, params++)
- *p = htonl(*params);
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_PARAMS_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ |
+ V_FW_PARAMS_CMD_PFN(pf) |
+ V_FW_PARAMS_CMD_VFN(vf));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+
+ for (i = 0; i < nparams; i++) {
+ *p++ = cpu_to_be32(*params++);
+ if (rw)
+ *p = cpu_to_be32(*(val + i));
+ p++;
+ }
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
if (ret == 0)
for (i = 0, p = &c.param[0].val; i < nparams; i++, p += 2)
- *val++ = ntohl(*p);
+ *val++ = be32_to_cpu(*p);
return ret;
}
+int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int vf, unsigned int nparams, const u32 *params,
+ u32 *val)
+{
+ return t4_query_params_rw(adap, mbox, pf, vf, nparams, params, val, 0);
+}
+
+/**
+ * t4_set_params_timeout - sets FW or device parameters
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @pf: the PF
+ * @vf: the VF
+ * @nparams: the number of parameters
+ * @params: the parameter names
+ * @val: the parameter values
+ * @timeout: the timeout time
+ *
+ * Sets the value of FW or device parameters. Up to 7 parameters can be
+ * specified at once.
+ */
+int t4_set_params_timeout(struct adapter *adap, unsigned int mbox,
+ unsigned int pf, unsigned int vf,
+ unsigned int nparams, const u32 *params,
+ const u32 *val, int timeout)
+{
+ struct fw_params_cmd c;
+ __be32 *p = &c.param[0].mnem;
+
+ if (nparams > 7)
+ return -EINVAL;
+
+ memset(&c, 0, sizeof(c));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_PARAMS_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_PARAMS_CMD_PFN(pf) |
+ V_FW_PARAMS_CMD_VFN(vf));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+
+ while (nparams--) {
+ *p++ = cpu_to_be32(*params++);
+ *p++ = cpu_to_be32(*val++);
+ }
+
+ return t4_wr_mbox_timeout(adap, mbox, &c, sizeof(c), NULL, timeout);
+}
+
/**
* t4_set_params - sets FW or device parameters
* @adap: the adapter
@@ -4918,26 +6597,8 @@ int t4_set_params(struct adapter *adap, unsigned int mbox, unsigned int pf,
unsigned int vf, unsigned int nparams, const u32 *params,
const u32 *val)
{
- struct fw_params_cmd c;
- __be32 *p = &c.param[0].mnem;
-
- if (nparams > 7)
- return -EINVAL;
-
- memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_PARAMS_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_PARAMS_CMD_PFN(pf) |
- V_FW_PARAMS_CMD_VFN(vf));
- c.retval_len16 = htonl(FW_LEN16(c));
-
- while (nparams--) {
- *p++ = htonl(*params);
- params++;
- *p++ = htonl(*val);
- val++;
- }
-
- return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
+ return t4_set_params_timeout(adap, mbox, pf, vf, nparams, params, val,
+ FW_CMD_MAX_TIMEOUT);
}
/**
@@ -4970,18 +6631,19 @@ int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_pfvf_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_PFVF_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_PFVF_CMD_PFN(pf) |
- V_FW_PFVF_CMD_VFN(vf));
- c.retval_len16 = htonl(FW_LEN16(c));
- c.niqflint_niq = htonl(V_FW_PFVF_CMD_NIQFLINT(rxqi) |
- V_FW_PFVF_CMD_NIQ(rxq));
- c.type_to_neq = htonl(V_FW_PFVF_CMD_CMASK(cmask) |
- V_FW_PFVF_CMD_PMASK(pmask) |
- V_FW_PFVF_CMD_NEQ(txq));
- c.tc_to_nexactf = htonl(V_FW_PFVF_CMD_TC(tc) | V_FW_PFVF_CMD_NVI(vi) |
- V_FW_PFVF_CMD_NEXACTF(nexact));
- c.r_caps_to_nethctrl = htonl(V_FW_PFVF_CMD_R_CAPS(rcaps) |
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_PFVF_CMD) | F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE | V_FW_PFVF_CMD_PFN(pf) |
+ V_FW_PFVF_CMD_VFN(vf));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+ c.niqflint_niq = cpu_to_be32(V_FW_PFVF_CMD_NIQFLINT(rxqi) |
+ V_FW_PFVF_CMD_NIQ(rxq));
+ c.type_to_neq = cpu_to_be32(V_FW_PFVF_CMD_CMASK(cmask) |
+ V_FW_PFVF_CMD_PMASK(pmask) |
+ V_FW_PFVF_CMD_NEQ(txq));
+ c.tc_to_nexactf = cpu_to_be32(V_FW_PFVF_CMD_TC(tc) |
+ V_FW_PFVF_CMD_NVI(vi) |
+ V_FW_PFVF_CMD_NEXACTF(nexact));
+ c.r_caps_to_nethctrl = cpu_to_be32(V_FW_PFVF_CMD_R_CAPS(rcaps) |
V_FW_PFVF_CMD_WX_CAPS(wxcaps) |
V_FW_PFVF_CMD_NETHCTRL(txq_eth_ctrl));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
@@ -5002,6 +6664,7 @@ int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf,
*
* Allocates a virtual interface for the given physical port. If @mac is
* not %NULL it contains the MAC addresses of the VI as assigned by FW.
+ * If @rss_size is %NULL the VI is not assigned any RSS slice by FW.
* @mac should be large enough to hold @nmac Ethernet addresses, they are
* stored consecutively so the space needed is @nmac * 6 bytes.
* Returns a negative error number or the non-negative VI id.
@@ -5015,14 +6678,16 @@ int t4_alloc_vi_func(struct adapter *adap, unsigned int mbox,
struct fw_vi_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_VI_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | F_FW_CMD_EXEC |
- V_FW_VI_CMD_PFN(pf) | V_FW_VI_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_VI_CMD_ALLOC | FW_LEN16(c));
- c.type_to_viid = htons(V_FW_VI_CMD_TYPE(idstype) |
- V_FW_VI_CMD_FUNC(portfunc));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_VI_CMD) | F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE | F_FW_CMD_EXEC |
+ V_FW_VI_CMD_PFN(pf) | V_FW_VI_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_VI_CMD_ALLOC | FW_LEN16(c));
+ c.type_to_viid = cpu_to_be16(V_FW_VI_CMD_TYPE(idstype) |
+ V_FW_VI_CMD_FUNC(portfunc));
c.portid_pkd = V_FW_VI_CMD_PORTID(port);
c.nmac = nmac - 1;
+ if(!rss_size)
+ c.norss_rsssize = F_FW_VI_CMD_NORSS;
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
if (ret)
@@ -5042,20 +6707,20 @@ int t4_alloc_vi_func(struct adapter *adap, unsigned int mbox,
}
}
if (rss_size)
- *rss_size = G_FW_VI_CMD_RSSSIZE(ntohs(c.norss_rsssize));
- return G_FW_VI_CMD_VIID(htons(c.type_to_viid));
+ *rss_size = G_FW_VI_CMD_RSSSIZE(be16_to_cpu(c.norss_rsssize));
+ return G_FW_VI_CMD_VIID(be16_to_cpu(c.type_to_viid));
}
/**
- * t4_alloc_vi - allocate an [Ethernet Function] virtual interface
- * @adap: the adapter
- * @mbox: mailbox to use for the FW command
- * @port: physical port associated with the VI
- * @pf: the PF owning the VI
- * @vf: the VF owning the VI
- * @nmac: number of MAC addresses needed (1 to 5)
- * @mac: the MAC addresses of the VI
- * @rss_size: size of RSS table slice associated with this VI
+ * t4_alloc_vi - allocate an [Ethernet Function] virtual interface
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @port: physical port associated with the VI
+ * @pf: the PF owning the VI
+ * @vf: the VF owning the VI
+ * @nmac: number of MAC addresses needed (1 to 5)
+ * @mac: the MAC addresses of the VI
+ * @rss_size: size of RSS table slice associated with this VI
*
* backwards compatible and convieniance routine to allocate a Virtual
* Interface with a Ethernet Port Application Function and Intrustion
@@ -5070,14 +6735,14 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
}
/**
- * t4_free_vi - free a virtual interface
- * @adap: the adapter
- * @mbox: mailbox to use for the FW command
- * @pf: the PF owning the VI
- * @vf: the VF owning the VI
- * @viid: virtual interface identifiler
+ * t4_free_vi - free a virtual interface
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @pf: the PF owning the VI
+ * @vf: the VF owning the VI
+ * @viid: virtual interface identifiler
*
- * Free a previously allocated virtual interface.
+ * Free a previously allocated virtual interface.
*/
int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf,
unsigned int vf, unsigned int viid)
@@ -5085,13 +6750,13 @@ int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_vi_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_VI_CMD) |
- F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC |
- V_FW_VI_CMD_PFN(pf) |
- V_FW_VI_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_VI_CMD_FREE | FW_LEN16(c));
- c.type_to_viid = htons(V_FW_VI_CMD_VIID(viid));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_VI_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_EXEC |
+ V_FW_VI_CMD_PFN(pf) |
+ V_FW_VI_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_VI_CMD_FREE | FW_LEN16(c));
+ c.type_to_viid = cpu_to_be16(V_FW_VI_CMD_VIID(viid));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
}
@@ -5105,7 +6770,7 @@ int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf,
* @promisc: 1 to enable promiscuous mode, 0 to disable it, -1 no change
* @all_multi: 1 to enable all-multi mode, 0 to disable it, -1 no change
* @bcast: 1 to enable broadcast Rx, 0 to disable it, -1 no change
- * @vlanex: 1 to enable HVLAN extraction, 0 to disable it, -1 no change
+ * @vlanex: 1 to enable HW VLAN extraction, 0 to disable it, -1 no change
* @sleep_ok: if true we may sleep while awaiting command completion
*
* Sets Rx properties of a virtual interface.
@@ -5129,14 +6794,16 @@ int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid,
vlanex = M_FW_VI_RXMODE_CMD_VLANEXEN;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_RXMODE_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_VI_RXMODE_CMD_VIID(viid));
- c.retval_len16 = htonl(FW_LEN16(c));
- c.mtu_to_vlanexen = htonl(V_FW_VI_RXMODE_CMD_MTU(mtu) |
- V_FW_VI_RXMODE_CMD_PROMISCEN(promisc) |
- V_FW_VI_RXMODE_CMD_ALLMULTIEN(all_multi) |
- V_FW_VI_RXMODE_CMD_BROADCASTEN(bcast) |
- V_FW_VI_RXMODE_CMD_VLANEXEN(vlanex));
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_RXMODE_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_VI_RXMODE_CMD_VIID(viid));
+ c.retval_len16 = cpu_to_be32(FW_LEN16(c));
+ c.mtu_to_vlanexen =
+ cpu_to_be32(V_FW_VI_RXMODE_CMD_MTU(mtu) |
+ V_FW_VI_RXMODE_CMD_PROMISCEN(promisc) |
+ V_FW_VI_RXMODE_CMD_ALLMULTIEN(all_multi) |
+ V_FW_VI_RXMODE_CMD_BROADCASTEN(bcast) |
+ V_FW_VI_RXMODE_CMD_VLANEXEN(vlanex));
return t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), NULL, sleep_ok);
}
@@ -5185,18 +6852,18 @@ int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox,
int i;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_MAC_CMD) |
- F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE |
- V_FW_CMD_EXEC(free) |
- V_FW_VI_MAC_CMD_VIID(viid));
- c.freemacs_to_len16 = htonl(V_FW_VI_MAC_CMD_FREEMACS(free) |
- V_FW_CMD_LEN16(len16));
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_MAC_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE |
+ V_FW_CMD_EXEC(free) |
+ V_FW_VI_MAC_CMD_VIID(viid));
+ c.freemacs_to_len16 = cpu_to_be32(V_FW_VI_MAC_CMD_FREEMACS(free) |
+ V_FW_CMD_LEN16(len16));
for (i = 0, p = c.u.exact; i < fw_naddr; i++, p++) {
- p->valid_to_idx = htons(
- F_FW_VI_MAC_CMD_VALID |
- V_FW_VI_MAC_CMD_IDX(FW_VI_MAC_ADD_MAC));
+ p->valid_to_idx =
+ cpu_to_be16(F_FW_VI_MAC_CMD_VALID |
+ V_FW_VI_MAC_CMD_IDX(FW_VI_MAC_ADD_MAC));
memcpy(p->macaddr, addr[offset+i], sizeof(p->macaddr));
}
@@ -5210,7 +6877,8 @@ int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox,
break;
for (i = 0, p = c.u.exact; i < fw_naddr; i++, p++) {
- u16 index = G_FW_VI_MAC_CMD_IDX(ntohs(p->valid_to_idx));
+ u16 index = G_FW_VI_MAC_CMD_IDX(
+ be16_to_cpu(p->valid_to_idx));
if (idx)
idx[offset+i] = (index >= max_naddr
@@ -5228,7 +6896,7 @@ int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox,
}
if (ret == 0 || ret == -FW_ENOMEM)
- ret = nfilters;
+ ret = nfilters;
return ret;
}
@@ -5262,22 +6930,23 @@ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
struct fw_vi_mac_exact *p = c.u.exact;
unsigned int max_mac_addr = adap->chip_params->mps_tcam_size;
- if (idx < 0) /* new allocation */
+ if (idx < 0) /* new allocation */
idx = persist ? FW_VI_MAC_ADD_PERSIST_MAC : FW_VI_MAC_ADD_MAC;
mode = add_smt ? FW_VI_MAC_SMT_AND_MPSTCAM : FW_VI_MAC_MPS_TCAM_ENTRY;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_MAC_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_VI_MAC_CMD_VIID(viid));
- c.freemacs_to_len16 = htonl(V_FW_CMD_LEN16(1));
- p->valid_to_idx = htons(F_FW_VI_MAC_CMD_VALID |
- V_FW_VI_MAC_CMD_SMAC_RESULT(mode) |
- V_FW_VI_MAC_CMD_IDX(idx));
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_MAC_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_VI_MAC_CMD_VIID(viid));
+ c.freemacs_to_len16 = cpu_to_be32(V_FW_CMD_LEN16(1));
+ p->valid_to_idx = cpu_to_be16(F_FW_VI_MAC_CMD_VALID |
+ V_FW_VI_MAC_CMD_SMAC_RESULT(mode) |
+ V_FW_VI_MAC_CMD_IDX(idx));
memcpy(p->macaddr, addr, sizeof(p->macaddr));
ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
if (ret == 0) {
- ret = G_FW_VI_MAC_CMD_IDX(ntohs(p->valid_to_idx));
+ ret = G_FW_VI_MAC_CMD_IDX(be16_to_cpu(p->valid_to_idx));
if (ret >= max_mac_addr)
ret = -ENOMEM;
}
@@ -5302,8 +6971,9 @@ int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
u32 val;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_MAC_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_WRITE | V_FW_VI_ENABLE_CMD_VIID(viid));
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_MAC_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_WRITE |
+ V_FW_VI_ENABLE_CMD_VIID(viid));
val = V_FW_VI_MAC_CMD_ENTRY_TYPE(FW_VI_MAC_TYPE_HASHVEC) |
V_FW_VI_MAC_CMD_HASHUNIEN(ucast) | V_FW_CMD_LEN16(1);
c.freemacs_to_len16 = cpu_to_be32(val);
@@ -5312,6 +6982,34 @@ int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
}
/**
+ * t4_enable_vi_params - enable/disable a virtual interface
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @viid: the VI id
+ * @rx_en: 1=enable Rx, 0=disable Rx
+ * @tx_en: 1=enable Tx, 0=disable Tx
+ * @dcb_en: 1=enable delivery of Data Center Bridging messages.
+ *
+ * Enables/disables a virtual interface. Note that setting DCB Enable
+ * only makes sense when enabling a Virtual Interface ...
+ */
+int t4_enable_vi_params(struct adapter *adap, unsigned int mbox,
+ unsigned int viid, bool rx_en, bool tx_en, bool dcb_en)
+{
+ struct fw_vi_enable_cmd c;
+
+ memset(&c, 0, sizeof(c));
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_ENABLE_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_VI_ENABLE_CMD_VIID(viid));
+ c.ien_to_len16 = cpu_to_be32(V_FW_VI_ENABLE_CMD_IEN(rx_en) |
+ V_FW_VI_ENABLE_CMD_EEN(tx_en) |
+ V_FW_VI_ENABLE_CMD_DCB_INFO(dcb_en) |
+ FW_LEN16(c));
+ return t4_wr_mbox_ns(adap, mbox, &c, sizeof(c), NULL);
+}
+
+/**
* t4_enable_vi - enable/disable a virtual interface
* @adap: the adapter
* @mbox: mailbox to use for the FW command
@@ -5319,19 +7017,13 @@ int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
* @rx_en: 1=enable Rx, 0=disable Rx
* @tx_en: 1=enable Tx, 0=disable Tx
*
- * Enables/disables a virtual interface.
+ * Enables/disables a virtual interface. Note that setting DCB Enable
+ * only makes sense when enabling a Virtual Interface ...
*/
int t4_enable_vi(struct adapter *adap, unsigned int mbox, unsigned int viid,
bool rx_en, bool tx_en)
{
- struct fw_vi_enable_cmd c;
-
- memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_ENABLE_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_VI_ENABLE_CMD_VIID(viid));
- c.ien_to_len16 = htonl(V_FW_VI_ENABLE_CMD_IEN(rx_en) |
- V_FW_VI_ENABLE_CMD_EEN(tx_en) | FW_LEN16(c));
- return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
+ return t4_enable_vi_params(adap, mbox, viid, rx_en, tx_en, 0);
}
/**
@@ -5349,10 +7041,44 @@ int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid,
struct fw_vi_enable_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_viid = htonl(V_FW_CMD_OP(FW_VI_ENABLE_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_VI_ENABLE_CMD_VIID(viid));
- c.ien_to_len16 = htonl(F_FW_VI_ENABLE_CMD_LED | FW_LEN16(c));
- c.blinkdur = htons(nblinks);
+ c.op_to_viid = cpu_to_be32(V_FW_CMD_OP(FW_VI_ENABLE_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_VI_ENABLE_CMD_VIID(viid));
+ c.ien_to_len16 = cpu_to_be32(F_FW_VI_ENABLE_CMD_LED | FW_LEN16(c));
+ c.blinkdur = cpu_to_be16(nblinks);
+ return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
+}
+
+/**
+ * t4_iq_stop - stop an ingress queue and its FLs
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @pf: the PF owning the queues
+ * @vf: the VF owning the queues
+ * @iqtype: the ingress queue type (FW_IQ_TYPE_FL_INT_CAP, etc.)
+ * @iqid: ingress queue id
+ * @fl0id: FL0 queue id or 0xffff if no attached FL0
+ * @fl1id: FL1 queue id or 0xffff if no attached FL1
+ *
+ * Stops an ingress queue and its associated FLs, if any. This causes
+ * any current or future data/messages destined for these queues to be
+ * tossed.
+ */
+int t4_iq_stop(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int vf, unsigned int iqtype, unsigned int iqid,
+ unsigned int fl0id, unsigned int fl1id)
+{
+ struct fw_iq_cmd c;
+
+ memset(&c, 0, sizeof(c));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_IQ_CMD) | F_FW_CMD_REQUEST |
+ F_FW_CMD_EXEC | V_FW_IQ_CMD_PFN(pf) |
+ V_FW_IQ_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_IQ_CMD_IQSTOP | FW_LEN16(c));
+ c.type_to_iqandstindex = cpu_to_be32(V_FW_IQ_CMD_TYPE(iqtype));
+ c.iqid = cpu_to_be16(iqid);
+ c.fl0id = cpu_to_be16(fl0id);
+ c.fl1id = cpu_to_be16(fl1id);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -5376,14 +7102,14 @@ int t4_iq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_iq_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_IQ_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_IQ_CMD_PFN(pf) |
- V_FW_IQ_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_IQ_CMD_FREE | FW_LEN16(c));
- c.type_to_iqandstindex = htonl(V_FW_IQ_CMD_TYPE(iqtype));
- c.iqid = htons(iqid);
- c.fl0id = htons(fl0id);
- c.fl1id = htons(fl1id);
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_IQ_CMD) | F_FW_CMD_REQUEST |
+ F_FW_CMD_EXEC | V_FW_IQ_CMD_PFN(pf) |
+ V_FW_IQ_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_IQ_CMD_FREE | FW_LEN16(c));
+ c.type_to_iqandstindex = cpu_to_be32(V_FW_IQ_CMD_TYPE(iqtype));
+ c.iqid = cpu_to_be16(iqid);
+ c.fl0id = cpu_to_be16(fl0id);
+ c.fl1id = cpu_to_be16(fl1id);
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -5403,11 +7129,12 @@ int t4_eth_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_eq_eth_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_EQ_ETH_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_EQ_ETH_CMD_PFN(pf) |
- V_FW_EQ_ETH_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_EQ_ETH_CMD_FREE | FW_LEN16(c));
- c.eqid_pkd = htonl(V_FW_EQ_ETH_CMD_EQID(eqid));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_EQ_ETH_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_EQ_ETH_CMD_PFN(pf) |
+ V_FW_EQ_ETH_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_EQ_ETH_CMD_FREE | FW_LEN16(c));
+ c.eqid_pkd = cpu_to_be32(V_FW_EQ_ETH_CMD_EQID(eqid));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -5427,11 +7154,12 @@ int t4_ctrl_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_eq_ctrl_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_EQ_CTRL_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_EQ_CTRL_CMD_PFN(pf) |
- V_FW_EQ_CTRL_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_EQ_CTRL_CMD_FREE | FW_LEN16(c));
- c.cmpliqid_eqid = htonl(V_FW_EQ_CTRL_CMD_EQID(eqid));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_EQ_CTRL_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_EQ_CTRL_CMD_PFN(pf) |
+ V_FW_EQ_CTRL_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_EQ_CTRL_CMD_FREE | FW_LEN16(c));
+ c.cmpliqid_eqid = cpu_to_be32(V_FW_EQ_CTRL_CMD_EQID(eqid));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
@@ -5451,15 +7179,41 @@ int t4_ofld_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
struct fw_eq_ofld_cmd c;
memset(&c, 0, sizeof(c));
- c.op_to_vfn = htonl(V_FW_CMD_OP(FW_EQ_OFLD_CMD) | F_FW_CMD_REQUEST |
- F_FW_CMD_EXEC | V_FW_EQ_OFLD_CMD_PFN(pf) |
- V_FW_EQ_OFLD_CMD_VFN(vf));
- c.alloc_to_len16 = htonl(F_FW_EQ_OFLD_CMD_FREE | FW_LEN16(c));
- c.eqid_pkd = htonl(V_FW_EQ_OFLD_CMD_EQID(eqid));
+ c.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_EQ_OFLD_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_EXEC |
+ V_FW_EQ_OFLD_CMD_PFN(pf) |
+ V_FW_EQ_OFLD_CMD_VFN(vf));
+ c.alloc_to_len16 = cpu_to_be32(F_FW_EQ_OFLD_CMD_FREE | FW_LEN16(c));
+ c.eqid_pkd = cpu_to_be32(V_FW_EQ_OFLD_CMD_EQID(eqid));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
}
/**
+ * t4_link_down_rc_str - return a string for a Link Down Reason Code
+ * @link_down_rc: Link Down Reason Code
+ *
+ * Returns a string representation of the Link Down Reason Code.
+ */
+const char *t4_link_down_rc_str(unsigned char link_down_rc)
+{
+ static const char *reason[] = {
+ "Link Down",
+ "Remote Fault",
+ "Auto-negotiation Failure",
+ "Reserved3",
+ "Insufficient Airflow",
+ "Unable To Determine Reason",
+ "No RX Signal Detected",
+ "Reserved7",
+ };
+
+ if (link_down_rc >= ARRAY_SIZE(reason))
+ return "Bad Reason Code";
+
+ return reason[link_down_rc];
+}
+
+/**
* t4_handle_fw_rpl - process a FW reply message
* @adap: the adapter
* @rpl: start of the FW message
@@ -5470,15 +7224,16 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl)
{
u8 opcode = *(const u8 *)rpl;
const struct fw_port_cmd *p = (const void *)rpl;
- unsigned int action = G_FW_PORT_CMD_ACTION(ntohl(p->action_to_len16));
+ unsigned int action =
+ G_FW_PORT_CMD_ACTION(be32_to_cpu(p->action_to_len16));
if (opcode == FW_PORT_CMD && action == FW_PORT_ACTION_GET_PORT_INFO) {
/* link/module state change message */
int speed = 0, fc = 0, i;
- int chan = G_FW_PORT_CMD_PORTID(ntohl(p->op_to_portid));
+ int chan = G_FW_PORT_CMD_PORTID(be32_to_cpu(p->op_to_portid));
struct port_info *pi = NULL;
struct link_config *lc;
- u32 stat = ntohl(p->u.info.lstatus_to_modtype);
+ u32 stat = be32_to_cpu(p->u.info.lstatus_to_modtype);
int link_ok = (stat & F_FW_PORT_CMD_LSTATUS) != 0;
u32 mod = G_FW_PORT_CMD_MODTYPE(stat);
@@ -5487,13 +7242,13 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl)
if (stat & F_FW_PORT_CMD_TXPAUSE)
fc |= PAUSE_TX;
if (stat & V_FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_100M))
- speed = SPEED_100;
+ speed = 100;
else if (stat & V_FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_1G))
- speed = SPEED_1000;
+ speed = 1000;
else if (stat & V_FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_10G))
- speed = SPEED_10000;
+ speed = 10000;
else if (stat & V_FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_40G))
- speed = SPEED_40000;
+ speed = 40000;
for_each_port(adap, i) {
pi = adap2pinfo(adap, i);
@@ -5518,12 +7273,11 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl)
lc->link_ok = link_ok;
lc->speed = speed;
lc->fc = fc;
- lc->supported = ntohs(p->u.info.pcap);
+ lc->supported = be16_to_cpu(p->u.info.pcap);
t4_os_link_changed(adap, i, link_ok, reason);
}
} else {
- CH_WARN_RATELIMIT(adap,
- "Unknown firmware reply 0x%x (0x%x)\n", opcode, action);
+ CH_WARN_RATELIMIT(adap, "Unknown firmware reply %d\n", opcode);
return -EINVAL;
}
return 0;
@@ -5537,7 +7291,7 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl)
* Determines a card's PCI mode and associated parameters, such as speed
* and width.
*/
-static void __devinit get_pci_mode(struct adapter *adapter,
+static void get_pci_mode(struct adapter *adapter,
struct pci_params *p)
{
u16 val;
@@ -5559,8 +7313,7 @@ static void __devinit get_pci_mode(struct adapter *adapter,
* Initializes the SW state maintained for each link, including the link's
* capabilities and default speed/flow-control/autonegotiation settings.
*/
-static void __devinit init_link_config(struct link_config *lc,
- unsigned int caps)
+static void init_link_config(struct link_config *lc, unsigned int caps)
{
lc->supported = caps;
lc->requested_speed = 0;
@@ -5576,21 +7329,43 @@ static void __devinit init_link_config(struct link_config *lc,
}
}
-static int __devinit get_flash_params(struct adapter *adapter)
+struct flash_desc {
+ u32 vendor_and_model_id;
+ u32 size_mb;
+};
+
+int t4_get_flash_params(struct adapter *adapter)
{
+ /*
+ * Table for non-Numonix supported flash parts. Numonix parts are left
+ * to the preexisting well-tested code. All flash parts have 64KB
+ * sectors.
+ */
+ static struct flash_desc supported_flash[] = {
+ { 0x150201, 4 << 20 }, /* Spansion 4MB S25FL032P */
+ };
+
int ret;
u32 info = 0;
ret = sf1_write(adapter, 1, 1, 0, SF_RD_ID);
if (!ret)
ret = sf1_read(adapter, 3, 0, 1, &info);
- t4_write_reg(adapter, A_SF_OP, 0); /* unlock SF */
+ t4_write_reg(adapter, A_SF_OP, 0); /* unlock SF */
if (ret < 0)
return ret;
- if ((info & 0xff) != 0x20) /* not a Numonix flash */
+ for (ret = 0; ret < ARRAY_SIZE(supported_flash); ++ret)
+ if (supported_flash[ret].vendor_and_model_id == info) {
+ adapter->params.sf_size = supported_flash[ret].size_mb;
+ adapter->params.sf_nsec =
+ adapter->params.sf_size / SF_SEC_SIZE;
+ return 0;
+ }
+
+ if ((info & 0xff) != 0x20) /* not a Numonix flash */
return -EINVAL;
- info >>= 16; /* log2 of size */
+ info >>= 16; /* log2 of size */
if (info >= 0x14 && info < 0x18)
adapter->params.sf_nsec = 1 << (info - 16);
else if (info == 0x18)
@@ -5598,10 +7373,20 @@ static int __devinit get_flash_params(struct adapter *adapter)
else
return -EINVAL;
adapter->params.sf_size = 1 << info;
+
+ /*
+ * We should ~probably~ reject adapters with FLASHes which are too
+ * small but we have some legacy FPGAs with small FLASHes that we'd
+ * still like to use. So instead we emit a scary message ...
+ */
+ if (adapter->params.sf_size < FLASH_MIN_SIZE)
+ CH_WARN(adapter, "WARNING!!! FLASH size %#x < %#x!!!\n",
+ adapter->params.sf_size, FLASH_MIN_SIZE);
+
return 0;
}
-static void __devinit set_pcie_completion_timeout(struct adapter *adapter,
+static void set_pcie_completion_timeout(struct adapter *adapter,
u8 range)
{
u16 val;
@@ -5667,13 +7452,13 @@ static const struct chip_params *get_chip_params(int chipid)
/**
* t4_prep_adapter - prepare SW and HW for operation
* @adapter: the adapter
- * @reset: if true perform a HW reset
+ * @buf: temporary space of at least VPD_LEN size provided by the caller.
*
* Initialize adapter SW state for the various HW modules, set initial
* values for some adapter tunables, take PHYs out of reset, and
* initialize the MDIO interface.
*/
-int __devinit t4_prep_adapter(struct adapter *adapter)
+int t4_prep_adapter(struct adapter *adapter, u8 *buf)
{
int ret;
uint16_t device_id;
@@ -5702,11 +7487,11 @@ int __devinit t4_prep_adapter(struct adapter *adapter)
adapter->params.pci.vpd_cap_addr =
t4_os_find_pci_capability(adapter, PCI_CAP_ID_VPD);
- ret = get_flash_params(adapter);
+ ret = t4_get_flash_params(adapter);
if (ret < 0)
return ret;
- ret = get_vpd_params(adapter, &adapter->params.vpd);
+ ret = get_vpd_params(adapter, &adapter->params.vpd, buf);
if (ret < 0)
return ret;
@@ -5735,40 +7520,258 @@ int __devinit t4_prep_adapter(struct adapter *adapter)
}
/**
- * t4_init_tp_params - initialize adap->params.tp
+ * t4_shutdown_adapter - shut down adapter, host & wire
+ * @adapter: the adapter
+ *
+ * Perform an emergency shutdown of the adapter and stop it from
+ * continuing any further communication on the ports or DMA to the
+ * host. This is typically used when the adapter and/or firmware
+ * have crashed and we want to prevent any further accidental
+ * communication with the rest of the world. This will also force
+ * the port Link Status to go down -- if register writes work --
+ * which should help our peers figure out that we're down.
+ */
+int t4_shutdown_adapter(struct adapter *adapter)
+{
+ int port;
+
+ t4_intr_disable(adapter);
+ t4_write_reg(adapter, A_DBG_GPIO_EN, 0);
+ for_each_port(adapter, port) {
+ u32 a_port_cfg = PORT_REG(port,
+ is_t4(adapter)
+ ? A_XGMAC_PORT_CFG
+ : A_MAC_PORT_CFG);
+
+ t4_write_reg(adapter, a_port_cfg,
+ t4_read_reg(adapter, a_port_cfg)
+ & ~V_SIGNAL_DET(1));
+ }
+ t4_set_reg_field(adapter, A_SGE_CONTROL, F_GLOBALENABLE, 0);
+
+ return 0;
+}
+
+/**
+ * t4_init_devlog_params - initialize adapter->params.devlog
* @adap: the adapter
+ * @fw_attach: whether we can talk to the firmware
+ *
+ * Initialize various fields of the adapter's Firmware Device Log
+ * Parameters structure.
+ */
+int t4_init_devlog_params(struct adapter *adap, int fw_attach)
+{
+ struct devlog_params *dparams = &adap->params.devlog;
+ u32 pf_dparams;
+ unsigned int devlog_meminfo;
+ struct fw_devlog_cmd devlog_cmd;
+ int ret;
+
+ /* If we're dealing with newer firmware, the Device Log Paramerters
+ * are stored in a designated register which allows us to access the
+ * Device Log even if we can't talk to the firmware.
+ */
+ pf_dparams =
+ t4_read_reg(adap, PCIE_FW_REG(A_PCIE_FW_PF, PCIE_FW_PF_DEVLOG));
+ if (pf_dparams) {
+ unsigned int nentries, nentries128;
+
+ dparams->memtype = G_PCIE_FW_PF_DEVLOG_MEMTYPE(pf_dparams);
+ dparams->start = G_PCIE_FW_PF_DEVLOG_ADDR16(pf_dparams) << 4;
+
+ nentries128 = G_PCIE_FW_PF_DEVLOG_NENTRIES128(pf_dparams);
+ nentries = (nentries128 + 1) * 128;
+ dparams->size = nentries * sizeof(struct fw_devlog_e);
+
+ return 0;
+ }
+
+ /*
+ * For any failing returns ...
+ */
+ memset(dparams, 0, sizeof *dparams);
+
+ /*
+ * If we can't talk to the firmware, there's really nothing we can do
+ * at this point.
+ */
+ if (!fw_attach)
+ return -ENXIO;
+
+ /* Otherwise, ask the firmware for it's Device Log Parameters.
+ */
+ memset(&devlog_cmd, 0, sizeof devlog_cmd);
+ devlog_cmd.op_to_write = cpu_to_be32(V_FW_CMD_OP(FW_DEVLOG_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ);
+ devlog_cmd.retval_len16 = cpu_to_be32(FW_LEN16(devlog_cmd));
+ ret = t4_wr_mbox(adap, adap->mbox, &devlog_cmd, sizeof(devlog_cmd),
+ &devlog_cmd);
+ if (ret)
+ return ret;
+
+ devlog_meminfo =
+ be32_to_cpu(devlog_cmd.memtype_devlog_memaddr16_devlog);
+ dparams->memtype = G_FW_DEVLOG_CMD_MEMTYPE_DEVLOG(devlog_meminfo);
+ dparams->start = G_FW_DEVLOG_CMD_MEMADDR16_DEVLOG(devlog_meminfo) << 4;
+ dparams->size = be32_to_cpu(devlog_cmd.memsize_devlog);
+
+ return 0;
+}
+
+/**
+ * t4_init_sge_params - initialize adap->params.sge
+ * @adapter: the adapter
+ *
+ * Initialize various fields of the adapter's SGE Parameters structure.
+ */
+int t4_init_sge_params(struct adapter *adapter)
+{
+ u32 r;
+ struct sge_params *sp = &adapter->params.sge;
+
+ r = t4_read_reg(adapter, A_SGE_INGRESS_RX_THRESHOLD);
+ sp->counter_val[0] = G_THRESHOLD_0(r);
+ sp->counter_val[1] = G_THRESHOLD_1(r);
+ sp->counter_val[2] = G_THRESHOLD_2(r);
+ sp->counter_val[3] = G_THRESHOLD_3(r);
+
+ r = t4_read_reg(adapter, A_SGE_TIMER_VALUE_0_AND_1);
+ sp->timer_val[0] = core_ticks_to_us(adapter, G_TIMERVALUE0(r));
+ sp->timer_val[1] = core_ticks_to_us(adapter, G_TIMERVALUE1(r));
+ r = t4_read_reg(adapter, A_SGE_TIMER_VALUE_2_AND_3);
+ sp->timer_val[2] = core_ticks_to_us(adapter, G_TIMERVALUE2(r));
+ sp->timer_val[3] = core_ticks_to_us(adapter, G_TIMERVALUE3(r));
+ r = t4_read_reg(adapter, A_SGE_TIMER_VALUE_4_AND_5);
+ sp->timer_val[4] = core_ticks_to_us(adapter, G_TIMERVALUE4(r));
+ sp->timer_val[5] = core_ticks_to_us(adapter, G_TIMERVALUE5(r));
+
+ r = t4_read_reg(adapter, A_SGE_CONM_CTRL);
+ sp->fl_starve_threshold = G_EGRTHRESHOLD(r) * 2 + 1;
+ if (is_t4(adapter))
+ sp->fl_starve_threshold2 = sp->fl_starve_threshold;
+ else
+ sp->fl_starve_threshold2 = G_EGRTHRESHOLDPACKING(r) * 2 + 1;
+
+ /* egress queues: log2 of # of doorbells per BAR2 page */
+ r = t4_read_reg(adapter, A_SGE_EGRESS_QUEUES_PER_PAGE_PF);
+ r >>= S_QUEUESPERPAGEPF0 +
+ (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * adapter->pf;
+ sp->eq_s_qpp = r & M_QUEUESPERPAGEPF0;
+
+ /* ingress queues: log2 of # of doorbells per BAR2 page */
+ r = t4_read_reg(adapter, A_SGE_INGRESS_QUEUES_PER_PAGE_PF);
+ r >>= S_QUEUESPERPAGEPF0 +
+ (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * adapter->pf;
+ sp->iq_s_qpp = r & M_QUEUESPERPAGEPF0;
+
+ r = t4_read_reg(adapter, A_SGE_HOST_PAGE_SIZE);
+ r >>= S_HOSTPAGESIZEPF0 +
+ (S_HOSTPAGESIZEPF1 - S_HOSTPAGESIZEPF0) * adapter->pf;
+ sp->page_shift = (r & M_HOSTPAGESIZEPF0) + 10;
+
+ r = t4_read_reg(adapter, A_SGE_CONTROL);
+ sp->spg_len = r & F_EGRSTATUSPAGESIZE ? 128 : 64;
+ sp->fl_pktshift = G_PKTSHIFT(r);
+ sp->pad_boundary = 1 << (G_INGPADBOUNDARY(r) + 5);
+ if (is_t4(adapter))
+ sp->pack_boundary = sp->pad_boundary;
+ else {
+ r = t4_read_reg(adapter, A_SGE_CONTROL2);
+ if (G_INGPACKBOUNDARY(r) == 0)
+ sp->pack_boundary = 16;
+ else
+ sp->pack_boundary = 1 << (G_INGPACKBOUNDARY(r) + 5);
+ }
+
+ return 0;
+}
+
+/*
+ * Read and cache the adapter's compressed filter mode and ingress config.
+ */
+static void read_filter_mode_and_ingress_config(struct adapter *adap)
+{
+ struct tp_params *tpp = &adap->params.tp;
+
+ if (t4_use_ldst(adap)) {
+ t4_fw_tp_pio_rw(adap, &tpp->vlan_pri_map, 1,
+ A_TP_VLAN_PRI_MAP, 1);
+ t4_fw_tp_pio_rw(adap, &tpp->ingress_config, 1,
+ A_TP_INGRESS_CONFIG, 1);
+ } else {
+ t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &tpp->vlan_pri_map, 1, A_TP_VLAN_PRI_MAP);
+ t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA,
+ &tpp->ingress_config, 1, A_TP_INGRESS_CONFIG);
+ }
+
+ /*
+ * Now that we have TP_VLAN_PRI_MAP cached, we can calculate the field
+ * shift positions of several elements of the Compressed Filter Tuple
+ * for this adapter which we need frequently ...
+ */
+ tpp->fcoe_shift = t4_filter_field_shift(adap, F_FCOE);
+ tpp->port_shift = t4_filter_field_shift(adap, F_PORT);
+ tpp->vnic_shift = t4_filter_field_shift(adap, F_VNIC_ID);
+ tpp->vlan_shift = t4_filter_field_shift(adap, F_VLAN);
+ tpp->tos_shift = t4_filter_field_shift(adap, F_TOS);
+ tpp->protocol_shift = t4_filter_field_shift(adap, F_PROTOCOL);
+ tpp->ethertype_shift = t4_filter_field_shift(adap, F_ETHERTYPE);
+ tpp->macmatch_shift = t4_filter_field_shift(adap, F_MACMATCH);
+ tpp->matchtype_shift = t4_filter_field_shift(adap, F_MPSHITTYPE);
+ tpp->frag_shift = t4_filter_field_shift(adap, F_FRAGMENTATION);
+
+ /*
+ * If TP_INGRESS_CONFIG.VNID == 0, then TP_VLAN_PRI_MAP.VNIC_ID
+ * represents the presense of an Outer VLAN instead of a VNIC ID.
+ */
+ if ((tpp->ingress_config & F_VNIC) == 0)
+ tpp->vnic_shift = -1;
+}
+
+/**
+ * t4_init_tp_params - initialize adap->params.tp
+ * @adap: the adapter
*
- * Initialize various fields of the adapter's TP Parameters structure.
+ * Initialize various fields of the adapter's TP Parameters structure.
*/
-int __devinit t4_init_tp_params(struct adapter *adap)
+int t4_init_tp_params(struct adapter *adap)
{
int chan;
u32 v;
+ struct tp_params *tpp = &adap->params.tp;
v = t4_read_reg(adap, A_TP_TIMER_RESOLUTION);
- adap->params.tp.tre = G_TIMERRESOLUTION(v);
- adap->params.tp.dack_re = G_DELAYEDACKRESOLUTION(v);
+ tpp->tre = G_TIMERRESOLUTION(v);
+ tpp->dack_re = G_DELAYEDACKRESOLUTION(v);
/* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */
for (chan = 0; chan < MAX_NCHAN; chan++)
- adap->params.tp.tx_modq[chan] = chan;
+ tpp->tx_modq[chan] = chan;
- t4_read_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA,
- &adap->params.tp.ingress_config, 1,
- A_TP_INGRESS_CONFIG);
- refresh_vlan_pri_map(adap);
+ read_filter_mode_and_ingress_config(adap);
+
+ /*
+ * For T6, cache the adapter's compressed error vector
+ * and passing outer header info for encapsulated packets.
+ */
+ if (chip_id(adap) > CHELSIO_T5) {
+ v = t4_read_reg(adap, A_TP_OUT_CONFIG);
+ tpp->rx_pkt_encap = (v & F_CRXPKTENC) ? 1 : 0;
+ }
return 0;
}
/**
- * t4_filter_field_shift - calculate filter field shift
- * @adap: the adapter
- * @filter_sel: the desired field (from TP_VLAN_PRI_MAP bits)
+ * t4_filter_field_shift - calculate filter field shift
+ * @adap: the adapter
+ * @filter_sel: the desired field (from TP_VLAN_PRI_MAP bits)
*
- * Return the shift position of a filter field within the Compressed
- * Filter Tuple. The filter field is specified via its selection bit
- * within TP_VLAN_PRI_MAL (filter mode). E.g. F_VLAN.
+ * Return the shift position of a filter field within the Compressed
+ * Filter Tuple. The filter field is specified via its selection bit
+ * within TP_VLAN_PRI_MAL (filter mode). E.g. F_VLAN.
*/
int t4_filter_field_shift(const struct adapter *adap, int filter_sel)
{
@@ -5780,29 +7783,49 @@ int t4_filter_field_shift(const struct adapter *adap, int filter_sel)
return -1;
for (sel = 1, field_shift = 0; sel < filter_sel; sel <<= 1) {
- switch (filter_mode & sel) {
- case F_FCOE: field_shift += W_FT_FCOE; break;
- case F_PORT: field_shift += W_FT_PORT; break;
- case F_VNIC_ID: field_shift += W_FT_VNIC_ID; break;
- case F_VLAN: field_shift += W_FT_VLAN; break;
- case F_TOS: field_shift += W_FT_TOS; break;
- case F_PROTOCOL: field_shift += W_FT_PROTOCOL; break;
- case F_ETHERTYPE: field_shift += W_FT_ETHERTYPE; break;
- case F_MACMATCH: field_shift += W_FT_MACMATCH; break;
- case F_MPSHITTYPE: field_shift += W_FT_MPSHITTYPE; break;
- case F_FRAGMENTATION: field_shift += W_FT_FRAGMENTATION; break;
- }
+ switch (filter_mode & sel) {
+ case F_FCOE:
+ field_shift += W_FT_FCOE;
+ break;
+ case F_PORT:
+ field_shift += W_FT_PORT;
+ break;
+ case F_VNIC_ID:
+ field_shift += W_FT_VNIC_ID;
+ break;
+ case F_VLAN:
+ field_shift += W_FT_VLAN;
+ break;
+ case F_TOS:
+ field_shift += W_FT_TOS;
+ break;
+ case F_PROTOCOL:
+ field_shift += W_FT_PROTOCOL;
+ break;
+ case F_ETHERTYPE:
+ field_shift += W_FT_ETHERTYPE;
+ break;
+ case F_MACMATCH:
+ field_shift += W_FT_MACMATCH;
+ break;
+ case F_MPSHITTYPE:
+ field_shift += W_FT_MPSHITTYPE;
+ break;
+ case F_FRAGMENTATION:
+ field_shift += W_FT_FRAGMENTATION;
+ break;
+ }
}
return field_shift;
}
-int __devinit t4_port_init(struct port_info *p, int mbox, int pf, int vf)
+int t4_port_init(struct adapter *adap, int mbox, int pf, int vf, int port_id)
{
u8 addr[6];
int ret, i, j;
struct fw_port_cmd c;
u16 rss_size;
- adapter_t *adap = p->adapter;
+ struct port_info *p = adap2pinfo(adap, port_id);
u32 param, val;
memset(&c, 0, sizeof(c));
@@ -5829,18 +7852,18 @@ int __devinit t4_port_init(struct port_info *p, int mbox, int pf, int vf)
p->vi[0].viid = ret;
p->tx_chan = j;
- p->rx_chan_map = get_mps_bg_map(adap, j);
+ p->rx_chan_map = t4_get_mps_bg_map(adap, j);
p->lport = j;
p->vi[0].rss_size = rss_size;
t4_os_set_hw_addr(adap, p->port_id, addr);
- ret = ntohl(c.u.info.lstatus_to_modtype);
+ ret = be32_to_cpu(c.u.info.lstatus_to_modtype);
p->mdio_addr = (ret & F_FW_PORT_CMD_MDIOCAP) ?
G_FW_PORT_CMD_MDIOADDR(ret) : -1;
p->port_type = G_FW_PORT_CMD_PTYPE(ret);
p->mod_type = G_FW_PORT_CMD_MODTYPE(ret);
- init_link_config(&p->link_cfg, ntohs(c.u.info.pcap));
+ init_link_config(&p->link_cfg, be16_to_cpu(c.u.info.pcap));
param = V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_RSSINFO) |
@@ -5856,6 +7879,1161 @@ int __devinit t4_port_init(struct port_info *p, int mbox, int pf, int vf)
return 0;
}
+/**
+ * t4_read_cimq_cfg - read CIM queue configuration
+ * @adap: the adapter
+ * @base: holds the queue base addresses in bytes
+ * @size: holds the queue sizes in bytes
+ * @thres: holds the queue full thresholds in bytes
+ *
+ * Returns the current configuration of the CIM queues, starting with
+ * the IBQs, then the OBQs.
+ */
+void t4_read_cimq_cfg(struct adapter *adap, u16 *base, u16 *size, u16 *thres)
+{
+ unsigned int i, v;
+ int cim_num_obq = adap->chip_params->cim_num_obq;
+
+ for (i = 0; i < CIM_NUM_IBQ; i++) {
+ t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_IBQSELECT |
+ V_QUENUMSELECT(i));
+ v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
+ /* value is in 256-byte units */
+ *base++ = G_CIMQBASE(v) * 256;
+ *size++ = G_CIMQSIZE(v) * 256;
+ *thres++ = G_QUEFULLTHRSH(v) * 8; /* 8-byte unit */
+ }
+ for (i = 0; i < cim_num_obq; i++) {
+ t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_OBQSELECT |
+ V_QUENUMSELECT(i));
+ v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
+ /* value is in 256-byte units */
+ *base++ = G_CIMQBASE(v) * 256;
+ *size++ = G_CIMQSIZE(v) * 256;
+ }
+}
+
+/**
+ * t4_read_cim_ibq - read the contents of a CIM inbound queue
+ * @adap: the adapter
+ * @qid: the queue index
+ * @data: where to store the queue contents
+ * @n: capacity of @data in 32-bit words
+ *
+ * Reads the contents of the selected CIM queue starting at address 0 up
+ * to the capacity of @data. @n must be a multiple of 4. Returns < 0 on
+ * error and the number of 32-bit words actually read on success.
+ */
+int t4_read_cim_ibq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
+{
+ int i, err, attempts;
+ unsigned int addr;
+ const unsigned int nwords = CIM_IBQ_SIZE * 4;
+
+ if (qid > 5 || (n & 3))
+ return -EINVAL;
+
+ addr = qid * nwords;
+ if (n > nwords)
+ n = nwords;
+
+ /* It might take 3-10ms before the IBQ debug read access is allowed.
+ * Wait for 1 Sec with a delay of 1 usec.
+ */
+ attempts = 1000000;
+
+ for (i = 0; i < n; i++, addr++) {
+ t4_write_reg(adap, A_CIM_IBQ_DBG_CFG, V_IBQDBGADDR(addr) |
+ F_IBQDBGEN);
+ err = t4_wait_op_done(adap, A_CIM_IBQ_DBG_CFG, F_IBQDBGBUSY, 0,
+ attempts, 1);
+ if (err)
+ return err;
+ *data++ = t4_read_reg(adap, A_CIM_IBQ_DBG_DATA);
+ }
+ t4_write_reg(adap, A_CIM_IBQ_DBG_CFG, 0);
+ return i;
+}
+
+/**
+ * t4_read_cim_obq - read the contents of a CIM outbound queue
+ * @adap: the adapter
+ * @qid: the queue index
+ * @data: where to store the queue contents
+ * @n: capacity of @data in 32-bit words
+ *
+ * Reads the contents of the selected CIM queue starting at address 0 up
+ * to the capacity of @data. @n must be a multiple of 4. Returns < 0 on
+ * error and the number of 32-bit words actually read on success.
+ */
+int t4_read_cim_obq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
+{
+ int i, err;
+ unsigned int addr, v, nwords;
+ int cim_num_obq = adap->chip_params->cim_num_obq;
+
+ if ((qid > (cim_num_obq - 1)) || (n & 3))
+ return -EINVAL;
+
+ t4_write_reg(adap, A_CIM_QUEUE_CONFIG_REF, F_OBQSELECT |
+ V_QUENUMSELECT(qid));
+ v = t4_read_reg(adap, A_CIM_QUEUE_CONFIG_CTRL);
+
+ addr = G_CIMQBASE(v) * 64; /* muliple of 256 -> muliple of 4 */
+ nwords = G_CIMQSIZE(v) * 64; /* same */
+ if (n > nwords)
+ n = nwords;
+
+ for (i = 0; i < n; i++, addr++) {
+ t4_write_reg(adap, A_CIM_OBQ_DBG_CFG, V_OBQDBGADDR(addr) |
+ F_OBQDBGEN);
+ err = t4_wait_op_done(adap, A_CIM_OBQ_DBG_CFG, F_OBQDBGBUSY, 0,
+ 2, 1);
+ if (err)
+ return err;
+ *data++ = t4_read_reg(adap, A_CIM_OBQ_DBG_DATA);
+ }
+ t4_write_reg(adap, A_CIM_OBQ_DBG_CFG, 0);
+ return i;
+}
+
+enum {
+ CIM_QCTL_BASE = 0,
+ CIM_CTL_BASE = 0x2000,
+ CIM_PBT_ADDR_BASE = 0x2800,
+ CIM_PBT_LRF_BASE = 0x3000,
+ CIM_PBT_DATA_BASE = 0x3800
+};
+
+/**
+ * t4_cim_read - read a block from CIM internal address space
+ * @adap: the adapter
+ * @addr: the start address within the CIM address space
+ * @n: number of words to read
+ * @valp: where to store the result
+ *
+ * Reads a block of 4-byte words from the CIM intenal address space.
+ */
+int t4_cim_read(struct adapter *adap, unsigned int addr, unsigned int n,
+ unsigned int *valp)
+{
+ int ret = 0;
+
+ if (t4_read_reg(adap, A_CIM_HOST_ACC_CTRL) & F_HOSTBUSY)
+ return -EBUSY;
+
+ for ( ; !ret && n--; addr += 4) {
+ t4_write_reg(adap, A_CIM_HOST_ACC_CTRL, addr);
+ ret = t4_wait_op_done(adap, A_CIM_HOST_ACC_CTRL, F_HOSTBUSY,
+ 0, 5, 2);
+ if (!ret)
+ *valp++ = t4_read_reg(adap, A_CIM_HOST_ACC_DATA);
+ }
+ return ret;
+}
+
+/**
+ * t4_cim_write - write a block into CIM internal address space
+ * @adap: the adapter
+ * @addr: the start address within the CIM address space
+ * @n: number of words to write
+ * @valp: set of values to write
+ *
+ * Writes a block of 4-byte words into the CIM intenal address space.
+ */
+int t4_cim_write(struct adapter *adap, unsigned int addr, unsigned int n,
+ const unsigned int *valp)
+{
+ int ret = 0;
+
+ if (t4_read_reg(adap, A_CIM_HOST_ACC_CTRL) & F_HOSTBUSY)
+ return -EBUSY;
+
+ for ( ; !ret && n--; addr += 4) {
+ t4_write_reg(adap, A_CIM_HOST_ACC_DATA, *valp++);
+ t4_write_reg(adap, A_CIM_HOST_ACC_CTRL, addr | F_HOSTWRITE);
+ ret = t4_wait_op_done(adap, A_CIM_HOST_ACC_CTRL, F_HOSTBUSY,
+ 0, 5, 2);
+ }
+ return ret;
+}
+
+static int t4_cim_write1(struct adapter *adap, unsigned int addr,
+ unsigned int val)
+{
+ return t4_cim_write(adap, addr, 1, &val);
+}
+
+/**
+ * t4_cim_ctl_read - read a block from CIM control region
+ * @adap: the adapter
+ * @addr: the start address within the CIM control region
+ * @n: number of words to read
+ * @valp: where to store the result
+ *
+ * Reads a block of 4-byte words from the CIM control region.
+ */
+int t4_cim_ctl_read(struct adapter *adap, unsigned int addr, unsigned int n,
+ unsigned int *valp)
+{
+ return t4_cim_read(adap, addr + CIM_CTL_BASE, n, valp);
+}
+
+/**
+ * t4_cim_read_la - read CIM LA capture buffer
+ * @adap: the adapter
+ * @la_buf: where to store the LA data
+ * @wrptr: the HW write pointer within the capture buffer
+ *
+ * Reads the contents of the CIM LA buffer with the most recent entry at
+ * the end of the returned data and with the entry at @wrptr first.
+ * We try to leave the LA in the running state we find it in.
+ */
+int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr)
+{
+ int i, ret;
+ unsigned int cfg, val, idx;
+
+ ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &cfg);
+ if (ret)
+ return ret;
+
+ if (cfg & F_UPDBGLAEN) { /* LA is running, freeze it */
+ ret = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG, 0);
+ if (ret)
+ return ret;
+ }
+
+ ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &val);
+ if (ret)
+ goto restart;
+
+ idx = G_UPDBGLAWRPTR(val);
+ if (wrptr)
+ *wrptr = idx;
+
+ for (i = 0; i < adap->params.cim_la_size; i++) {
+ ret = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG,
+ V_UPDBGLARDPTR(idx) | F_UPDBGLARDEN);
+ if (ret)
+ break;
+ ret = t4_cim_read(adap, A_UP_UP_DBG_LA_CFG, 1, &val);
+ if (ret)
+ break;
+ if (val & F_UPDBGLARDEN) {
+ ret = -ETIMEDOUT;
+ break;
+ }
+ ret = t4_cim_read(adap, A_UP_UP_DBG_LA_DATA, 1, &la_buf[i]);
+ if (ret)
+ break;
+
+ /* address can't exceed 0xfff (UpDbgLaRdPtr is of 12-bits) */
+ idx = (idx + 1) & M_UPDBGLARDPTR;
+ /*
+ * Bits 0-3 of UpDbgLaRdPtr can be between 0000 to 1001 to
+ * identify the 32-bit portion of the full 312-bit data
+ */
+ if (is_t6(adap))
+ while ((idx & 0xf) > 9)
+ idx = (idx + 1) % M_UPDBGLARDPTR;
+ }
+restart:
+ if (cfg & F_UPDBGLAEN) {
+ int r = t4_cim_write1(adap, A_UP_UP_DBG_LA_CFG,
+ cfg & ~F_UPDBGLARDEN);
+ if (!ret)
+ ret = r;
+ }
+ return ret;
+}
+
+/**
+ * t4_tp_read_la - read TP LA capture buffer
+ * @adap: the adapter
+ * @la_buf: where to store the LA data
+ * @wrptr: the HW write pointer within the capture buffer
+ *
+ * Reads the contents of the TP LA buffer with the most recent entry at
+ * the end of the returned data and with the entry at @wrptr first.
+ * We leave the LA in the running state we find it in.
+ */
+void t4_tp_read_la(struct adapter *adap, u64 *la_buf, unsigned int *wrptr)
+{
+ bool last_incomplete;
+ unsigned int i, cfg, val, idx;
+
+ cfg = t4_read_reg(adap, A_TP_DBG_LA_CONFIG) & 0xffff;
+ if (cfg & F_DBGLAENABLE) /* freeze LA */
+ t4_write_reg(adap, A_TP_DBG_LA_CONFIG,
+ adap->params.tp.la_mask | (cfg ^ F_DBGLAENABLE));
+
+ val = t4_read_reg(adap, A_TP_DBG_LA_CONFIG);
+ idx = G_DBGLAWPTR(val);
+ last_incomplete = G_DBGLAMODE(val) >= 2 && (val & F_DBGLAWHLF) == 0;
+ if (last_incomplete)
+ idx = (idx + 1) & M_DBGLARPTR;
+ if (wrptr)
+ *wrptr = idx;
+
+ val &= 0xffff;
+ val &= ~V_DBGLARPTR(M_DBGLARPTR);
+ val |= adap->params.tp.la_mask;
+
+ for (i = 0; i < TPLA_SIZE; i++) {
+ t4_write_reg(adap, A_TP_DBG_LA_CONFIG, V_DBGLARPTR(idx) | val);
+ la_buf[i] = t4_read_reg64(adap, A_TP_DBG_LA_DATAL);
+ idx = (idx + 1) & M_DBGLARPTR;
+ }
+
+ /* Wipe out last entry if it isn't valid */
+ if (last_incomplete)
+ la_buf[TPLA_SIZE - 1] = ~0ULL;
+
+ if (cfg & F_DBGLAENABLE) /* restore running state */
+ t4_write_reg(adap, A_TP_DBG_LA_CONFIG,
+ cfg | adap->params.tp.la_mask);
+}
+
+/*
+ * SGE Hung Ingress DMA Warning Threshold time and Warning Repeat Rate (in
+ * seconds). If we find one of the SGE Ingress DMA State Machines in the same
+ * state for more than the Warning Threshold then we'll issue a warning about
+ * a potential hang. We'll repeat the warning as the SGE Ingress DMA Channel
+ * appears to be hung every Warning Repeat second till the situation clears.
+ * If the situation clears, we'll note that as well.
+ */
+#define SGE_IDMA_WARN_THRESH 1
+#define SGE_IDMA_WARN_REPEAT 300
+
+/**
+ * t4_idma_monitor_init - initialize SGE Ingress DMA Monitor
+ * @adapter: the adapter
+ * @idma: the adapter IDMA Monitor state
+ *
+ * Initialize the state of an SGE Ingress DMA Monitor.
+ */
+void t4_idma_monitor_init(struct adapter *adapter,
+ struct sge_idma_monitor_state *idma)
+{
+ /* Initialize the state variables for detecting an SGE Ingress DMA
+ * hang. The SGE has internal counters which count up on each clock
+ * tick whenever the SGE finds its Ingress DMA State Engines in the
+ * same state they were on the previous clock tick. The clock used is
+ * the Core Clock so we have a limit on the maximum "time" they can
+ * record; typically a very small number of seconds. For instance,
+ * with a 600MHz Core Clock, we can only count up to a bit more than
+ * 7s. So we'll synthesize a larger counter in order to not run the
+ * risk of having the "timers" overflow and give us the flexibility to
+ * maintain a Hung SGE State Machine of our own which operates across
+ * a longer time frame.
+ */
+ idma->idma_1s_thresh = core_ticks_per_usec(adapter) * 1000000; /* 1s */
+ idma->idma_stalled[0] = idma->idma_stalled[1] = 0;
+}
+
+/**
+ * t4_idma_monitor - monitor SGE Ingress DMA state
+ * @adapter: the adapter
+ * @idma: the adapter IDMA Monitor state
+ * @hz: number of ticks/second
+ * @ticks: number of ticks since the last IDMA Monitor call
+ */
+void t4_idma_monitor(struct adapter *adapter,
+ struct sge_idma_monitor_state *idma,
+ int hz, int ticks)
+{
+ int i, idma_same_state_cnt[2];
+
+ /* Read the SGE Debug Ingress DMA Same State Count registers. These
+ * are counters inside the SGE which count up on each clock when the
+ * SGE finds its Ingress DMA State Engines in the same states they
+ * were in the previous clock. The counters will peg out at
+ * 0xffffffff without wrapping around so once they pass the 1s
+ * threshold they'll stay above that till the IDMA state changes.
+ */
+ t4_write_reg(adapter, A_SGE_DEBUG_INDEX, 13);
+ idma_same_state_cnt[0] = t4_read_reg(adapter, A_SGE_DEBUG_DATA_HIGH);
+ idma_same_state_cnt[1] = t4_read_reg(adapter, A_SGE_DEBUG_DATA_LOW);
+
+ for (i = 0; i < 2; i++) {
+ u32 debug0, debug11;
+
+ /* If the Ingress DMA Same State Counter ("timer") is less
+ * than 1s, then we can reset our synthesized Stall Timer and
+ * continue. If we have previously emitted warnings about a
+ * potential stalled Ingress Queue, issue a note indicating
+ * that the Ingress Queue has resumed forward progress.
+ */
+ if (idma_same_state_cnt[i] < idma->idma_1s_thresh) {
+ if (idma->idma_stalled[i] >= SGE_IDMA_WARN_THRESH*hz)
+ CH_WARN(adapter, "SGE idma%d, queue %u, "
+ "resumed after %d seconds\n",
+ i, idma->idma_qid[i],
+ idma->idma_stalled[i]/hz);
+ idma->idma_stalled[i] = 0;
+ continue;
+ }
+
+ /* Synthesize an SGE Ingress DMA Same State Timer in the Hz
+ * domain. The first time we get here it'll be because we
+ * passed the 1s Threshold; each additional time it'll be
+ * because the RX Timer Callback is being fired on its regular
+ * schedule.
+ *
+ * If the stall is below our Potential Hung Ingress Queue
+ * Warning Threshold, continue.
+ */
+ if (idma->idma_stalled[i] == 0) {
+ idma->idma_stalled[i] = hz;
+ idma->idma_warn[i] = 0;
+ } else {
+ idma->idma_stalled[i] += ticks;
+ idma->idma_warn[i] -= ticks;
+ }
+
+ if (idma->idma_stalled[i] < SGE_IDMA_WARN_THRESH*hz)
+ continue;
+
+ /* We'll issue a warning every SGE_IDMA_WARN_REPEAT seconds.
+ */
+ if (idma->idma_warn[i] > 0)
+ continue;
+ idma->idma_warn[i] = SGE_IDMA_WARN_REPEAT*hz;
+
+ /* Read and save the SGE IDMA State and Queue ID information.
+ * We do this every time in case it changes across time ...
+ * can't be too careful ...
+ */
+ t4_write_reg(adapter, A_SGE_DEBUG_INDEX, 0);
+ debug0 = t4_read_reg(adapter, A_SGE_DEBUG_DATA_LOW);
+ idma->idma_state[i] = (debug0 >> (i * 9)) & 0x3f;
+
+ t4_write_reg(adapter, A_SGE_DEBUG_INDEX, 11);
+ debug11 = t4_read_reg(adapter, A_SGE_DEBUG_DATA_LOW);
+ idma->idma_qid[i] = (debug11 >> (i * 16)) & 0xffff;
+
+ CH_WARN(adapter, "SGE idma%u, queue %u, potentially stuck in "
+ " state %u for %d seconds (debug0=%#x, debug11=%#x)\n",
+ i, idma->idma_qid[i], idma->idma_state[i],
+ idma->idma_stalled[i]/hz,
+ debug0, debug11);
+ t4_sge_decode_idma_state(adapter, idma->idma_state[i]);
+ }
+}
+
+/**
+ * t4_read_pace_tbl - read the pace table
+ * @adap: the adapter
+ * @pace_vals: holds the returned values
+ *
+ * Returns the values of TP's pace table in microseconds.
+ */
+void t4_read_pace_tbl(struct adapter *adap, unsigned int pace_vals[NTX_SCHED])
+{
+ unsigned int i, v;
+
+ for (i = 0; i < NTX_SCHED; i++) {
+ t4_write_reg(adap, A_TP_PACE_TABLE, 0xffff0000 + i);
+ v = t4_read_reg(adap, A_TP_PACE_TABLE);
+ pace_vals[i] = dack_ticks_to_usec(adap, v);
+ }
+}
+
+/**
+ * t4_get_tx_sched - get the configuration of a Tx HW traffic scheduler
+ * @adap: the adapter
+ * @sched: the scheduler index
+ * @kbps: the byte rate in Kbps
+ * @ipg: the interpacket delay in tenths of nanoseconds
+ *
+ * Return the current configuration of a HW Tx scheduler.
+ */
+void t4_get_tx_sched(struct adapter *adap, unsigned int sched, unsigned int *kbps,
+ unsigned int *ipg)
+{
+ unsigned int v, addr, bpt, cpt;
+
+ if (kbps) {
+ addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
+ t4_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
+ v = t4_read_reg(adap, A_TP_TM_PIO_DATA);
+ if (sched & 1)
+ v >>= 16;
+ bpt = (v >> 8) & 0xff;
+ cpt = v & 0xff;
+ if (!cpt)
+ *kbps = 0; /* scheduler disabled */
+ else {
+ v = (adap->params.vpd.cclk * 1000) / cpt; /* ticks/s */
+ *kbps = (v * bpt) / 125;
+ }
+ }
+ if (ipg) {
+ addr = A_TP_TX_MOD_Q1_Q0_TIMER_SEPARATOR - sched / 2;
+ t4_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
+ v = t4_read_reg(adap, A_TP_TM_PIO_DATA);
+ if (sched & 1)
+ v >>= 16;
+ v &= 0xffff;
+ *ipg = (10000 * v) / core_ticks_per_usec(adap);
+ }
+}
+
+/**
+ * t4_load_cfg - download config file
+ * @adap: the adapter
+ * @cfg_data: the cfg text file to write
+ * @size: text file size
+ *
+ * Write the supplied config text file to the card's serial flash.
+ */
+int t4_load_cfg(struct adapter *adap, const u8 *cfg_data, unsigned int size)
+{
+ int ret, i, n, cfg_addr;
+ unsigned int addr;
+ unsigned int flash_cfg_start_sec;
+ unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
+
+ cfg_addr = t4_flash_cfg_addr(adap);
+ if (cfg_addr < 0)
+ return cfg_addr;
+
+ addr = cfg_addr;
+ flash_cfg_start_sec = addr / SF_SEC_SIZE;
+
+ if (size > FLASH_CFG_MAX_SIZE) {
+ CH_ERR(adap, "cfg file too large, max is %u bytes\n",
+ FLASH_CFG_MAX_SIZE);
+ return -EFBIG;
+ }
+
+ i = DIV_ROUND_UP(FLASH_CFG_MAX_SIZE, /* # of sectors spanned */
+ sf_sec_size);
+ ret = t4_flash_erase_sectors(adap, flash_cfg_start_sec,
+ flash_cfg_start_sec + i - 1);
+ /*
+ * If size == 0 then we're simply erasing the FLASH sectors associated
+ * with the on-adapter Firmware Configuration File.
+ */
+ if (ret || size == 0)
+ goto out;
+
+ /* this will write to the flash up to SF_PAGE_SIZE at a time */
+ for (i = 0; i< size; i+= SF_PAGE_SIZE) {
+ if ( (size - i) < SF_PAGE_SIZE)
+ n = size - i;
+ else
+ n = SF_PAGE_SIZE;
+ ret = t4_write_flash(adap, addr, n, cfg_data, 1);
+ if (ret)
+ goto out;
+
+ addr += SF_PAGE_SIZE;
+ cfg_data += SF_PAGE_SIZE;
+ }
+
+out:
+ if (ret)
+ CH_ERR(adap, "config file %s failed %d\n",
+ (size == 0 ? "clear" : "download"), ret);
+ return ret;
+}
+
+/**
+ * t5_fw_init_extern_mem - initialize the external memory
+ * @adap: the adapter
+ *
+ * Initializes the external memory on T5.
+ */
+int t5_fw_init_extern_mem(struct adapter *adap)
+{
+ u32 params[1], val[1];
+ int ret;
+
+ if (!is_t5(adap))
+ return 0;
+
+ val[0] = 0xff; /* Initialize all MCs */
+ params[0] = (V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
+ V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_MCINIT));
+ ret = t4_set_params_timeout(adap, adap->mbox, adap->pf, 0, 1, params, val,
+ FW_CMD_MAX_TIMEOUT);
+
+ return ret;
+}
+
+/* BIOS boot headers */
+typedef struct pci_expansion_rom_header {
+ u8 signature[2]; /* ROM Signature. Should be 0xaa55 */
+ u8 reserved[22]; /* Reserved per processor Architecture data */
+ u8 pcir_offset[2]; /* Offset to PCI Data Structure */
+} pci_exp_rom_header_t; /* PCI_EXPANSION_ROM_HEADER */
+
+/* Legacy PCI Expansion ROM Header */
+typedef struct legacy_pci_expansion_rom_header {
+ u8 signature[2]; /* ROM Signature. Should be 0xaa55 */
+ u8 size512; /* Current Image Size in units of 512 bytes */
+ u8 initentry_point[4];
+ u8 cksum; /* Checksum computed on the entire Image */
+ u8 reserved[16]; /* Reserved */
+ u8 pcir_offset[2]; /* Offset to PCI Data Struture */
+} legacy_pci_exp_rom_header_t; /* LEGACY_PCI_EXPANSION_ROM_HEADER */
+
+/* EFI PCI Expansion ROM Header */
+typedef struct efi_pci_expansion_rom_header {
+ u8 signature[2]; // ROM signature. The value 0xaa55
+ u8 initialization_size[2]; /* Units 512. Includes this header */
+ u8 efi_signature[4]; /* Signature from EFI image header. 0x0EF1 */
+ u8 efi_subsystem[2]; /* Subsystem value for EFI image header */
+ u8 efi_machine_type[2]; /* Machine type from EFI image header */
+ u8 compression_type[2]; /* Compression type. */
+ /*
+ * Compression type definition
+ * 0x0: uncompressed
+ * 0x1: Compressed
+ * 0x2-0xFFFF: Reserved
+ */
+ u8 reserved[8]; /* Reserved */
+ u8 efi_image_header_offset[2]; /* Offset to EFI Image */
+ u8 pcir_offset[2]; /* Offset to PCI Data Structure */
+} efi_pci_exp_rom_header_t; /* EFI PCI Expansion ROM Header */
+
+/* PCI Data Structure Format */
+typedef struct pcir_data_structure { /* PCI Data Structure */
+ u8 signature[4]; /* Signature. The string "PCIR" */
+ u8 vendor_id[2]; /* Vendor Identification */
+ u8 device_id[2]; /* Device Identification */
+ u8 vital_product[2]; /* Pointer to Vital Product Data */
+ u8 length[2]; /* PCIR Data Structure Length */
+ u8 revision; /* PCIR Data Structure Revision */
+ u8 class_code[3]; /* Class Code */
+ u8 image_length[2]; /* Image Length. Multiple of 512B */
+ u8 code_revision[2]; /* Revision Level of Code/Data */
+ u8 code_type; /* Code Type. */
+ /*
+ * PCI Expansion ROM Code Types
+ * 0x00: Intel IA-32, PC-AT compatible. Legacy
+ * 0x01: Open Firmware standard for PCI. FCODE
+ * 0x02: Hewlett-Packard PA RISC. HP reserved
+ * 0x03: EFI Image. EFI
+ * 0x04-0xFF: Reserved.
+ */
+ u8 indicator; /* Indicator. Identifies the last image in the ROM */
+ u8 reserved[2]; /* Reserved */
+} pcir_data_t; /* PCI__DATA_STRUCTURE */
+
+/* BOOT constants */
+enum {
+ BOOT_FLASH_BOOT_ADDR = 0x0,/* start address of boot image in flash */
+ BOOT_SIGNATURE = 0xaa55, /* signature of BIOS boot ROM */
+ BOOT_SIZE_INC = 512, /* image size measured in 512B chunks */
+ BOOT_MIN_SIZE = sizeof(pci_exp_rom_header_t), /* basic header */
+ BOOT_MAX_SIZE = 1024*BOOT_SIZE_INC, /* 1 byte * length increment */
+ VENDOR_ID = 0x1425, /* Vendor ID */
+ PCIR_SIGNATURE = 0x52494350 /* PCIR signature */
+};
+
+/*
+ * modify_device_id - Modifies the device ID of the Boot BIOS image
+ * @adatper: the device ID to write.
+ * @boot_data: the boot image to modify.
+ *
+ * Write the supplied device ID to the boot BIOS image.
+ */
+static void modify_device_id(int device_id, u8 *boot_data)
+{
+ legacy_pci_exp_rom_header_t *header;
+ pcir_data_t *pcir_header;
+ u32 cur_header = 0;
+
+ /*
+ * Loop through all chained images and change the device ID's
+ */
+ while (1) {
+ header = (legacy_pci_exp_rom_header_t *) &boot_data[cur_header];
+ pcir_header = (pcir_data_t *) &boot_data[cur_header +
+ le16_to_cpu(*(u16*)header->pcir_offset)];
+
+ /*
+ * Only modify the Device ID if code type is Legacy or HP.
+ * 0x00: Okay to modify
+ * 0x01: FCODE. Do not be modify
+ * 0x03: Okay to modify
+ * 0x04-0xFF: Do not modify
+ */
+ if (pcir_header->code_type == 0x00) {
+ u8 csum = 0;
+ int i;
+
+ /*
+ * Modify Device ID to match current adatper
+ */
+ *(u16*) pcir_header->device_id = device_id;
+
+ /*
+ * Set checksum temporarily to 0.
+ * We will recalculate it later.
+ */
+ header->cksum = 0x0;
+
+ /*
+ * Calculate and update checksum
+ */
+ for (i = 0; i < (header->size512 * 512); i++)
+ csum += (u8)boot_data[cur_header + i];
+
+ /*
+ * Invert summed value to create the checksum
+ * Writing new checksum value directly to the boot data
+ */
+ boot_data[cur_header + 7] = -csum;
+
+ } else if (pcir_header->code_type == 0x03) {
+
+ /*
+ * Modify Device ID to match current adatper
+ */
+ *(u16*) pcir_header->device_id = device_id;
+
+ }
+
+
+ /*
+ * Check indicator element to identify if this is the last
+ * image in the ROM.
+ */
+ if (pcir_header->indicator & 0x80)
+ break;
+
+ /*
+ * Move header pointer up to the next image in the ROM.
+ */
+ cur_header += header->size512 * 512;
+ }
+}
+
+/*
+ * t4_load_boot - download boot flash
+ * @adapter: the adapter
+ * @boot_data: the boot image to write
+ * @boot_addr: offset in flash to write boot_data
+ * @size: image size
+ *
+ * Write the supplied boot image to the card's serial flash.
+ * The boot image has the following sections: a 28-byte header and the
+ * boot image.
+ */
+int t4_load_boot(struct adapter *adap, u8 *boot_data,
+ unsigned int boot_addr, unsigned int size)
+{
+ pci_exp_rom_header_t *header;
+ int pcir_offset ;
+ pcir_data_t *pcir_header;
+ int ret, addr;
+ uint16_t device_id;
+ unsigned int i;
+ unsigned int boot_sector = (boot_addr * 1024 );
+ unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
+
+ /*
+ * Make sure the boot image does not encroach on the firmware region
+ */
+ if ((boot_sector + size) >> 16 > FLASH_FW_START_SEC) {
+ CH_ERR(adap, "boot image encroaching on firmware region\n");
+ return -EFBIG;
+ }
+
+ /*
+ * The boot sector is comprised of the Expansion-ROM boot, iSCSI boot,
+ * and Boot configuration data sections. These 3 boot sections span
+ * sectors 0 to 7 in flash and live right before the FW image location.
+ */
+ i = DIV_ROUND_UP(size ? size : FLASH_FW_START,
+ sf_sec_size);
+ ret = t4_flash_erase_sectors(adap, boot_sector >> 16,
+ (boot_sector >> 16) + i - 1);
+
+ /*
+ * If size == 0 then we're simply erasing the FLASH sectors associated
+ * with the on-adapter option ROM file
+ */
+ if (ret || (size == 0))
+ goto out;
+
+ /* Get boot header */
+ header = (pci_exp_rom_header_t *)boot_data;
+ pcir_offset = le16_to_cpu(*(u16 *)header->pcir_offset);
+ /* PCIR Data Structure */
+ pcir_header = (pcir_data_t *) &boot_data[pcir_offset];
+
+ /*
+ * Perform some primitive sanity testing to avoid accidentally
+ * writing garbage over the boot sectors. We ought to check for
+ * more but it's not worth it for now ...
+ */
+ if (size < BOOT_MIN_SIZE || size > BOOT_MAX_SIZE) {
+ CH_ERR(adap, "boot image too small/large\n");
+ return -EFBIG;
+ }
+
+#ifndef CHELSIO_T4_DIAGS
+ /*
+ * Check BOOT ROM header signature
+ */
+ if (le16_to_cpu(*(u16*)header->signature) != BOOT_SIGNATURE ) {
+ CH_ERR(adap, "Boot image missing signature\n");
+ return -EINVAL;
+ }
+
+ /*
+ * Check PCI header signature
+ */
+ if (le32_to_cpu(*(u32*)pcir_header->signature) != PCIR_SIGNATURE) {
+ CH_ERR(adap, "PCI header missing signature\n");
+ return -EINVAL;
+ }
+
+ /*
+ * Check Vendor ID matches Chelsio ID
+ */
+ if (le16_to_cpu(*(u16*)pcir_header->vendor_id) != VENDOR_ID) {
+ CH_ERR(adap, "Vendor ID missing signature\n");
+ return -EINVAL;
+ }
+#endif
+
+ /*
+ * Retrieve adapter's device ID
+ */
+ t4_os_pci_read_cfg2(adap, PCI_DEVICE_ID, &device_id);
+ /* Want to deal with PF 0 so I strip off PF 4 indicator */
+ device_id = device_id & 0xf0ff;
+
+ /*
+ * Check PCIE Device ID
+ */
+ if (le16_to_cpu(*(u16*)pcir_header->device_id) != device_id) {
+ /*
+ * Change the device ID in the Boot BIOS image to match
+ * the Device ID of the current adapter.
+ */
+ modify_device_id(device_id, boot_data);
+ }
+
+ /*
+ * Skip over the first SF_PAGE_SIZE worth of data and write it after
+ * we finish copying the rest of the boot image. This will ensure
+ * that the BIOS boot header will only be written if the boot image
+ * was written in full.
+ */
+ addr = boot_sector;
+ for (size -= SF_PAGE_SIZE; size; size -= SF_PAGE_SIZE) {
+ addr += SF_PAGE_SIZE;
+ boot_data += SF_PAGE_SIZE;
+ ret = t4_write_flash(adap, addr, SF_PAGE_SIZE, boot_data, 0);
+ if (ret)
+ goto out;
+ }
+
+ ret = t4_write_flash(adap, boot_sector, SF_PAGE_SIZE,
+ (const u8 *)header, 0);
+
+out:
+ if (ret)
+ CH_ERR(adap, "boot image download failed, error %d\n", ret);
+ return ret;
+}
+
+/*
+ * t4_flash_bootcfg_addr - return the address of the flash optionrom configuration
+ * @adapter: the adapter
+ *
+ * Return the address within the flash where the OptionROM Configuration
+ * is stored, or an error if the device FLASH is too small to contain
+ * a OptionROM Configuration.
+ */
+static int t4_flash_bootcfg_addr(struct adapter *adapter)
+{
+ /*
+ * If the device FLASH isn't large enough to hold a Firmware
+ * Configuration File, return an error.
+ */
+ if (adapter->params.sf_size < FLASH_BOOTCFG_START + FLASH_BOOTCFG_MAX_SIZE)
+ return -ENOSPC;
+
+ return FLASH_BOOTCFG_START;
+}
+
+int t4_load_bootcfg(struct adapter *adap,const u8 *cfg_data, unsigned int size)
+{
+ int ret, i, n, cfg_addr;
+ unsigned int addr;
+ unsigned int flash_cfg_start_sec;
+ unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
+
+ cfg_addr = t4_flash_bootcfg_addr(adap);
+ if (cfg_addr < 0)
+ return cfg_addr;
+
+ addr = cfg_addr;
+ flash_cfg_start_sec = addr / SF_SEC_SIZE;
+
+ if (size > FLASH_BOOTCFG_MAX_SIZE) {
+ CH_ERR(adap, "bootcfg file too large, max is %u bytes\n",
+ FLASH_BOOTCFG_MAX_SIZE);
+ return -EFBIG;
+ }
+
+ i = DIV_ROUND_UP(FLASH_BOOTCFG_MAX_SIZE,/* # of sectors spanned */
+ sf_sec_size);
+ ret = t4_flash_erase_sectors(adap, flash_cfg_start_sec,
+ flash_cfg_start_sec + i - 1);
+
+ /*
+ * If size == 0 then we're simply erasing the FLASH sectors associated
+ * with the on-adapter OptionROM Configuration File.
+ */
+ if (ret || size == 0)
+ goto out;
+
+ /* this will write to the flash up to SF_PAGE_SIZE at a time */
+ for (i = 0; i< size; i+= SF_PAGE_SIZE) {
+ if ( (size - i) < SF_PAGE_SIZE)
+ n = size - i;
+ else
+ n = SF_PAGE_SIZE;
+ ret = t4_write_flash(adap, addr, n, cfg_data, 0);
+ if (ret)
+ goto out;
+
+ addr += SF_PAGE_SIZE;
+ cfg_data += SF_PAGE_SIZE;
+ }
+
+out:
+ if (ret)
+ CH_ERR(adap, "boot config data %s failed %d\n",
+ (size == 0 ? "clear" : "download"), ret);
+ return ret;
+}
+
+/**
+ * t4_set_filter_mode - configure the optional components of filter tuples
+ * @adap: the adapter
+ * @mode_map: a bitmap selcting which optional filter components to enable
+ *
+ * Sets the filter mode by selecting the optional components to enable
+ * in filter tuples. Returns 0 on success and a negative error if the
+ * requested mode needs more bits than are available for optional
+ * components.
+ */
+int t4_set_filter_mode(struct adapter *adap, unsigned int mode_map)
+{
+ static u8 width[] = { 1, 3, 17, 17, 8, 8, 16, 9, 3, 1 };
+
+ int i, nbits = 0;
+
+ for (i = S_FCOE; i <= S_FRAGMENTATION; i++)
+ if (mode_map & (1 << i))
+ nbits += width[i];
+ if (nbits > FILTER_OPT_LEN)
+ return -EINVAL;
+ if (t4_use_ldst(adap))
+ t4_fw_tp_pio_rw(adap, &mode_map, 1, A_TP_VLAN_PRI_MAP, 0);
+ else
+ t4_write_indirect(adap, A_TP_PIO_ADDR, A_TP_PIO_DATA, &mode_map,
+ 1, A_TP_VLAN_PRI_MAP);
+ read_filter_mode_and_ingress_config(adap);
+
+ return 0;
+}
+
+/**
+ * t4_clr_port_stats - clear port statistics
+ * @adap: the adapter
+ * @idx: the port index
+ *
+ * Clear HW statistics for the given port.
+ */
+void t4_clr_port_stats(struct adapter *adap, int idx)
+{
+ unsigned int i;
+ u32 bgmap = t4_get_mps_bg_map(adap, idx);
+ u32 port_base_addr;
+
+ if (is_t4(adap))
+ port_base_addr = PORT_BASE(idx);
+ else
+ port_base_addr = T5_PORT_BASE(idx);
+
+ for (i = A_MPS_PORT_STAT_TX_PORT_BYTES_L;
+ i <= A_MPS_PORT_STAT_TX_PORT_PPP7_H; i += 8)
+ t4_write_reg(adap, port_base_addr + i, 0);
+ for (i = A_MPS_PORT_STAT_RX_PORT_BYTES_L;
+ i <= A_MPS_PORT_STAT_RX_PORT_LESS_64B_H; i += 8)
+ t4_write_reg(adap, port_base_addr + i, 0);
+ for (i = 0; i < 4; i++)
+ if (bgmap & (1 << i)) {
+ t4_write_reg(adap,
+ A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L + i * 8, 0);
+ t4_write_reg(adap,
+ A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L + i * 8, 0);
+ }
+}
+
+/**
+ * t4_i2c_rd - read I2C data from adapter
+ * @adap: the adapter
+ * @port: Port number if per-port device; <0 if not
+ * @devid: per-port device ID or absolute device ID
+ * @offset: byte offset into device I2C space
+ * @len: byte length of I2C space data
+ * @buf: buffer in which to return I2C data
+ *
+ * Reads the I2C data from the indicated device and location.
+ */
+int t4_i2c_rd(struct adapter *adap, unsigned int mbox,
+ int port, unsigned int devid,
+ unsigned int offset, unsigned int len,
+ u8 *buf)
+{
+ u32 ldst_addrspace;
+ struct fw_ldst_cmd ldst;
+ int ret;
+
+ if (port >= 4 ||
+ devid >= 256 ||
+ offset >= 256 ||
+ len > sizeof ldst.u.i2c.data)
+ return -EINVAL;
+
+ memset(&ldst, 0, sizeof ldst);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_I2C);
+ ldst.op_to_addrspace =
+ cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_READ |
+ ldst_addrspace);
+ ldst.cycles_to_len16 = cpu_to_be32(FW_LEN16(ldst));
+ ldst.u.i2c.pid = (port < 0 ? 0xff : port);
+ ldst.u.i2c.did = devid;
+ ldst.u.i2c.boffset = offset;
+ ldst.u.i2c.blen = len;
+ ret = t4_wr_mbox(adap, mbox, &ldst, sizeof ldst, &ldst);
+ if (!ret)
+ memcpy(buf, ldst.u.i2c.data, len);
+ return ret;
+}
+
+/**
+ * t4_i2c_wr - write I2C data to adapter
+ * @adap: the adapter
+ * @port: Port number if per-port device; <0 if not
+ * @devid: per-port device ID or absolute device ID
+ * @offset: byte offset into device I2C space
+ * @len: byte length of I2C space data
+ * @buf: buffer containing new I2C data
+ *
+ * Write the I2C data to the indicated device and location.
+ */
+int t4_i2c_wr(struct adapter *adap, unsigned int mbox,
+ int port, unsigned int devid,
+ unsigned int offset, unsigned int len,
+ u8 *buf)
+{
+ u32 ldst_addrspace;
+ struct fw_ldst_cmd ldst;
+
+ if (port >= 4 ||
+ devid >= 256 ||
+ offset >= 256 ||
+ len > sizeof ldst.u.i2c.data)
+ return -EINVAL;
+
+ memset(&ldst, 0, sizeof ldst);
+ ldst_addrspace = V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_I2C);
+ ldst.op_to_addrspace =
+ cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE |
+ ldst_addrspace);
+ ldst.cycles_to_len16 = cpu_to_be32(FW_LEN16(ldst));
+ ldst.u.i2c.pid = (port < 0 ? 0xff : port);
+ ldst.u.i2c.did = devid;
+ ldst.u.i2c.boffset = offset;
+ ldst.u.i2c.blen = len;
+ memcpy(ldst.u.i2c.data, buf, len);
+ return t4_wr_mbox(adap, mbox, &ldst, sizeof ldst, &ldst);
+}
+
+/**
+ * t4_sge_ctxt_rd - read an SGE context through FW
+ * @adap: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @cid: the context id
+ * @ctype: the context type
+ * @data: where to store the context data
+ *
+ * Issues a FW command through the given mailbox to read an SGE context.
+ */
+int t4_sge_ctxt_rd(struct adapter *adap, unsigned int mbox, unsigned int cid,
+ enum ctxt_type ctype, u32 *data)
+{
+ int ret;
+ struct fw_ldst_cmd c;
+
+ if (ctype == CTXT_EGRESS)
+ ret = FW_LDST_ADDRSPC_SGE_EGRC;
+ else if (ctype == CTXT_INGRESS)
+ ret = FW_LDST_ADDRSPC_SGE_INGC;
+ else if (ctype == CTXT_FLM)
+ ret = FW_LDST_ADDRSPC_SGE_FLMC;
+ else
+ ret = FW_LDST_ADDRSPC_SGE_CONMC;
+
+ memset(&c, 0, sizeof(c));
+ c.op_to_addrspace = cpu_to_be32(V_FW_CMD_OP(FW_LDST_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ |
+ V_FW_LDST_CMD_ADDRSPACE(ret));
+ c.cycles_to_len16 = cpu_to_be32(FW_LEN16(c));
+ c.u.idctxt.physid = cpu_to_be32(cid);
+
+ ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
+ if (ret == 0) {
+ data[0] = be32_to_cpu(c.u.idctxt.ctxt_data0);
+ data[1] = be32_to_cpu(c.u.idctxt.ctxt_data1);
+ data[2] = be32_to_cpu(c.u.idctxt.ctxt_data2);
+ data[3] = be32_to_cpu(c.u.idctxt.ctxt_data3);
+ data[4] = be32_to_cpu(c.u.idctxt.ctxt_data4);
+ data[5] = be32_to_cpu(c.u.idctxt.ctxt_data5);
+ }
+ return ret;
+}
+
+/**
+ * t4_sge_ctxt_rd_bd - read an SGE context bypassing FW
+ * @adap: the adapter
+ * @cid: the context id
+ * @ctype: the context type
+ * @data: where to store the context data
+ *
+ * Reads an SGE context directly, bypassing FW. This is only for
+ * debugging when FW is unavailable.
+ */
+int t4_sge_ctxt_rd_bd(struct adapter *adap, unsigned int cid, enum ctxt_type ctype,
+ u32 *data)
+{
+ int i, ret;
+
+ t4_write_reg(adap, A_SGE_CTXT_CMD, V_CTXTQID(cid) | V_CTXTTYPE(ctype));
+ ret = t4_wait_op_done(adap, A_SGE_CTXT_CMD, F_BUSY, 0, 3, 1);
+ if (!ret)
+ for (i = A_SGE_CTXT_DATA0; i <= A_SGE_CTXT_DATA5; i += 4)
+ *data++ = t4_read_reg(adap, i);
+ return ret;
+}
+
int t4_sched_config(struct adapter *adapter, int type, int minmaxen,
int sleep_ok)
{
@@ -5904,3 +9082,78 @@ int t4_sched_params(struct adapter *adapter, int type, int level, int mode,
return t4_wr_mbox_meat(adapter,adapter->mbox, &cmd, sizeof(cmd),
NULL, sleep_ok);
}
+
+/*
+ * t4_config_watchdog - configure (enable/disable) a watchdog timer
+ * @adapter: the adapter
+ * @mbox: mailbox to use for the FW command
+ * @pf: the PF owning the queue
+ * @vf: the VF owning the queue
+ * @timeout: watchdog timeout in ms
+ * @action: watchdog timer / action
+ *
+ * There are separate watchdog timers for each possible watchdog
+ * action. Configure one of the watchdog timers by setting a non-zero
+ * timeout. Disable a watchdog timer by using a timeout of zero.
+ */
+int t4_config_watchdog(struct adapter *adapter, unsigned int mbox,
+ unsigned int pf, unsigned int vf,
+ unsigned int timeout, unsigned int action)
+{
+ struct fw_watchdog_cmd wdog;
+ unsigned int ticks;
+
+ /*
+ * The watchdog command expects a timeout in units of 10ms so we need
+ * to convert it here (via rounding) and force a minimum of one 10ms
+ * "tick" if the timeout is non-zero but the convertion results in 0
+ * ticks.
+ */
+ ticks = (timeout + 5)/10;
+ if (timeout && !ticks)
+ ticks = 1;
+
+ memset(&wdog, 0, sizeof wdog);
+ wdog.op_to_vfn = cpu_to_be32(V_FW_CMD_OP(FW_WATCHDOG_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE |
+ V_FW_PARAMS_CMD_PFN(pf) |
+ V_FW_PARAMS_CMD_VFN(vf));
+ wdog.retval_len16 = cpu_to_be32(FW_LEN16(wdog));
+ wdog.timeout = cpu_to_be32(ticks);
+ wdog.action = cpu_to_be32(action);
+
+ return t4_wr_mbox(adapter, mbox, &wdog, sizeof wdog, NULL);
+}
+
+int t4_get_devlog_level(struct adapter *adapter, unsigned int *level)
+{
+ struct fw_devlog_cmd devlog_cmd;
+ int ret;
+
+ memset(&devlog_cmd, 0, sizeof(devlog_cmd));
+ devlog_cmd.op_to_write = cpu_to_be32(V_FW_CMD_OP(FW_DEVLOG_CMD) |
+ F_FW_CMD_REQUEST | F_FW_CMD_READ);
+ devlog_cmd.retval_len16 = cpu_to_be32(FW_LEN16(devlog_cmd));
+ ret = t4_wr_mbox(adapter, adapter->mbox, &devlog_cmd,
+ sizeof(devlog_cmd), &devlog_cmd);
+ if (ret)
+ return ret;
+
+ *level = devlog_cmd.level;
+ return 0;
+}
+
+int t4_set_devlog_level(struct adapter *adapter, unsigned int level)
+{
+ struct fw_devlog_cmd devlog_cmd;
+
+ memset(&devlog_cmd, 0, sizeof(devlog_cmd));
+ devlog_cmd.op_to_write = cpu_to_be32(V_FW_CMD_OP(FW_DEVLOG_CMD) |
+ F_FW_CMD_REQUEST |
+ F_FW_CMD_WRITE);
+ devlog_cmd.level = level;
+ devlog_cmd.retval_len16 = cpu_to_be32(FW_LEN16(devlog_cmd));
+ return t4_wr_mbox(adapter, adapter->mbox, &devlog_cmd,
+ sizeof(devlog_cmd), &devlog_cmd);
+}
diff --git a/sys/dev/cxgbe/iw_cxgbe/device.c b/sys/dev/cxgbe/iw_cxgbe/device.c
index 6de0de6..ea04190 100644
--- a/sys/dev/cxgbe/iw_cxgbe/device.c
+++ b/sys/dev/cxgbe/iw_cxgbe/device.c
@@ -45,8 +45,6 @@ __FBSDID("$FreeBSD$");
#ifdef TCP_OFFLOAD
#include "iw_cxgbe.h"
-int spg_creds = 2; /* Default status page size is 2 credits = 128B */
-
void
c4iw_release_dev_ucontext(struct c4iw_rdev *rdev,
struct c4iw_dev_ucontext *uctx)
@@ -89,27 +87,24 @@ static int
c4iw_rdev_open(struct c4iw_rdev *rdev)
{
struct adapter *sc = rdev->adap;
+ struct sge_params *sp = &sc->params.sge;
int rc;
c4iw_init_dev_ucontext(rdev, &rdev->uctx);
- /* Save the status page size set by if_cxgbe */
- spg_creds = (t4_read_reg(sc, A_SGE_CONTROL) & F_EGRSTATUSPAGESIZE) ?
- 2 : 1;
-
/* XXX: we can probably make this work */
- if (sc->sge.eq_s_qpp > PAGE_SHIFT || sc->sge.iq_s_qpp > PAGE_SHIFT) {
+ if (sp->eq_s_qpp > PAGE_SHIFT || sp->iq_s_qpp > PAGE_SHIFT) {
device_printf(sc->dev,
"doorbell density too high (eq %d, iq %d, pg %d).\n",
- sc->sge.eq_s_qpp, sc->sge.eq_s_qpp, PAGE_SHIFT);
+ sp->eq_s_qpp, sp->eq_s_qpp, PAGE_SHIFT);
rc = -EINVAL;
goto err1;
}
- rdev->qpshift = PAGE_SHIFT - sc->sge.eq_s_qpp;
- rdev->qpmask = (1 << sc->sge.eq_s_qpp) - 1;
- rdev->cqshift = PAGE_SHIFT - sc->sge.iq_s_qpp;
- rdev->cqmask = (1 << sc->sge.iq_s_qpp) - 1;
+ rdev->qpshift = PAGE_SHIFT - sp->eq_s_qpp;
+ rdev->qpmask = (1 << sp->eq_s_qpp) - 1;
+ rdev->cqshift = PAGE_SHIFT - sp->iq_s_qpp;
+ rdev->cqmask = (1 << sp->iq_s_qpp) - 1;
if (c4iw_num_stags(rdev) == 0) {
rc = -EINVAL;
diff --git a/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h b/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
index f6c8a59..c232f70 100644
--- a/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
+++ b/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
@@ -1040,5 +1040,4 @@ void your_reg_device(struct c4iw_dev *dev);
#define SGE_CTRLQ_NUM 0
-extern int spg_creds;/* Status Page size in credit units(1 unit = 64) */
#endif
diff --git a/sys/dev/cxgbe/iw_cxgbe/qp.c b/sys/dev/cxgbe/iw_cxgbe/qp.c
index 38c61ea..1c0381c 100644
--- a/sys/dev/cxgbe/iw_cxgbe/qp.c
+++ b/sys/dev/cxgbe/iw_cxgbe/qp.c
@@ -215,7 +215,8 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
res->u.sqrq.op = FW_RI_RES_OP_WRITE;
/* eqsize is the number of 64B entries plus the status page size. */
- eqsize = wq->sq.size * T4_SQ_NUM_SLOTS + spg_creds;
+ eqsize = wq->sq.size * T4_SQ_NUM_SLOTS +
+ (sc->params.sge.spg_len / EQ_ESIZE);
res->u.sqrq.fetchszm_to_iqid = cpu_to_be32(
V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */
@@ -237,7 +238,8 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
res->u.sqrq.op = FW_RI_RES_OP_WRITE;
/* eqsize is the number of 64B entries plus the status page size. */
- eqsize = wq->rq.size * T4_RQ_NUM_SLOTS + spg_creds ;
+ eqsize = wq->rq.size * T4_RQ_NUM_SLOTS +
+ (sc->params.sge.spg_len / EQ_ESIZE);
res->u.sqrq.fetchszm_to_iqid = cpu_to_be32(
V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */
V_FW_RI_RES_WR_CPRIO(0) | /* don't keep in chip cache */
diff --git a/sys/dev/cxgbe/osdep.h b/sys/dev/cxgbe/osdep.h
index 403b535..6fd704b 100644
--- a/sys/dev/cxgbe/osdep.h
+++ b/sys/dev/cxgbe/osdep.h
@@ -80,19 +80,20 @@ typedef boolean_t bool;
#define true TRUE
#endif
+#define __force
+
#define mdelay(x) DELAY((x) * 1000)
#define udelay(x) DELAY(x)
-#define __devinit
#define simple_strtoul strtoul
#define DIV_ROUND_UP(x, y) howmany(x, y)
#define ARRAY_SIZE(x) nitems(x)
#define container_of(p, s, f) ((s *)(((uint8_t *)(p)) - offsetof(s, f)))
-#define swab16(x) bswap16(x)
-#define swab32(x) bswap32(x)
-#define swab64(x) bswap64(x)
+#define swab16(x) bswap16(x)
+#define swab32(x) bswap32(x)
+#define swab64(x) bswap64(x)
#define le16_to_cpu(x) le16toh(x)
#define le32_to_cpu(x) le32toh(x)
#define le64_to_cpu(x) le64toh(x)
@@ -106,11 +107,6 @@ typedef boolean_t bool;
#define cpu_to_be32(x) htobe32(x)
#define cpu_to_be64(x) htobe64(x)
-#define SPEED_10 10
-#define SPEED_100 100
-#define SPEED_1000 1000
-#define SPEED_10000 10000
-#define SPEED_40000 40000
#define DUPLEX_HALF 0
#define DUPLEX_FULL 1
#define AUTONEG_DISABLE 0
diff --git a/sys/dev/cxgbe/t4_ioctl.h b/sys/dev/cxgbe/t4_ioctl.h
index 0d6dec5..473cf89 100644
--- a/sys/dev/cxgbe/t4_ioctl.h
+++ b/sys/dev/cxgbe/t4_ioctl.h
@@ -105,6 +105,12 @@ struct t4_i2c_data {
#define T4_FILTER_MPS_HIT_TYPE 0x4000 /* MPS match type */
#define T4_FILTER_IP_FRAGMENT 0x8000 /* IP fragment */
+#define T4_FILTER_IC_VNIC 0x80000000 /* TP Ingress Config's F_VNIC
+ bit. It indicates whether
+ T4_FILTER_VNIC bit means VNIC
+ id (PF/VF) or outer VLAN.
+ 0 = oVLAN, 1 = VNIC */
+
/* Filter action */
enum {
FILTER_PASS = 0, /* default */
@@ -154,7 +160,7 @@ struct t4_filter_tuple {
* is used to select the global mode and all filters are limited to the
* set of fields allowed by the global mode.
*/
- uint16_t vnic; /* VNIC id or outer VLAN tag */
+ uint16_t vnic; /* VNIC id (PF/VF) or outer VLAN tag */
uint16_t vlan; /* VLAN tag */
uint16_t ethtype; /* Ethernet type */
uint8_t tos; /* TOS/Traffic Type */
@@ -165,7 +171,8 @@ struct t4_filter_tuple {
uint32_t frag:1; /* fragmentation extension header */
uint32_t macidx:9; /* exact match MAC index */
uint32_t vlan_vld:1; /* VLAN valid */
- uint32_t vnic_vld:1; /* VNIC id/outer VLAN tag valid */
+ uint32_t ovlan_vld:1; /* outer VLAN tag valid, value in "vnic" */
+ uint32_t pfvf_vld:1; /* VNIC id (PF/VF) valid, value in "vnic" */
};
struct t4_filter_specification {
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 12e32d2..05a82b7 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -399,12 +399,16 @@ struct filter_entry {
static int map_bars_0_and_4(struct adapter *);
static int map_bar_2(struct adapter *);
static void setup_memwin(struct adapter *);
+static void position_memwin(struct adapter *, int, uint32_t);
+static int rw_via_memwin(struct adapter *, int, uint32_t, uint32_t *, int, int);
+static inline int read_via_memwin(struct adapter *, int, uint32_t, uint32_t *,
+ int);
+static inline int write_via_memwin(struct adapter *, int, uint32_t,
+ const uint32_t *, int);
static int validate_mem_range(struct adapter *, uint32_t, int);
static int fwmtype_to_hwmtype(int);
static int validate_mt_off_len(struct adapter *, int, uint32_t, int,
uint32_t *);
-static void memwin_info(struct adapter *, int, uint32_t *, uint32_t *);
-static uint32_t position_memwin(struct adapter *, int, uint32_t);
static int cfg_itype_and_nqueues(struct adapter *, int, int, int,
struct intrs_and_queues *);
static int prep_firmware(struct adapter *);
@@ -425,9 +429,7 @@ static void quiesce_fl(struct adapter *, struct sge_fl *);
static int t4_alloc_irq(struct adapter *, struct irq *, int rid,
driver_intr_t *, void *, char *);
static int t4_free_irq(struct adapter *, struct irq *);
-static void reg_block_dump(struct adapter *, uint8_t *, unsigned int,
- unsigned int);
-static void t4_get_regs(struct adapter *, struct t4_regdump *, uint8_t *);
+static void get_regs(struct adapter *, struct t4_regdump *, uint8_t *);
static void vi_refresh_stats(struct adapter *, struct vi_info *);
static void cxgbe_refresh_stats(struct adapter *, struct port_info *);
static void cxgbe_tick(void *);
@@ -478,9 +480,11 @@ static int sysctl_tx_rate(SYSCTL_HANDLER_ARGS);
static int sysctl_ulprx_la(SYSCTL_HANDLER_ARGS);
static int sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS);
#endif
-static uint32_t fconf_to_mode(uint32_t);
+static uint32_t fconf_iconf_to_mode(uint32_t, uint32_t);
static uint32_t mode_to_fconf(uint32_t);
-static uint32_t fspec_to_fconf(struct t4_filter_specification *);
+static uint32_t mode_to_iconf(uint32_t);
+static int check_fspec_against_fconf_iconf(struct adapter *,
+ struct t4_filter_specification *);
static int get_filter_mode(struct adapter *, uint32_t *);
static int set_filter_mode(struct adapter *, uint32_t);
static inline uint64_t get_filter_hits(struct adapter *, uint32_t);
@@ -645,6 +649,7 @@ t4_attach(device_t dev)
int rc = 0, i, j, n10g, n1g, rqidx, tqidx;
struct intrs_and_queues iaq;
struct sge *s;
+ uint8_t *buf;
#ifdef TCP_OFFLOAD
int ofld_rqidx, ofld_tqidx;
#endif
@@ -687,7 +692,7 @@ t4_attach(device_t dev)
TAILQ_INIT(&sc->sfl);
callout_init_mtx(&sc->sfl_callout, &sc->sfl_lock, 0);
- mtx_init(&sc->regwin_lock, "register and memory window", 0, MTX_DEF);
+ mtx_init(&sc->reg_lock, "indirect register access", 0, MTX_DEF);
rc = map_bars_0_and_4(sc);
if (rc != 0)
@@ -713,8 +718,10 @@ t4_attach(device_t dev)
t4_register_cpl_handler(sc, CPL_T5_TRACE_PKT, t5_trace_pkt);
t4_init_sge_cpl_handlers(sc);
- /* Prepare the adapter for operation */
- rc = -t4_prep_adapter(sc);
+ /* Prepare the adapter for operation. */
+ buf = malloc(PAGE_SIZE, M_CXGBE, M_ZERO | M_WAITOK);
+ rc = -t4_prep_adapter(sc, buf);
+ free(buf, M_CXGBE);
if (rc != 0) {
device_printf(dev, "failed to prepare adapter: %d.\n", rc);
goto done;
@@ -815,7 +822,7 @@ t4_attach(device_t dev)
* Allocate the "main" VI and initialize parameters
* like mac addr.
*/
- rc = -t4_port_init(pi, sc->mbox, sc->pf, 0);
+ rc = -t4_port_init(sc, sc->mbox, sc->pf, 0, i);
if (rc != 0) {
device_printf(dev, "unable to initialize port %d: %d\n",
i, rc);
@@ -1158,8 +1165,15 @@ t4_detach(device_t dev)
mtx_destroy(&sc->sfl_lock);
if (mtx_initialized(&sc->ifp_lock))
mtx_destroy(&sc->ifp_lock);
- if (mtx_initialized(&sc->regwin_lock))
- mtx_destroy(&sc->regwin_lock);
+ if (mtx_initialized(&sc->reg_lock))
+ mtx_destroy(&sc->reg_lock);
+
+ for (i = 0; i < NUM_MEMWIN; i++) {
+ struct memwin *mw = &sc->memwin[i];
+
+ if (rw_initialized(&mw->mw_lock))
+ rw_destroy(&mw->mw_lock);
+ }
bzero(sc, sizeof(*sc));
@@ -1780,13 +1794,13 @@ cxgbe_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
return;
ifmr->ifm_active = IFM_ETHER | IFM_FDX;
- if (speed == SPEED_10000)
+ if (speed == 10000)
ifmr->ifm_active |= IFM_10G_T;
- else if (speed == SPEED_1000)
+ else if (speed == 1000)
ifmr->ifm_active |= IFM_1000_T;
- else if (speed == SPEED_100)
+ else if (speed == 100)
ifmr->ifm_active |= IFM_100_TX;
- else if (speed == SPEED_10)
+ else if (speed == 10)
ifmr->ifm_active |= IFM_10_T;
else
KASSERT(0, ("%s: link up but speed unknown (%u)", __func__,
@@ -1962,13 +1976,18 @@ map_bar_2(struct adapter *sc)
return (0);
}
-static const struct memwin t4_memwin[] = {
+struct memwin_init {
+ uint32_t base;
+ uint32_t aperture;
+};
+
+static const struct memwin_init t4_memwin[NUM_MEMWIN] = {
{ MEMWIN0_BASE, MEMWIN0_APERTURE },
{ MEMWIN1_BASE, MEMWIN1_APERTURE },
{ MEMWIN2_BASE_T4, MEMWIN2_APERTURE_T4 }
};
-static const struct memwin t5_memwin[] = {
+static const struct memwin_init t5_memwin[NUM_MEMWIN] = {
{ MEMWIN0_BASE, MEMWIN0_APERTURE },
{ MEMWIN1_BASE, MEMWIN1_APERTURE },
{ MEMWIN2_BASE_T5, MEMWIN2_APERTURE_T5 },
@@ -1977,8 +1996,9 @@ static const struct memwin t5_memwin[] = {
static void
setup_memwin(struct adapter *sc)
{
- const struct memwin *mw;
- int i, n;
+ const struct memwin_init *mw_init;
+ struct memwin *mw;
+ int i;
uint32_t bar0;
if (is_t4(sc)) {
@@ -1992,21 +2012,26 @@ setup_memwin(struct adapter *sc)
bar0 = t4_hw_pci_read_cfg4(sc, PCIR_BAR(0));
bar0 &= (uint32_t) PCIM_BAR_MEM_BASE;
- mw = &t4_memwin[0];
- n = nitems(t4_memwin);
+ mw_init = &t4_memwin[0];
} else {
- /* T5 uses the relative offset inside the PCIe BAR */
+ /* T5+ use the relative offset inside the PCIe BAR */
bar0 = 0;
- mw = &t5_memwin[0];
- n = nitems(t5_memwin);
+ mw_init = &t5_memwin[0];
}
- for (i = 0; i < n; i++, mw++) {
+ for (i = 0, mw = &sc->memwin[0]; i < NUM_MEMWIN; i++, mw_init++, mw++) {
+ rw_init(&mw->mw_lock, "memory window access");
+ mw->mw_base = mw_init->base;
+ mw->mw_aperture = mw_init->aperture;
+ mw->mw_curpos = 0;
t4_write_reg(sc,
PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_BASE_WIN, i),
- (mw->base + bar0) | V_BIR(0) |
- V_WINDOW(ilog2(mw->aperture) - 10));
+ (mw->mw_base + bar0) | V_BIR(0) |
+ V_WINDOW(ilog2(mw->mw_aperture) - 10));
+ rw_wlock(&mw->mw_lock);
+ position_memwin(sc, i, 0);
+ rw_wunlock(&mw->mw_lock);
}
/* flush */
@@ -2014,51 +2039,227 @@ setup_memwin(struct adapter *sc)
}
/*
- * Verify that the memory range specified by the addr/len pair is valid and lies
- * entirely within a single region (EDCx or MCx).
+ * Positions the memory window at the given address in the card's address space.
+ * There are some alignment requirements and the actual position may be at an
+ * address prior to the requested address. mw->mw_curpos always has the actual
+ * position of the window.
+ */
+static void
+position_memwin(struct adapter *sc, int idx, uint32_t addr)
+{
+ struct memwin *mw;
+ uint32_t pf;
+ uint32_t reg;
+
+ MPASS(idx >= 0 && idx < NUM_MEMWIN);
+ mw = &sc->memwin[idx];
+ rw_assert(&mw->mw_lock, RA_WLOCKED);
+
+ if (is_t4(sc)) {
+ pf = 0;
+ mw->mw_curpos = addr & ~0xf; /* start must be 16B aligned */
+ } else {
+ pf = V_PFNUM(sc->pf);
+ mw->mw_curpos = addr & ~0x7f; /* start must be 128B aligned */
+ }
+ reg = PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, idx);
+ t4_write_reg(sc, reg, mw->mw_curpos | pf);
+ t4_read_reg(sc, reg); /* flush */
+}
+
+static int
+rw_via_memwin(struct adapter *sc, int idx, uint32_t addr, uint32_t *val,
+ int len, int rw)
+{
+ struct memwin *mw;
+ uint32_t mw_end, v;
+
+ MPASS(idx >= 0 && idx < NUM_MEMWIN);
+
+ /* Memory can only be accessed in naturally aligned 4 byte units */
+ if (addr & 3 || len & 3 || len <= 0)
+ return (EINVAL);
+
+ mw = &sc->memwin[idx];
+ while (len > 0) {
+ rw_rlock(&mw->mw_lock);
+ mw_end = mw->mw_curpos + mw->mw_aperture;
+ if (addr >= mw_end || addr < mw->mw_curpos) {
+ /* Will need to reposition the window */
+ if (!rw_try_upgrade(&mw->mw_lock)) {
+ rw_runlock(&mw->mw_lock);
+ rw_wlock(&mw->mw_lock);
+ }
+ rw_assert(&mw->mw_lock, RA_WLOCKED);
+ position_memwin(sc, idx, addr);
+ rw_downgrade(&mw->mw_lock);
+ mw_end = mw->mw_curpos + mw->mw_aperture;
+ }
+ rw_assert(&mw->mw_lock, RA_RLOCKED);
+ while (addr < mw_end && len > 0) {
+ if (rw == 0) {
+ v = t4_read_reg(sc, mw->mw_base + addr -
+ mw->mw_curpos);
+ *val++ = le32toh(v);
+ } else {
+ v = *val++;
+ t4_write_reg(sc, mw->mw_base + addr -
+ mw->mw_curpos, htole32(v));;
+ }
+ addr += 4;
+ len -= 4;
+ }
+ rw_runlock(&mw->mw_lock);
+ }
+
+ return (0);
+}
+
+static inline int
+read_via_memwin(struct adapter *sc, int idx, uint32_t addr, uint32_t *val,
+ int len)
+{
+
+ return (rw_via_memwin(sc, idx, addr, val, len, 0));
+}
+
+static inline int
+write_via_memwin(struct adapter *sc, int idx, uint32_t addr,
+ const uint32_t *val, int len)
+{
+
+ return (rw_via_memwin(sc, idx, addr, (void *)(uintptr_t)val, len, 1));
+}
+
+static int
+t4_range_cmp(const void *a, const void *b)
+{
+ return ((const struct t4_range *)a)->start -
+ ((const struct t4_range *)b)->start;
+}
+
+/*
+ * Verify that the memory range specified by the addr/len pair is valid within
+ * the card's address space.
*/
static int
validate_mem_range(struct adapter *sc, uint32_t addr, int len)
{
- uint32_t em, addr_len, maddr, mlen;
+ struct t4_range mem_ranges[4], *r, *next;
+ uint32_t em, addr_len;
+ int i, n, remaining;
/* Memory can only be accessed in naturally aligned 4 byte units */
- if (addr & 3 || len & 3 || len == 0)
+ if (addr & 3 || len & 3 || len <= 0)
return (EINVAL);
/* Enabled memories */
em = t4_read_reg(sc, A_MA_TARGET_MEM_ENABLE);
+
+ r = &mem_ranges[0];
+ n = 0;
+ bzero(r, sizeof(mem_ranges));
if (em & F_EDRAM0_ENABLE) {
addr_len = t4_read_reg(sc, A_MA_EDRAM0_BAR);
- maddr = G_EDRAM0_BASE(addr_len) << 20;
- mlen = G_EDRAM0_SIZE(addr_len) << 20;
- if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
- addr + len <= maddr + mlen)
- return (0);
+ r->size = G_EDRAM0_SIZE(addr_len) << 20;
+ if (r->size > 0) {
+ r->start = G_EDRAM0_BASE(addr_len) << 20;
+ if (addr >= r->start &&
+ addr + len <= r->start + r->size)
+ return (0);
+ r++;
+ n++;
+ }
}
if (em & F_EDRAM1_ENABLE) {
addr_len = t4_read_reg(sc, A_MA_EDRAM1_BAR);
- maddr = G_EDRAM1_BASE(addr_len) << 20;
- mlen = G_EDRAM1_SIZE(addr_len) << 20;
- if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
- addr + len <= maddr + mlen)
- return (0);
+ r->size = G_EDRAM1_SIZE(addr_len) << 20;
+ if (r->size > 0) {
+ r->start = G_EDRAM1_BASE(addr_len) << 20;
+ if (addr >= r->start &&
+ addr + len <= r->start + r->size)
+ return (0);
+ r++;
+ n++;
+ }
}
if (em & F_EXT_MEM_ENABLE) {
addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY_BAR);
- maddr = G_EXT_MEM_BASE(addr_len) << 20;
- mlen = G_EXT_MEM_SIZE(addr_len) << 20;
- if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
- addr + len <= maddr + mlen)
- return (0);
+ r->size = G_EXT_MEM_SIZE(addr_len) << 20;
+ if (r->size > 0) {
+ r->start = G_EXT_MEM_BASE(addr_len) << 20;
+ if (addr >= r->start &&
+ addr + len <= r->start + r->size)
+ return (0);
+ r++;
+ n++;
+ }
}
- if (!is_t4(sc) && em & F_EXT_MEM1_ENABLE) {
+ if (is_t5(sc) && em & F_EXT_MEM1_ENABLE) {
addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY1_BAR);
- maddr = G_EXT_MEM1_BASE(addr_len) << 20;
- mlen = G_EXT_MEM1_SIZE(addr_len) << 20;
- if (mlen > 0 && addr >= maddr && addr < maddr + mlen &&
- addr + len <= maddr + mlen)
- return (0);
+ r->size = G_EXT_MEM1_SIZE(addr_len) << 20;
+ if (r->size > 0) {
+ r->start = G_EXT_MEM1_BASE(addr_len) << 20;
+ if (addr >= r->start &&
+ addr + len <= r->start + r->size)
+ return (0);
+ r++;
+ n++;
+ }
+ }
+ MPASS(n <= nitems(mem_ranges));
+
+ if (n > 1) {
+ /* Sort and merge the ranges. */
+ qsort(mem_ranges, n, sizeof(struct t4_range), t4_range_cmp);
+
+ /* Start from index 0 and examine the next n - 1 entries. */
+ r = &mem_ranges[0];
+ for (remaining = n - 1; remaining > 0; remaining--, r++) {
+
+ MPASS(r->size > 0); /* r is a valid entry. */
+ next = r + 1;
+ MPASS(next->size > 0); /* and so is the next one. */
+
+ while (r->start + r->size >= next->start) {
+ /* Merge the next one into the current entry. */
+ r->size = max(r->start + r->size,
+ next->start + next->size) - r->start;
+ n--; /* One fewer entry in total. */
+ if (--remaining == 0)
+ goto done; /* short circuit */
+ next++;
+ }
+ if (next != r + 1) {
+ /*
+ * Some entries were merged into r and next
+ * points to the first valid entry that couldn't
+ * be merged.
+ */
+ MPASS(next->size > 0); /* must be valid */
+ memcpy(r + 1, next, remaining * sizeof(*r));
+#ifdef INVARIANTS
+ /*
+ * This so that the foo->size assertion in the
+ * next iteration of the loop do the right
+ * thing for entries that were pulled up and are
+ * no longer valid.
+ */
+ MPASS(n < nitems(mem_ranges));
+ bzero(&mem_ranges[n], (nitems(mem_ranges) - n) *
+ sizeof(struct t4_range));
+#endif
+ }
+ }
+done:
+ /* Done merging the ranges. */
+ MPASS(n > 0);
+ r = &mem_ranges[0];
+ for (i = 0; i < n; i++, r++) {
+ if (addr >= r->start &&
+ addr + len <= r->start + r->size)
+ return (0);
+ }
}
return (EFAULT);
@@ -2091,7 +2292,7 @@ static int
validate_mt_off_len(struct adapter *sc, int mtype, uint32_t off, int len,
uint32_t *addr)
{
- uint32_t em, addr_len, maddr, mlen;
+ uint32_t em, addr_len, maddr;
/* Memory can only be accessed in naturally aligned 4 byte units */
if (off & 3 || len & 3 || len == 0)
@@ -2104,91 +2305,31 @@ validate_mt_off_len(struct adapter *sc, int mtype, uint32_t off, int len,
return (EINVAL);
addr_len = t4_read_reg(sc, A_MA_EDRAM0_BAR);
maddr = G_EDRAM0_BASE(addr_len) << 20;
- mlen = G_EDRAM0_SIZE(addr_len) << 20;
break;
case MEM_EDC1:
if (!(em & F_EDRAM1_ENABLE))
return (EINVAL);
addr_len = t4_read_reg(sc, A_MA_EDRAM1_BAR);
maddr = G_EDRAM1_BASE(addr_len) << 20;
- mlen = G_EDRAM1_SIZE(addr_len) << 20;
break;
case MEM_MC:
if (!(em & F_EXT_MEM_ENABLE))
return (EINVAL);
addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY_BAR);
maddr = G_EXT_MEM_BASE(addr_len) << 20;
- mlen = G_EXT_MEM_SIZE(addr_len) << 20;
break;
case MEM_MC1:
- if (is_t4(sc) || !(em & F_EXT_MEM1_ENABLE))
+ if (!is_t5(sc) || !(em & F_EXT_MEM1_ENABLE))
return (EINVAL);
addr_len = t4_read_reg(sc, A_MA_EXT_MEMORY1_BAR);
maddr = G_EXT_MEM1_BASE(addr_len) << 20;
- mlen = G_EXT_MEM1_SIZE(addr_len) << 20;
break;
default:
return (EINVAL);
}
- if (mlen > 0 && off < mlen && off + len <= mlen) {
- *addr = maddr + off; /* global address */
- return (0);
- }
-
- return (EFAULT);
-}
-
-static void
-memwin_info(struct adapter *sc, int win, uint32_t *base, uint32_t *aperture)
-{
- const struct memwin *mw;
-
- if (is_t4(sc)) {
- KASSERT(win >= 0 && win < nitems(t4_memwin),
- ("%s: incorrect memwin# (%d)", __func__, win));
- mw = &t4_memwin[win];
- } else {
- KASSERT(win >= 0 && win < nitems(t5_memwin),
- ("%s: incorrect memwin# (%d)", __func__, win));
- mw = &t5_memwin[win];
- }
-
- if (base != NULL)
- *base = mw->base;
- if (aperture != NULL)
- *aperture = mw->aperture;
-}
-
-/*
- * Positions the memory window such that it can be used to access the specified
- * address in the chip's address space. The return value is the offset of addr
- * from the start of the window.
- */
-static uint32_t
-position_memwin(struct adapter *sc, int n, uint32_t addr)
-{
- uint32_t start, pf;
- uint32_t reg;
-
- KASSERT(n >= 0 && n <= 3,
- ("%s: invalid window %d.", __func__, n));
- KASSERT((addr & 3) == 0,
- ("%s: addr (0x%x) is not at a 4B boundary.", __func__, addr));
-
- if (is_t4(sc)) {
- pf = 0;
- start = addr & ~0xf; /* start must be 16B aligned */
- } else {
- pf = V_PFNUM(sc->pf);
- start = addr & ~0x7f; /* start must be 128B aligned */
- }
- reg = PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, n);
-
- t4_write_reg(sc, reg, start | pf);
- t4_read_reg(sc, reg);
-
- return (addr - start);
+ *addr = maddr + off; /* global address */
+ return (validate_mem_range(sc, *addr, len));
}
static int
@@ -2791,9 +2932,9 @@ partition_resources(struct adapter *sc, const struct firmware *default_cfg,
}
if (strncmp(sc->cfg_file, FLASH_CF, sizeof(sc->cfg_file)) != 0) {
- u_int cflen, i, n;
+ u_int cflen;
const uint32_t *cfdata;
- uint32_t param, val, addr, off, mw_base, mw_aperture;
+ uint32_t param, val, addr;
KASSERT(cfg != NULL || default_cfg != NULL,
("%s: no config to upload", __func__));
@@ -2843,16 +2984,7 @@ partition_resources(struct adapter *sc, const struct firmware *default_cfg,
__func__, mtype, moff, cflen, rc);
goto use_config_on_flash;
}
-
- memwin_info(sc, 2, &mw_base, &mw_aperture);
- while (cflen) {
- off = position_memwin(sc, 2, addr);
- n = min(cflen, mw_aperture - off);
- for (i = 0; i < n; i += 4)
- t4_write_reg(sc, mw_base + off + i, *cfdata++);
- cflen -= n;
- addr += n;
- }
+ write_via_memwin(sc, 2, addr, cfdata, cflen);
} else {
use_config_on_flash:
mtype = FW_MEMTYPE_FLASH;
@@ -3919,7 +4051,7 @@ vi_full_init(struct vi_info *vi)
for (i = 0; i < nitems(rss_key); i++) {
rss_key[i] = htobe32(raw_rss_key[nitems(rss_key) - 1 - i]);
}
- t4_write_rss_key(sc, (void *)&rss_key[0], -1);
+ t4_write_rss_key(sc, &rss_key[0], -1);
#endif
rss = malloc(vi->rss_size * sizeof (*rss), M_CXGBE, M_ZERO | M_WAITOK);
for (i = 0; i < vi->rss_size;) {
@@ -4163,691 +4295,11 @@ t4_free_irq(struct adapter *sc, struct irq *irq)
}
static void
-reg_block_dump(struct adapter *sc, uint8_t *buf, unsigned int start,
- unsigned int end)
+get_regs(struct adapter *sc, struct t4_regdump *regs, uint8_t *buf)
{
- uint32_t *p = (uint32_t *)(buf + start);
-
- for ( ; start <= end; start += sizeof(uint32_t))
- *p++ = t4_read_reg(sc, start);
-}
-
-static void
-t4_get_regs(struct adapter *sc, struct t4_regdump *regs, uint8_t *buf)
-{
- int i, n;
- const unsigned int *reg_ranges;
- static const unsigned int t4_reg_ranges[] = {
- 0x1008, 0x1108,
- 0x1180, 0x11b4,
- 0x11fc, 0x123c,
- 0x1300, 0x173c,
- 0x1800, 0x18fc,
- 0x3000, 0x30d8,
- 0x30e0, 0x5924,
- 0x5960, 0x59d4,
- 0x5a00, 0x5af8,
- 0x6000, 0x6098,
- 0x6100, 0x6150,
- 0x6200, 0x6208,
- 0x6240, 0x6248,
- 0x6280, 0x6338,
- 0x6370, 0x638c,
- 0x6400, 0x643c,
- 0x6500, 0x6524,
- 0x6a00, 0x6a38,
- 0x6a60, 0x6a78,
- 0x6b00, 0x6b84,
- 0x6bf0, 0x6c84,
- 0x6cf0, 0x6d84,
- 0x6df0, 0x6e84,
- 0x6ef0, 0x6f84,
- 0x6ff0, 0x7084,
- 0x70f0, 0x7184,
- 0x71f0, 0x7284,
- 0x72f0, 0x7384,
- 0x73f0, 0x7450,
- 0x7500, 0x7530,
- 0x7600, 0x761c,
- 0x7680, 0x76cc,
- 0x7700, 0x7798,
- 0x77c0, 0x77fc,
- 0x7900, 0x79fc,
- 0x7b00, 0x7c38,
- 0x7d00, 0x7efc,
- 0x8dc0, 0x8e1c,
- 0x8e30, 0x8e78,
- 0x8ea0, 0x8f6c,
- 0x8fc0, 0x9074,
- 0x90fc, 0x90fc,
- 0x9400, 0x9458,
- 0x9600, 0x96bc,
- 0x9800, 0x9808,
- 0x9820, 0x983c,
- 0x9850, 0x9864,
- 0x9c00, 0x9c6c,
- 0x9c80, 0x9cec,
- 0x9d00, 0x9d6c,
- 0x9d80, 0x9dec,
- 0x9e00, 0x9e6c,
- 0x9e80, 0x9eec,
- 0x9f00, 0x9f6c,
- 0x9f80, 0x9fec,
- 0xd004, 0xd03c,
- 0xdfc0, 0xdfe0,
- 0xe000, 0xea7c,
- 0xf000, 0x11110,
- 0x11118, 0x11190,
- 0x19040, 0x1906c,
- 0x19078, 0x19080,
- 0x1908c, 0x19124,
- 0x19150, 0x191b0,
- 0x191d0, 0x191e8,
- 0x19238, 0x1924c,
- 0x193f8, 0x19474,
- 0x19490, 0x194f8,
- 0x19800, 0x19f30,
- 0x1a000, 0x1a06c,
- 0x1a0b0, 0x1a120,
- 0x1a128, 0x1a138,
- 0x1a190, 0x1a1c4,
- 0x1a1fc, 0x1a1fc,
- 0x1e040, 0x1e04c,
- 0x1e284, 0x1e28c,
- 0x1e2c0, 0x1e2c0,
- 0x1e2e0, 0x1e2e0,
- 0x1e300, 0x1e384,
- 0x1e3c0, 0x1e3c8,
- 0x1e440, 0x1e44c,
- 0x1e684, 0x1e68c,
- 0x1e6c0, 0x1e6c0,
- 0x1e6e0, 0x1e6e0,
- 0x1e700, 0x1e784,
- 0x1e7c0, 0x1e7c8,
- 0x1e840, 0x1e84c,
- 0x1ea84, 0x1ea8c,
- 0x1eac0, 0x1eac0,
- 0x1eae0, 0x1eae0,
- 0x1eb00, 0x1eb84,
- 0x1ebc0, 0x1ebc8,
- 0x1ec40, 0x1ec4c,
- 0x1ee84, 0x1ee8c,
- 0x1eec0, 0x1eec0,
- 0x1eee0, 0x1eee0,
- 0x1ef00, 0x1ef84,
- 0x1efc0, 0x1efc8,
- 0x1f040, 0x1f04c,
- 0x1f284, 0x1f28c,
- 0x1f2c0, 0x1f2c0,
- 0x1f2e0, 0x1f2e0,
- 0x1f300, 0x1f384,
- 0x1f3c0, 0x1f3c8,
- 0x1f440, 0x1f44c,
- 0x1f684, 0x1f68c,
- 0x1f6c0, 0x1f6c0,
- 0x1f6e0, 0x1f6e0,
- 0x1f700, 0x1f784,
- 0x1f7c0, 0x1f7c8,
- 0x1f840, 0x1f84c,
- 0x1fa84, 0x1fa8c,
- 0x1fac0, 0x1fac0,
- 0x1fae0, 0x1fae0,
- 0x1fb00, 0x1fb84,
- 0x1fbc0, 0x1fbc8,
- 0x1fc40, 0x1fc4c,
- 0x1fe84, 0x1fe8c,
- 0x1fec0, 0x1fec0,
- 0x1fee0, 0x1fee0,
- 0x1ff00, 0x1ff84,
- 0x1ffc0, 0x1ffc8,
- 0x20000, 0x2002c,
- 0x20100, 0x2013c,
- 0x20190, 0x201c8,
- 0x20200, 0x20318,
- 0x20400, 0x20528,
- 0x20540, 0x20614,
- 0x21000, 0x21040,
- 0x2104c, 0x21060,
- 0x210c0, 0x210ec,
- 0x21200, 0x21268,
- 0x21270, 0x21284,
- 0x212fc, 0x21388,
- 0x21400, 0x21404,
- 0x21500, 0x21518,
- 0x2152c, 0x2153c,
- 0x21550, 0x21554,
- 0x21600, 0x21600,
- 0x21608, 0x21628,
- 0x21630, 0x2163c,
- 0x21700, 0x2171c,
- 0x21780, 0x2178c,
- 0x21800, 0x21c38,
- 0x21c80, 0x21d7c,
- 0x21e00, 0x21e04,
- 0x22000, 0x2202c,
- 0x22100, 0x2213c,
- 0x22190, 0x221c8,
- 0x22200, 0x22318,
- 0x22400, 0x22528,
- 0x22540, 0x22614,
- 0x23000, 0x23040,
- 0x2304c, 0x23060,
- 0x230c0, 0x230ec,
- 0x23200, 0x23268,
- 0x23270, 0x23284,
- 0x232fc, 0x23388,
- 0x23400, 0x23404,
- 0x23500, 0x23518,
- 0x2352c, 0x2353c,
- 0x23550, 0x23554,
- 0x23600, 0x23600,
- 0x23608, 0x23628,
- 0x23630, 0x2363c,
- 0x23700, 0x2371c,
- 0x23780, 0x2378c,
- 0x23800, 0x23c38,
- 0x23c80, 0x23d7c,
- 0x23e00, 0x23e04,
- 0x24000, 0x2402c,
- 0x24100, 0x2413c,
- 0x24190, 0x241c8,
- 0x24200, 0x24318,
- 0x24400, 0x24528,
- 0x24540, 0x24614,
- 0x25000, 0x25040,
- 0x2504c, 0x25060,
- 0x250c0, 0x250ec,
- 0x25200, 0x25268,
- 0x25270, 0x25284,
- 0x252fc, 0x25388,
- 0x25400, 0x25404,
- 0x25500, 0x25518,
- 0x2552c, 0x2553c,
- 0x25550, 0x25554,
- 0x25600, 0x25600,
- 0x25608, 0x25628,
- 0x25630, 0x2563c,
- 0x25700, 0x2571c,
- 0x25780, 0x2578c,
- 0x25800, 0x25c38,
- 0x25c80, 0x25d7c,
- 0x25e00, 0x25e04,
- 0x26000, 0x2602c,
- 0x26100, 0x2613c,
- 0x26190, 0x261c8,
- 0x26200, 0x26318,
- 0x26400, 0x26528,
- 0x26540, 0x26614,
- 0x27000, 0x27040,
- 0x2704c, 0x27060,
- 0x270c0, 0x270ec,
- 0x27200, 0x27268,
- 0x27270, 0x27284,
- 0x272fc, 0x27388,
- 0x27400, 0x27404,
- 0x27500, 0x27518,
- 0x2752c, 0x2753c,
- 0x27550, 0x27554,
- 0x27600, 0x27600,
- 0x27608, 0x27628,
- 0x27630, 0x2763c,
- 0x27700, 0x2771c,
- 0x27780, 0x2778c,
- 0x27800, 0x27c38,
- 0x27c80, 0x27d7c,
- 0x27e00, 0x27e04
- };
- static const unsigned int t5_reg_ranges[] = {
- 0x1008, 0x1148,
- 0x1180, 0x11b4,
- 0x11fc, 0x123c,
- 0x1280, 0x173c,
- 0x1800, 0x18fc,
- 0x3000, 0x3028,
- 0x3060, 0x30d8,
- 0x30e0, 0x30fc,
- 0x3140, 0x357c,
- 0x35a8, 0x35cc,
- 0x35ec, 0x35ec,
- 0x3600, 0x5624,
- 0x56cc, 0x575c,
- 0x580c, 0x5814,
- 0x5890, 0x58bc,
- 0x5940, 0x59dc,
- 0x59fc, 0x5a18,
- 0x5a60, 0x5a9c,
- 0x5b94, 0x5bfc,
- 0x6000, 0x6040,
- 0x6058, 0x614c,
- 0x7700, 0x7798,
- 0x77c0, 0x78fc,
- 0x7b00, 0x7c54,
- 0x7d00, 0x7efc,
- 0x8dc0, 0x8de0,
- 0x8df8, 0x8e84,
- 0x8ea0, 0x8f84,
- 0x8fc0, 0x90f8,
- 0x9400, 0x9470,
- 0x9600, 0x96f4,
- 0x9800, 0x9808,
- 0x9820, 0x983c,
- 0x9850, 0x9864,
- 0x9c00, 0x9c6c,
- 0x9c80, 0x9cec,
- 0x9d00, 0x9d6c,
- 0x9d80, 0x9dec,
- 0x9e00, 0x9e6c,
- 0x9e80, 0x9eec,
- 0x9f00, 0x9f6c,
- 0x9f80, 0xa020,
- 0xd004, 0xd03c,
- 0xdfc0, 0xdfe0,
- 0xe000, 0x11088,
- 0x1109c, 0x11110,
- 0x11118, 0x1117c,
- 0x11190, 0x11204,
- 0x19040, 0x1906c,
- 0x19078, 0x19080,
- 0x1908c, 0x19124,
- 0x19150, 0x191b0,
- 0x191d0, 0x191e8,
- 0x19238, 0x19290,
- 0x193f8, 0x19474,
- 0x19490, 0x194cc,
- 0x194f0, 0x194f8,
- 0x19c00, 0x19c60,
- 0x19c94, 0x19e10,
- 0x19e50, 0x19f34,
- 0x19f40, 0x19f50,
- 0x19f90, 0x19fe4,
- 0x1a000, 0x1a06c,
- 0x1a0b0, 0x1a120,
- 0x1a128, 0x1a138,
- 0x1a190, 0x1a1c4,
- 0x1a1fc, 0x1a1fc,
- 0x1e008, 0x1e00c,
- 0x1e040, 0x1e04c,
- 0x1e284, 0x1e290,
- 0x1e2c0, 0x1e2c0,
- 0x1e2e0, 0x1e2e0,
- 0x1e300, 0x1e384,
- 0x1e3c0, 0x1e3c8,
- 0x1e408, 0x1e40c,
- 0x1e440, 0x1e44c,
- 0x1e684, 0x1e690,
- 0x1e6c0, 0x1e6c0,
- 0x1e6e0, 0x1e6e0,
- 0x1e700, 0x1e784,
- 0x1e7c0, 0x1e7c8,
- 0x1e808, 0x1e80c,
- 0x1e840, 0x1e84c,
- 0x1ea84, 0x1ea90,
- 0x1eac0, 0x1eac0,
- 0x1eae0, 0x1eae0,
- 0x1eb00, 0x1eb84,
- 0x1ebc0, 0x1ebc8,
- 0x1ec08, 0x1ec0c,
- 0x1ec40, 0x1ec4c,
- 0x1ee84, 0x1ee90,
- 0x1eec0, 0x1eec0,
- 0x1eee0, 0x1eee0,
- 0x1ef00, 0x1ef84,
- 0x1efc0, 0x1efc8,
- 0x1f008, 0x1f00c,
- 0x1f040, 0x1f04c,
- 0x1f284, 0x1f290,
- 0x1f2c0, 0x1f2c0,
- 0x1f2e0, 0x1f2e0,
- 0x1f300, 0x1f384,
- 0x1f3c0, 0x1f3c8,
- 0x1f408, 0x1f40c,
- 0x1f440, 0x1f44c,
- 0x1f684, 0x1f690,
- 0x1f6c0, 0x1f6c0,
- 0x1f6e0, 0x1f6e0,
- 0x1f700, 0x1f784,
- 0x1f7c0, 0x1f7c8,
- 0x1f808, 0x1f80c,
- 0x1f840, 0x1f84c,
- 0x1fa84, 0x1fa90,
- 0x1fac0, 0x1fac0,
- 0x1fae0, 0x1fae0,
- 0x1fb00, 0x1fb84,
- 0x1fbc0, 0x1fbc8,
- 0x1fc08, 0x1fc0c,
- 0x1fc40, 0x1fc4c,
- 0x1fe84, 0x1fe90,
- 0x1fec0, 0x1fec0,
- 0x1fee0, 0x1fee0,
- 0x1ff00, 0x1ff84,
- 0x1ffc0, 0x1ffc8,
- 0x30000, 0x30030,
- 0x30100, 0x30144,
- 0x30190, 0x301d0,
- 0x30200, 0x30318,
- 0x30400, 0x3052c,
- 0x30540, 0x3061c,
- 0x30800, 0x30834,
- 0x308c0, 0x30908,
- 0x30910, 0x309ac,
- 0x30a00, 0x30a2c,
- 0x30a44, 0x30a50,
- 0x30a74, 0x30c24,
- 0x30d00, 0x30d00,
- 0x30d08, 0x30d14,
- 0x30d1c, 0x30d20,
- 0x30d3c, 0x30d50,
- 0x31200, 0x3120c,
- 0x31220, 0x31220,
- 0x31240, 0x31240,
- 0x31600, 0x3160c,
- 0x31a00, 0x31a1c,
- 0x31e00, 0x31e20,
- 0x31e38, 0x31e3c,
- 0x31e80, 0x31e80,
- 0x31e88, 0x31ea8,
- 0x31eb0, 0x31eb4,
- 0x31ec8, 0x31ed4,
- 0x31fb8, 0x32004,
- 0x32200, 0x32200,
- 0x32208, 0x32240,
- 0x32248, 0x32280,
- 0x32288, 0x322c0,
- 0x322c8, 0x322fc,
- 0x32600, 0x32630,
- 0x32a00, 0x32abc,
- 0x32b00, 0x32b70,
- 0x33000, 0x33048,
- 0x33060, 0x3309c,
- 0x330f0, 0x33148,
- 0x33160, 0x3319c,
- 0x331f0, 0x332e4,
- 0x332f8, 0x333e4,
- 0x333f8, 0x33448,
- 0x33460, 0x3349c,
- 0x334f0, 0x33548,
- 0x33560, 0x3359c,
- 0x335f0, 0x336e4,
- 0x336f8, 0x337e4,
- 0x337f8, 0x337fc,
- 0x33814, 0x33814,
- 0x3382c, 0x3382c,
- 0x33880, 0x3388c,
- 0x338e8, 0x338ec,
- 0x33900, 0x33948,
- 0x33960, 0x3399c,
- 0x339f0, 0x33ae4,
- 0x33af8, 0x33b10,
- 0x33b28, 0x33b28,
- 0x33b3c, 0x33b50,
- 0x33bf0, 0x33c10,
- 0x33c28, 0x33c28,
- 0x33c3c, 0x33c50,
- 0x33cf0, 0x33cfc,
- 0x34000, 0x34030,
- 0x34100, 0x34144,
- 0x34190, 0x341d0,
- 0x34200, 0x34318,
- 0x34400, 0x3452c,
- 0x34540, 0x3461c,
- 0x34800, 0x34834,
- 0x348c0, 0x34908,
- 0x34910, 0x349ac,
- 0x34a00, 0x34a2c,
- 0x34a44, 0x34a50,
- 0x34a74, 0x34c24,
- 0x34d00, 0x34d00,
- 0x34d08, 0x34d14,
- 0x34d1c, 0x34d20,
- 0x34d3c, 0x34d50,
- 0x35200, 0x3520c,
- 0x35220, 0x35220,
- 0x35240, 0x35240,
- 0x35600, 0x3560c,
- 0x35a00, 0x35a1c,
- 0x35e00, 0x35e20,
- 0x35e38, 0x35e3c,
- 0x35e80, 0x35e80,
- 0x35e88, 0x35ea8,
- 0x35eb0, 0x35eb4,
- 0x35ec8, 0x35ed4,
- 0x35fb8, 0x36004,
- 0x36200, 0x36200,
- 0x36208, 0x36240,
- 0x36248, 0x36280,
- 0x36288, 0x362c0,
- 0x362c8, 0x362fc,
- 0x36600, 0x36630,
- 0x36a00, 0x36abc,
- 0x36b00, 0x36b70,
- 0x37000, 0x37048,
- 0x37060, 0x3709c,
- 0x370f0, 0x37148,
- 0x37160, 0x3719c,
- 0x371f0, 0x372e4,
- 0x372f8, 0x373e4,
- 0x373f8, 0x37448,
- 0x37460, 0x3749c,
- 0x374f0, 0x37548,
- 0x37560, 0x3759c,
- 0x375f0, 0x376e4,
- 0x376f8, 0x377e4,
- 0x377f8, 0x377fc,
- 0x37814, 0x37814,
- 0x3782c, 0x3782c,
- 0x37880, 0x3788c,
- 0x378e8, 0x378ec,
- 0x37900, 0x37948,
- 0x37960, 0x3799c,
- 0x379f0, 0x37ae4,
- 0x37af8, 0x37b10,
- 0x37b28, 0x37b28,
- 0x37b3c, 0x37b50,
- 0x37bf0, 0x37c10,
- 0x37c28, 0x37c28,
- 0x37c3c, 0x37c50,
- 0x37cf0, 0x37cfc,
- 0x38000, 0x38030,
- 0x38100, 0x38144,
- 0x38190, 0x381d0,
- 0x38200, 0x38318,
- 0x38400, 0x3852c,
- 0x38540, 0x3861c,
- 0x38800, 0x38834,
- 0x388c0, 0x38908,
- 0x38910, 0x389ac,
- 0x38a00, 0x38a2c,
- 0x38a44, 0x38a50,
- 0x38a74, 0x38c24,
- 0x38d00, 0x38d00,
- 0x38d08, 0x38d14,
- 0x38d1c, 0x38d20,
- 0x38d3c, 0x38d50,
- 0x39200, 0x3920c,
- 0x39220, 0x39220,
- 0x39240, 0x39240,
- 0x39600, 0x3960c,
- 0x39a00, 0x39a1c,
- 0x39e00, 0x39e20,
- 0x39e38, 0x39e3c,
- 0x39e80, 0x39e80,
- 0x39e88, 0x39ea8,
- 0x39eb0, 0x39eb4,
- 0x39ec8, 0x39ed4,
- 0x39fb8, 0x3a004,
- 0x3a200, 0x3a200,
- 0x3a208, 0x3a240,
- 0x3a248, 0x3a280,
- 0x3a288, 0x3a2c0,
- 0x3a2c8, 0x3a2fc,
- 0x3a600, 0x3a630,
- 0x3aa00, 0x3aabc,
- 0x3ab00, 0x3ab70,
- 0x3b000, 0x3b048,
- 0x3b060, 0x3b09c,
- 0x3b0f0, 0x3b148,
- 0x3b160, 0x3b19c,
- 0x3b1f0, 0x3b2e4,
- 0x3b2f8, 0x3b3e4,
- 0x3b3f8, 0x3b448,
- 0x3b460, 0x3b49c,
- 0x3b4f0, 0x3b548,
- 0x3b560, 0x3b59c,
- 0x3b5f0, 0x3b6e4,
- 0x3b6f8, 0x3b7e4,
- 0x3b7f8, 0x3b7fc,
- 0x3b814, 0x3b814,
- 0x3b82c, 0x3b82c,
- 0x3b880, 0x3b88c,
- 0x3b8e8, 0x3b8ec,
- 0x3b900, 0x3b948,
- 0x3b960, 0x3b99c,
- 0x3b9f0, 0x3bae4,
- 0x3baf8, 0x3bb10,
- 0x3bb28, 0x3bb28,
- 0x3bb3c, 0x3bb50,
- 0x3bbf0, 0x3bc10,
- 0x3bc28, 0x3bc28,
- 0x3bc3c, 0x3bc50,
- 0x3bcf0, 0x3bcfc,
- 0x3c000, 0x3c030,
- 0x3c100, 0x3c144,
- 0x3c190, 0x3c1d0,
- 0x3c200, 0x3c318,
- 0x3c400, 0x3c52c,
- 0x3c540, 0x3c61c,
- 0x3c800, 0x3c834,
- 0x3c8c0, 0x3c908,
- 0x3c910, 0x3c9ac,
- 0x3ca00, 0x3ca2c,
- 0x3ca44, 0x3ca50,
- 0x3ca74, 0x3cc24,
- 0x3cd00, 0x3cd00,
- 0x3cd08, 0x3cd14,
- 0x3cd1c, 0x3cd20,
- 0x3cd3c, 0x3cd50,
- 0x3d200, 0x3d20c,
- 0x3d220, 0x3d220,
- 0x3d240, 0x3d240,
- 0x3d600, 0x3d60c,
- 0x3da00, 0x3da1c,
- 0x3de00, 0x3de20,
- 0x3de38, 0x3de3c,
- 0x3de80, 0x3de80,
- 0x3de88, 0x3dea8,
- 0x3deb0, 0x3deb4,
- 0x3dec8, 0x3ded4,
- 0x3dfb8, 0x3e004,
- 0x3e200, 0x3e200,
- 0x3e208, 0x3e240,
- 0x3e248, 0x3e280,
- 0x3e288, 0x3e2c0,
- 0x3e2c8, 0x3e2fc,
- 0x3e600, 0x3e630,
- 0x3ea00, 0x3eabc,
- 0x3eb00, 0x3eb70,
- 0x3f000, 0x3f048,
- 0x3f060, 0x3f09c,
- 0x3f0f0, 0x3f148,
- 0x3f160, 0x3f19c,
- 0x3f1f0, 0x3f2e4,
- 0x3f2f8, 0x3f3e4,
- 0x3f3f8, 0x3f448,
- 0x3f460, 0x3f49c,
- 0x3f4f0, 0x3f548,
- 0x3f560, 0x3f59c,
- 0x3f5f0, 0x3f6e4,
- 0x3f6f8, 0x3f7e4,
- 0x3f7f8, 0x3f7fc,
- 0x3f814, 0x3f814,
- 0x3f82c, 0x3f82c,
- 0x3f880, 0x3f88c,
- 0x3f8e8, 0x3f8ec,
- 0x3f900, 0x3f948,
- 0x3f960, 0x3f99c,
- 0x3f9f0, 0x3fae4,
- 0x3faf8, 0x3fb10,
- 0x3fb28, 0x3fb28,
- 0x3fb3c, 0x3fb50,
- 0x3fbf0, 0x3fc10,
- 0x3fc28, 0x3fc28,
- 0x3fc3c, 0x3fc50,
- 0x3fcf0, 0x3fcfc,
- 0x40000, 0x4000c,
- 0x40040, 0x40068,
- 0x4007c, 0x40144,
- 0x40180, 0x4018c,
- 0x40200, 0x40298,
- 0x402ac, 0x4033c,
- 0x403f8, 0x403fc,
- 0x41304, 0x413c4,
- 0x41400, 0x4141c,
- 0x41480, 0x414d0,
- 0x44000, 0x44078,
- 0x440c0, 0x44278,
- 0x442c0, 0x44478,
- 0x444c0, 0x44678,
- 0x446c0, 0x44878,
- 0x448c0, 0x449fc,
- 0x45000, 0x45068,
- 0x45080, 0x45084,
- 0x450a0, 0x450b0,
- 0x45200, 0x45268,
- 0x45280, 0x45284,
- 0x452a0, 0x452b0,
- 0x460c0, 0x460e4,
- 0x47000, 0x4708c,
- 0x47200, 0x47250,
- 0x47400, 0x47420,
- 0x47600, 0x47618,
- 0x47800, 0x47814,
- 0x48000, 0x4800c,
- 0x48040, 0x48068,
- 0x4807c, 0x48144,
- 0x48180, 0x4818c,
- 0x48200, 0x48298,
- 0x482ac, 0x4833c,
- 0x483f8, 0x483fc,
- 0x49304, 0x493c4,
- 0x49400, 0x4941c,
- 0x49480, 0x494d0,
- 0x4c000, 0x4c078,
- 0x4c0c0, 0x4c278,
- 0x4c2c0, 0x4c478,
- 0x4c4c0, 0x4c678,
- 0x4c6c0, 0x4c878,
- 0x4c8c0, 0x4c9fc,
- 0x4d000, 0x4d068,
- 0x4d080, 0x4d084,
- 0x4d0a0, 0x4d0b0,
- 0x4d200, 0x4d268,
- 0x4d280, 0x4d284,
- 0x4d2a0, 0x4d2b0,
- 0x4e0c0, 0x4e0e4,
- 0x4f000, 0x4f08c,
- 0x4f200, 0x4f250,
- 0x4f400, 0x4f420,
- 0x4f600, 0x4f618,
- 0x4f800, 0x4f814,
- 0x50000, 0x500cc,
- 0x50400, 0x50400,
- 0x50800, 0x508cc,
- 0x50c00, 0x50c00,
- 0x51000, 0x5101c,
- 0x51300, 0x51308,
- };
-
- if (is_t4(sc)) {
- reg_ranges = &t4_reg_ranges[0];
- n = nitems(t4_reg_ranges);
- } else {
- reg_ranges = &t5_reg_ranges[0];
- n = nitems(t5_reg_ranges);
- }
regs->version = chip_id(sc) | chip_rev(sc) << 10;
- for (i = 0; i < n; i += 2)
- reg_block_dump(sc, buf, reg_ranges[i], reg_ranges[i + 1]);
+ t4_get_regs(sc, buf, regs->len);
}
#define A_PL_INDIR_CMD 0x1f8
@@ -4874,7 +4326,7 @@ read_vf_stat(struct adapter *sc, unsigned int viid, int reg)
{
u32 stats[2];
- mtx_assert(&sc->regwin_lock, MA_OWNED);
+ mtx_assert(&sc->reg_lock, MA_OWNED);
t4_write_reg(sc, A_PL_INDIR_CMD, V_PL_AUTOINC(1) |
V_PL_VFID(G_FW_VIID_VIN(viid)) | V_PL_ADDR(VF_MPS_REG(reg)));
stats[0] = t4_read_reg(sc, A_PL_INDIR_DATA);
@@ -4937,10 +4389,10 @@ vi_refresh_stats(struct adapter *sc, struct vi_info *vi)
if (timevalcmp(&tv, &vi->last_refreshed, <))
return;
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_get_vi_stats(sc, vi->viid, &vi->stats);
getmicrotime(&vi->last_refreshed);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
}
static void
@@ -4960,10 +4412,10 @@ cxgbe_refresh_stats(struct adapter *sc, struct port_info *pi)
t4_get_port_stats(sc, pi->tx_chan, &pi->stats);
for (i = 0; i < sc->chip_params->nchan; i++) {
if (pi->rx_chan_map & (1 << i)) {
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_read_indirect(sc, A_TP_MIB_INDEX, A_TP_MIB_DATA, &v,
1, A_TP_MIB_TNL_CNG_DROP_0 + i);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
tnl_cong_drops += v;
}
}
@@ -5177,13 +4629,13 @@ t4_sysctls(struct adapter *sc)
sc->params.vpd.cclk, "core clock frequency (in KHz)");
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "holdoff_timers",
- CTLTYPE_STRING | CTLFLAG_RD, sc->sge.timer_val,
- sizeof(sc->sge.timer_val), sysctl_int_array, "A",
+ CTLTYPE_STRING | CTLFLAG_RD, sc->params.sge.timer_val,
+ sizeof(sc->params.sge.timer_val), sysctl_int_array, "A",
"interrupt holdoff timer values (us)");
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "holdoff_pkt_counts",
- CTLTYPE_STRING | CTLFLAG_RD, sc->sge.counter_val,
- sizeof(sc->sge.counter_val), sysctl_int_array, "A",
+ CTLTYPE_STRING | CTLFLAG_RD, sc->params.sge.counter_val,
+ sizeof(sc->params.sge.counter_val), sysctl_int_array, "A",
"interrupt holdoff packet counter values");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "nfilters", CTLFLAG_RD,
@@ -6370,9 +5822,9 @@ sysctl_cpl_stats(SYSCTL_HANDLER_ARGS)
if (sb == NULL)
return (ENOMEM);
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_tp_get_cpl_stats(sc, &stats);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
if (sc->chip_params->nchan > 2) {
sbuf_printf(sb, " channel 0 channel 1"
@@ -6697,10 +6149,6 @@ sysctl_linkdnrc(SYSCTL_HANDLER_ARGS)
int rc = 0;
struct port_info *pi = arg1;
struct sbuf *sb;
- static const char *linkdnreasons[] = {
- "non-specific", "remote fault", "autoneg failed", "reserved3",
- "PHY overheated", "unknown", "rx los", "reserved7"
- };
rc = sysctl_wire_old_buffer(req, 0);
if (rc != 0)
@@ -6711,10 +6159,8 @@ sysctl_linkdnrc(SYSCTL_HANDLER_ARGS)
if (pi->linkdnrc < 0)
sbuf_printf(sb, "n/a");
- else if (pi->linkdnrc < nitems(linkdnreasons))
- sbuf_printf(sb, "%s", linkdnreasons[pi->linkdnrc]);
else
- sbuf_printf(sb, "%d", pi->linkdnrc);
+ sbuf_printf(sb, "%s", t4_link_down_rc_str(pi->linkdnrc));
rc = sbuf_finish(sb);
sbuf_delete(sb);
@@ -7356,9 +6802,9 @@ sysctl_rdma_stats(SYSCTL_HANDLER_ARGS)
if (sb == NULL)
return (ENOMEM);
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_tp_get_rdma_stats(sc, &stats);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
sbuf_printf(sb, "NoRQEModDefferals: %u\n", stats.rqe_dfr_mod);
sbuf_printf(sb, "NoRQEPktDefferals: %u", stats.rqe_dfr_pkt);
@@ -7385,9 +6831,9 @@ sysctl_tcp_stats(SYSCTL_HANDLER_ARGS)
if (sb == NULL)
return (ENOMEM);
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_tp_get_tcp_stats(sc, &v4, &v6);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
sbuf_printf(sb,
" IP IPv6\n");
@@ -7487,9 +6933,9 @@ sysctl_tp_err_stats(SYSCTL_HANDLER_ARGS)
if (sb == NULL)
return (ENOMEM);
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
t4_tp_get_err_stats(sc, &stats);
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
if (sc->chip_params->nchan > 2) {
sbuf_printf(sb, " channel 0 channel 1"
@@ -7892,7 +7338,7 @@ sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS)
#endif
static uint32_t
-fconf_to_mode(uint32_t fconf)
+fconf_iconf_to_mode(uint32_t fconf, uint32_t iconf)
{
uint32_t mode;
@@ -7920,8 +7366,11 @@ fconf_to_mode(uint32_t fconf)
if (fconf & F_VLAN)
mode |= T4_FILTER_VLAN;
- if (fconf & F_VNIC_ID)
+ if (fconf & F_VNIC_ID) {
mode |= T4_FILTER_VNIC;
+ if (iconf & F_VNIC)
+ mode |= T4_FILTER_IC_VNIC;
+ }
if (fconf & F_PORT)
mode |= T4_FILTER_PORT;
@@ -7971,8 +7420,18 @@ mode_to_fconf(uint32_t mode)
}
static uint32_t
-fspec_to_fconf(struct t4_filter_specification *fs)
+mode_to_iconf(uint32_t mode)
+{
+
+ if (mode & T4_FILTER_IC_VNIC)
+ return (F_VNIC);
+ return (0);
+}
+
+static int check_fspec_against_fconf_iconf(struct adapter *sc,
+ struct t4_filter_specification *fs)
{
+ struct tp_params *tpp = &sc->params.tp;
uint32_t fconf = 0;
if (fs->val.frag || fs->mask.frag)
@@ -7996,8 +7455,17 @@ fspec_to_fconf(struct t4_filter_specification *fs)
if (fs->val.vlan_vld || fs->mask.vlan_vld)
fconf |= F_VLAN;
- if (fs->val.vnic_vld || fs->mask.vnic_vld)
+ if (fs->val.ovlan_vld || fs->mask.ovlan_vld) {
+ fconf |= F_VNIC_ID;
+ if (tpp->ingress_config & F_VNIC)
+ return (EINVAL);
+ }
+
+ if (fs->val.pfvf_vld || fs->mask.pfvf_vld) {
fconf |= F_VNIC_ID;
+ if ((tpp->ingress_config & F_VNIC) == 0)
+ return (EINVAL);
+ }
if (fs->val.iport || fs->mask.iport)
fconf |= F_PORT;
@@ -8005,41 +7473,45 @@ fspec_to_fconf(struct t4_filter_specification *fs)
if (fs->val.fcoe || fs->mask.fcoe)
fconf |= F_FCOE;
- return (fconf);
+ if ((tpp->vlan_pri_map | fconf) != tpp->vlan_pri_map)
+ return (E2BIG);
+
+ return (0);
}
static int
get_filter_mode(struct adapter *sc, uint32_t *mode)
{
- int rc;
- uint32_t fconf;
-
- rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK,
- "t4getfm");
- if (rc)
- return (rc);
-
- t4_read_indirect(sc, A_TP_PIO_ADDR, A_TP_PIO_DATA, &fconf, 1,
- A_TP_VLAN_PRI_MAP);
-
- if (sc->params.tp.vlan_pri_map != fconf) {
- log(LOG_WARNING, "%s: cached filter mode out of sync %x %x.\n",
- device_get_nameunit(sc->dev), sc->params.tp.vlan_pri_map,
- fconf);
- }
+ struct tp_params *tpp = &sc->params.tp;
- *mode = fconf_to_mode(fconf);
+ /*
+ * We trust the cached values of the relevant TP registers. This means
+ * things work reliably only if writes to those registers are always via
+ * t4_set_filter_mode.
+ */
+ *mode = fconf_iconf_to_mode(tpp->vlan_pri_map, tpp->ingress_config);
- end_synchronized_op(sc, LOCK_HELD);
return (0);
}
static int
set_filter_mode(struct adapter *sc, uint32_t mode)
{
- uint32_t fconf;
+ struct tp_params *tpp = &sc->params.tp;
+ uint32_t fconf, iconf;
int rc;
+ iconf = mode_to_iconf(mode);
+ if ((iconf ^ tpp->ingress_config) & F_VNIC) {
+ /*
+ * For now we just complain if A_TP_INGRESS_CONFIG is not
+ * already set to the correct value for the requested filter
+ * mode. It's not clear if it's safe to write to this register
+ * on the fly. (And we trust the cached value of the register).
+ */
+ return (EBUSY);
+ }
+
fconf = mode_to_fconf(mode);
rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK,
@@ -8068,21 +7540,22 @@ done:
static inline uint64_t
get_filter_hits(struct adapter *sc, uint32_t fid)
{
- uint32_t mw_base, off, tcb_base = t4_read_reg(sc, A_TP_CMM_TCB_BASE);
- uint64_t hits;
+ uint32_t tcb_addr;
+
+ tcb_addr = t4_read_reg(sc, A_TP_CMM_TCB_BASE) +
+ (fid + sc->tids.ftid_base) * TCB_SIZE;
- memwin_info(sc, 0, &mw_base, NULL);
- off = position_memwin(sc, 0,
- tcb_base + (fid + sc->tids.ftid_base) * TCB_SIZE);
if (is_t4(sc)) {
- hits = t4_read_reg64(sc, mw_base + off + 16);
- hits = be64toh(hits);
+ uint64_t hits;
+
+ read_via_memwin(sc, 0, tcb_addr + 16, (uint32_t *)&hits, 8);
+ return (be64toh(hits));
} else {
- hits = t4_read_reg(sc, mw_base + off + 24);
- hits = be32toh(hits);
- }
+ uint32_t hits;
- return (hits);
+ read_via_memwin(sc, 0, tcb_addr + 24, &hits, 4);
+ return (be32toh(hits));
+ }
}
static int
@@ -8153,12 +7626,10 @@ set_filter(struct adapter *sc, struct t4_filter *t)
goto done;
}
- /* Validate against the global filter mode */
- if ((sc->params.tp.vlan_pri_map | fspec_to_fconf(&t->fs)) !=
- sc->params.tp.vlan_pri_map) {
- rc = E2BIG;
+ /* Validate against the global filter mode and ingress config */
+ rc = check_fspec_against_fconf_iconf(sc, &t->fs);
+ if (rc != 0)
goto done;
- }
if (t->fs.action == FILTER_SWITCH && t->fs.eport >= nports) {
rc = EINVAL;
@@ -8321,7 +7792,7 @@ set_filter_wr(struct adapter *sc, int fidx)
{
struct filter_entry *f = &sc->tids.ftid_tab[fidx];
struct fw_filter_wr *fwr;
- unsigned int ftid;
+ unsigned int ftid, vnic_vld, vnic_vld_mask;
struct wrq_cookie cookie;
ASSERT_SYNCHRONIZED_OP(sc);
@@ -8339,6 +7810,18 @@ set_filter_wr(struct adapter *sc, int fidx)
}
}
+ /* Already validated against fconf, iconf */
+ MPASS((f->fs.val.pfvf_vld & f->fs.val.ovlan_vld) == 0);
+ MPASS((f->fs.mask.pfvf_vld & f->fs.mask.ovlan_vld) == 0);
+ if (f->fs.val.pfvf_vld || f->fs.val.ovlan_vld)
+ vnic_vld = 1;
+ else
+ vnic_vld = 0;
+ if (f->fs.mask.pfvf_vld || f->fs.mask.ovlan_vld)
+ vnic_vld_mask = 1;
+ else
+ vnic_vld_mask = 0;
+
ftid = sc->tids.ftid_base + fidx;
fwr = start_wrq_wr(&sc->sge.mgmtq, howmany(sizeof(*fwr), 16), &cookie);
@@ -8376,9 +7859,9 @@ set_filter_wr(struct adapter *sc, int fidx)
(V_FW_FILTER_WR_FRAG(f->fs.val.frag) |
V_FW_FILTER_WR_FRAGM(f->fs.mask.frag) |
V_FW_FILTER_WR_IVLAN_VLD(f->fs.val.vlan_vld) |
- V_FW_FILTER_WR_OVLAN_VLD(f->fs.val.vnic_vld) |
+ V_FW_FILTER_WR_OVLAN_VLD(vnic_vld) |
V_FW_FILTER_WR_IVLAN_VLDM(f->fs.mask.vlan_vld) |
- V_FW_FILTER_WR_OVLAN_VLDM(f->fs.mask.vnic_vld));
+ V_FW_FILTER_WR_OVLAN_VLDM(vnic_vld_mask));
fwr->smac_sel = 0;
fwr->rx_chan_rx_rpl_iq = htobe16(V_FW_FILTER_WR_RX_CHAN(0) |
V_FW_FILTER_WR_RX_RPL_IQ(sc->sge.fwq.abs_id));
@@ -8546,12 +8029,12 @@ done:
return (rc);
}
+#define MAX_READ_BUF_SIZE (128 * 1024)
static int
read_card_mem(struct adapter *sc, int win, struct t4_mem_range *mr)
{
- uint32_t addr, off, remaining, i, n;
- uint32_t *buf, *b;
- uint32_t mw_base, mw_aperture;
+ uint32_t addr, remaining, n;
+ uint32_t *buf;
int rc;
uint8_t *dst;
@@ -8559,25 +8042,19 @@ read_card_mem(struct adapter *sc, int win, struct t4_mem_range *mr)
if (rc != 0)
return (rc);
- memwin_info(sc, win, &mw_base, &mw_aperture);
- buf = b = malloc(min(mr->len, mw_aperture), M_CXGBE, M_WAITOK);
+ buf = malloc(min(mr->len, MAX_READ_BUF_SIZE), M_CXGBE, M_WAITOK);
addr = mr->addr;
remaining = mr->len;
dst = (void *)mr->data;
while (remaining) {
- off = position_memwin(sc, win, addr);
-
- /* number of bytes that we'll copy in the inner loop */
- n = min(remaining, mw_aperture - off);
- for (i = 0; i < n; i += 4)
- *b++ = t4_read_reg(sc, mw_base + off + i);
+ n = min(remaining, MAX_READ_BUF_SIZE);
+ read_via_memwin(sc, 2, addr, buf, n);
rc = copyout(buf, dst, n);
if (rc != 0)
break;
- b = buf;
dst += n;
remaining -= n;
addr += n;
@@ -8586,6 +8063,7 @@ read_card_mem(struct adapter *sc, int win, struct t4_mem_range *mr)
free(buf, M_CXGBE);
return (rc);
}
+#undef MAX_READ_BUF_SIZE
static int
read_i2c(struct adapter *sc, struct t4_i2c_data *i2cd)
@@ -9009,7 +8487,7 @@ t4_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data, int fflag,
regs->len = reglen;
buf = malloc(reglen, M_CXGBE, M_WAITOK | M_ZERO);
- t4_get_regs(sc, regs, buf);
+ get_regs(sc, regs, buf);
rc = copyout(buf, regs->data, reglen);
free(buf, M_CXGBE);
break;
@@ -9054,12 +8532,12 @@ t4_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data, int fflag,
/* MAC stats */
t4_clr_port_stats(sc, pi->tx_chan);
pi->tx_parse_error = 0;
- mtx_lock(&sc->regwin_lock);
+ mtx_lock(&sc->reg_lock);
for_each_vi(pi, v, vi) {
if (vi->flags & VI_INIT_DONE)
t4_clr_vi_stats(sc, vi->viid);
}
- mtx_unlock(&sc->regwin_lock);
+ mtx_unlock(&sc->reg_lock);
/*
* Since this command accepts a port, clear stats for
@@ -9134,6 +8612,20 @@ t4_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data, int fflag,
return (rc);
}
+void
+t4_db_full(struct adapter *sc)
+{
+
+ CXGBE_UNIMPLEMENTED(__func__);
+}
+
+void
+t4_db_dropped(struct adapter *sc)
+{
+
+ CXGBE_UNIMPLEMENTED(__func__);
+}
+
#ifdef TCP_OFFLOAD
void
t4_iscsi_init(struct adapter *sc, u_int tag_mask, const u_int *pgsz_order)
diff --git a/sys/dev/cxgbe/t4_netmap.c b/sys/dev/cxgbe/t4_netmap.c
index d05812d..6f6df10 100644
--- a/sys/dev/cxgbe/t4_netmap.c
+++ b/sys/dev/cxgbe/t4_netmap.c
@@ -56,8 +56,6 @@ __FBSDID("$FreeBSD$");
#include "common/t4_regs_values.h"
extern int fl_pad; /* XXXNM */
-extern int spg_len; /* XXXNM */
-extern int fl_pktshift; /* XXXNM */
SYSCTL_NODE(_hw, OID_AUTO, cxgbe, CTLFLAG_RD, 0, "cxgbe netmap parameters");
@@ -285,6 +283,7 @@ alloc_nm_rxq_hwq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int cong)
int rc, cntxt_id, i;
__be32 v;
struct adapter *sc = vi->pi->adapter;
+ struct sge_params *sp = &sc->params.sge;
struct netmap_adapter *na = NA(vi->ifp);
struct fw_iq_cmd c;
@@ -293,7 +292,7 @@ alloc_nm_rxq_hwq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int cong)
MPASS(nm_rxq->fl_desc != NULL);
bzero(nm_rxq->iq_desc, vi->qsize_rxq * IQ_ESIZE);
- bzero(nm_rxq->fl_desc, na->num_rx_desc * EQ_ESIZE + spg_len);
+ bzero(nm_rxq->fl_desc, na->num_rx_desc * EQ_ESIZE + sp->spg_len);
bzero(&c, sizeof(c));
c.op_to_vfn = htobe32(V_FW_CMD_OP(FW_IQ_CMD) | F_FW_CMD_REQUEST |
@@ -334,7 +333,7 @@ alloc_nm_rxq_hwq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int cong)
c.fl0dcaen_to_fl0cidxfthresh =
htobe16(V_FW_IQ_CMD_FL0FBMIN(X_FETCHBURSTMIN_128B) |
V_FW_IQ_CMD_FL0FBMAX(X_FETCHBURSTMAX_512B));
- c.fl0size = htobe16(na->num_rx_desc / 8 + spg_len / EQ_ESIZE);
+ c.fl0size = htobe16(na->num_rx_desc / 8 + sp->spg_len / EQ_ESIZE);
c.fl0addr = htobe64(nm_rxq->fl_ba);
rc = -t4_wr_mbox(sc, sc->mbox, &c, sizeof(c), &c);
@@ -345,7 +344,7 @@ alloc_nm_rxq_hwq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int cong)
}
nm_rxq->iq_cidx = 0;
- MPASS(nm_rxq->iq_sidx == vi->qsize_rxq - spg_len / IQ_ESIZE);
+ MPASS(nm_rxq->iq_sidx == vi->qsize_rxq - sp->spg_len / IQ_ESIZE);
nm_rxq->iq_gen = F_RSPD_GEN;
nm_rxq->iq_cntxt_id = be16toh(c.iqid);
nm_rxq->iq_abs_id = be16toh(c.physiqid);
@@ -430,7 +429,7 @@ alloc_nm_txq_hwq(struct vi_info *vi, struct sge_nm_txq *nm_txq)
MPASS(na != NULL);
MPASS(nm_txq->desc != NULL);
- len = na->num_tx_desc * EQ_ESIZE + spg_len;
+ len = na->num_tx_desc * EQ_ESIZE + sc->params.sge.spg_len;
bzero(nm_txq->desc, len);
bzero(&c, sizeof(c));
@@ -472,7 +471,7 @@ alloc_nm_txq_hwq(struct vi_info *vi, struct sge_nm_txq *nm_txq)
if (isset(&nm_txq->doorbells, DOORBELL_UDB) ||
isset(&nm_txq->doorbells, DOORBELL_UDBWC) ||
isset(&nm_txq->doorbells, DOORBELL_WCWR)) {
- uint32_t s_qpp = sc->sge.eq_s_qpp;
+ uint32_t s_qpp = sc->params.sge.eq_s_qpp;
uint32_t mask = (1 << s_qpp) - 1;
volatile uint8_t *udb;
@@ -1112,7 +1111,7 @@ ncxgbe_attach(device_t dev)
na.na_flags = NAF_BDG_MAYSLEEP;
/* Netmap doesn't know about the space reserved for the status page. */
- na.num_tx_desc = vi->qsize_txq - spg_len / EQ_ESIZE;
+ na.num_tx_desc = vi->qsize_txq - sc->params.sge.spg_len / EQ_ESIZE;
/*
* The freelist's cidx/pidx drives netmap's rx cidx/pidx. So
@@ -1220,7 +1219,8 @@ t4_nm_intr(void *arg)
(const void *)&d->cpl[0]);
break;
case CPL_RX_PKT:
- ring->slot[fl_cidx].len = G_RSPD_LEN(lq) - fl_pktshift;
+ ring->slot[fl_cidx].len = G_RSPD_LEN(lq) -
+ sc->params.sge.fl_pktshift;
ring->slot[fl_cidx].flags = kring->nkr_slot_flags;
fl_cidx += (lq & F_RSPD_NEWBUF) ? 1 : 0;
fl_credits += (lq & F_RSPD_NEWBUF) ? 1 : 0;
diff --git a/sys/dev/cxgbe/t4_sge.c b/sys/dev/cxgbe/t4_sge.c
index 7f1236b..33d8d48 100644
--- a/sys/dev/cxgbe/t4_sge.c
+++ b/sys/dev/cxgbe/t4_sge.c
@@ -166,8 +166,8 @@ static struct mbuf *get_fl_payload(struct adapter *, struct sge_fl *, uint32_t);
static int t4_eth_rx(struct sge_iq *, const struct rss_header *, struct mbuf *);
static inline void init_iq(struct sge_iq *, struct adapter *, int, int, int);
static inline void init_fl(struct adapter *, struct sge_fl *, int, int, char *);
-static inline void init_eq(struct sge_eq *, int, int, uint8_t, uint16_t,
- char *);
+static inline void init_eq(struct adapter *, struct sge_eq *, int, int, uint8_t,
+ uint16_t, char *);
static int alloc_ring(struct adapter *, size_t, bus_dma_tag_t *, bus_dmamap_t *,
bus_addr_t *, void **);
static int free_ring(struct adapter *, bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
@@ -495,7 +495,7 @@ t4_tweak_chip_settings(struct adapter *sc)
static inline int
hwsz_ok(struct adapter *sc, int hwsz)
{
- int mask = fl_pad ? sc->sge.pad_boundary - 1 : 16 - 1;
+ int mask = fl_pad ? sc->params.sge.pad_boundary - 1 : 16 - 1;
return (hwsz >= 64 && (hwsz & mask) == 0);
}
@@ -507,6 +507,7 @@ int
t4_read_chip_settings(struct adapter *sc)
{
struct sge *s = &sc->sge;
+ struct sge_params *sp = &sc->params.sge;
int i, j, n, rc = 0;
uint32_t m, v, r;
uint16_t indsz = min(RX_COPY_THRESHOLD - 1, M_INDICATESIZE);
@@ -521,36 +522,21 @@ t4_read_chip_settings(struct adapter *sc)
struct sw_zone_info *swz, *safe_swz;
struct hw_buf_info *hwb;
- m = V_PKTSHIFT(M_PKTSHIFT) | F_RXPKTCPLMODE | F_EGRSTATUSPAGESIZE;
- v = V_PKTSHIFT(fl_pktshift) | F_RXPKTCPLMODE |
- V_EGRSTATUSPAGESIZE(spg_len == 128);
+ t4_init_sge_params(sc);
+
+ m = F_RXPKTCPLMODE;
+ v = F_RXPKTCPLMODE;
r = t4_read_reg(sc, A_SGE_CONTROL);
if ((r & m) != v) {
device_printf(sc->dev, "invalid SGE_CONTROL(0x%x)\n", r);
rc = EINVAL;
}
- s->pad_boundary = 1 << (G_INGPADBOUNDARY(r) + 5);
-
- if (is_t4(sc))
- s->pack_boundary = s->pad_boundary;
- else {
- r = t4_read_reg(sc, A_SGE_CONTROL2);
- if (G_INGPACKBOUNDARY(r) == 0)
- s->pack_boundary = 16;
- else
- s->pack_boundary = 1 << (G_INGPACKBOUNDARY(r) + 5);
- }
- v = V_HOSTPAGESIZEPF0(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF1(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF2(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF3(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF4(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF5(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF6(PAGE_SHIFT - 10) |
- V_HOSTPAGESIZEPF7(PAGE_SHIFT - 10);
- r = t4_read_reg(sc, A_SGE_HOST_PAGE_SIZE);
- if (r != v) {
+ /*
+ * If this changes then every single use of PAGE_SHIFT in the driver
+ * needs to be carefully reviewed for PAGE_SHIFT vs sp->page_shift.
+ */
+ if (sp->page_shift != PAGE_SHIFT) {
device_printf(sc->dev, "invalid SGE_HOST_PAGE_SIZE(0x%x)\n", r);
rc = EINVAL;
}
@@ -589,7 +575,7 @@ t4_read_chip_settings(struct adapter *sc)
if (swz->size < PAGE_SIZE) {
MPASS(powerof2(swz->size));
- if (fl_pad && (swz->size % sc->sge.pad_boundary != 0))
+ if (fl_pad && (swz->size % sp->pad_boundary != 0))
continue;
}
@@ -602,7 +588,7 @@ t4_read_chip_settings(struct adapter *sc)
continue;
#ifdef INVARIANTS
if (fl_pad)
- MPASS(hwb->size % sc->sge.pad_boundary == 0);
+ MPASS(hwb->size % sp->pad_boundary == 0);
#endif
hwb->zidx = i;
if (head == -1)
@@ -653,7 +639,7 @@ t4_read_chip_settings(struct adapter *sc)
hwb = &s->hw_buf_info[i];
#ifdef INVARIANTS
if (fl_pad)
- MPASS(hwb->size % sc->sge.pad_boundary == 0);
+ MPASS(hwb->size % sp->pad_boundary == 0);
#endif
spare = safe_swz->size - hwb->size;
if (spare >= CL_METADATA_SIZE) {
@@ -663,22 +649,6 @@ t4_read_chip_settings(struct adapter *sc)
}
}
- r = t4_read_reg(sc, A_SGE_INGRESS_RX_THRESHOLD);
- s->counter_val[0] = G_THRESHOLD_0(r);
- s->counter_val[1] = G_THRESHOLD_1(r);
- s->counter_val[2] = G_THRESHOLD_2(r);
- s->counter_val[3] = G_THRESHOLD_3(r);
-
- r = t4_read_reg(sc, A_SGE_TIMER_VALUE_0_AND_1);
- s->timer_val[0] = G_TIMERVALUE0(r) / core_ticks_per_usec(sc);
- s->timer_val[1] = G_TIMERVALUE1(r) / core_ticks_per_usec(sc);
- r = t4_read_reg(sc, A_SGE_TIMER_VALUE_2_AND_3);
- s->timer_val[2] = G_TIMERVALUE2(r) / core_ticks_per_usec(sc);
- s->timer_val[3] = G_TIMERVALUE3(r) / core_ticks_per_usec(sc);
- r = t4_read_reg(sc, A_SGE_TIMER_VALUE_4_AND_5);
- s->timer_val[4] = G_TIMERVALUE4(r) / core_ticks_per_usec(sc);
- s->timer_val[5] = G_TIMERVALUE5(r) / core_ticks_per_usec(sc);
-
v = V_HPZ0(0) | V_HPZ1(2) | V_HPZ2(4) | V_HPZ3(6);
r = t4_read_reg(sc, A_ULP_RX_TDDP_PSZ);
if (r != v) {
@@ -702,25 +672,6 @@ t4_read_chip_settings(struct adapter *sc)
rc = EINVAL;
}
- r = t4_read_reg(sc, A_SGE_CONM_CTRL);
- s->fl_starve_threshold = G_EGRTHRESHOLD(r) * 2 + 1;
- if (is_t4(sc))
- s->fl_starve_threshold2 = s->fl_starve_threshold;
- else
- s->fl_starve_threshold2 = G_EGRTHRESHOLDPACKING(r) * 2 + 1;
-
- /* egress queues: log2 of # of doorbells per BAR2 page */
- r = t4_read_reg(sc, A_SGE_EGRESS_QUEUES_PER_PAGE_PF);
- r >>= S_QUEUESPERPAGEPF0 +
- (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * sc->pf;
- s->eq_s_qpp = r & M_QUEUESPERPAGEPF0;
-
- /* ingress queues: log2 of # of doorbells per BAR2 page */
- r = t4_read_reg(sc, A_SGE_INGRESS_QUEUES_PER_PAGE_PF);
- r >>= S_QUEUESPERPAGEPF0 +
- (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * sc->pf;
- s->iq_s_qpp = r & M_QUEUESPERPAGEPF0;
-
t4_init_tp_params(sc);
t4_read_mtu_tbl(sc, sc->params.mtus, NULL);
@@ -750,25 +701,26 @@ void
t4_sge_sysctls(struct adapter *sc, struct sysctl_ctx_list *ctx,
struct sysctl_oid_list *children)
{
+ struct sge_params *sp = &sc->params.sge;
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "buffer_sizes",
CTLTYPE_STRING | CTLFLAG_RD, &sc->sge, 0, sysctl_bufsizes, "A",
"freelist buffer sizes");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "fl_pktshift", CTLFLAG_RD,
- NULL, fl_pktshift, "payload DMA offset in rx buffer (bytes)");
+ NULL, sp->fl_pktshift, "payload DMA offset in rx buffer (bytes)");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "fl_pad", CTLFLAG_RD,
- NULL, sc->sge.pad_boundary, "payload pad boundary (bytes)");
+ NULL, sp->pad_boundary, "payload pad boundary (bytes)");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "spg_len", CTLFLAG_RD,
- NULL, spg_len, "status page size (bytes)");
+ NULL, sp->spg_len, "status page size (bytes)");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "cong_drop", CTLFLAG_RD,
NULL, cong_drop, "congestion drop setting");
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "fl_pack", CTLFLAG_RD,
- NULL, sc->sge.pack_boundary, "payload pack boundary (bytes)");
+ NULL, sp->pack_boundary, "payload pack boundary (bytes)");
}
int
@@ -907,8 +859,8 @@ mtu_to_max_payload(struct adapter *sc, int mtu, const int toe)
} else {
#endif
/* large enough even when hw VLAN extraction is disabled */
- payload = fl_pktshift + ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN +
- mtu;
+ payload = sc->params.sge.fl_pktshift + ETHER_HDR_LEN +
+ ETHER_VLAN_ENCAP_LEN + mtu;
#ifdef TCP_OFFLOAD
}
#endif
@@ -1069,7 +1021,7 @@ t4_setup_vi_queues(struct vi_info *vi)
iqid = vi_intr_iq(vi, j)->cntxt_id;
snprintf(name, sizeof(name), "%s txq%d",
device_get_nameunit(vi->dev), i);
- init_eq(&txq->eq, EQ_ETH, vi->qsize_txq, pi->tx_chan, iqid,
+ init_eq(sc, &txq->eq, EQ_ETH, vi->qsize_txq, pi->tx_chan, iqid,
name);
rc = alloc_txq(vi, txq, i, oid);
@@ -1086,7 +1038,7 @@ t4_setup_vi_queues(struct vi_info *vi)
iqid = vi_intr_iq(vi, j)->cntxt_id;
snprintf(name, sizeof(name), "%s ofld_txq%d",
device_get_nameunit(vi->dev), i);
- init_eq(&ofld_txq->eq, EQ_OFLD, vi->qsize_txq, pi->tx_chan,
+ init_eq(sc, &ofld_txq->eq, EQ_OFLD, vi->qsize_txq, pi->tx_chan,
iqid, name);
snprintf(name, sizeof(name), "%d", i);
@@ -1110,7 +1062,8 @@ t4_setup_vi_queues(struct vi_info *vi)
ctrlq = &sc->sge.ctrlq[pi->port_id];
iqid = vi_intr_iq(vi, 0)->cntxt_id;
snprintf(name, sizeof(name), "%s ctrlq", device_get_nameunit(vi->dev));
- init_eq(&ctrlq->eq, EQ_CTRL, CTRL_EQ_QSIZE, pi->tx_chan, iqid, name);
+ init_eq(sc, &ctrlq->eq, EQ_CTRL, CTRL_EQ_QSIZE, pi->tx_chan, iqid,
+ name);
rc = alloc_wrq(sc, vi, ctrlq, oid);
done:
@@ -1690,6 +1643,7 @@ t4_eth_rx(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m0)
{
struct sge_rxq *rxq = iq_to_rxq(iq);
struct ifnet *ifp = rxq->ifp;
+ struct adapter *sc = iq->adapter;
const struct cpl_rx_pkt *cpl = (const void *)(rss + 1);
#if defined(INET) || defined(INET6)
struct lro_ctrl *lro = &rxq->lro;
@@ -1704,9 +1658,9 @@ t4_eth_rx(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m0)
KASSERT(m0 != NULL, ("%s: no payload with opcode %02x", __func__,
rss->opcode));
- m0->m_pkthdr.len -= fl_pktshift;
- m0->m_len -= fl_pktshift;
- m0->m_data += fl_pktshift;
+ m0->m_pkthdr.len -= sc->params.sge.fl_pktshift;
+ m0->m_len -= sc->params.sge.fl_pktshift;
+ m0->m_data += sc->params.sge.fl_pktshift;
m0->m_pkthdr.rcvif = ifp;
M_HASHTYPE_SET(m0, sw_hashtype[rss->hash_type][rss->ipv6]);
@@ -2445,7 +2399,7 @@ init_iq(struct sge_iq *iq, struct adapter *sc, int tmr_idx, int pktc_idx,
iq->intr_pktc_idx = pktc_idx;
}
iq->qsize = roundup2(qsize, 16); /* See FW_IQ_CMD/iqsize */
- iq->sidx = iq->qsize - spg_len / IQ_ESIZE;
+ iq->sidx = iq->qsize - sc->params.sge.spg_len / IQ_ESIZE;
}
static inline void
@@ -2453,7 +2407,7 @@ init_fl(struct adapter *sc, struct sge_fl *fl, int qsize, int maxp, char *name)
{
fl->qsize = qsize;
- fl->sidx = qsize - spg_len / EQ_ESIZE;
+ fl->sidx = qsize - sc->params.sge.spg_len / EQ_ESIZE;
strlcpy(fl->lockname, name, sizeof(fl->lockname));
if (sc->flags & BUF_PACKING_OK &&
((!is_t4(sc) && buffer_packing) || /* T5+: enabled unless 0 */
@@ -2464,15 +2418,15 @@ init_fl(struct adapter *sc, struct sge_fl *fl, int qsize, int maxp, char *name)
}
static inline void
-init_eq(struct sge_eq *eq, int eqtype, int qsize, uint8_t tx_chan,
- uint16_t iqid, char *name)
+init_eq(struct adapter *sc, struct sge_eq *eq, int eqtype, int qsize,
+ uint8_t tx_chan, uint16_t iqid, char *name)
{
KASSERT(eqtype <= EQ_TYPEMASK, ("%s: bad qtype %d", __func__, eqtype));
eq->flags = eqtype & EQ_TYPEMASK;
eq->tx_chan = tx_chan;
eq->iqid = iqid;
- eq->sidx = qsize - spg_len / EQ_ESIZE;
+ eq->sidx = qsize - sc->params.sge.spg_len / EQ_ESIZE;
strlcpy(eq->lockname, name, sizeof(eq->lockname));
}
@@ -2543,6 +2497,7 @@ alloc_iq_fl(struct vi_info *vi, struct sge_iq *iq, struct sge_fl *fl,
struct fw_iq_cmd c;
struct port_info *pi = vi->pi;
struct adapter *sc = iq->adapter;
+ struct sge_params *sp = &sc->params.sge;
__be32 v = 0;
len = iq->qsize * IQ_ESIZE;
@@ -2602,14 +2557,14 @@ alloc_iq_fl(struct vi_info *vi, struct sge_iq *iq, struct sge_fl *fl,
}
if (fl->flags & FL_BUF_PACKING) {
- fl->lowat = roundup2(sc->sge.fl_starve_threshold2, 8);
- fl->buf_boundary = sc->sge.pack_boundary;
+ fl->lowat = roundup2(sp->fl_starve_threshold2, 8);
+ fl->buf_boundary = sp->pack_boundary;
} else {
- fl->lowat = roundup2(sc->sge.fl_starve_threshold, 8);
+ fl->lowat = roundup2(sp->fl_starve_threshold, 8);
fl->buf_boundary = 16;
}
- if (fl_pad && fl->buf_boundary < sc->sge.pad_boundary)
- fl->buf_boundary = sc->sge.pad_boundary;
+ if (fl_pad && fl->buf_boundary < sp->pad_boundary)
+ fl->buf_boundary = sp->pad_boundary;
c.iqns_to_fl0congen |=
htobe32(V_FW_IQ_CMD_FL0HOSTFCMODE(X_HOSTFCMODE_NONE) |
@@ -2667,7 +2622,7 @@ alloc_iq_fl(struct vi_info *vi, struct sge_iq *iq, struct sge_fl *fl,
qid = fl->cntxt_id;
if (isset(&sc->doorbells, DOORBELL_UDB)) {
- uint32_t s_qpp = sc->sge.eq_s_qpp;
+ uint32_t s_qpp = sc->params.sge.eq_s_qpp;
uint32_t mask = (1 << s_qpp) - 1;
volatile uint8_t *udb;
@@ -2856,7 +2811,7 @@ alloc_mgmtq(struct adapter *sc)
NULL, "management queue");
snprintf(name, sizeof(name), "%s mgmtq", device_get_nameunit(sc->dev));
- init_eq(&mgmtq->eq, EQ_CTRL, CTRL_EQ_QSIZE, sc->port[0]->tx_chan,
+ init_eq(sc, &mgmtq->eq, EQ_CTRL, CTRL_EQ_QSIZE, sc->port[0]->tx_chan,
sc->sge.fwq.cntxt_id, name);
rc = alloc_wrq(sc, NULL, mgmtq, oid);
if (rc != 0) {
@@ -3041,7 +2996,7 @@ alloc_nm_rxq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int intr_idx,
if (rc != 0)
return (rc);
- len = na->num_rx_desc * EQ_ESIZE + spg_len;
+ len = na->num_rx_desc * EQ_ESIZE + sc->params.sge.spg_len;
rc = alloc_ring(sc, len, &nm_rxq->fl_desc_tag, &nm_rxq->fl_desc_map,
&nm_rxq->fl_ba, (void **)&nm_rxq->fl_desc);
if (rc != 0)
@@ -3050,7 +3005,7 @@ alloc_nm_rxq(struct vi_info *vi, struct sge_nm_rxq *nm_rxq, int intr_idx,
nm_rxq->vi = vi;
nm_rxq->nid = idx;
nm_rxq->iq_cidx = 0;
- nm_rxq->iq_sidx = vi->qsize_rxq - spg_len / IQ_ESIZE;
+ nm_rxq->iq_sidx = vi->qsize_rxq - sc->params.sge.spg_len / IQ_ESIZE;
nm_rxq->iq_gen = F_RSPD_GEN;
nm_rxq->fl_pidx = nm_rxq->fl_cidx = 0;
nm_rxq->fl_sidx = na->num_rx_desc;
@@ -3116,7 +3071,7 @@ alloc_nm_txq(struct vi_info *vi, struct sge_nm_txq *nm_txq, int iqidx, int idx,
char name[16];
struct sysctl_oid_list *children = SYSCTL_CHILDREN(oid);
- len = na->num_tx_desc * EQ_ESIZE + spg_len;
+ len = na->num_tx_desc * EQ_ESIZE + sc->params.sge.spg_len;
rc = alloc_ring(sc, len, &nm_txq->desc_tag, &nm_txq->desc_map,
&nm_txq->ba, (void **)&nm_txq->desc);
if (rc)
@@ -3164,7 +3119,7 @@ ctrl_eq_alloc(struct adapter *sc, struct sge_eq *eq)
{
int rc, cntxt_id;
struct fw_eq_ctrl_cmd c;
- int qsize = eq->sidx + spg_len / EQ_ESIZE;
+ int qsize = eq->sidx + sc->params.sge.spg_len / EQ_ESIZE;
bzero(&c, sizeof(c));
@@ -3208,7 +3163,7 @@ eth_eq_alloc(struct adapter *sc, struct vi_info *vi, struct sge_eq *eq)
{
int rc, cntxt_id;
struct fw_eq_eth_cmd c;
- int qsize = eq->sidx + spg_len / EQ_ESIZE;
+ int qsize = eq->sidx + sc->params.sge.spg_len / EQ_ESIZE;
bzero(&c, sizeof(c));
@@ -3252,7 +3207,7 @@ ofld_eq_alloc(struct adapter *sc, struct vi_info *vi, struct sge_eq *eq)
{
int rc, cntxt_id;
struct fw_eq_ofld_cmd c;
- int qsize = eq->sidx + spg_len / EQ_ESIZE;
+ int qsize = eq->sidx + sc->params.sge.spg_len / EQ_ESIZE;
bzero(&c, sizeof(c));
@@ -3298,7 +3253,7 @@ alloc_eq(struct adapter *sc, struct vi_info *vi, struct sge_eq *eq)
mtx_init(&eq->eq_lock, eq->lockname, NULL, MTX_DEF);
- qsize = eq->sidx + spg_len / EQ_ESIZE;
+ qsize = eq->sidx + sc->params.sge.spg_len / EQ_ESIZE;
len = qsize * EQ_ESIZE;
rc = alloc_ring(sc, len, &eq->desc_tag, &eq->desc_map,
&eq->ba, (void **)&eq->desc);
@@ -3337,7 +3292,7 @@ alloc_eq(struct adapter *sc, struct vi_info *vi, struct sge_eq *eq)
if (isset(&eq->doorbells, DOORBELL_UDB) ||
isset(&eq->doorbells, DOORBELL_UDBWC) ||
isset(&eq->doorbells, DOORBELL_WCWR)) {
- uint32_t s_qpp = sc->sge.eq_s_qpp;
+ uint32_t s_qpp = sc->params.sge.eq_s_qpp;
uint32_t mask = (1 << s_qpp) - 1;
volatile uint8_t *udb;
@@ -4523,10 +4478,10 @@ done:
* Do not inline mbufs if doing so would violate the pad/pack
* boundary alignment requirement.
*/
- if (fl_pad && (MSIZE % sc->sge.pad_boundary) != 0)
+ if (fl_pad && (MSIZE % sc->params.sge.pad_boundary) != 0)
continue;
if (fl->flags & FL_BUF_PACKING &&
- (MSIZE % sc->sge.pack_boundary) != 0)
+ (MSIZE % sc->params.sge.pack_boundary) != 0)
continue;
if (spare < CL_METADATA_SIZE + MSIZE)
@@ -4612,7 +4567,7 @@ find_safe_refill_source(struct adapter *sc, struct sge_fl *fl)
fl->cll_alt.hwidx = hwidx;
fl->cll_alt.zidx = hwb->zidx;
if (allow_mbufs_in_cluster &&
- (fl_pad == 0 || (MSIZE % sc->sge.pad_boundary) == 0))
+ (fl_pad == 0 || (MSIZE % sc->params.sge.pad_boundary) == 0))
fl->cll_alt.region1 = ((spare - CL_METADATA_SIZE) / MSIZE) * MSIZE;
else
fl->cll_alt.region1 = 0;
diff --git a/sys/dev/drm2/drmP.h b/sys/dev/drm2/drmP.h
index ae12144..2853678 100644
--- a/sys/dev/drm2/drmP.h
+++ b/sys/dev/drm2/drmP.h
@@ -238,7 +238,6 @@ struct drm_device;
__func__ , ##__VA_ARGS__); \
} while (0)
-
/*@}*/
/***********************************************************************/
@@ -700,6 +699,8 @@ struct drm_driver {
void (*postclose) (struct drm_device *, struct drm_file *);
void (*lastclose) (struct drm_device *);
int (*unload) (struct drm_device *);
+ int (*suspend) (struct drm_device *, pm_message_t state);
+ int (*resume) (struct drm_device *);
int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
int (*dma_quiescent) (struct drm_device *);
int (*context_dtor) (struct drm_device *dev, int context);
@@ -1118,7 +1119,7 @@ struct drm_device {
char busid_str[128];
int modesetting;
- drm_pci_id_list_t *id_entry; /* PCI ID, name, and chipset private */
+ const drm_pci_id_list_t *id_entry; /* PCI ID, name, and chipset private */
};
#define DRM_SWITCH_POWER_ON 0
@@ -1581,6 +1582,8 @@ static __inline__ void drm_core_dropmap(struct drm_local_map *map)
{
}
+#include <dev/drm2/drm_mem_util.h>
+
extern int drm_fill_in_dev(struct drm_device *dev,
struct drm_driver *driver);
extern void drm_cancel_fill_in_dev(struct drm_device *dev);
@@ -1758,9 +1761,11 @@ struct dmi_system_id {
bool dmi_check_system(const struct dmi_system_id *);
/* Device setup support (drm_drv.c) */
-int drm_probe_helper(device_t kdev, drm_pci_id_list_t *idlist);
-int drm_attach_helper(device_t kdev, drm_pci_id_list_t *idlist,
+int drm_probe_helper(device_t kdev, const drm_pci_id_list_t *idlist);
+int drm_attach_helper(device_t kdev, const drm_pci_id_list_t *idlist,
struct drm_driver *driver);
+int drm_generic_suspend(device_t kdev);
+int drm_generic_resume(device_t kdev);
int drm_generic_detach(device_t kdev);
void drm_event_wakeup(struct drm_pending_event *e);
diff --git a/sys/dev/drm2/drm_atomic.h b/sys/dev/drm2/drm_atomic.h
index fd84922..53155c7 100644
--- a/sys/dev/drm2/drm_atomic.h
+++ b/sys/dev/drm2/drm_atomic.h
@@ -39,8 +39,8 @@ typedef uint64_t atomic64_t;
#define NB_BITS_PER_LONG (sizeof(long) * NBBY)
#define BITS_TO_LONGS(x) howmany(x, NB_BITS_PER_LONG)
-#define atomic_read(p) (*(volatile u_int *)(p))
-#define atomic_set(p, v) do { *(u_int *)(p) = (v); } while (0)
+#define atomic_read(p) atomic_load_acq_int(p)
+#define atomic_set(p, v) atomic_store_rel_int(p, v)
#define atomic64_read(p) atomic_load_acq_64(p)
#define atomic64_set(p, v) atomic_store_rel_64(p, v)
@@ -78,6 +78,9 @@ typedef uint64_t atomic64_t;
#define cmpxchg(ptr, old, new) \
(atomic_cmpset_int((volatile u_int *)(ptr),(old),(new)) ? (old) : (0))
+#define atomic_inc_not_zero(p) atomic_inc(p)
+#define atomic_clear_mask(b, p) atomic_clear_int((p), (b))
+
static __inline u_long
find_first_zero_bit(const u_long *p, u_long max)
{
diff --git a/sys/dev/drm2/drm_dp_iic_helper.c b/sys/dev/drm2/drm_dp_iic_helper.c
index 492e2f9..35318c1 100644
--- a/sys/dev/drm2/drm_dp_iic_helper.c
+++ b/sys/dev/drm2/drm_dp_iic_helper.c
@@ -149,7 +149,7 @@ iic_dp_aux_xfer(device_t idev, struct iic_msg *msgs, uint32_t num)
buf = msgs[m].buf;
reading = (msgs[m].flags & IIC_M_RD) != 0;
ret = iic_dp_aux_address(idev, msgs[m].slave >> 1, reading);
- if (ret != 0)
+ if (ret < 0)
break;
if (reading) {
for (b = 0; b < len; b++) {
@@ -160,7 +160,7 @@ iic_dp_aux_xfer(device_t idev, struct iic_msg *msgs, uint32_t num)
} else {
for (b = 0; b < len; b++) {
ret = iic_dp_aux_put_byte(idev, buf[b]);
- if (ret != 0)
+ if (ret < 0)
break;
}
}
diff --git a/sys/dev/drm2/drm_drv.c b/sys/dev/drm2/drm_drv.c
index f4431a7..c3e6869 100644
--- a/sys/dev/drm2/drm_drv.c
+++ b/sys/dev/drm2/drm_drv.c
@@ -470,6 +470,14 @@ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
err_i1:
atomic_dec(&dev->ioctl_count);
+ if (retcode == -ERESTARTSYS) {
+ /*
+ * FIXME: Find where in i915 ERESTARTSYS should be
+ * converted to EINTR.
+ */
+ DRM_DEBUG("ret = %d -> %d\n", retcode, -EINTR);
+ retcode = -EINTR;
+ }
if (retcode)
DRM_DEBUG("ret = %d\n", retcode);
if (retcode != 0 &&
diff --git a/sys/dev/drm2/drm_linux_list.h b/sys/dev/drm2/drm_linux_list.h
index f2161439..b24ac96 100644
--- a/sys/dev/drm2/drm_linux_list.h
+++ b/sys/dev/drm2/drm_linux_list.h
@@ -40,7 +40,6 @@ struct list_head {
};
#define list_entry(ptr, type, member) container_of(ptr,type,member)
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
static __inline__ void
INIT_LIST_HEAD(struct list_head *head) {
@@ -179,4 +178,123 @@ list_splice(const struct list_head *list, struct list_head *head)
void drm_list_sort(void *priv, struct list_head *head, int (*cmp)(void *priv,
struct list_head *a, struct list_head *b));
+/* hlist, copied from sys/dev/ofed/linux/list.h */
+
+struct hlist_head {
+ struct hlist_node *first;
+};
+
+struct hlist_node {
+ struct hlist_node *next, **pprev;
+};
+
+#define HLIST_HEAD_INIT { }
+#define HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT
+#define INIT_HLIST_HEAD(head) (head)->first = NULL
+#define INIT_HLIST_NODE(node) \
+do { \
+ (node)->next = NULL; \
+ (node)->pprev = NULL; \
+} while (0)
+
+static inline int
+hlist_unhashed(const struct hlist_node *h)
+{
+
+ return !h->pprev;
+}
+
+static inline int
+hlist_empty(const struct hlist_head *h)
+{
+
+ return !h->first;
+}
+
+static inline void
+hlist_del(struct hlist_node *n)
+{
+
+ if (n->next)
+ n->next->pprev = n->pprev;
+ *n->pprev = n->next;
+}
+
+static inline void
+hlist_del_init(struct hlist_node *n)
+{
+
+ if (hlist_unhashed(n))
+ return;
+ hlist_del(n);
+ INIT_HLIST_NODE(n);
+}
+
+static inline void
+hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+{
+
+ n->next = h->first;
+ if (h->first)
+ h->first->pprev = &n->next;
+ h->first = n;
+ n->pprev = &h->first;
+}
+
+static inline void
+hlist_add_before(struct hlist_node *n, struct hlist_node *next)
+{
+
+ n->pprev = next->pprev;
+ n->next = next;
+ next->pprev = &n->next;
+ *(n->pprev) = n;
+}
+
+static inline void
+hlist_add_after(struct hlist_node *n, struct hlist_node *next)
+{
+
+ next->next = n->next;
+ n->next = next;
+ next->pprev = &n->next;
+ if (next->next)
+ next->next->pprev = &next->next;
+}
+
+static inline void
+hlist_move_list(struct hlist_head *old, struct hlist_head *new)
+{
+
+ new->first = old->first;
+ if (new->first)
+ new->first->pprev = &new->first;
+ old->first = NULL;
+}
+
+#define hlist_entry(ptr, type, field) container_of(ptr, type, field)
+
+#define hlist_for_each(p, head) \
+ for (p = (head)->first; p; p = p->next)
+
+#define hlist_for_each_safe(p, n, head) \
+ for (p = (head)->first; p && ({ n = p->next; 1; }); p = n)
+
+#define hlist_for_each_entry(tp, p, head, field) \
+ for (p = (head)->first; \
+ p ? (tp = hlist_entry(p, typeof(*tp), field)): NULL; p = p->next)
+
+#define hlist_for_each_entry_continue(tp, p, field) \
+ for (p = (p)->next; \
+ p ? (tp = hlist_entry(p, typeof(*tp), field)): NULL; p = p->next)
+
+#define hlist_for_each_entry_from(tp, p, field) \
+ for (; p ? (tp = hlist_entry(p, typeof(*tp), field)): NULL; p = p->next)
+
+#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \
+ for (pos = (head)->first; \
+ (pos) != 0 && ({ n = (pos)->next; \
+ tpos = hlist_entry((pos), typeof(*(tpos)), member); 1;}); \
+ pos = (n))
+
#endif /* _DRM_LINUX_LIST_H_ */
diff --git a/sys/dev/drm2/drm_mem_util.h b/sys/dev/drm2/drm_mem_util.h
new file mode 100644
index 0000000..01ca720
--- /dev/null
+++ b/sys/dev/drm2/drm_mem_util.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright © 2008 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ * Jesse Barnes <jbarnes@virtuousgeek.org>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _DRM_MEM_UTIL_H_
+#define _DRM_MEM_UTIL_H_
+
+#include <sys/types.h>
+#include <sys/malloc.h>
+
+static __inline__ void *drm_calloc_large(size_t nmemb, size_t size)
+{
+ if (size != 0 && nmemb > SIZE_MAX / size)
+ return NULL;
+
+ return malloc(nmemb * size, DRM_MEM_DRIVER, M_NOWAIT | M_ZERO);
+}
+
+/* Modeled after cairo's malloc_ab, it's like calloc but without the zeroing. */
+static __inline__ void *drm_malloc_ab(size_t nmemb, size_t size)
+{
+ if (size != 0 && nmemb > SIZE_MAX / size)
+ return NULL;
+
+ return malloc(nmemb * size, DRM_MEM_DRIVER, M_NOWAIT);
+}
+
+static __inline void drm_free_large(void *ptr)
+{
+ free(ptr, DRM_MEM_DRIVER);
+}
+
+#endif
diff --git a/sys/dev/drm2/drm_os_freebsd.c b/sys/dev/drm2/drm_os_freebsd.c
index 5baa01a..9b147a0 100644
--- a/sys/dev/drm2/drm_os_freebsd.c
+++ b/sys/dev/drm2/drm_os_freebsd.c
@@ -67,8 +67,27 @@ ns_to_timeval(const int64_t nsec)
return (tv);
}
-static drm_pci_id_list_t *
-drm_find_description(int vendor, int device, drm_pci_id_list_t *idlist)
+/* Copied from OFED. */
+unsigned long drm_linux_timer_hz_mask;
+
+static void
+drm_linux_timer_init(void *arg)
+{
+
+ /*
+ * Compute an internal HZ value which can divide 2**32 to
+ * avoid timer rounding problems when the tick value wraps
+ * around 2**32:
+ */
+ drm_linux_timer_hz_mask = 1;
+ while (drm_linux_timer_hz_mask < (unsigned long)hz)
+ drm_linux_timer_hz_mask *= 2;
+ drm_linux_timer_hz_mask--;
+}
+SYSINIT(drm_linux_timer, SI_SUB_DRIVERS, SI_ORDER_FIRST, drm_linux_timer_init, NULL);
+
+static const drm_pci_id_list_t *
+drm_find_description(int vendor, int device, const drm_pci_id_list_t *idlist)
{
int i = 0;
@@ -87,9 +106,9 @@ drm_find_description(int vendor, int device, drm_pci_id_list_t *idlist)
* method.
*/
int
-drm_probe_helper(device_t kdev, drm_pci_id_list_t *idlist)
+drm_probe_helper(device_t kdev, const drm_pci_id_list_t *idlist)
{
- drm_pci_id_list_t *id_entry;
+ const drm_pci_id_list_t *id_entry;
int vendor, device;
vendor = pci_get_vendor(kdev);
@@ -118,7 +137,7 @@ drm_probe_helper(device_t kdev, drm_pci_id_list_t *idlist)
* method.
*/
int
-drm_attach_helper(device_t kdev, drm_pci_id_list_t *idlist,
+drm_attach_helper(device_t kdev, const drm_pci_id_list_t *idlist,
struct drm_driver *driver)
{
struct drm_device *dev;
@@ -137,6 +156,55 @@ drm_attach_helper(device_t kdev, drm_pci_id_list_t *idlist,
}
int
+drm_generic_suspend(device_t kdev)
+{
+ struct drm_device *dev;
+ int error;
+
+ DRM_DEBUG_KMS("Starting suspend\n");
+
+ dev = device_get_softc(kdev);
+ if (dev->driver->suspend) {
+ pm_message_t state;
+
+ state.event = PM_EVENT_SUSPEND;
+ error = -dev->driver->suspend(dev, state);
+ if (error)
+ goto out;
+ }
+
+ error = bus_generic_suspend(kdev);
+
+out:
+ DRM_DEBUG_KMS("Finished suspend: %d\n", error);
+
+ return error;
+}
+
+int
+drm_generic_resume(device_t kdev)
+{
+ struct drm_device *dev;
+ int error;
+
+ DRM_DEBUG_KMS("Starting resume\n");
+
+ dev = device_get_softc(kdev);
+ if (dev->driver->resume) {
+ error = -dev->driver->resume(dev);
+ if (error)
+ goto out;
+ }
+
+ error = bus_generic_resume(kdev);
+
+out:
+ DRM_DEBUG_KMS("Finished resume: %d\n", error);
+
+ return error;
+}
+
+int
drm_generic_detach(device_t kdev)
{
struct drm_device *dev;
@@ -331,6 +399,42 @@ drm_clflush_virt_range(char *addr, unsigned long length)
#endif
}
+void
+hex_dump_to_buffer(const void *buf, size_t len, int rowsize, int groupsize,
+ char *linebuf, size_t linebuflen, bool ascii __unused)
+{
+ int i, j, c;
+
+ i = j = 0;
+
+ while (i < len && j <= linebuflen) {
+ c = ((const char *)buf)[i];
+
+ if (i != 0) {
+ if (i % rowsize == 0) {
+ /* Newline required. */
+ sprintf(linebuf + j, "\n");
+ ++j;
+ } else if (i % groupsize == 0) {
+ /* Space required. */
+ sprintf(linebuf + j, " ");
+ ++j;
+ }
+ }
+
+ if (j > linebuflen - 1)
+ break;
+
+ sprintf(linebuf + j, "%02X", c);
+ j += 2;
+
+ ++i;
+ }
+
+ if (j <= linebuflen)
+ sprintf(linebuf + j, "\n");
+}
+
#if DRM_LINUX
#include <sys/sysproto.h>
diff --git a/sys/dev/drm2/drm_os_freebsd.h b/sys/dev/drm2/drm_os_freebsd.h
index 8aa660a..f590493 100644
--- a/sys/dev/drm2/drm_os_freebsd.h
+++ b/sys/dev/drm2/drm_os_freebsd.h
@@ -10,6 +10,7 @@ __FBSDID("$FreeBSD$");
#define _DRM_OS_FREEBSD_H_
#include <sys/fbio.h>
+#include <sys/smp.h>
#if _BYTE_ORDER == _BIG_ENDIAN
#define __BIG_ENDIAN 4321
@@ -24,10 +25,22 @@ __FBSDID("$FreeBSD$");
#endif
#ifndef __user
-#define __user
+#define __user
#endif
#ifndef __iomem
-#define __iomem
+#define __iomem
+#endif
+#ifndef __always_unused
+#define __always_unused
+#endif
+#ifndef __must_check
+#define __must_check
+#endif
+#ifndef __force
+#define __force
+#endif
+#ifndef uninitialized_var
+#define uninitialized_var(x) x
#endif
#define cpu_to_le16(x) htole16(x)
@@ -69,9 +82,23 @@ typedef void irqreturn_t;
#define __exit
#define __read_mostly
-#define WARN_ON(cond) KASSERT(!(cond), ("WARN ON: " #cond))
+#define BUILD_BUG_ON(x) CTASSERT(!(x))
+#define BUILD_BUG_ON_NOT_POWER_OF_2(x)
+
+#ifndef WARN
+#define WARN(condition, format, ...) ({ \
+ int __ret_warn_on = !!(condition); \
+ if (unlikely(__ret_warn_on)) \
+ DRM_ERROR(format, ##__VA_ARGS__); \
+ unlikely(__ret_warn_on); \
+})
+#endif
+#define WARN_ONCE(condition, format, ...) \
+ WARN(condition, format, ##__VA_ARGS__)
+#define WARN_ON(cond) WARN(cond, "WARN ON: " #cond)
#define WARN_ON_SMP(cond) WARN_ON(cond)
-#define BUG_ON(cond) KASSERT(!(cond), ("BUG ON: " #cond))
+#define BUG() panic("BUG")
+#define BUG_ON(cond) KASSERT(!(cond), ("BUG ON: " #cond " -> 0x%jx", (uintmax_t)(cond)))
#define unlikely(x) __builtin_expect(!!(x), 0)
#define likely(x) __builtin_expect(!!(x), 1)
#define container_of(ptr, type, member) ({ \
@@ -93,6 +120,15 @@ typedef void irqreturn_t;
#define DRM_UDELAY(udelay) DELAY(udelay)
#define drm_msleep(x, msg) pause((msg), ((int64_t)(x)) * hz / 1000)
#define DRM_MSLEEP(msecs) drm_msleep((msecs), "drm_msleep")
+#define get_seconds() time_second
+
+#define ioread8(addr) *(volatile uint8_t *)((char *)addr)
+#define ioread16(addr) *(volatile uint16_t *)((char *)addr)
+#define ioread32(addr) *(volatile uint32_t *)((char *)addr)
+
+#define iowrite8(data, addr) *(volatile uint8_t *)((char *)addr) = data;
+#define iowrite16(data, addr) *(volatile uint16_t *)((char *)addr) = data;
+#define iowrite32(data, addr) *(volatile uint32_t *)((char *)addr) = data;
#define DRM_READ8(map, offset) \
*(volatile u_int8_t *)(((vm_offset_t)(map)->handle) + \
@@ -127,12 +163,18 @@ typedef void irqreturn_t;
#define DRM_WRITEMEMORYBARRIER() wmb()
#define DRM_MEMORYBARRIER() mb()
#define smp_rmb() rmb()
+#define smp_wmb() wmb()
#define smp_mb__before_atomic_inc() mb()
#define smp_mb__after_atomic_inc() mb()
+#define barrier() __compiler_membar()
#define do_div(a, b) ((a) /= (b))
#define div64_u64(a, b) ((a) / (b))
#define lower_32_bits(n) ((u32)(n))
+#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
+
+#define __set_bit(n, s) set_bit((n), (s))
+#define __clear_bit(n, s) clear_bit((n), (s))
#define min_t(type, x, y) ({ \
type __min1 = (x); \
@@ -148,6 +190,10 @@ typedef void irqreturn_t;
#define memcpy_fromio(a, b, c) memcpy((a), (b), (c))
#define memcpy_toio(a, b, c) memcpy((a), (b), (c))
+#define VERIFY_READ VM_PROT_READ
+#define VERIFY_WRITE VM_PROT_WRITE
+#define access_ok(prot, p, l) useracc((p), (l), (prot))
+
/* XXXKIB what is the right code for the FreeBSD ? */
/* kib@ used ENXIO here -- dumbbell@ */
#define EREMOTEIO EIO
@@ -170,8 +216,10 @@ typedef void irqreturn_t;
#define PCI_VENDOR_ID_SONY 0x104d
#define PCI_VENDOR_ID_VIA 0x1106
-#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
-#define hweight32(i) bitcount32(i)
+#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
+#define DIV_ROUND_CLOSEST(n,d) (((n) + (d) / 2) / (d))
+#define div_u64(n, d) ((n) / (d))
+#define hweight32(i) bitcount32(i)
static inline unsigned long
roundup_pow_of_two(unsigned long x)
@@ -195,6 +243,8 @@ ror32(uint32_t word, unsigned int shift)
}
#define IS_ALIGNED(x, y) (((x) & ((y) - 1)) == 0)
+#define round_down(x, y) rounddown2((x), (y))
+#define round_up(x, y) roundup2((x), (y))
#define get_unaligned(ptr) \
({ __typeof__(*(ptr)) __tmp; \
memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
@@ -251,7 +301,9 @@ abs64(int64_t x)
int64_t timeval_to_ns(const struct timeval *tv);
struct timeval ns_to_timeval(const int64_t nsec);
-#define PAGE_ALIGN(addr) round_page(addr)
+#define PAGE_ALIGN(addr) round_page(addr)
+#define page_to_phys(x) VM_PAGE_TO_PHYS(x)
+#define offset_in_page(x) ((x) & PAGE_MASK)
#define drm_get_device_from_kdev(_kdev) (((struct drm_minor *)(_kdev)->si_drv1)->dev)
@@ -295,20 +347,193 @@ __get_user(size_t size, const void *ptr, void *x)
}
#define get_user(x, ptr) __get_user(sizeof(*ptr), (ptr), &(x))
+static inline int
+__copy_to_user_inatomic(void __user *to, const void *from, unsigned n)
+{
+
+ return (copyout_nofault(from, to, n) != 0 ? n : 0);
+}
+#define __copy_to_user_inatomic_nocache(to, from, n) \
+ __copy_to_user_inatomic((to), (from), (n))
+
+static inline unsigned long
+__copy_from_user_inatomic(void *to, const void __user *from,
+ unsigned long n)
+{
+
+ /*
+ * XXXKIB. Equivalent Linux function is implemented using
+ * MOVNTI for aligned moves. For unaligned head and tail,
+ * normal move is performed. As such, it is not incorrect, if
+ * only somewhat slower, to use normal copyin. All uses
+ * except shmem_pwrite_fast() have the destination mapped WC.
+ */
+ return ((copyin_nofault(__DECONST(void *, from), to, n) != 0 ? n : 0));
+}
+#define __copy_from_user_inatomic_nocache(to, from, n) \
+ __copy_from_user_inatomic((to), (from), (n))
+
+static inline int
+fault_in_multipages_readable(const char __user *uaddr, int size)
+{
+ char c;
+ int ret = 0;
+ const char __user *end = uaddr + size - 1;
+
+ if (unlikely(size == 0))
+ return ret;
+
+ while (uaddr <= end) {
+ ret = -copyin(uaddr, &c, 1);
+ if (ret != 0)
+ return -EFAULT;
+ uaddr += PAGE_SIZE;
+ }
+
+ /* Check whether the range spilled into the next page. */
+ if (((unsigned long)uaddr & ~PAGE_MASK) ==
+ ((unsigned long)end & ~PAGE_MASK)) {
+ ret = -copyin(end, &c, 1);
+ }
+
+ return ret;
+}
+
+static inline int
+fault_in_multipages_writeable(char __user *uaddr, int size)
+{
+ int ret = 0;
+ char __user *end = uaddr + size - 1;
+
+ if (unlikely(size == 0))
+ return ret;
+
+ /*
+ * Writing zeroes into userspace here is OK, because we know that if
+ * the zero gets there, we'll be overwriting it.
+ */
+ while (uaddr <= end) {
+ ret = subyte(uaddr, 0);
+ if (ret != 0)
+ return -EFAULT;
+ uaddr += PAGE_SIZE;
+ }
+
+ /* Check whether the range spilled into the next page. */
+ if (((unsigned long)uaddr & ~PAGE_MASK) ==
+ ((unsigned long)end & ~PAGE_MASK))
+ ret = subyte(end, 0);
+
+ return ret;
+}
+
+enum __drm_capabilities {
+ CAP_SYS_ADMIN
+};
+
+static inline bool
+capable(enum __drm_capabilities cap)
+{
+
+ switch (cap) {
+ case CAP_SYS_ADMIN:
+ return DRM_SUSER(curthread);
+ }
+}
+
+#define to_user_ptr(x) ((void *)(uintptr_t)(x))
#define sigemptyset(set) SIGEMPTYSET(set)
#define sigaddset(set, sig) SIGADDSET(set, sig)
#define DRM_LOCK(dev) sx_xlock(&(dev)->dev_struct_lock)
#define DRM_UNLOCK(dev) sx_xunlock(&(dev)->dev_struct_lock)
+extern unsigned long drm_linux_timer_hz_mask;
#define jiffies ticks
#define jiffies_to_msecs(x) (((int64_t)(x)) * 1000 / hz)
#define msecs_to_jiffies(x) (((int64_t)(x)) * hz / 1000)
+#define timespec_to_jiffies(x) (((x)->tv_sec * 1000000 + (x)->tv_nsec) * hz / 1000000)
#define time_after(a,b) ((long)(b) - (long)(a) < 0)
#define time_after_eq(a,b) ((long)(b) - (long)(a) <= 0)
+#define round_jiffies(j) ((unsigned long)(((j) + drm_linux_timer_hz_mask) & ~drm_linux_timer_hz_mask))
+#define round_jiffies_up(j) round_jiffies(j) /* TODO */
+#define round_jiffies_up_relative(j) round_jiffies_up(j) /* TODO */
+
+#define getrawmonotonic(ts) getnanouptime(ts)
+
+#define wake_up(queue) wakeup_one((void *)queue)
+#define wake_up_interruptible(queue) wakeup_one((void *)queue)
+#define wake_up_all(queue) wakeup((void *)queue)
+#define wake_up_interruptible_all(queue) wakeup((void *)queue)
+
+struct completion {
+ unsigned int done;
+ struct mtx lock;
+};
+
+#define INIT_COMPLETION(c) ((c).done = 0);
+
+static inline void
+init_completion(struct completion *c)
+{
+
+ mtx_init(&c->lock, "drmcompl", NULL, MTX_DEF);
+ c->done = 0;
+}
+
+static inline void
+free_completion(struct completion *c)
+{
+
+ mtx_destroy(&c->lock);
+}
+
+static inline void
+complete_all(struct completion *c)
+{
-#define wake_up(queue) wakeup((void *)queue)
-#define wake_up_interruptible(queue) wakeup((void *)queue)
+ mtx_lock(&c->lock);
+ c->done++;
+ mtx_unlock(&c->lock);
+ wakeup(c);
+}
+
+static inline long
+wait_for_completion_interruptible_timeout(struct completion *c,
+ unsigned long timeout)
+{
+ unsigned long start_jiffies, elapsed_jiffies;
+ bool timeout_expired = false, awakened = false;
+ long ret = timeout;
+
+ start_jiffies = ticks;
+
+ mtx_lock(&c->lock);
+ while (c->done == 0 && !timeout_expired) {
+ ret = -msleep(c, &c->lock, PCATCH, "drmwco", timeout);
+ switch(ret) {
+ case -EWOULDBLOCK:
+ timeout_expired = true;
+ ret = 0;
+ break;
+ case -EINTR:
+ case -ERESTART:
+ ret = -ERESTARTSYS;
+ break;
+ case 0:
+ awakened = true;
+ break;
+ }
+ }
+ mtx_unlock(&c->lock);
+
+ if (awakened) {
+ elapsed_jiffies = ticks - start_jiffies;
+ ret = timeout > elapsed_jiffies ? timeout - elapsed_jiffies : 1;
+ }
+
+ return (ret);
+}
MALLOC_DECLARE(DRM_MEM_DMA);
MALLOC_DECLARE(DRM_MEM_SAREA);
@@ -356,6 +581,12 @@ typedef struct drm_pci_id_list
#if defined(__i386__) || defined(__amd64__)
#define CONFIG_ACPI
+#define CONFIG_DRM_I915_KMS
+#undef CONFIG_INTEL_IOMMU
+#endif
+
+#ifdef COMPAT_FREEBSD32
+#define CONFIG_COMPAT
#endif
#define CONFIG_AGP 1
@@ -364,19 +595,102 @@ typedef struct drm_pci_id_list
#define CONFIG_FB 1
extern const char *fb_mode_option;
+#undef CONFIG_DEBUG_FS
+#undef CONFIG_VGA_CONSOLE
+
#define EXPORT_SYMBOL(x)
+#define EXPORT_SYMBOL_GPL(x)
#define MODULE_AUTHOR(author)
#define MODULE_DESCRIPTION(desc)
#define MODULE_LICENSE(license)
#define MODULE_PARM_DESC(name, desc)
+#define MODULE_DEVICE_TABLE(name, list)
#define module_param_named(name, var, type, perm)
#define printk printf
+#define pr_err DRM_ERROR
+#define pr_warn DRM_WARNING
+#define pr_warn_once DRM_WARNING
#define KERN_DEBUG ""
+/* I2C compatibility. */
+#define I2C_M_RD IIC_M_RD
+#define I2C_M_WR IIC_M_WR
+#define I2C_M_NOSTART IIC_M_NOSTART
+
struct fb_info * framebuffer_alloc(void);
void framebuffer_release(struct fb_info *info);
+#define console_lock()
+#define console_unlock()
+#define console_trylock() true
+
+#define PM_EVENT_SUSPEND 0x0002
+#define PM_EVENT_QUIESCE 0x0008
+#define PM_EVENT_PRETHAW PM_EVENT_QUIESCE
+
+typedef struct pm_message {
+ int event;
+} pm_message_t;
+
+static inline int
+pci_read_config_byte(device_t kdev, int where, u8 *val)
+{
+
+ *val = (u8)pci_read_config(kdev, where, 1);
+ return (0);
+}
+
+static inline int
+pci_write_config_byte(device_t kdev, int where, u8 val)
+{
+
+ pci_write_config(kdev, where, val, 1);
+ return (0);
+}
+
+static inline int
+pci_read_config_word(device_t kdev, int where, uint16_t *val)
+{
+
+ *val = (uint16_t)pci_read_config(kdev, where, 2);
+ return (0);
+}
+
+static inline int
+pci_write_config_word(device_t kdev, int where, uint16_t val)
+{
+
+ pci_write_config(kdev, where, val, 2);
+ return (0);
+}
+
+static inline int
+pci_read_config_dword(device_t kdev, int where, uint32_t *val)
+{
+
+ *val = (uint32_t)pci_read_config(kdev, where, 4);
+ return (0);
+}
+
+static inline int
+pci_write_config_dword(device_t kdev, int where, uint32_t val)
+{
+
+ pci_write_config(kdev, where, val, 4);
+ return (0);
+}
+
+static inline void
+on_each_cpu(void callback(void *data), void *data, int wait)
+{
+
+ smp_rendezvous(NULL, callback, NULL, data);
+}
+
+void hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
+ int groupsize, char *linebuf, size_t linebuflen, bool ascii);
+
#define KIB_NOTYET() \
do { \
if (drm_debug && drm_notyet) \
diff --git a/sys/dev/drm2/drm_pciids.h b/sys/dev/drm2/drm_pciids.h
index 92591d2..b1a95b6 100644
--- a/sys/dev/drm2/drm_pciids.h
+++ b/sys/dev/drm2/drm_pciids.h
@@ -33,57 +33,89 @@
{0, 0, 0, NULL}
#define i915_PCI_IDS \
- {0x8086, 0x0042, CHIP_I9XX|CHIP_I915, "Intel IronLake"}, \
- {0x8086, 0x0046, CHIP_I9XX|CHIP_I915, "Intel IronLake"}, \
- {0x8086, 0x0102, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
- {0x8086, 0x0106, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
- {0x8086, 0x010A, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
- {0x8086, 0x0112, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
- {0x8086, 0x0116, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
- {0x8086, 0x0122, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
- {0x8086, 0x0126, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
- {0x8086, 0x0152, CHIP_I9XX|CHIP_I915, "Intel IvyBridge"}, \
- {0x8086, 0x0156, CHIP_I9XX|CHIP_I915, "Intel IvyBridge (M)"}, \
- {0x8086, 0x015A, CHIP_I9XX|CHIP_I915, "Intel IvyBridge (S)"}, \
- {0x8086, 0x0162, CHIP_I9XX|CHIP_I915, "Intel IvyBridge"}, \
- {0x8086, 0x0166, CHIP_I9XX|CHIP_I915, "Intel IvyBridge (M)"}, \
- {0x8086, 0x016A, CHIP_I9XX|CHIP_I915, "Intel IvyBridge (S)"}, \
- {0x8086, 0x0402, CHIP_I9XX|CHIP_I915, "Intel Haswell"}, \
- {0x8086, 0x0406, CHIP_I9XX|CHIP_I915, "Intel Haswell (M)"}, \
- {0x8086, 0x040A, CHIP_I9XX|CHIP_I915, "Intel Haswell (S)"}, \
- {0x8086, 0x0412, CHIP_I9XX|CHIP_I915, "Intel Haswell"}, \
- {0x8086, 0x0416, CHIP_I9XX|CHIP_I915, "Intel Haswell (M)"}, \
- {0x8086, 0x041A, CHIP_I9XX|CHIP_I915, "Intel Haswell (S)"}, \
- {0x8086, 0x0C16, CHIP_I9XX|CHIP_I915, "Intel Haswell (SDV)"}, \
- {0x8086, 0x2562, CHIP_I8XX, "Intel i845G GMCH"}, \
- {0x8086, 0x2572, CHIP_I8XX, "Intel i865G GMCH"}, \
- {0x8086, 0x2582, CHIP_I9XX|CHIP_I915, "Intel i915G"}, \
- {0x8086, 0x258A, CHIP_I9XX|CHIP_I915, "Intel E7221 (i915)"}, \
- {0x8086, 0x2592, CHIP_I9XX|CHIP_I915, "Intel i915GM"}, \
- {0x8086, 0x2772, CHIP_I9XX|CHIP_I915, "Intel i945G"}, \
- {0x8086, 0x27A2, CHIP_I9XX|CHIP_I915, "Intel i945GM"}, \
- {0x8086, 0x27AE, CHIP_I9XX|CHIP_I915, "Intel i945GME"}, \
- {0x8086, 0x2972, CHIP_I9XX|CHIP_I965, "Intel i946GZ"}, \
- {0x8086, 0x2982, CHIP_I9XX|CHIP_I965, "Intel i965G"}, \
- {0x8086, 0x2992, CHIP_I9XX|CHIP_I965, "Intel i965Q"}, \
- {0x8086, 0x29A2, CHIP_I9XX|CHIP_I965, "Intel i965G"}, \
- {0x8086, 0x29B2, CHIP_I9XX|CHIP_I915, "Intel Q35"}, \
- {0x8086, 0x29C2, CHIP_I9XX|CHIP_I915, "Intel G33"}, \
- {0x8086, 0x29D2, CHIP_I9XX|CHIP_I915, "Intel Q33"}, \
- {0x8086, 0x2A02, CHIP_I9XX|CHIP_I965, "Intel i965GM"}, \
- {0x8086, 0x2A12, CHIP_I9XX|CHIP_I965, "Intel i965GME/GLE"}, \
- {0x8086, 0x2A42, CHIP_I9XX|CHIP_I965, "Mobile Intel® GM45 Express Chipset"}, \
- {0x8086, 0x2E02, CHIP_I9XX|CHIP_I965, "Intel Eaglelake"}, \
- {0x8086, 0x2E12, CHIP_I9XX|CHIP_I965, "Intel Q45/Q43"}, \
- {0x8086, 0x2E22, CHIP_I9XX|CHIP_I965, "Intel G45/G43"}, \
- {0x8086, 0x2E32, CHIP_I9XX|CHIP_I965, "Intel G41"}, \
- {0x8086, 0x2E42, CHIP_I9XX|CHIP_I915, "Intel G43 ?"}, \
- {0x8086, 0x2E92, CHIP_I9XX|CHIP_I915, "Intel G43 ?"}, \
- {0x8086, 0x3577, CHIP_I8XX, "Intel i830M GMCH"}, \
- {0x8086, 0x3582, CHIP_I8XX, "Intel i852GM/i855GM GMCH"}, \
- {0x8086, 0x358E, CHIP_I8XX, "Intel i852GM/i855GM GMCH"}, \
- {0x8086, 0xA001, CHIP_I9XX|CHIP_I965, "Intel Pineview"}, \
- {0x8086, 0xA011, CHIP_I9XX|CHIP_I965, "Intel Pineview (M)"}, \
+ {0x8086, 0x0042, 0, "Intel IronLake"}, \
+ {0x8086, 0x0046, 0, "Intel IronLake"}, \
+ {0x8086, 0x0102, 0, "Intel SandyBridge"}, \
+ {0x8086, 0x0106, 0, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x010A, 0, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x0112, 0, "Intel SandyBridge"}, \
+ {0x8086, 0x0116, 0, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x0122, 0, "Intel SandyBridge"}, \
+ {0x8086, 0x0126, 0, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x0152, 0, "Intel IvyBridge"}, \
+ {0x8086, 0x0156, 0, "Intel IvyBridge (M)"}, \
+ {0x8086, 0x015A, 0, "Intel IvyBridge (S)"}, \
+ {0x8086, 0x0162, 0, "Intel IvyBridge"}, \
+ {0x8086, 0x0166, 0, "Intel IvyBridge (M)"}, \
+ {0x8086, 0x016A, 0, "Intel IvyBridge (S)"}, \
+ {0x8086, 0x0402, 0, "Intel Haswell (GT1 desktop)"}, \
+ {0x8086, 0x0406, 0, "Intel Haswell (GT1 mobile)"}, \
+ {0x8086, 0x040A, 0, "Intel Haswell (GT1 server)"}, \
+ {0x8086, 0x0412, 0, "Intel Haswell (GT2 desktop)"}, \
+ {0x8086, 0x0416, 0, "Intel Haswell (GT2 mobile)"}, \
+ {0x8086, 0x041A, 0, "Intel Haswell (GT2 server)"}, \
+ {0x8086, 0x0422, 0, "Intel Haswell (GT2 desktop)"}, \
+ {0x8086, 0x0426, 0, "Intel Haswell (GT2 mobile)"}, \
+ {0x8086, 0x042A, 0, "Intel Haswell (GT2 server)"}, \
+ {0x8086, 0x0A02, 0, "Intel Haswell (ULT GT1 desktop)"}, \
+ {0x8086, 0x0A06, 0, "Intel Haswell (ULT GT1 mobile)"}, \
+ {0x8086, 0x0A0A, 0, "Intel Haswell (ULT GT1 server)"}, \
+ {0x8086, 0x0A12, 0, "Intel Haswell (ULT GT2 desktop)"}, \
+ {0x8086, 0x0A16, 0, "Intel Haswell (ULT GT2 mobile)"}, \
+ {0x8086, 0x0A1A, 0, "Intel Haswell (ULT GT2 server)"}, \
+ {0x8086, 0x0A22, 0, "Intel Haswell (ULT GT2 desktop)"}, \
+ {0x8086, 0x0A26, 0, "Intel Haswell (ULT GT2 mobile)"}, \
+ {0x8086, 0x0A2A, 0, "Intel Haswell (ULT GT2 server)"}, \
+ {0x8086, 0x0C02, 0, "Intel Haswell (SDV GT1 desktop)"}, \
+ {0x8086, 0x0C06, 0, "Intel Haswell (SDV GT1 mobile)"}, \
+ {0x8086, 0x0C0A, 0, "Intel Haswell (SDV GT1 server)"}, \
+ {0x8086, 0x0C12, 0, "Intel Haswell (SDV GT2 desktop)"}, \
+ {0x8086, 0x0C16, 0, "Intel Haswell (SDV GT2 mobile)"}, \
+ {0x8086, 0x0C1A, 0, "Intel Haswell (SDV GT2 server)"}, \
+ {0x8086, 0x0C22, 0, "Intel Haswell (SDV GT2 desktop)"}, \
+ {0x8086, 0x0C26, 0, "Intel Haswell (SDV GT2 mobile)"}, \
+ {0x8086, 0x0C2A, 0, "Intel Haswell (SDV GT2 server)"}, \
+ {0x8086, 0x0D02, 0, "Intel Haswell (CRW GT1 desktop)"}, \
+ {0x8086, 0x0D06, 0, "Intel Haswell (CRW GT1 mobile)"}, \
+ {0x8086, 0x0D0A, 0, "Intel Haswell (CRW GT1 server)"}, \
+ {0x8086, 0x0D12, 0, "Intel Haswell (CRW GT2 desktop)"}, \
+ {0x8086, 0x0D16, 0, "Intel Haswell (CRW GT2 mobile)"}, \
+ {0x8086, 0x0D1A, 0, "Intel Haswell (CRW GT2 server)"}, \
+ {0x8086, 0x0D22, 0, "Intel Haswell (CRW GT2 desktop)"}, \
+ {0x8086, 0x0D26, 0, "Intel Haswell (CRW GT2 mobile)"}, \
+ {0x8086, 0x0D2A, 0, "Intel Haswell (CRW GT2 server)"}, \
+ {0x8086, 0x0155, 0, "Intel Valleyview (desktop)"}, \
+ {0x8086, 0x0157, 0, "Intel Valleyview (mobile)"}, \
+ {0x8086, 0x0F30, 0, "Intel Valleyview (mobile)"}, \
+ {0x8086, 0x2562, 0, "Intel i845G GMCH"}, \
+ {0x8086, 0x2572, 0, "Intel i865G GMCH"}, \
+ {0x8086, 0x2582, 0, "Intel i915G"}, \
+ {0x8086, 0x258A, 0, "Intel E7221 (i915)"}, \
+ {0x8086, 0x2592, 0, "Intel i915GM"}, \
+ {0x8086, 0x2772, 0, "Intel i945G"}, \
+ {0x8086, 0x27A2, 0, "Intel i945GM"}, \
+ {0x8086, 0x27AE, 0, "Intel i945GME"}, \
+ {0x8086, 0x2972, 0, "Intel i946GZ"}, \
+ {0x8086, 0x2982, 0, "Intel i965G"}, \
+ {0x8086, 0x2992, 0, "Intel i965Q"}, \
+ {0x8086, 0x29A2, 0, "Intel i965G"}, \
+ {0x8086, 0x29B2, 0, "Intel Q35"}, \
+ {0x8086, 0x29C2, 0, "Intel G33"}, \
+ {0x8086, 0x29D2, 0, "Intel Q33"}, \
+ {0x8086, 0x2A02, 0, "Intel i965GM"}, \
+ {0x8086, 0x2A12, 0, "Intel i965GME/GLE"}, \
+ {0x8086, 0x2A42, 0, "Mobile Intel® GM45 Express Chipset"}, \
+ {0x8086, 0x2E02, 0, "Intel Eaglelake"}, \
+ {0x8086, 0x2E12, 0, "Intel Q45/Q43"}, \
+ {0x8086, 0x2E22, 0, "Intel G45/G43"}, \
+ {0x8086, 0x2E32, 0, "Intel G41"}, \
+ {0x8086, 0x2E42, 0, "Intel G43 ?"}, \
+ {0x8086, 0x2E92, 0, "Intel G43 ?"}, \
+ {0x8086, 0x3577, 0, "Intel i830M GMCH"}, \
+ {0x8086, 0x3582, 0, "Intel i852GM/i855GM GMCH"}, \
+ {0x8086, 0x358E, 0, "Intel i852GM/i855GM GMCH"}, \
+ {0x8086, 0xA001, 0, "Intel Pineview"}, \
+ {0x8086, 0xA011, 0, "Intel Pineview (M)"}, \
{0, 0, 0, NULL}
#define imagine_PCI_IDS \
diff --git a/sys/dev/drm2/i915/dvo.h b/sys/dev/drm2/i915/dvo.h
new file mode 100644
index 0000000..9b486ce
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright © 2006 Eric Anholt
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _INTEL_DVO_H
+#define _INTEL_DVO_H
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/bus.h>
+#include <dev/iicbus/iic.h>
+#include <dev/iicbus/iiconf.h>
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_crtc.h>
+#include "intel_drv.h"
+
+struct intel_dvo_device {
+ const char *name;
+ int type;
+ /* DVOA/B/C output register */
+ u32 dvo_reg;
+ /* GPIO register used for i2c bus to control this device */
+ u32 gpio;
+ int slave_addr;
+
+ const struct intel_dvo_dev_ops *dev_ops;
+ void *dev_priv;
+ device_t i2c_bus;
+};
+
+struct intel_dvo_dev_ops {
+ /*
+ * Initialize the device at startup time.
+ * Returns NULL if the device does not exist.
+ */
+ bool (*init)(struct intel_dvo_device *dvo,
+ device_t i2cbus);
+
+ /*
+ * Called to allow the output a chance to create properties after the
+ * RandR objects have been created.
+ */
+ void (*create_resources)(struct intel_dvo_device *dvo);
+
+ /*
+ * Turn on/off output.
+ *
+ * Because none of our dvo drivers support an intermediate power levels,
+ * we don't expose this in the interfac.
+ */
+ void (*dpms)(struct intel_dvo_device *dvo, bool enable);
+
+ /*
+ * Callback for testing a video mode for a given output.
+ *
+ * This function should only check for cases where a mode can't
+ * be supported on the output specifically, and not represent
+ * generic CRTC limitations.
+ *
+ * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
+ */
+ int (*mode_valid)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode);
+
+ /*
+ * Callback to adjust the mode to be set in the CRTC.
+ *
+ * This allows an output to adjust the clock or even the entire set of
+ * timings, which is used for panels with fixed timings or for
+ * buses with clock limitations.
+ */
+ bool (*mode_fixup)(struct intel_dvo_device *dvo,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+
+ /*
+ * Callback for preparing mode changes on an output
+ */
+ void (*prepare)(struct intel_dvo_device *dvo);
+
+ /*
+ * Callback for committing mode changes on an output
+ */
+ void (*commit)(struct intel_dvo_device *dvo);
+
+ /*
+ * Callback for setting up a video mode after fixups have been made.
+ *
+ * This is only called while the output is disabled. The dpms callback
+ * must be all that's necessary for the output, to turn the output on
+ * after this function is called.
+ */
+ void (*mode_set)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+
+ /*
+ * Probe for a connected output, and return detect_status.
+ */
+ enum drm_connector_status (*detect)(struct intel_dvo_device *dvo);
+
+ /*
+ * Probe the current hw status, returning true if the connected output
+ * is active.
+ */
+ bool (*get_hw_state)(struct intel_dvo_device *dev);
+
+ /**
+ * Query the device for the modes it provides.
+ *
+ * This function may also update MonInfo, mm_width, and mm_height.
+ *
+ * \return singly-linked list of modes or NULL if no modes found.
+ */
+ struct drm_display_mode *(*get_modes)(struct intel_dvo_device *dvo);
+
+ /**
+ * Clean up driver-specific bits of the output
+ */
+ void (*destroy) (struct intel_dvo_device *dvo);
+
+ /**
+ * Debugging hook to dump device registers to log file
+ */
+ void (*dump_regs)(struct intel_dvo_device *dvo);
+};
+
+extern struct intel_dvo_dev_ops sil164_ops;
+extern struct intel_dvo_dev_ops ch7xxx_ops;
+extern struct intel_dvo_dev_ops ivch_ops;
+extern struct intel_dvo_dev_ops tfp410_ops;
+extern struct intel_dvo_dev_ops ch7017_ops;
+extern struct intel_dvo_dev_ops ns2501_ops;
+
+#endif /* _INTEL_DVO_H */
diff --git a/sys/dev/drm2/i915/dvo_ch7017.c b/sys/dev/drm2/i915/dvo_ch7017.c
new file mode 100644
index 0000000..44f2c6f9
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_ch7017.c
@@ -0,0 +1,418 @@
+/*
+ * Copyright © 2006 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+
+#define CH7017_TV_DISPLAY_MODE 0x00
+#define CH7017_FLICKER_FILTER 0x01
+#define CH7017_VIDEO_BANDWIDTH 0x02
+#define CH7017_TEXT_ENHANCEMENT 0x03
+#define CH7017_START_ACTIVE_VIDEO 0x04
+#define CH7017_HORIZONTAL_POSITION 0x05
+#define CH7017_VERTICAL_POSITION 0x06
+#define CH7017_BLACK_LEVEL 0x07
+#define CH7017_CONTRAST_ENHANCEMENT 0x08
+#define CH7017_TV_PLL 0x09
+#define CH7017_TV_PLL_M 0x0a
+#define CH7017_TV_PLL_N 0x0b
+#define CH7017_SUB_CARRIER_0 0x0c
+#define CH7017_CIV_CONTROL 0x10
+#define CH7017_CIV_0 0x11
+#define CH7017_CHROMA_BOOST 0x14
+#define CH7017_CLOCK_MODE 0x1c
+#define CH7017_INPUT_CLOCK 0x1d
+#define CH7017_GPIO_CONTROL 0x1e
+#define CH7017_INPUT_DATA_FORMAT 0x1f
+#define CH7017_CONNECTION_DETECT 0x20
+#define CH7017_DAC_CONTROL 0x21
+#define CH7017_BUFFERED_CLOCK_OUTPUT 0x22
+#define CH7017_DEFEAT_VSYNC 0x47
+#define CH7017_TEST_PATTERN 0x48
+
+#define CH7017_POWER_MANAGEMENT 0x49
+/** Enables the TV output path. */
+#define CH7017_TV_EN (1 << 0)
+#define CH7017_DAC0_POWER_DOWN (1 << 1)
+#define CH7017_DAC1_POWER_DOWN (1 << 2)
+#define CH7017_DAC2_POWER_DOWN (1 << 3)
+#define CH7017_DAC3_POWER_DOWN (1 << 4)
+/** Powers down the TV out block, and DAC0-3 */
+#define CH7017_TV_POWER_DOWN_EN (1 << 5)
+
+#define CH7017_VERSION_ID 0x4a
+
+#define CH7017_DEVICE_ID 0x4b
+#define CH7017_DEVICE_ID_VALUE 0x1b
+#define CH7018_DEVICE_ID_VALUE 0x1a
+#define CH7019_DEVICE_ID_VALUE 0x19
+
+#define CH7017_XCLK_D2_ADJUST 0x53
+#define CH7017_UP_SCALER_COEFF_0 0x55
+#define CH7017_UP_SCALER_COEFF_1 0x56
+#define CH7017_UP_SCALER_COEFF_2 0x57
+#define CH7017_UP_SCALER_COEFF_3 0x58
+#define CH7017_UP_SCALER_COEFF_4 0x59
+#define CH7017_UP_SCALER_VERTICAL_INC_0 0x5a
+#define CH7017_UP_SCALER_VERTICAL_INC_1 0x5b
+#define CH7017_GPIO_INVERT 0x5c
+#define CH7017_UP_SCALER_HORIZONTAL_INC_0 0x5d
+#define CH7017_UP_SCALER_HORIZONTAL_INC_1 0x5e
+
+#define CH7017_HORIZONTAL_ACTIVE_PIXEL_INPUT 0x5f
+/**< Low bits of horizontal active pixel input */
+
+#define CH7017_ACTIVE_INPUT_LINE_OUTPUT 0x60
+/** High bits of horizontal active pixel input */
+#define CH7017_LVDS_HAP_INPUT_MASK (0x7 << 0)
+/** High bits of vertical active line output */
+#define CH7017_LVDS_VAL_HIGH_MASK (0x7 << 3)
+
+#define CH7017_VERTICAL_ACTIVE_LINE_OUTPUT 0x61
+/**< Low bits of vertical active line output */
+
+#define CH7017_HORIZONTAL_ACTIVE_PIXEL_OUTPUT 0x62
+/**< Low bits of horizontal active pixel output */
+
+#define CH7017_LVDS_POWER_DOWN 0x63
+/** High bits of horizontal active pixel output */
+#define CH7017_LVDS_HAP_HIGH_MASK (0x7 << 0)
+/** Enables the LVDS power down state transition */
+#define CH7017_LVDS_POWER_DOWN_EN (1 << 6)
+/** Enables the LVDS upscaler */
+#define CH7017_LVDS_UPSCALER_EN (1 << 7)
+#define CH7017_LVDS_POWER_DOWN_DEFAULT_RESERVED 0x08
+
+#define CH7017_LVDS_ENCODING 0x64
+#define CH7017_LVDS_DITHER_2D (1 << 2)
+#define CH7017_LVDS_DITHER_DIS (1 << 3)
+#define CH7017_LVDS_DUAL_CHANNEL_EN (1 << 4)
+#define CH7017_LVDS_24_BIT (1 << 5)
+
+#define CH7017_LVDS_ENCODING_2 0x65
+
+#define CH7017_LVDS_PLL_CONTROL 0x66
+/** Enables the LVDS panel output path */
+#define CH7017_LVDS_PANEN (1 << 0)
+/** Enables the LVDS panel backlight */
+#define CH7017_LVDS_BKLEN (1 << 3)
+
+#define CH7017_POWER_SEQUENCING_T1 0x67
+#define CH7017_POWER_SEQUENCING_T2 0x68
+#define CH7017_POWER_SEQUENCING_T3 0x69
+#define CH7017_POWER_SEQUENCING_T4 0x6a
+#define CH7017_POWER_SEQUENCING_T5 0x6b
+#define CH7017_GPIO_DRIVER_TYPE 0x6c
+#define CH7017_GPIO_DATA 0x6d
+#define CH7017_GPIO_DIRECTION_CONTROL 0x6e
+
+#define CH7017_LVDS_PLL_FEEDBACK_DIV 0x71
+# define CH7017_LVDS_PLL_FEED_BACK_DIVIDER_SHIFT 4
+# define CH7017_LVDS_PLL_FEED_FORWARD_DIVIDER_SHIFT 0
+# define CH7017_LVDS_PLL_FEEDBACK_DEFAULT_RESERVED 0x80
+
+#define CH7017_LVDS_PLL_VCO_CONTROL 0x72
+# define CH7017_LVDS_PLL_VCO_DEFAULT_RESERVED 0x80
+# define CH7017_LVDS_PLL_VCO_SHIFT 4
+# define CH7017_LVDS_PLL_POST_SCALE_DIV_SHIFT 0
+
+#define CH7017_OUTPUTS_ENABLE 0x73
+# define CH7017_CHARGE_PUMP_LOW 0x0
+# define CH7017_CHARGE_PUMP_HIGH 0x3
+# define CH7017_LVDS_CHANNEL_A (1 << 3)
+# define CH7017_LVDS_CHANNEL_B (1 << 4)
+# define CH7017_TV_DAC_A (1 << 5)
+# define CH7017_TV_DAC_B (1 << 6)
+# define CH7017_DDC_SELECT_DC2 (1 << 7)
+
+#define CH7017_LVDS_OUTPUT_AMPLITUDE 0x74
+#define CH7017_LVDS_PLL_EMI_REDUCTION 0x75
+#define CH7017_LVDS_POWER_DOWN_FLICKER 0x76
+
+#define CH7017_LVDS_CONTROL_2 0x78
+# define CH7017_LOOP_FILTER_SHIFT 5
+# define CH7017_PHASE_DETECTOR_SHIFT 0
+
+#define CH7017_BANG_LIMIT_CONTROL 0x7f
+
+struct ch7017_priv {
+ uint8_t dummy;
+};
+
+static void ch7017_dump_regs(struct intel_dvo_device *dvo);
+static void ch7017_dpms(struct intel_dvo_device *dvo, bool enable);
+
+static bool ch7017_read(struct intel_dvo_device *dvo, u8 addr, u8 *val)
+{
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 1,
+ .buf = &addr,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 1,
+ .buf = val,
+ }
+ };
+ return -iicbus_transfer(dvo->i2c_bus, msgs, 2) == 0;
+}
+
+static bool ch7017_write(struct intel_dvo_device *dvo, u8 addr, u8 val)
+{
+ uint8_t buf[2] = { addr, val };
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 2,
+ .buf = buf,
+ };
+ return -iicbus_transfer(dvo->i2c_bus, &msg, 1) == 0;
+}
+
+/** Probes for a CH7017 on the given bus and slave address. */
+static bool ch7017_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ struct ch7017_priv *priv;
+ const char *str;
+ u8 val;
+
+ priv = malloc(sizeof(struct ch7017_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (priv == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = priv;
+
+ if (!ch7017_read(dvo, CH7017_DEVICE_ID, &val))
+ goto fail;
+
+ switch (val) {
+ case CH7017_DEVICE_ID_VALUE:
+ str = "ch7017";
+ break;
+ case CH7018_DEVICE_ID_VALUE:
+ str = "ch7018";
+ break;
+ case CH7019_DEVICE_ID_VALUE:
+ str = "ch7019";
+ break;
+ default:
+ DRM_DEBUG_KMS("ch701x not detected, got %d: from %s "
+ "slave %d.\n",
+ val, device_get_nameunit(adapter),
+ dvo->slave_addr);
+ goto fail;
+ }
+
+ DRM_DEBUG_KMS("%s detected on %s, addr %d\n",
+ str, device_get_nameunit(adapter), dvo->slave_addr);
+ return true;
+
+fail:
+ free(priv, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status ch7017_detect(struct intel_dvo_device *dvo)
+{
+ return connector_status_connected;
+}
+
+static enum drm_mode_status ch7017_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ if (mode->clock > 160000)
+ return MODE_CLOCK_HIGH;
+
+ return MODE_OK;
+}
+
+static void ch7017_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ uint8_t lvds_pll_feedback_div, lvds_pll_vco_control;
+ uint8_t outputs_enable, lvds_control_2, lvds_power_down;
+ uint8_t horizontal_active_pixel_input;
+ uint8_t horizontal_active_pixel_output, vertical_active_line_output;
+ uint8_t active_input_line_output;
+
+ DRM_DEBUG_KMS("Registers before mode setting\n");
+ ch7017_dump_regs(dvo);
+
+ /* LVDS PLL settings from page 75 of 7017-7017ds.pdf*/
+ if (mode->clock < 100000) {
+ outputs_enable = CH7017_LVDS_CHANNEL_A | CH7017_CHARGE_PUMP_LOW;
+ lvds_pll_feedback_div = CH7017_LVDS_PLL_FEEDBACK_DEFAULT_RESERVED |
+ (2 << CH7017_LVDS_PLL_FEED_BACK_DIVIDER_SHIFT) |
+ (13 << CH7017_LVDS_PLL_FEED_FORWARD_DIVIDER_SHIFT);
+ lvds_pll_vco_control = CH7017_LVDS_PLL_VCO_DEFAULT_RESERVED |
+ (2 << CH7017_LVDS_PLL_VCO_SHIFT) |
+ (3 << CH7017_LVDS_PLL_POST_SCALE_DIV_SHIFT);
+ lvds_control_2 = (1 << CH7017_LOOP_FILTER_SHIFT) |
+ (0 << CH7017_PHASE_DETECTOR_SHIFT);
+ } else {
+ outputs_enable = CH7017_LVDS_CHANNEL_A | CH7017_CHARGE_PUMP_HIGH;
+ lvds_pll_feedback_div = CH7017_LVDS_PLL_FEEDBACK_DEFAULT_RESERVED |
+ (2 << CH7017_LVDS_PLL_FEED_BACK_DIVIDER_SHIFT) |
+ (3 << CH7017_LVDS_PLL_FEED_FORWARD_DIVIDER_SHIFT);
+ lvds_pll_feedback_div = 35;
+ lvds_control_2 = (3 << CH7017_LOOP_FILTER_SHIFT) |
+ (0 << CH7017_PHASE_DETECTOR_SHIFT);
+ if (1) { /* XXX: dual channel panel detection. Assume yes for now. */
+ outputs_enable |= CH7017_LVDS_CHANNEL_B;
+ lvds_pll_vco_control = CH7017_LVDS_PLL_VCO_DEFAULT_RESERVED |
+ (2 << CH7017_LVDS_PLL_VCO_SHIFT) |
+ (13 << CH7017_LVDS_PLL_POST_SCALE_DIV_SHIFT);
+ } else {
+ lvds_pll_vco_control = CH7017_LVDS_PLL_VCO_DEFAULT_RESERVED |
+ (1 << CH7017_LVDS_PLL_VCO_SHIFT) |
+ (13 << CH7017_LVDS_PLL_POST_SCALE_DIV_SHIFT);
+ }
+ }
+
+ horizontal_active_pixel_input = mode->hdisplay & 0x00ff;
+
+ vertical_active_line_output = mode->vdisplay & 0x00ff;
+ horizontal_active_pixel_output = mode->hdisplay & 0x00ff;
+
+ active_input_line_output = ((mode->hdisplay & 0x0700) >> 8) |
+ (((mode->vdisplay & 0x0700) >> 8) << 3);
+
+ lvds_power_down = CH7017_LVDS_POWER_DOWN_DEFAULT_RESERVED |
+ (mode->hdisplay & 0x0700) >> 8;
+
+ ch7017_dpms(dvo, false);
+ ch7017_write(dvo, CH7017_HORIZONTAL_ACTIVE_PIXEL_INPUT,
+ horizontal_active_pixel_input);
+ ch7017_write(dvo, CH7017_HORIZONTAL_ACTIVE_PIXEL_OUTPUT,
+ horizontal_active_pixel_output);
+ ch7017_write(dvo, CH7017_VERTICAL_ACTIVE_LINE_OUTPUT,
+ vertical_active_line_output);
+ ch7017_write(dvo, CH7017_ACTIVE_INPUT_LINE_OUTPUT,
+ active_input_line_output);
+ ch7017_write(dvo, CH7017_LVDS_PLL_VCO_CONTROL, lvds_pll_vco_control);
+ ch7017_write(dvo, CH7017_LVDS_PLL_FEEDBACK_DIV, lvds_pll_feedback_div);
+ ch7017_write(dvo, CH7017_LVDS_CONTROL_2, lvds_control_2);
+ ch7017_write(dvo, CH7017_OUTPUTS_ENABLE, outputs_enable);
+
+ /* Turn the LVDS back on with new settings. */
+ ch7017_write(dvo, CH7017_LVDS_POWER_DOWN, lvds_power_down);
+
+ DRM_DEBUG_KMS("Registers after mode setting\n");
+ ch7017_dump_regs(dvo);
+}
+
+/* set the CH7017 power state */
+static void ch7017_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ uint8_t val;
+
+ ch7017_read(dvo, CH7017_LVDS_POWER_DOWN, &val);
+
+ /* Turn off TV/VGA, and never turn it on since we don't support it. */
+ ch7017_write(dvo, CH7017_POWER_MANAGEMENT,
+ CH7017_DAC0_POWER_DOWN |
+ CH7017_DAC1_POWER_DOWN |
+ CH7017_DAC2_POWER_DOWN |
+ CH7017_DAC3_POWER_DOWN |
+ CH7017_TV_POWER_DOWN_EN);
+
+ if (enable) {
+ /* Turn on the LVDS */
+ ch7017_write(dvo, CH7017_LVDS_POWER_DOWN,
+ val & ~CH7017_LVDS_POWER_DOWN_EN);
+ } else {
+ /* Turn off the LVDS */
+ ch7017_write(dvo, CH7017_LVDS_POWER_DOWN,
+ val | CH7017_LVDS_POWER_DOWN_EN);
+ }
+
+ /* XXX: Should actually wait for update power status somehow */
+ drm_msleep(20, "ch7017");
+}
+
+static bool ch7017_get_hw_state(struct intel_dvo_device *dvo)
+{
+ uint8_t val;
+
+ ch7017_read(dvo, CH7017_LVDS_POWER_DOWN, &val);
+
+ if (val & CH7017_LVDS_POWER_DOWN_EN)
+ return false;
+ else
+ return true;
+}
+
+static void ch7017_dump_regs(struct intel_dvo_device *dvo)
+{
+ uint8_t val;
+
+#define DUMP(reg) \
+do { \
+ ch7017_read(dvo, reg, &val); \
+ DRM_DEBUG_KMS(#reg ": %02x\n", val); \
+} while (0)
+
+ DUMP(CH7017_HORIZONTAL_ACTIVE_PIXEL_INPUT);
+ DUMP(CH7017_HORIZONTAL_ACTIVE_PIXEL_OUTPUT);
+ DUMP(CH7017_VERTICAL_ACTIVE_LINE_OUTPUT);
+ DUMP(CH7017_ACTIVE_INPUT_LINE_OUTPUT);
+ DUMP(CH7017_LVDS_PLL_VCO_CONTROL);
+ DUMP(CH7017_LVDS_PLL_FEEDBACK_DIV);
+ DUMP(CH7017_LVDS_CONTROL_2);
+ DUMP(CH7017_OUTPUTS_ENABLE);
+ DUMP(CH7017_LVDS_POWER_DOWN);
+}
+
+static void ch7017_destroy(struct intel_dvo_device *dvo)
+{
+ struct ch7017_priv *priv = dvo->dev_priv;
+
+ if (priv) {
+ free(priv, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops ch7017_ops = {
+ .init = ch7017_init,
+ .detect = ch7017_detect,
+ .mode_valid = ch7017_mode_valid,
+ .mode_set = ch7017_mode_set,
+ .dpms = ch7017_dpms,
+ .get_hw_state = ch7017_get_hw_state,
+ .dump_regs = ch7017_dump_regs,
+ .destroy = ch7017_destroy,
+};
diff --git a/sys/dev/drm2/i915/dvo_ch7xxx.c b/sys/dev/drm2/i915/dvo_ch7xxx.c
new file mode 100644
index 0000000..8700b47
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_ch7xxx.c
@@ -0,0 +1,347 @@
+/**************************************************************************
+
+Copyright © 2006 Dave Airlie
+
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+
+#define CH7xxx_REG_VID 0x4a
+#define CH7xxx_REG_DID 0x4b
+
+#define CH7011_VID 0x83 /* 7010 as well */
+#define CH7009A_VID 0x84
+#define CH7009B_VID 0x85
+#define CH7301_VID 0x95
+
+#define CH7xxx_VID 0x84
+#define CH7xxx_DID 0x17
+
+#define CH7xxx_NUM_REGS 0x4c
+
+#define CH7xxx_CM 0x1c
+#define CH7xxx_CM_XCM (1<<0)
+#define CH7xxx_CM_MCP (1<<2)
+#define CH7xxx_INPUT_CLOCK 0x1d
+#define CH7xxx_GPIO 0x1e
+#define CH7xxx_GPIO_HPIR (1<<3)
+#define CH7xxx_IDF 0x1f
+
+#define CH7xxx_IDF_HSP (1<<3)
+#define CH7xxx_IDF_VSP (1<<4)
+
+#define CH7xxx_CONNECTION_DETECT 0x20
+#define CH7xxx_CDET_DVI (1<<5)
+
+#define CH7301_DAC_CNTL 0x21
+#define CH7301_HOTPLUG 0x23
+#define CH7xxx_TCTL 0x31
+#define CH7xxx_TVCO 0x32
+#define CH7xxx_TPCP 0x33
+#define CH7xxx_TPD 0x34
+#define CH7xxx_TPVT 0x35
+#define CH7xxx_TLPF 0x36
+#define CH7xxx_TCT 0x37
+#define CH7301_TEST_PATTERN 0x48
+
+#define CH7xxx_PM 0x49
+#define CH7xxx_PM_FPD (1<<0)
+#define CH7301_PM_DACPD0 (1<<1)
+#define CH7301_PM_DACPD1 (1<<2)
+#define CH7301_PM_DACPD2 (1<<3)
+#define CH7xxx_PM_DVIL (1<<6)
+#define CH7xxx_PM_DVIP (1<<7)
+
+#define CH7301_SYNC_POLARITY 0x56
+#define CH7301_SYNC_RGB_YUV (1<<0)
+#define CH7301_SYNC_POL_DVI (1<<5)
+
+/** @file
+ * driver for the Chrontel 7xxx DVI chip over DVO.
+ */
+
+static struct ch7xxx_id_struct {
+ uint8_t vid;
+ char *name;
+} ch7xxx_ids[] = {
+ { CH7011_VID, "CH7011" },
+ { CH7009A_VID, "CH7009A" },
+ { CH7009B_VID, "CH7009B" },
+ { CH7301_VID, "CH7301" },
+};
+
+struct ch7xxx_priv {
+ bool quiet;
+};
+
+static char *ch7xxx_get_id(uint8_t vid)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(ch7xxx_ids); i++) {
+ if (ch7xxx_ids[i].vid == vid)
+ return ch7xxx_ids[i].name;
+ }
+
+ return NULL;
+}
+
+/** Reads an 8 bit register */
+static bool ch7xxx_readb(struct intel_dvo_device *dvo, int addr, uint8_t *ch)
+{
+ struct ch7xxx_priv *ch7xxx = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[2];
+ u8 in_buf[2];
+
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 1,
+ .buf = in_buf,
+ }
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = 0;
+
+ if (-iicbus_transfer(adapter, msgs, 2) == 0) {
+ *ch = in_buf[0];
+ return true;
+ }
+
+ if (!ch7xxx->quiet) {
+ DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+ return false;
+}
+
+/** Writes an 8 bit register */
+static bool ch7xxx_writeb(struct intel_dvo_device *dvo, int addr, uint8_t ch)
+{
+ struct ch7xxx_priv *ch7xxx = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ uint8_t out_buf[2];
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 2,
+ .buf = out_buf,
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = ch;
+
+ if (-iicbus_transfer(adapter, &msg, 1) == 0)
+ return true;
+
+ if (!ch7xxx->quiet) {
+ DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+static bool ch7xxx_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ /* this will detect the CH7xxx chip on the specified i2c bus */
+ struct ch7xxx_priv *ch7xxx;
+ uint8_t vendor, device;
+ char *name;
+
+ ch7xxx = malloc(sizeof(struct ch7xxx_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (ch7xxx == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = ch7xxx;
+ ch7xxx->quiet = true;
+
+ if (!ch7xxx_readb(dvo, CH7xxx_REG_VID, &vendor))
+ goto out;
+
+ name = ch7xxx_get_id(vendor);
+ if (!name) {
+ DRM_DEBUG_KMS("ch7xxx not detected; got 0x%02x from %s "
+ "slave %d.\n",
+ vendor, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+
+
+ if (!ch7xxx_readb(dvo, CH7xxx_REG_DID, &device))
+ goto out;
+
+ if (device != CH7xxx_DID) {
+ DRM_DEBUG_KMS("ch7xxx not detected; got 0x%02x from %s "
+ "slave %d.\n",
+ vendor, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+
+ ch7xxx->quiet = false;
+ DRM_DEBUG_KMS("Detected %s chipset, vendor/device ID 0x%02x/0x%02x\n",
+ name, vendor, device);
+ return true;
+out:
+ free(ch7xxx, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status ch7xxx_detect(struct intel_dvo_device *dvo)
+{
+ uint8_t cdet, orig_pm, pm;
+
+ ch7xxx_readb(dvo, CH7xxx_PM, &orig_pm);
+
+ pm = orig_pm;
+ pm &= ~CH7xxx_PM_FPD;
+ pm |= CH7xxx_PM_DVIL | CH7xxx_PM_DVIP;
+
+ ch7xxx_writeb(dvo, CH7xxx_PM, pm);
+
+ ch7xxx_readb(dvo, CH7xxx_CONNECTION_DETECT, &cdet);
+
+ ch7xxx_writeb(dvo, CH7xxx_PM, orig_pm);
+
+ if (cdet & CH7xxx_CDET_DVI)
+ return connector_status_connected;
+ return connector_status_disconnected;
+}
+
+static enum drm_mode_status ch7xxx_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ if (mode->clock > 165000)
+ return MODE_CLOCK_HIGH;
+
+ return MODE_OK;
+}
+
+static void ch7xxx_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ uint8_t tvco, tpcp, tpd, tlpf, idf;
+
+ if (mode->clock <= 65000) {
+ tvco = 0x23;
+ tpcp = 0x08;
+ tpd = 0x16;
+ tlpf = 0x60;
+ } else {
+ tvco = 0x2d;
+ tpcp = 0x06;
+ tpd = 0x26;
+ tlpf = 0xa0;
+ }
+
+ ch7xxx_writeb(dvo, CH7xxx_TCTL, 0x00);
+ ch7xxx_writeb(dvo, CH7xxx_TVCO, tvco);
+ ch7xxx_writeb(dvo, CH7xxx_TPCP, tpcp);
+ ch7xxx_writeb(dvo, CH7xxx_TPD, tpd);
+ ch7xxx_writeb(dvo, CH7xxx_TPVT, 0x30);
+ ch7xxx_writeb(dvo, CH7xxx_TLPF, tlpf);
+ ch7xxx_writeb(dvo, CH7xxx_TCT, 0x00);
+
+ ch7xxx_readb(dvo, CH7xxx_IDF, &idf);
+
+ idf &= ~(CH7xxx_IDF_HSP | CH7xxx_IDF_VSP);
+ if (mode->flags & DRM_MODE_FLAG_PHSYNC)
+ idf |= CH7xxx_IDF_HSP;
+
+ if (mode->flags & DRM_MODE_FLAG_PVSYNC)
+ idf |= CH7xxx_IDF_HSP;
+
+ ch7xxx_writeb(dvo, CH7xxx_IDF, idf);
+}
+
+/* set the CH7xxx power state */
+static void ch7xxx_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ if (enable)
+ ch7xxx_writeb(dvo, CH7xxx_PM, CH7xxx_PM_DVIL | CH7xxx_PM_DVIP);
+ else
+ ch7xxx_writeb(dvo, CH7xxx_PM, CH7xxx_PM_FPD);
+}
+
+static bool ch7xxx_get_hw_state(struct intel_dvo_device *dvo)
+{
+ u8 val;
+
+ ch7xxx_readb(dvo, CH7xxx_PM, &val);
+
+ if (val & (CH7xxx_PM_DVIL | CH7xxx_PM_DVIP))
+ return true;
+ else
+ return false;
+}
+
+static void ch7xxx_dump_regs(struct intel_dvo_device *dvo)
+{
+ int i;
+
+ for (i = 0; i < CH7xxx_NUM_REGS; i++) {
+ uint8_t val;
+ if ((i % 8) == 0)
+ DRM_LOG_KMS("\n %02X: ", i);
+ ch7xxx_readb(dvo, i, &val);
+ DRM_LOG_KMS("%02X ", val);
+ }
+}
+
+static void ch7xxx_destroy(struct intel_dvo_device *dvo)
+{
+ struct ch7xxx_priv *ch7xxx = dvo->dev_priv;
+
+ if (ch7xxx) {
+ free(ch7xxx, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops ch7xxx_ops = {
+ .init = ch7xxx_init,
+ .detect = ch7xxx_detect,
+ .mode_valid = ch7xxx_mode_valid,
+ .mode_set = ch7xxx_mode_set,
+ .dpms = ch7xxx_dpms,
+ .get_hw_state = ch7xxx_get_hw_state,
+ .dump_regs = ch7xxx_dump_regs,
+ .destroy = ch7xxx_destroy,
+};
diff --git a/sys/dev/drm2/i915/dvo_ivch.c b/sys/dev/drm2/i915/dvo_ivch.c
new file mode 100644
index 0000000..551f379
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_ivch.c
@@ -0,0 +1,439 @@
+/*
+ * Copyright © 2006 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+
+/*
+ * register definitions for the i82807aa.
+ *
+ * Documentation on this chipset can be found in datasheet #29069001 at
+ * intel.com.
+ */
+
+/*
+ * VCH Revision & GMBus Base Addr
+ */
+#define VR00 0x00
+# define VR00_BASE_ADDRESS_MASK 0x007f
+
+/*
+ * Functionality Enable
+ */
+#define VR01 0x01
+
+/*
+ * Enable the panel fitter
+ */
+# define VR01_PANEL_FIT_ENABLE (1 << 3)
+/*
+ * Enables the LCD display.
+ *
+ * This must not be set while VR01_DVO_BYPASS_ENABLE is set.
+ */
+# define VR01_LCD_ENABLE (1 << 2)
+/** Enables the DVO repeater. */
+# define VR01_DVO_BYPASS_ENABLE (1 << 1)
+/** Enables the DVO clock */
+# define VR01_DVO_ENABLE (1 << 0)
+
+/*
+ * LCD Interface Format
+ */
+#define VR10 0x10
+/** Enables LVDS output instead of CMOS */
+# define VR10_LVDS_ENABLE (1 << 4)
+/** Enables 18-bit LVDS output. */
+# define VR10_INTERFACE_1X18 (0 << 2)
+/** Enables 24-bit LVDS or CMOS output */
+# define VR10_INTERFACE_1X24 (1 << 2)
+/** Enables 2x18-bit LVDS or CMOS output. */
+# define VR10_INTERFACE_2X18 (2 << 2)
+/** Enables 2x24-bit LVDS output */
+# define VR10_INTERFACE_2X24 (3 << 2)
+
+/*
+ * VR20 LCD Horizontal Display Size
+ */
+#define VR20 0x20
+
+/*
+ * LCD Vertical Display Size
+ */
+#define VR21 0x20
+
+/*
+ * Panel power down status
+ */
+#define VR30 0x30
+/** Read only bit indicating that the panel is not in a safe poweroff state. */
+# define VR30_PANEL_ON (1 << 15)
+
+#define VR40 0x40
+# define VR40_STALL_ENABLE (1 << 13)
+# define VR40_VERTICAL_INTERP_ENABLE (1 << 12)
+# define VR40_ENHANCED_PANEL_FITTING (1 << 11)
+# define VR40_HORIZONTAL_INTERP_ENABLE (1 << 10)
+# define VR40_AUTO_RATIO_ENABLE (1 << 9)
+# define VR40_CLOCK_GATING_ENABLE (1 << 8)
+
+/*
+ * Panel Fitting Vertical Ratio
+ * (((image_height - 1) << 16) / ((panel_height - 1))) >> 2
+ */
+#define VR41 0x41
+
+/*
+ * Panel Fitting Horizontal Ratio
+ * (((image_width - 1) << 16) / ((panel_width - 1))) >> 2
+ */
+#define VR42 0x42
+
+/*
+ * Horizontal Image Size
+ */
+#define VR43 0x43
+
+/* VR80 GPIO 0
+ */
+#define VR80 0x80
+#define VR81 0x81
+#define VR82 0x82
+#define VR83 0x83
+#define VR84 0x84
+#define VR85 0x85
+#define VR86 0x86
+#define VR87 0x87
+
+/* VR88 GPIO 8
+ */
+#define VR88 0x88
+
+/* Graphics BIOS scratch 0
+ */
+#define VR8E 0x8E
+# define VR8E_PANEL_TYPE_MASK (0xf << 0)
+# define VR8E_PANEL_INTERFACE_CMOS (0 << 4)
+# define VR8E_PANEL_INTERFACE_LVDS (1 << 4)
+# define VR8E_FORCE_DEFAULT_PANEL (1 << 5)
+
+/* Graphics BIOS scratch 1
+ */
+#define VR8F 0x8F
+# define VR8F_VCH_PRESENT (1 << 0)
+# define VR8F_DISPLAY_CONN (1 << 1)
+# define VR8F_POWER_MASK (0x3c)
+# define VR8F_POWER_POS (2)
+
+
+struct ivch_priv {
+ bool quiet;
+
+ uint16_t width, height;
+};
+
+
+static void ivch_dump_regs(struct intel_dvo_device *dvo);
+
+/**
+ * Reads a register on the ivch.
+ *
+ * Each of the 256 registers are 16 bits long.
+ */
+static bool ivch_read(struct intel_dvo_device *dvo, int addr, uint16_t *data)
+{
+ struct ivch_priv *priv = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[1];
+ u8 in_buf[2];
+
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 0,
+ },
+ {
+ .slave = 0 << 1,
+ .flags = I2C_M_NOSTART,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD | I2C_M_NOSTART,
+ .len = 2,
+ .buf = in_buf,
+ }
+ };
+
+ out_buf[0] = addr;
+
+ if (-iicbus_transfer(adapter, msgs, 3) == 0) {
+ *data = (in_buf[1] << 8) | in_buf[0];
+ return true;
+ }
+
+ if (!priv->quiet) {
+ DRM_DEBUG_KMS("Unable to read register 0x%02x from "
+ "%s:%02x.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+ return false;
+}
+
+/** Writes a 16-bit register on the ivch */
+static bool ivch_write(struct intel_dvo_device *dvo, int addr, uint16_t data)
+{
+ struct ivch_priv *priv = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[3];
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 3,
+ .buf = out_buf,
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = data & 0xff;
+ out_buf[2] = data >> 8;
+
+ if (-iicbus_transfer(adapter, &msg, 1) == 0)
+ return true;
+
+ if (!priv->quiet) {
+ DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+/** Probes the given bus and slave address for an ivch */
+static bool ivch_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ struct ivch_priv *priv;
+ uint16_t temp;
+
+ priv = malloc(sizeof(struct ivch_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (priv == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = priv;
+ priv->quiet = true;
+
+ if (!ivch_read(dvo, VR00, &temp))
+ goto out;
+ priv->quiet = false;
+
+ /* Since the identification bits are probably zeroes, which doesn't seem
+ * very unique, check that the value in the base address field matches
+ * the address it's responding on.
+ */
+ if ((temp & VR00_BASE_ADDRESS_MASK) != dvo->slave_addr) {
+ DRM_DEBUG_KMS("ivch detect failed due to address mismatch "
+ "(%d vs %d)\n",
+ (temp & VR00_BASE_ADDRESS_MASK), dvo->slave_addr);
+ goto out;
+ }
+
+ ivch_read(dvo, VR20, &priv->width);
+ ivch_read(dvo, VR21, &priv->height);
+
+ return true;
+
+out:
+ free(priv, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status ivch_detect(struct intel_dvo_device *dvo)
+{
+ return connector_status_connected;
+}
+
+static enum drm_mode_status ivch_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ if (mode->clock > 112000)
+ return MODE_CLOCK_HIGH;
+
+ return MODE_OK;
+}
+
+/** Sets the power state of the panel connected to the ivch */
+static void ivch_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ int i;
+ uint16_t vr01, vr30, backlight;
+
+ /* Set the new power state of the panel. */
+ if (!ivch_read(dvo, VR01, &vr01))
+ return;
+
+ if (enable)
+ backlight = 1;
+ else
+ backlight = 0;
+ ivch_write(dvo, VR80, backlight);
+
+ if (enable)
+ vr01 |= VR01_LCD_ENABLE | VR01_DVO_ENABLE;
+ else
+ vr01 &= ~(VR01_LCD_ENABLE | VR01_DVO_ENABLE);
+
+ ivch_write(dvo, VR01, vr01);
+
+ /* Wait for the panel to make its state transition */
+ for (i = 0; i < 100; i++) {
+ if (!ivch_read(dvo, VR30, &vr30))
+ break;
+
+ if (((vr30 & VR30_PANEL_ON) != 0) == enable)
+ break;
+ udelay(1000);
+ }
+ /* wait some more; vch may fail to resync sometimes without this */
+ udelay(16 * 1000);
+}
+
+static bool ivch_get_hw_state(struct intel_dvo_device *dvo)
+{
+ uint16_t vr01;
+
+ /* Set the new power state of the panel. */
+ if (!ivch_read(dvo, VR01, &vr01))
+ return false;
+
+ if (vr01 & VR01_LCD_ENABLE)
+ return true;
+ else
+ return false;
+}
+
+static void ivch_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ uint16_t vr40 = 0;
+ uint16_t vr01;
+
+ vr01 = 0;
+ vr40 = (VR40_STALL_ENABLE | VR40_VERTICAL_INTERP_ENABLE |
+ VR40_HORIZONTAL_INTERP_ENABLE);
+
+ if (mode->hdisplay != adjusted_mode->hdisplay ||
+ mode->vdisplay != adjusted_mode->vdisplay) {
+ uint16_t x_ratio, y_ratio;
+
+ vr01 |= VR01_PANEL_FIT_ENABLE;
+ vr40 |= VR40_CLOCK_GATING_ENABLE;
+ x_ratio = (((mode->hdisplay - 1) << 16) /
+ (adjusted_mode->hdisplay - 1)) >> 2;
+ y_ratio = (((mode->vdisplay - 1) << 16) /
+ (adjusted_mode->vdisplay - 1)) >> 2;
+ ivch_write(dvo, VR42, x_ratio);
+ ivch_write(dvo, VR41, y_ratio);
+ } else {
+ vr01 &= ~VR01_PANEL_FIT_ENABLE;
+ vr40 &= ~VR40_CLOCK_GATING_ENABLE;
+ }
+ vr40 &= ~VR40_AUTO_RATIO_ENABLE;
+
+ ivch_write(dvo, VR01, vr01);
+ ivch_write(dvo, VR40, vr40);
+
+ ivch_dump_regs(dvo);
+}
+
+static void ivch_dump_regs(struct intel_dvo_device *dvo)
+{
+ uint16_t val;
+
+ ivch_read(dvo, VR00, &val);
+ DRM_LOG_KMS("VR00: 0x%04x\n", val);
+ ivch_read(dvo, VR01, &val);
+ DRM_LOG_KMS("VR01: 0x%04x\n", val);
+ ivch_read(dvo, VR30, &val);
+ DRM_LOG_KMS("VR30: 0x%04x\n", val);
+ ivch_read(dvo, VR40, &val);
+ DRM_LOG_KMS("VR40: 0x%04x\n", val);
+
+ /* GPIO registers */
+ ivch_read(dvo, VR80, &val);
+ DRM_LOG_KMS("VR80: 0x%04x\n", val);
+ ivch_read(dvo, VR81, &val);
+ DRM_LOG_KMS("VR81: 0x%04x\n", val);
+ ivch_read(dvo, VR82, &val);
+ DRM_LOG_KMS("VR82: 0x%04x\n", val);
+ ivch_read(dvo, VR83, &val);
+ DRM_LOG_KMS("VR83: 0x%04x\n", val);
+ ivch_read(dvo, VR84, &val);
+ DRM_LOG_KMS("VR84: 0x%04x\n", val);
+ ivch_read(dvo, VR85, &val);
+ DRM_LOG_KMS("VR85: 0x%04x\n", val);
+ ivch_read(dvo, VR86, &val);
+ DRM_LOG_KMS("VR86: 0x%04x\n", val);
+ ivch_read(dvo, VR87, &val);
+ DRM_LOG_KMS("VR87: 0x%04x\n", val);
+ ivch_read(dvo, VR88, &val);
+ DRM_LOG_KMS("VR88: 0x%04x\n", val);
+
+ /* Scratch register 0 - AIM Panel type */
+ ivch_read(dvo, VR8E, &val);
+ DRM_LOG_KMS("VR8E: 0x%04x\n", val);
+
+ /* Scratch register 1 - Status register */
+ ivch_read(dvo, VR8F, &val);
+ DRM_LOG_KMS("VR8F: 0x%04x\n", val);
+}
+
+static void ivch_destroy(struct intel_dvo_device *dvo)
+{
+ struct ivch_priv *priv = dvo->dev_priv;
+
+ if (priv) {
+ free(priv, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops ivch_ops = {
+ .init = ivch_init,
+ .dpms = ivch_dpms,
+ .get_hw_state = ivch_get_hw_state,
+ .mode_valid = ivch_mode_valid,
+ .mode_set = ivch_mode_set,
+ .detect = ivch_detect,
+ .dump_regs = ivch_dump_regs,
+ .destroy = ivch_destroy,
+};
diff --git a/sys/dev/drm2/i915/dvo_ns2501.c b/sys/dev/drm2/i915/dvo_ns2501.c
new file mode 100644
index 0000000..655cb7d
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_ns2501.c
@@ -0,0 +1,601 @@
+/*
+ *
+ * Copyright (c) 2012 Gilles Dartiguelongue, Thomas Richter
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+#include "i915_reg.h"
+#include "i915_drv.h"
+
+#define NS2501_VID 0x1305
+#define NS2501_DID 0x6726
+
+#define NS2501_VID_LO 0x00
+#define NS2501_VID_HI 0x01
+#define NS2501_DID_LO 0x02
+#define NS2501_DID_HI 0x03
+#define NS2501_REV 0x04
+#define NS2501_RSVD 0x05
+#define NS2501_FREQ_LO 0x06
+#define NS2501_FREQ_HI 0x07
+
+#define NS2501_REG8 0x08
+#define NS2501_8_VEN (1<<5)
+#define NS2501_8_HEN (1<<4)
+#define NS2501_8_DSEL (1<<3)
+#define NS2501_8_BPAS (1<<2)
+#define NS2501_8_RSVD (1<<1)
+#define NS2501_8_PD (1<<0)
+
+#define NS2501_REG9 0x09
+#define NS2501_9_VLOW (1<<7)
+#define NS2501_9_MSEL_MASK (0x7<<4)
+#define NS2501_9_TSEL (1<<3)
+#define NS2501_9_RSEN (1<<2)
+#define NS2501_9_RSVD (1<<1)
+#define NS2501_9_MDI (1<<0)
+
+#define NS2501_REGC 0x0c
+
+struct ns2501_priv {
+ //I2CDevRec d;
+ bool quiet;
+ int reg_8_shadow;
+ int reg_8_set;
+ // Shadow registers for i915
+ int dvoc;
+ int pll_a;
+ int srcdim;
+ int fw_blc;
+};
+
+#define NSPTR(d) ((NS2501Ptr)(d->DriverPrivate.ptr))
+
+/*
+ * For reasons unclear to me, the ns2501 at least on the Fujitsu/Siemens
+ * laptops does not react on the i2c bus unless
+ * both the PLL is running and the display is configured in its native
+ * resolution.
+ * This function forces the DVO on, and stores the registers it touches.
+ * Afterwards, registers are restored to regular values.
+ *
+ * This is pretty much a hack, though it works.
+ * Without that, ns2501_readb and ns2501_writeb fail
+ * when switching the resolution.
+ */
+
+static void enable_dvo(struct intel_dvo_device *dvo)
+{
+ struct ns2501_priv *ns = (struct ns2501_priv *)(dvo->dev_priv);
+ device_t adapter = dvo->i2c_bus;
+ /*
+ * FIXME Linux<->FreeBSD: device_get_softc() returns a struct
+ * intel_iic_softc in reality, where struct intel_gmbus is
+ * the first member. struct intel_iic_softc is defined in
+ * intel_iic.c.
+ */
+ struct intel_gmbus *bus =
+ (struct intel_gmbus *)device_get_softc(adapter);
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+
+ DRM_DEBUG_KMS("%s: Trying to re-enable the DVO\n", __FUNCTION__);
+
+ ns->dvoc = I915_READ(DVO_C);
+ ns->pll_a = I915_READ(_DPLL_A);
+ ns->srcdim = I915_READ(DVOC_SRCDIM);
+ ns->fw_blc = I915_READ(FW_BLC);
+
+ I915_WRITE(DVOC, 0x10004084);
+ I915_WRITE(_DPLL_A, 0xd0820000);
+ I915_WRITE(DVOC_SRCDIM, 0x400300); // 1024x768
+ I915_WRITE(FW_BLC, 0x1080304);
+
+ I915_WRITE(DVOC, 0x90004084);
+}
+
+/*
+ * Restore the I915 registers modified by the above
+ * trigger function.
+ */
+static void restore_dvo(struct intel_dvo_device *dvo)
+{
+ device_t adapter = dvo->i2c_bus;
+ /*
+ * FIXME Linux<->FreeBSD: device_get_softc() returns a struct
+ * intel_iic_softc in reality, where struct intel_gmbus is
+ * the first member. struct intel_iic_softc is defined in
+ * intel_iic.c.
+ */
+ struct intel_gmbus *bus =
+ (struct intel_gmbus *)device_get_softc(adapter);
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ struct ns2501_priv *ns = (struct ns2501_priv *)(dvo->dev_priv);
+
+ I915_WRITE(DVOC, ns->dvoc);
+ I915_WRITE(_DPLL_A, ns->pll_a);
+ I915_WRITE(DVOC_SRCDIM, ns->srcdim);
+ I915_WRITE(FW_BLC, ns->fw_blc);
+}
+
+/*
+** Read a register from the ns2501.
+** Returns true if successful, false otherwise.
+** If it returns false, it might be wise to enable the
+** DVO with the above function.
+*/
+static bool ns2501_readb(struct intel_dvo_device *dvo, int addr, uint8_t * ch)
+{
+ struct ns2501_priv *ns = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[2];
+ u8 in_buf[2];
+
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 1,
+ .buf = in_buf,
+ }
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = 0;
+
+ if (-iicbus_transfer(adapter, msgs, 2) == 0) {
+ *ch = in_buf[0];
+ return true;
+ }
+
+ if (!ns->quiet) {
+ DRM_DEBUG_KMS
+ ("Unable to read register 0x%02x from %s:0x%02x.\n", addr,
+ device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+/*
+** Write a register to the ns2501.
+** Returns true if successful, false otherwise.
+** If it returns false, it might be wise to enable the
+** DVO with the above function.
+*/
+static bool ns2501_writeb(struct intel_dvo_device *dvo, int addr, uint8_t ch)
+{
+ struct ns2501_priv *ns = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ uint8_t out_buf[2];
+
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 2,
+ .buf = out_buf,
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = ch;
+
+ if (-iicbus_transfer(adapter, &msg, 1) == 0) {
+ return true;
+ }
+
+ if (!ns->quiet) {
+ DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+/* National Semiconductor 2501 driver for chip on i2c bus
+ * scan for the chip on the bus.
+ * Hope the VBIOS initialized the PLL correctly so we can
+ * talk to it. If not, it will not be seen and not detected.
+ * Bummer!
+ */
+static bool ns2501_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ /* this will detect the NS2501 chip on the specified i2c bus */
+ struct ns2501_priv *ns;
+ unsigned char ch;
+
+ ns = malloc(sizeof(struct ns2501_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (ns == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = ns;
+ ns->quiet = true;
+
+ if (!ns2501_readb(dvo, NS2501_VID_LO, &ch))
+ goto out;
+
+ if (ch != (NS2501_VID & 0xff)) {
+ DRM_DEBUG_KMS("ns2501 not detected got %d: from %s Slave %d.\n",
+ ch, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+
+ if (!ns2501_readb(dvo, NS2501_DID_LO, &ch))
+ goto out;
+
+ if (ch != (NS2501_DID & 0xff)) {
+ DRM_DEBUG_KMS("ns2501 not detected got %d: from %s Slave %d.\n",
+ ch, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+ ns->quiet = false;
+ ns->reg_8_set = 0;
+ ns->reg_8_shadow =
+ NS2501_8_PD | NS2501_8_BPAS | NS2501_8_VEN | NS2501_8_HEN;
+
+ DRM_DEBUG_KMS("init ns2501 dvo controller successfully!\n");
+ return true;
+
+out:
+ free(ns, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status ns2501_detect(struct intel_dvo_device *dvo)
+{
+ /*
+ * This is a Laptop display, it doesn't have hotplugging.
+ * Even if not, the detection bit of the 2501 is unreliable as
+ * it only works for some display types.
+ * It is even more unreliable as the PLL must be active for
+ * allowing reading from the chiop.
+ */
+ return connector_status_connected;
+}
+
+static enum drm_mode_status ns2501_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ DRM_DEBUG_KMS
+ ("%s: is mode valid (hdisplay=%d,htotal=%d,vdisplay=%d,vtotal=%d)\n",
+ __FUNCTION__, mode->hdisplay, mode->htotal, mode->vdisplay,
+ mode->vtotal);
+
+ /*
+ * Currently, these are all the modes I have data from.
+ * More might exist. Unclear how to find the native resolution
+ * of the panel in here so we could always accept it
+ * by disabling the scaler.
+ */
+ if ((mode->hdisplay == 800 && mode->vdisplay == 600) ||
+ (mode->hdisplay == 640 && mode->vdisplay == 480) ||
+ (mode->hdisplay == 1024 && mode->vdisplay == 768)) {
+ return MODE_OK;
+ } else {
+ return MODE_ONE_SIZE; /* Is this a reasonable error? */
+ }
+}
+
+static void ns2501_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ bool ok;
+ bool restore = false;
+ struct ns2501_priv *ns = (struct ns2501_priv *)(dvo->dev_priv);
+
+ DRM_DEBUG_KMS
+ ("%s: set mode (hdisplay=%d,htotal=%d,vdisplay=%d,vtotal=%d).\n",
+ __FUNCTION__, mode->hdisplay, mode->htotal, mode->vdisplay,
+ mode->vtotal);
+
+ /*
+ * Where do I find the native resolution for which scaling is not required???
+ *
+ * First trigger the DVO on as otherwise the chip does not appear on the i2c
+ * bus.
+ */
+ do {
+ ok = true;
+
+ if (mode->hdisplay == 800 && mode->vdisplay == 600) {
+ /* mode 277 */
+ ns->reg_8_shadow &= ~NS2501_8_BPAS;
+ DRM_DEBUG_KMS("%s: switching to 800x600\n",
+ __FUNCTION__);
+
+ /*
+ * No, I do not know where this data comes from.
+ * It is just what the video bios left in the DVO, so
+ * I'm just copying it here over.
+ * This also means that I cannot support any other modes
+ * except the ones supported by the bios.
+ */
+ ok &= ns2501_writeb(dvo, 0x11, 0xc8); // 0xc7 also works.
+ ok &= ns2501_writeb(dvo, 0x1b, 0x19);
+ ok &= ns2501_writeb(dvo, 0x1c, 0x62); // VBIOS left 0x64 here, but 0x62 works nicer
+ ok &= ns2501_writeb(dvo, 0x1d, 0x02);
+
+ ok &= ns2501_writeb(dvo, 0x34, 0x03);
+ ok &= ns2501_writeb(dvo, 0x35, 0xff);
+
+ ok &= ns2501_writeb(dvo, 0x80, 0x27);
+ ok &= ns2501_writeb(dvo, 0x81, 0x03);
+ ok &= ns2501_writeb(dvo, 0x82, 0x41);
+ ok &= ns2501_writeb(dvo, 0x83, 0x05);
+
+ ok &= ns2501_writeb(dvo, 0x8d, 0x02);
+ ok &= ns2501_writeb(dvo, 0x8e, 0x04);
+ ok &= ns2501_writeb(dvo, 0x8f, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0x90, 0xfe); /* vertical. VBIOS left 0xff here, but 0xfe works better */
+ ok &= ns2501_writeb(dvo, 0x91, 0x07);
+ ok &= ns2501_writeb(dvo, 0x94, 0x00);
+ ok &= ns2501_writeb(dvo, 0x95, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0x96, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0x99, 0x00);
+ ok &= ns2501_writeb(dvo, 0x9a, 0x88);
+
+ ok &= ns2501_writeb(dvo, 0x9c, 0x23); /* Looks like first and last line of the image. */
+ ok &= ns2501_writeb(dvo, 0x9d, 0x00);
+ ok &= ns2501_writeb(dvo, 0x9e, 0x25);
+ ok &= ns2501_writeb(dvo, 0x9f, 0x03);
+
+ ok &= ns2501_writeb(dvo, 0xa4, 0x80);
+
+ ok &= ns2501_writeb(dvo, 0xb6, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0xb9, 0xc8); /* horizontal? */
+ ok &= ns2501_writeb(dvo, 0xba, 0x00); /* horizontal? */
+
+ ok &= ns2501_writeb(dvo, 0xc0, 0x05); /* horizontal? */
+ ok &= ns2501_writeb(dvo, 0xc1, 0xd7);
+
+ ok &= ns2501_writeb(dvo, 0xc2, 0x00);
+ ok &= ns2501_writeb(dvo, 0xc3, 0xf8);
+
+ ok &= ns2501_writeb(dvo, 0xc4, 0x03);
+ ok &= ns2501_writeb(dvo, 0xc5, 0x1a);
+
+ ok &= ns2501_writeb(dvo, 0xc6, 0x00);
+ ok &= ns2501_writeb(dvo, 0xc7, 0x73);
+ ok &= ns2501_writeb(dvo, 0xc8, 0x02);
+
+ } else if (mode->hdisplay == 640 && mode->vdisplay == 480) {
+ /* mode 274 */
+ DRM_DEBUG_KMS("%s: switching to 640x480\n",
+ __FUNCTION__);
+ /*
+ * No, I do not know where this data comes from.
+ * It is just what the video bios left in the DVO, so
+ * I'm just copying it here over.
+ * This also means that I cannot support any other modes
+ * except the ones supported by the bios.
+ */
+ ns->reg_8_shadow &= ~NS2501_8_BPAS;
+
+ ok &= ns2501_writeb(dvo, 0x11, 0xa0);
+ ok &= ns2501_writeb(dvo, 0x1b, 0x11);
+ ok &= ns2501_writeb(dvo, 0x1c, 0x54);
+ ok &= ns2501_writeb(dvo, 0x1d, 0x03);
+
+ ok &= ns2501_writeb(dvo, 0x34, 0x03);
+ ok &= ns2501_writeb(dvo, 0x35, 0xff);
+
+ ok &= ns2501_writeb(dvo, 0x80, 0xff);
+ ok &= ns2501_writeb(dvo, 0x81, 0x07);
+ ok &= ns2501_writeb(dvo, 0x82, 0x3d);
+ ok &= ns2501_writeb(dvo, 0x83, 0x05);
+
+ ok &= ns2501_writeb(dvo, 0x8d, 0x02);
+ ok &= ns2501_writeb(dvo, 0x8e, 0x10);
+ ok &= ns2501_writeb(dvo, 0x8f, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0x90, 0xff); /* vertical */
+ ok &= ns2501_writeb(dvo, 0x91, 0x07);
+ ok &= ns2501_writeb(dvo, 0x94, 0x00);
+ ok &= ns2501_writeb(dvo, 0x95, 0x00);
+
+ ok &= ns2501_writeb(dvo, 0x96, 0x05);
+
+ ok &= ns2501_writeb(dvo, 0x99, 0x00);
+ ok &= ns2501_writeb(dvo, 0x9a, 0x88);
+
+ ok &= ns2501_writeb(dvo, 0x9c, 0x24);
+ ok &= ns2501_writeb(dvo, 0x9d, 0x00);
+ ok &= ns2501_writeb(dvo, 0x9e, 0x25);
+ ok &= ns2501_writeb(dvo, 0x9f, 0x03);
+
+ ok &= ns2501_writeb(dvo, 0xa4, 0x84);
+
+ ok &= ns2501_writeb(dvo, 0xb6, 0x09);
+
+ ok &= ns2501_writeb(dvo, 0xb9, 0xa0); /* horizontal? */
+ ok &= ns2501_writeb(dvo, 0xba, 0x00); /* horizontal? */
+
+ ok &= ns2501_writeb(dvo, 0xc0, 0x05); /* horizontal? */
+ ok &= ns2501_writeb(dvo, 0xc1, 0x90);
+
+ ok &= ns2501_writeb(dvo, 0xc2, 0x00);
+ ok &= ns2501_writeb(dvo, 0xc3, 0x0f);
+
+ ok &= ns2501_writeb(dvo, 0xc4, 0x03);
+ ok &= ns2501_writeb(dvo, 0xc5, 0x16);
+
+ ok &= ns2501_writeb(dvo, 0xc6, 0x00);
+ ok &= ns2501_writeb(dvo, 0xc7, 0x02);
+ ok &= ns2501_writeb(dvo, 0xc8, 0x02);
+
+ } else if (mode->hdisplay == 1024 && mode->vdisplay == 768) {
+ /* mode 280 */
+ DRM_DEBUG_KMS("%s: switching to 1024x768\n",
+ __FUNCTION__);
+ /*
+ * This might or might not work, actually. I'm silently
+ * assuming here that the native panel resolution is
+ * 1024x768. If not, then this leaves the scaler disabled
+ * generating a picture that is likely not the expected.
+ *
+ * Problem is that I do not know where to take the panel
+ * dimensions from.
+ *
+ * Enable the bypass, scaling not required.
+ *
+ * The scaler registers are irrelevant here....
+ *
+ */
+ ns->reg_8_shadow |= NS2501_8_BPAS;
+ ok &= ns2501_writeb(dvo, 0x37, 0x44);
+ } else {
+ /*
+ * Data not known. Bummer!
+ * Hopefully, the code should not go here
+ * as mode_OK delivered no other modes.
+ */
+ ns->reg_8_shadow |= NS2501_8_BPAS;
+ }
+ ok &= ns2501_writeb(dvo, NS2501_REG8, ns->reg_8_shadow);
+
+ if (!ok) {
+ if (restore)
+ restore_dvo(dvo);
+ enable_dvo(dvo);
+ restore = true;
+ }
+ } while (!ok);
+ /*
+ * Restore the old i915 registers before
+ * forcing the ns2501 on.
+ */
+ if (restore)
+ restore_dvo(dvo);
+}
+
+/* set the NS2501 power state */
+static bool ns2501_get_hw_state(struct intel_dvo_device *dvo)
+{
+ unsigned char ch;
+
+ if (!ns2501_readb(dvo, NS2501_REG8, &ch))
+ return false;
+
+ if (ch & NS2501_8_PD)
+ return true;
+ else
+ return false;
+}
+
+/* set the NS2501 power state */
+static void ns2501_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ bool ok;
+ bool restore = false;
+ struct ns2501_priv *ns = (struct ns2501_priv *)(dvo->dev_priv);
+ unsigned char ch;
+
+ DRM_DEBUG_KMS("%s: Trying set the dpms of the DVO to %i\n",
+ __FUNCTION__, enable);
+
+ ch = ns->reg_8_shadow;
+
+ if (enable)
+ ch |= NS2501_8_PD;
+ else
+ ch &= ~NS2501_8_PD;
+
+ if (ns->reg_8_set == 0 || ns->reg_8_shadow != ch) {
+ ns->reg_8_set = 1;
+ ns->reg_8_shadow = ch;
+
+ do {
+ ok = true;
+ ok &= ns2501_writeb(dvo, NS2501_REG8, ch);
+ ok &=
+ ns2501_writeb(dvo, 0x34,
+ enable ? 0x03 : 0x00);
+ ok &=
+ ns2501_writeb(dvo, 0x35,
+ enable ? 0xff : 0x00);
+ if (!ok) {
+ if (restore)
+ restore_dvo(dvo);
+ enable_dvo(dvo);
+ restore = true;
+ }
+ } while (!ok);
+
+ if (restore)
+ restore_dvo(dvo);
+ }
+}
+
+static void ns2501_dump_regs(struct intel_dvo_device *dvo)
+{
+ uint8_t val;
+
+ ns2501_readb(dvo, NS2501_FREQ_LO, &val);
+ DRM_LOG_KMS("NS2501_FREQ_LO: 0x%02x\n", val);
+ ns2501_readb(dvo, NS2501_FREQ_HI, &val);
+ DRM_LOG_KMS("NS2501_FREQ_HI: 0x%02x\n", val);
+ ns2501_readb(dvo, NS2501_REG8, &val);
+ DRM_LOG_KMS("NS2501_REG8: 0x%02x\n", val);
+ ns2501_readb(dvo, NS2501_REG9, &val);
+ DRM_LOG_KMS("NS2501_REG9: 0x%02x\n", val);
+ ns2501_readb(dvo, NS2501_REGC, &val);
+ DRM_LOG_KMS("NS2501_REGC: 0x%02x\n", val);
+}
+
+static void ns2501_destroy(struct intel_dvo_device *dvo)
+{
+ struct ns2501_priv *ns = dvo->dev_priv;
+
+ if (ns) {
+ free(ns, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops ns2501_ops = {
+ .init = ns2501_init,
+ .detect = ns2501_detect,
+ .mode_valid = ns2501_mode_valid,
+ .mode_set = ns2501_mode_set,
+ .dpms = ns2501_dpms,
+ .get_hw_state = ns2501_get_hw_state,
+ .dump_regs = ns2501_dump_regs,
+ .destroy = ns2501_destroy,
+};
diff --git a/sys/dev/drm2/i915/dvo_sil164.c b/sys/dev/drm2/i915/dvo_sil164.c
new file mode 100644
index 0000000..1976313
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_sil164.c
@@ -0,0 +1,282 @@
+/**************************************************************************
+
+Copyright © 2006 Dave Airlie
+
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+
+#define SIL164_VID 0x0001
+#define SIL164_DID 0x0006
+
+#define SIL164_VID_LO 0x00
+#define SIL164_VID_HI 0x01
+#define SIL164_DID_LO 0x02
+#define SIL164_DID_HI 0x03
+#define SIL164_REV 0x04
+#define SIL164_RSVD 0x05
+#define SIL164_FREQ_LO 0x06
+#define SIL164_FREQ_HI 0x07
+
+#define SIL164_REG8 0x08
+#define SIL164_8_VEN (1<<5)
+#define SIL164_8_HEN (1<<4)
+#define SIL164_8_DSEL (1<<3)
+#define SIL164_8_BSEL (1<<2)
+#define SIL164_8_EDGE (1<<1)
+#define SIL164_8_PD (1<<0)
+
+#define SIL164_REG9 0x09
+#define SIL164_9_VLOW (1<<7)
+#define SIL164_9_MSEL_MASK (0x7<<4)
+#define SIL164_9_TSEL (1<<3)
+#define SIL164_9_RSEN (1<<2)
+#define SIL164_9_HTPLG (1<<1)
+#define SIL164_9_MDI (1<<0)
+
+#define SIL164_REGC 0x0c
+
+struct sil164_priv {
+ //I2CDevRec d;
+ bool quiet;
+};
+
+#define SILPTR(d) ((SIL164Ptr)(d->DriverPrivate.ptr))
+
+static bool sil164_readb(struct intel_dvo_device *dvo, int addr, uint8_t *ch)
+{
+ struct sil164_priv *sil = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[2];
+ u8 in_buf[2];
+
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 1,
+ .buf = in_buf,
+ }
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = 0;
+
+ if (-iicbus_transfer(adapter, msgs, 2) == 0) {
+ *ch = in_buf[0];
+ return true;
+ }
+
+ if (!sil->quiet) {
+ DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+ return false;
+}
+
+static bool sil164_writeb(struct intel_dvo_device *dvo, int addr, uint8_t ch)
+{
+ struct sil164_priv *sil = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ uint8_t out_buf[2];
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 2,
+ .buf = out_buf,
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = ch;
+
+ if (-iicbus_transfer(adapter, &msg, 1) == 0)
+ return true;
+
+ if (!sil->quiet) {
+ DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+/* Silicon Image 164 driver for chip on i2c bus */
+static bool sil164_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ /* this will detect the SIL164 chip on the specified i2c bus */
+ struct sil164_priv *sil;
+ unsigned char ch;
+
+ sil = malloc(sizeof(struct sil164_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (sil == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = sil;
+ sil->quiet = true;
+
+ if (!sil164_readb(dvo, SIL164_VID_LO, &ch))
+ goto out;
+
+ if (ch != (SIL164_VID & 0xff)) {
+ DRM_DEBUG_KMS("sil164 not detected got %d: from %s Slave %d.\n",
+ ch, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+
+ if (!sil164_readb(dvo, SIL164_DID_LO, &ch))
+ goto out;
+
+ if (ch != (SIL164_DID & 0xff)) {
+ DRM_DEBUG_KMS("sil164 not detected got %d: from %s Slave %d.\n",
+ ch, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+ sil->quiet = false;
+
+ DRM_DEBUG_KMS("init sil164 dvo controller successfully!\n");
+ return true;
+
+out:
+ free(sil, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status sil164_detect(struct intel_dvo_device *dvo)
+{
+ uint8_t reg9;
+
+ sil164_readb(dvo, SIL164_REG9, &reg9);
+
+ if (reg9 & SIL164_9_HTPLG)
+ return connector_status_connected;
+ else
+ return connector_status_disconnected;
+}
+
+static enum drm_mode_status sil164_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ return MODE_OK;
+}
+
+static void sil164_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ /* As long as the basics are set up, since we don't have clock
+ * dependencies in the mode setup, we can just leave the
+ * registers alone and everything will work fine.
+ */
+ /* recommended programming sequence from doc */
+ /*sil164_writeb(sil, 0x08, 0x30);
+ sil164_writeb(sil, 0x09, 0x00);
+ sil164_writeb(sil, 0x0a, 0x90);
+ sil164_writeb(sil, 0x0c, 0x89);
+ sil164_writeb(sil, 0x08, 0x31);*/
+ /* don't do much */
+ return;
+}
+
+/* set the SIL164 power state */
+static void sil164_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ int ret;
+ unsigned char ch;
+
+ ret = sil164_readb(dvo, SIL164_REG8, &ch);
+ if (ret == false)
+ return;
+
+ if (enable)
+ ch |= SIL164_8_PD;
+ else
+ ch &= ~SIL164_8_PD;
+
+ sil164_writeb(dvo, SIL164_REG8, ch);
+ return;
+}
+
+static bool sil164_get_hw_state(struct intel_dvo_device *dvo)
+{
+ int ret;
+ unsigned char ch;
+
+ ret = sil164_readb(dvo, SIL164_REG8, &ch);
+ if (ret == false)
+ return false;
+
+ if (ch & SIL164_8_PD)
+ return true;
+ else
+ return false;
+}
+
+static void sil164_dump_regs(struct intel_dvo_device *dvo)
+{
+ uint8_t val;
+
+ sil164_readb(dvo, SIL164_FREQ_LO, &val);
+ DRM_LOG_KMS("SIL164_FREQ_LO: 0x%02x\n", val);
+ sil164_readb(dvo, SIL164_FREQ_HI, &val);
+ DRM_LOG_KMS("SIL164_FREQ_HI: 0x%02x\n", val);
+ sil164_readb(dvo, SIL164_REG8, &val);
+ DRM_LOG_KMS("SIL164_REG8: 0x%02x\n", val);
+ sil164_readb(dvo, SIL164_REG9, &val);
+ DRM_LOG_KMS("SIL164_REG9: 0x%02x\n", val);
+ sil164_readb(dvo, SIL164_REGC, &val);
+ DRM_LOG_KMS("SIL164_REGC: 0x%02x\n", val);
+}
+
+static void sil164_destroy(struct intel_dvo_device *dvo)
+{
+ struct sil164_priv *sil = dvo->dev_priv;
+
+ if (sil) {
+ free(sil, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops sil164_ops = {
+ .init = sil164_init,
+ .detect = sil164_detect,
+ .mode_valid = sil164_mode_valid,
+ .mode_set = sil164_mode_set,
+ .dpms = sil164_dpms,
+ .get_hw_state = sil164_get_hw_state,
+ .dump_regs = sil164_dump_regs,
+ .destroy = sil164_destroy,
+};
diff --git a/sys/dev/drm2/i915/dvo_tfp410.c b/sys/dev/drm2/i915/dvo_tfp410.c
new file mode 100644
index 0000000..1bd1bff
--- /dev/null
+++ b/sys/dev/drm2/i915/dvo_tfp410.c
@@ -0,0 +1,321 @@
+/*
+ * Copyright © 2007 Dave Mueller
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ * Dave Mueller <dave.mueller@gmx.ch>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "dvo.h"
+
+/* register definitions according to the TFP410 data sheet */
+#define TFP410_VID 0x014C
+#define TFP410_DID 0x0410
+
+#define TFP410_VID_LO 0x00
+#define TFP410_VID_HI 0x01
+#define TFP410_DID_LO 0x02
+#define TFP410_DID_HI 0x03
+#define TFP410_REV 0x04
+
+#define TFP410_CTL_1 0x08
+#define TFP410_CTL_1_TDIS (1<<6)
+#define TFP410_CTL_1_VEN (1<<5)
+#define TFP410_CTL_1_HEN (1<<4)
+#define TFP410_CTL_1_DSEL (1<<3)
+#define TFP410_CTL_1_BSEL (1<<2)
+#define TFP410_CTL_1_EDGE (1<<1)
+#define TFP410_CTL_1_PD (1<<0)
+
+#define TFP410_CTL_2 0x09
+#define TFP410_CTL_2_VLOW (1<<7)
+#define TFP410_CTL_2_MSEL_MASK (0x7<<4)
+#define TFP410_CTL_2_MSEL (1<<4)
+#define TFP410_CTL_2_TSEL (1<<3)
+#define TFP410_CTL_2_RSEN (1<<2)
+#define TFP410_CTL_2_HTPLG (1<<1)
+#define TFP410_CTL_2_MDI (1<<0)
+
+#define TFP410_CTL_3 0x0A
+#define TFP410_CTL_3_DK_MASK (0x7<<5)
+#define TFP410_CTL_3_DK (1<<5)
+#define TFP410_CTL_3_DKEN (1<<4)
+#define TFP410_CTL_3_CTL_MASK (0x7<<1)
+#define TFP410_CTL_3_CTL (1<<1)
+
+#define TFP410_USERCFG 0x0B
+
+#define TFP410_DE_DLY 0x32
+
+#define TFP410_DE_CTL 0x33
+#define TFP410_DE_CTL_DEGEN (1<<6)
+#define TFP410_DE_CTL_VSPOL (1<<5)
+#define TFP410_DE_CTL_HSPOL (1<<4)
+#define TFP410_DE_CTL_DEDLY8 (1<<0)
+
+#define TFP410_DE_TOP 0x34
+
+#define TFP410_DE_CNT_LO 0x36
+#define TFP410_DE_CNT_HI 0x37
+
+#define TFP410_DE_LIN_LO 0x38
+#define TFP410_DE_LIN_HI 0x39
+
+#define TFP410_H_RES_LO 0x3A
+#define TFP410_H_RES_HI 0x3B
+
+#define TFP410_V_RES_LO 0x3C
+#define TFP410_V_RES_HI 0x3D
+
+struct tfp410_priv {
+ bool quiet;
+};
+
+static bool tfp410_readb(struct intel_dvo_device *dvo, int addr, uint8_t *ch)
+{
+ struct tfp410_priv *tfp = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ u8 out_buf[2];
+ u8 in_buf[2];
+
+ struct iic_msg msgs[] = {
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = dvo->slave_addr << 1,
+ .flags = I2C_M_RD,
+ .len = 1,
+ .buf = in_buf,
+ }
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = 0;
+
+ if (-iicbus_transfer(adapter, msgs, 2) == 0) {
+ *ch = in_buf[0];
+ return true;
+ }
+
+ if (!tfp->quiet) {
+ DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+ return false;
+}
+
+static bool tfp410_writeb(struct intel_dvo_device *dvo, int addr, uint8_t ch)
+{
+ struct tfp410_priv *tfp = dvo->dev_priv;
+ device_t adapter = dvo->i2c_bus;
+ uint8_t out_buf[2];
+ struct iic_msg msg = {
+ .slave = dvo->slave_addr << 1,
+ .flags = 0,
+ .len = 2,
+ .buf = out_buf,
+ };
+
+ out_buf[0] = addr;
+ out_buf[1] = ch;
+
+ if (-iicbus_transfer(adapter, &msg, 1) == 0)
+ return true;
+
+ if (!tfp->quiet) {
+ DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n",
+ addr, device_get_nameunit(adapter), dvo->slave_addr);
+ }
+
+ return false;
+}
+
+static int tfp410_getid(struct intel_dvo_device *dvo, int addr)
+{
+ uint8_t ch1, ch2;
+
+ if (tfp410_readb(dvo, addr+0, &ch1) &&
+ tfp410_readb(dvo, addr+1, &ch2))
+ return ((ch2 << 8) & 0xFF00) | (ch1 & 0x00FF);
+
+ return -1;
+}
+
+/* Ti TFP410 driver for chip on i2c bus */
+static bool tfp410_init(struct intel_dvo_device *dvo,
+ device_t adapter)
+{
+ /* this will detect the tfp410 chip on the specified i2c bus */
+ struct tfp410_priv *tfp;
+ int id;
+
+ tfp = malloc(sizeof(struct tfp410_priv), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (tfp == NULL)
+ return false;
+
+ dvo->i2c_bus = adapter;
+ dvo->dev_priv = tfp;
+ tfp->quiet = true;
+
+ if ((id = tfp410_getid(dvo, TFP410_VID_LO)) != TFP410_VID) {
+ DRM_DEBUG_KMS("tfp410 not detected got VID %X: from %s "
+ "Slave %d.\n",
+ id, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+
+ if ((id = tfp410_getid(dvo, TFP410_DID_LO)) != TFP410_DID) {
+ DRM_DEBUG_KMS("tfp410 not detected got DID %X: from %s "
+ "Slave %d.\n",
+ id, device_get_nameunit(adapter), dvo->slave_addr);
+ goto out;
+ }
+ tfp->quiet = false;
+ return true;
+out:
+ free(tfp, DRM_MEM_KMS);
+ return false;
+}
+
+static enum drm_connector_status tfp410_detect(struct intel_dvo_device *dvo)
+{
+ enum drm_connector_status ret = connector_status_disconnected;
+ uint8_t ctl2;
+
+ if (tfp410_readb(dvo, TFP410_CTL_2, &ctl2)) {
+ if (ctl2 & TFP410_CTL_2_RSEN)
+ ret = connector_status_connected;
+ else
+ ret = connector_status_disconnected;
+ }
+
+ return ret;
+}
+
+static enum drm_mode_status tfp410_mode_valid(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode)
+{
+ return MODE_OK;
+}
+
+static void tfp410_mode_set(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ /* As long as the basics are set up, since we don't have clock dependencies
+ * in the mode setup, we can just leave the registers alone and everything
+ * will work fine.
+ */
+ /* don't do much */
+ return;
+}
+
+/* set the tfp410 power state */
+static void tfp410_dpms(struct intel_dvo_device *dvo, bool enable)
+{
+ uint8_t ctl1;
+
+ if (!tfp410_readb(dvo, TFP410_CTL_1, &ctl1))
+ return;
+
+ if (enable)
+ ctl1 |= TFP410_CTL_1_PD;
+ else
+ ctl1 &= ~TFP410_CTL_1_PD;
+
+ tfp410_writeb(dvo, TFP410_CTL_1, ctl1);
+}
+
+static bool tfp410_get_hw_state(struct intel_dvo_device *dvo)
+{
+ uint8_t ctl1;
+
+ if (!tfp410_readb(dvo, TFP410_CTL_1, &ctl1))
+ return false;
+
+ if (ctl1 & TFP410_CTL_1_PD)
+ return true;
+ else
+ return false;
+}
+
+static void tfp410_dump_regs(struct intel_dvo_device *dvo)
+{
+ uint8_t val, val2;
+
+ tfp410_readb(dvo, TFP410_REV, &val);
+ DRM_LOG_KMS("TFP410_REV: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_CTL_1, &val);
+ DRM_LOG_KMS("TFP410_CTL1: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_CTL_2, &val);
+ DRM_LOG_KMS("TFP410_CTL2: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_CTL_3, &val);
+ DRM_LOG_KMS("TFP410_CTL3: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_USERCFG, &val);
+ DRM_LOG_KMS("TFP410_USERCFG: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_DE_DLY, &val);
+ DRM_LOG_KMS("TFP410_DE_DLY: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_DE_CTL, &val);
+ DRM_LOG_KMS("TFP410_DE_CTL: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_DE_TOP, &val);
+ DRM_LOG_KMS("TFP410_DE_TOP: 0x%02X\n", val);
+ tfp410_readb(dvo, TFP410_DE_CNT_LO, &val);
+ tfp410_readb(dvo, TFP410_DE_CNT_HI, &val2);
+ DRM_LOG_KMS("TFP410_DE_CNT: 0x%02X%02X\n", val2, val);
+ tfp410_readb(dvo, TFP410_DE_LIN_LO, &val);
+ tfp410_readb(dvo, TFP410_DE_LIN_HI, &val2);
+ DRM_LOG_KMS("TFP410_DE_LIN: 0x%02X%02X\n", val2, val);
+ tfp410_readb(dvo, TFP410_H_RES_LO, &val);
+ tfp410_readb(dvo, TFP410_H_RES_HI, &val2);
+ DRM_LOG_KMS("TFP410_H_RES: 0x%02X%02X\n", val2, val);
+ tfp410_readb(dvo, TFP410_V_RES_LO, &val);
+ tfp410_readb(dvo, TFP410_V_RES_HI, &val2);
+ DRM_LOG_KMS("TFP410_V_RES: 0x%02X%02X\n", val2, val);
+}
+
+static void tfp410_destroy(struct intel_dvo_device *dvo)
+{
+ struct tfp410_priv *tfp = dvo->dev_priv;
+
+ if (tfp) {
+ free(tfp, DRM_MEM_KMS);
+ dvo->dev_priv = NULL;
+ }
+}
+
+struct intel_dvo_dev_ops tfp410_ops = {
+ .init = tfp410_init,
+ .detect = tfp410_detect,
+ .mode_valid = tfp410_mode_valid,
+ .mode_set = tfp410_mode_set,
+ .dpms = tfp410_dpms,
+ .get_hw_state = tfp410_get_hw_state,
+ .dump_regs = tfp410_dump_regs,
+ .destroy = tfp410_destroy,
+};
diff --git a/sys/dev/drm2/i915/i915_debug.c b/sys/dev/drm2/i915/i915_debug.c
index 121daec..29693af 100644
--- a/sys/dev/drm2/i915/i915_debug.c
+++ b/sys/dev/drm2/i915/i915_debug.c
@@ -38,9 +38,12 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
+#define seq_printf(m, fmt, ...) sbuf_printf((m), (fmt), ##__VA_ARGS__)
+
+//#if defined(CONFIG_DEBUG_FS)
+
enum {
ACTIVE_LIST,
- FLUSHING_LIST,
INACTIVE_LIST,
PINNED_LIST,
};
@@ -54,29 +57,13 @@ static int i915_capabilities(struct drm_device *dev, struct sbuf *m, void *data)
{
const struct intel_device_info *info = INTEL_INFO(dev);
- sbuf_printf(m, "gen: %d\n", info->gen);
- if (HAS_PCH_SPLIT(dev))
- sbuf_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev));
-#define B(x) sbuf_printf(m, #x ": %s\n", yesno(info->x))
- B(is_mobile);
- B(is_i85x);
- B(is_i915g);
- B(is_i945gm);
- B(is_g33);
- B(need_gfx_hws);
- B(is_g4x);
- B(is_pineview);
- B(has_fbc);
- B(has_pipe_cxsr);
- B(has_hotplug);
- B(cursor_needs_physical);
- B(has_overlay);
- B(overlay_needs_physical);
- B(supports_tv);
- B(has_bsd_ring);
- B(has_blt_ring);
- B(has_llc);
-#undef B
+ seq_printf(m, "gen: %d\n", info->gen);
+ seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev));
+#define DEV_INFO_FLAG(x) seq_printf(m, #x ": %s\n", yesno(info->x))
+#define DEV_INFO_SEP ;
+ DEV_INFO_FLAGS;
+#undef DEV_INFO_FLAG
+#undef DEV_INFO_SEP
return 0;
}
@@ -114,27 +101,29 @@ static const char *cache_level_str(int type)
static void
describe_obj(struct sbuf *m, struct drm_i915_gem_object *obj)
{
-
- sbuf_printf(m, "%p: %s%s %8zdKiB %04x %04x %d %d%s%s%s",
+ seq_printf(m, "%pK: %s%s %8zdKiB %04x %04x %d %d %d%s%s%s",
&obj->base,
get_pin_flag(obj),
get_tiling_flag(obj),
obj->base.size / 1024,
obj->base.read_domains,
obj->base.write_domain,
- obj->last_rendering_seqno,
+ obj->last_read_seqno,
+ obj->last_write_seqno,
obj->last_fenced_seqno,
cache_level_str(obj->cache_level),
obj->dirty ? " dirty" : "",
obj->madv == I915_MADV_DONTNEED ? " purgeable" : "");
if (obj->base.name)
- sbuf_printf(m, " (name: %d)", obj->base.name);
+ seq_printf(m, " (name: %d)", obj->base.name);
+ if (obj->pin_count)
+ seq_printf(m, " (pinned x %d)", obj->pin_count);
if (obj->pin_display)
- sbuf_printf(m, " (display)");
+ seq_printf(m, " (display)");
if (obj->fence_reg != I915_FENCE_REG_NONE)
- sbuf_printf(m, " (fence: %d)", obj->fence_reg);
+ seq_printf(m, " (fence: %d)", obj->fence_reg);
if (obj->gtt_space != NULL)
- sbuf_printf(m, " (gtt offset: %08x, size: %08x)",
+ seq_printf(m, " (gtt offset: %08x, size: %08x)",
obj->gtt_offset, (unsigned int)obj->gtt_space->size);
if (obj->pin_mappable || obj->fault_mappable) {
char s[3], *t = s;
@@ -143,10 +132,10 @@ describe_obj(struct sbuf *m, struct drm_i915_gem_object *obj)
if (obj->fault_mappable)
*t++ = 'f';
*t = '\0';
- sbuf_printf(m, " (%s mappable)", s);
+ seq_printf(m, " (%s mappable)", s);
}
if (obj->ring != NULL)
- sbuf_printf(m, " (%s)", obj->ring->name);
+ seq_printf(m, " (%s)", obj->ring->name);
}
static int i915_gem_object_list_info(struct drm_device *dev, struct sbuf *m, void *data)
@@ -163,17 +152,13 @@ static int i915_gem_object_list_info(struct drm_device *dev, struct sbuf *m, voi
switch (list) {
case ACTIVE_LIST:
- sbuf_printf(m, "Active:\n");
+ seq_printf(m, "Active:\n");
head = &dev_priv->mm.active_list;
break;
case INACTIVE_LIST:
- sbuf_printf(m, "Inactive:\n");
+ seq_printf(m, "Inactive:\n");
head = &dev_priv->mm.inactive_list;
break;
- case FLUSHING_LIST:
- sbuf_printf(m, "Flushing:\n");
- head = &dev_priv->mm.flushing_list;
- break;
default:
DRM_UNLOCK(dev);
return -EINVAL;
@@ -181,16 +166,16 @@ static int i915_gem_object_list_info(struct drm_device *dev, struct sbuf *m, voi
total_obj_size = total_gtt_size = count = 0;
list_for_each_entry(obj, head, mm_list) {
- sbuf_printf(m, " ");
+ seq_printf(m, " ");
describe_obj(m, obj);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
total_obj_size += obj->base.size;
total_gtt_size += obj->gtt_space->size;
count++;
}
DRM_UNLOCK(dev);
- sbuf_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
+ seq_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
count, total_obj_size, total_gtt_size);
return 0;
}
@@ -209,34 +194,42 @@ static int i915_gem_object_list_info(struct drm_device *dev, struct sbuf *m, voi
static int i915_gem_object_info(struct drm_device *dev, struct sbuf *m, void *data)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- u32 count, mappable_count;
- size_t size, mappable_size;
+ u32 count, mappable_count, purgeable_count;
+ size_t size, mappable_size, purgeable_size;
struct drm_i915_gem_object *obj;
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
- sbuf_printf(m, "%u objects, %zu bytes\n",
+
+ seq_printf(m, "%u objects, %zu bytes\n",
dev_priv->mm.object_count,
dev_priv->mm.object_memory);
size = count = mappable_size = mappable_count = 0;
- count_objects(&dev_priv->mm.gtt_list, gtt_list);
- sbuf_printf(m, "%u [%u] objects, %zu [%zu] bytes in gtt\n",
+ count_objects(&dev_priv->mm.bound_list, gtt_list);
+ seq_printf(m, "%u [%u] objects, %zu [%zu] bytes in gtt\n",
count, mappable_count, size, mappable_size);
size = count = mappable_size = mappable_count = 0;
count_objects(&dev_priv->mm.active_list, mm_list);
- count_objects(&dev_priv->mm.flushing_list, mm_list);
- sbuf_printf(m, " %u [%u] active objects, %zu [%zu] bytes\n",
+ seq_printf(m, " %u [%u] active objects, %zu [%zu] bytes\n",
count, mappable_count, size, mappable_size);
size = count = mappable_size = mappable_count = 0;
count_objects(&dev_priv->mm.inactive_list, mm_list);
- sbuf_printf(m, " %u [%u] inactive objects, %zu [%zu] bytes\n",
+ seq_printf(m, " %u [%u] inactive objects, %zu [%zu] bytes\n",
count, mappable_count, size, mappable_size);
+ size = count = purgeable_size = purgeable_count = 0;
+ list_for_each_entry(obj, &dev_priv->mm.unbound_list, gtt_list) {
+ size += obj->base.size, ++count;
+ if (obj->madv == I915_MADV_DONTNEED)
+ purgeable_size += obj->base.size, ++purgeable_count;
+ }
+ seq_printf(m, "%u unbound objects, %zu bytes\n", count, size);
+
size = count = mappable_size = mappable_count = 0;
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list) {
if (obj->fault_mappable) {
size += obj->gtt_space->size;
++count;
@@ -245,13 +238,19 @@ static int i915_gem_object_info(struct drm_device *dev, struct sbuf *m, void *da
mappable_size += obj->gtt_space->size;
++mappable_count;
}
+ if (obj->madv == I915_MADV_DONTNEED) {
+ purgeable_size += obj->base.size;
+ ++purgeable_count;
+ }
}
- sbuf_printf(m, "%u pinned mappable objects, %zu bytes\n",
+ seq_printf(m, "%u purgeable objects, %zu bytes\n",
+ purgeable_count, purgeable_size);
+ seq_printf(m, "%u pinned mappable objects, %zu bytes\n",
mappable_count, mappable_size);
- sbuf_printf(m, "%u fault mappable objects, %zu bytes\n",
+ seq_printf(m, "%u fault mappable objects, %zu bytes\n",
count, size);
- sbuf_printf(m, "%zu [%zu] gtt total\n",
+ seq_printf(m, "%zu [%zu] gtt total\n",
dev_priv->mm.gtt_total, dev_priv->mm.mappable_gtt_total);
DRM_UNLOCK(dev);
@@ -271,13 +270,13 @@ static int i915_gem_gtt_info(struct drm_device *dev, struct sbuf *m, void *data)
return -EINTR;
total_obj_size = total_gtt_size = count = 0;
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list) {
if (list == PINNED_LIST && obj->pin_count == 0)
continue;
- sbuf_printf(m, " ");
+ seq_printf(m, " ");
describe_obj(m, obj);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
total_obj_size += obj->base.size;
total_gtt_size += obj->gtt_space->size;
count++;
@@ -285,7 +284,7 @@ static int i915_gem_gtt_info(struct drm_device *dev, struct sbuf *m, void *data)
DRM_UNLOCK(dev);
- sbuf_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
+ seq_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
count, total_obj_size, total_gtt_size);
return 0;
@@ -303,31 +302,31 @@ static int i915_gem_pageflip_info(struct drm_device *dev, struct sbuf *m, void *
mtx_lock(&dev->event_lock);
work = crtc->unpin_work;
if (work == NULL) {
- sbuf_printf(m, "No flip due on pipe %c (plane %c)\n",
+ seq_printf(m, "No flip due on pipe %c (plane %c)\n",
pipe, plane);
} else {
- if (!work->pending) {
- sbuf_printf(m, "Flip queued on pipe %c (plane %c)\n",
+ if (atomic_read(&work->pending) < INTEL_FLIP_COMPLETE) {
+ seq_printf(m, "Flip queued on pipe %c (plane %c)\n",
pipe, plane);
} else {
- sbuf_printf(m, "Flip pending (waiting for vsync) on pipe %c (plane %c)\n",
+ seq_printf(m, "Flip pending (waiting for vsync) on pipe %c (plane %c)\n",
pipe, plane);
}
if (work->enable_stall_check)
- sbuf_printf(m, "Stall check enabled, ");
+ seq_printf(m, "Stall check enabled, ");
else
- sbuf_printf(m, "Stall check waiting for page flip ioctl, ");
- sbuf_printf(m, "%d prepares\n", work->pending);
+ seq_printf(m, "Stall check waiting for page flip ioctl, ");
+ seq_printf(m, "%d prepares\n", atomic_read(&work->pending));
if (work->old_fb_obj) {
struct drm_i915_gem_object *obj = work->old_fb_obj;
if (obj)
- sbuf_printf(m, "Old framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
+ seq_printf(m, "Old framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
}
if (work->pending_flip_obj) {
struct drm_i915_gem_object *obj = work->pending_flip_obj;
if (obj)
- sbuf_printf(m, "New framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
+ seq_printf(m, "New framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
}
}
mtx_unlock(&dev->event_lock);
@@ -339,41 +338,23 @@ static int i915_gem_pageflip_info(struct drm_device *dev, struct sbuf *m, void *
static int i915_gem_request_info(struct drm_device *dev, struct sbuf *m, void *data)
{
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
struct drm_i915_gem_request *gem_request;
- int count;
+ int count, i;
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
count = 0;
- if (!list_empty(&dev_priv->rings[RCS].request_list)) {
- sbuf_printf(m, "Render requests:\n");
- list_for_each_entry(gem_request,
- &dev_priv->rings[RCS].request_list,
- list) {
- sbuf_printf(m, " %d @ %d\n",
- gem_request->seqno,
- (int) (jiffies - gem_request->emitted_jiffies));
- }
- count++;
- }
- if (!list_empty(&dev_priv->rings[VCS].request_list)) {
- sbuf_printf(m, "BSD requests:\n");
- list_for_each_entry(gem_request,
- &dev_priv->rings[VCS].request_list,
- list) {
- sbuf_printf(m, " %d @ %d\n",
- gem_request->seqno,
- (int) (jiffies - gem_request->emitted_jiffies));
- }
- count++;
- }
- if (!list_empty(&dev_priv->rings[BCS].request_list)) {
- sbuf_printf(m, "BLT requests:\n");
+ for_each_ring(ring, dev_priv, i) {
+ if (list_empty(&ring->request_list))
+ continue;
+
+ seq_printf(m, "%s requests:\n", ring->name);
list_for_each_entry(gem_request,
- &dev_priv->rings[BCS].request_list,
+ &ring->request_list,
list) {
- sbuf_printf(m, " %d @ %d\n",
+ seq_printf(m, " %d @ %d\n",
gem_request->seqno,
(int) (jiffies - gem_request->emitted_jiffies));
}
@@ -382,7 +363,7 @@ static int i915_gem_request_info(struct drm_device *dev, struct sbuf *m, void *d
DRM_UNLOCK(dev);
if (count == 0)
- sbuf_printf(m, "No requests\n");
+ seq_printf(m, "No requests\n");
return 0;
}
@@ -391,21 +372,22 @@ static void i915_ring_seqno_info(struct sbuf *m,
struct intel_ring_buffer *ring)
{
if (ring->get_seqno) {
- sbuf_printf(m, "Current sequence (%s): %d\n",
- ring->name, ring->get_seqno(ring));
+ seq_printf(m, "Current sequence (%s): %d\n",
+ ring->name, ring->get_seqno(ring, false));
}
}
static int i915_gem_seqno_info(struct drm_device *dev, struct sbuf *m, void *data)
{
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
int i;
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
- for (i = 0; i < I915_NUM_RINGS; i++)
- i915_ring_seqno_info(m, &dev_priv->rings[i]);
+ for_each_ring(ring, dev_priv, i)
+ i915_ring_seqno_info(m, ring);
DRM_UNLOCK(dev);
@@ -416,89 +398,90 @@ static int i915_gem_seqno_info(struct drm_device *dev, struct sbuf *m, void *dat
static int i915_interrupt_info(struct drm_device *dev, struct sbuf *m, void *data)
{
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
int i, pipe;
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
if (IS_VALLEYVIEW(dev)) {
- sbuf_printf(m, "Display IER:\t%08x\n",
+ seq_printf(m, "Display IER:\t%08x\n",
I915_READ(VLV_IER));
- sbuf_printf(m, "Display IIR:\t%08x\n",
+ seq_printf(m, "Display IIR:\t%08x\n",
I915_READ(VLV_IIR));
- sbuf_printf(m, "Display IIR_RW:\t%08x\n",
+ seq_printf(m, "Display IIR_RW:\t%08x\n",
I915_READ(VLV_IIR_RW));
- sbuf_printf(m, "Display IMR:\t%08x\n",
+ seq_printf(m, "Display IMR:\t%08x\n",
I915_READ(VLV_IMR));
for_each_pipe(pipe)
- sbuf_printf(m, "Pipe %c stat:\t%08x\n",
+ seq_printf(m, "Pipe %c stat:\t%08x\n",
pipe_name(pipe),
I915_READ(PIPESTAT(pipe)));
- sbuf_printf(m, "Master IER:\t%08x\n",
+ seq_printf(m, "Master IER:\t%08x\n",
I915_READ(VLV_MASTER_IER));
- sbuf_printf(m, "Render IER:\t%08x\n",
+ seq_printf(m, "Render IER:\t%08x\n",
I915_READ(GTIER));
- sbuf_printf(m, "Render IIR:\t%08x\n",
+ seq_printf(m, "Render IIR:\t%08x\n",
I915_READ(GTIIR));
- sbuf_printf(m, "Render IMR:\t%08x\n",
+ seq_printf(m, "Render IMR:\t%08x\n",
I915_READ(GTIMR));
- sbuf_printf(m, "PM IER:\t\t%08x\n",
+ seq_printf(m, "PM IER:\t\t%08x\n",
I915_READ(GEN6_PMIER));
- sbuf_printf(m, "PM IIR:\t\t%08x\n",
+ seq_printf(m, "PM IIR:\t\t%08x\n",
I915_READ(GEN6_PMIIR));
- sbuf_printf(m, "PM IMR:\t\t%08x\n",
+ seq_printf(m, "PM IMR:\t\t%08x\n",
I915_READ(GEN6_PMIMR));
- sbuf_printf(m, "Port hotplug:\t%08x\n",
+ seq_printf(m, "Port hotplug:\t%08x\n",
I915_READ(PORT_HOTPLUG_EN));
- sbuf_printf(m, "DPFLIPSTAT:\t%08x\n",
+ seq_printf(m, "DPFLIPSTAT:\t%08x\n",
I915_READ(VLV_DPFLIPSTAT));
- sbuf_printf(m, "DPINVGTT:\t%08x\n",
+ seq_printf(m, "DPINVGTT:\t%08x\n",
I915_READ(DPINVGTT));
} else if (!HAS_PCH_SPLIT(dev)) {
- sbuf_printf(m, "Interrupt enable: %08x\n",
+ seq_printf(m, "Interrupt enable: %08x\n",
I915_READ(IER));
- sbuf_printf(m, "Interrupt identity: %08x\n",
+ seq_printf(m, "Interrupt identity: %08x\n",
I915_READ(IIR));
- sbuf_printf(m, "Interrupt mask: %08x\n",
+ seq_printf(m, "Interrupt mask: %08x\n",
I915_READ(IMR));
for_each_pipe(pipe)
- sbuf_printf(m, "Pipe %c stat: %08x\n",
+ seq_printf(m, "Pipe %c stat: %08x\n",
pipe_name(pipe),
I915_READ(PIPESTAT(pipe)));
} else {
- sbuf_printf(m, "North Display Interrupt enable: %08x\n",
+ seq_printf(m, "North Display Interrupt enable: %08x\n",
I915_READ(DEIER));
- sbuf_printf(m, "North Display Interrupt identity: %08x\n",
+ seq_printf(m, "North Display Interrupt identity: %08x\n",
I915_READ(DEIIR));
- sbuf_printf(m, "North Display Interrupt mask: %08x\n",
+ seq_printf(m, "North Display Interrupt mask: %08x\n",
I915_READ(DEIMR));
- sbuf_printf(m, "South Display Interrupt enable: %08x\n",
+ seq_printf(m, "South Display Interrupt enable: %08x\n",
I915_READ(SDEIER));
- sbuf_printf(m, "South Display Interrupt identity: %08x\n",
+ seq_printf(m, "South Display Interrupt identity: %08x\n",
I915_READ(SDEIIR));
- sbuf_printf(m, "South Display Interrupt mask: %08x\n",
+ seq_printf(m, "South Display Interrupt mask: %08x\n",
I915_READ(SDEIMR));
- sbuf_printf(m, "Graphics Interrupt enable: %08x\n",
+ seq_printf(m, "Graphics Interrupt enable: %08x\n",
I915_READ(GTIER));
- sbuf_printf(m, "Graphics Interrupt identity: %08x\n",
+ seq_printf(m, "Graphics Interrupt identity: %08x\n",
I915_READ(GTIIR));
- sbuf_printf(m, "Graphics Interrupt mask: %08x\n",
+ seq_printf(m, "Graphics Interrupt mask: %08x\n",
I915_READ(GTIMR));
}
- sbuf_printf(m, "Interrupts received: %d\n",
+ seq_printf(m, "Interrupts received: %d\n",
atomic_read(&dev_priv->irq_received));
- for (i = 0; i < I915_NUM_RINGS; i++) {
+ for_each_ring(ring, dev_priv, i) {
if (IS_GEN6(dev) || IS_GEN7(dev)) {
- sbuf_printf(m,
+ seq_printf(m,
"Graphics Interrupt mask (%s): %08x\n",
- dev_priv->rings[i].name, I915_READ_IMR(&dev_priv->rings[i]));
+ ring->name, I915_READ_IMR(ring));
}
- i915_ring_seqno_info(m, &dev_priv->rings[i]);
+ i915_ring_seqno_info(m, ring);
}
DRM_UNLOCK(dev);
@@ -513,17 +496,18 @@ static int i915_gem_fence_regs_info(struct drm_device *dev, struct sbuf *m, void
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
- sbuf_printf(m, "Reserved fences = %d\n", dev_priv->fence_reg_start);
- sbuf_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
+ seq_printf(m, "Reserved fences = %d\n", dev_priv->fence_reg_start);
+ seq_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
for (i = 0; i < dev_priv->num_fence_regs; i++) {
struct drm_i915_gem_object *obj = dev_priv->fence_regs[i].obj;
- sbuf_printf(m, "Fenced object[%2d] = ", i);
+ seq_printf(m, "Fence %d, pin count = %d, object = ",
+ i, dev_priv->fence_regs[i].pin_count);
if (obj == NULL)
- sbuf_printf(m, "unused");
+ seq_printf(m, "unused");
else
describe_obj(m, obj);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
}
DRM_UNLOCK(dev);
@@ -537,13 +521,13 @@ static int i915_hws_info(struct drm_device *dev, struct sbuf *m, void *data)
const volatile u32 __iomem *hws;
int i;
- ring = &dev_priv->rings[(uintptr_t)data];
- hws = (volatile u32 *)ring->status_page.page_addr;
+ ring = &dev_priv->ring[(uintptr_t)data];
+ hws = (volatile u32 __iomem *)ring->status_page.page_addr;
if (hws == NULL)
return 0;
for (i = 0; i < 4096 / sizeof(u32) / 4; i += 4) {
- sbuf_printf(m, "0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ seq_printf(m, "0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
i * 4,
hws[i], hws[i + 1], hws[i + 2], hws[i + 3]);
}
@@ -553,9 +537,9 @@ static int i915_hws_info(struct drm_device *dev, struct sbuf *m, void *data)
static const char *ring_str(int ring)
{
switch (ring) {
- case RCS: return " render";
- case VCS: return " bsd";
- case BCS: return " blt";
+ case RCS: return "render";
+ case VCS: return "bsd";
+ case BCS: return "blt";
default: return "";
}
}
@@ -596,15 +580,15 @@ static void print_error_buffers(struct sbuf *m,
int count)
{
- sbuf_printf(m, "%s [%d]:\n", name, count);
+ seq_printf(m, "%s [%d]:\n", name, count);
while (count--) {
- sbuf_printf(m, " %08x %8u %04x %04x %08x%s%s%s%s%s%s%s",
+ seq_printf(m, " %08x %8u %04x %04x %x %x%s%s%s%s%s%s%s",
err->gtt_offset,
err->size,
err->read_domains,
err->write_domain,
- err->seqno,
+ err->rseqno, err->wseqno,
pin_flag(err->pinned),
tiling_flag(err->tiling),
dirty_flag(err->dirty),
@@ -614,11 +598,11 @@ static void print_error_buffers(struct sbuf *m,
cache_level_str(err->cache_level));
if (err->name)
- sbuf_printf(m, " (name: %d)", err->name);
+ seq_printf(m, " (name: %d)", err->name);
if (err->fence_reg != I915_FENCE_REG_NONE)
- sbuf_printf(m, " (fence: %d)", err->fence_reg);
+ seq_printf(m, " (fence: %d)", err->fence_reg);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
err++;
}
}
@@ -628,34 +612,36 @@ static void i915_ring_error_state(struct sbuf *m,
struct drm_i915_error_state *error,
unsigned ring)
{
-
MPASS((ring < I915_NUM_RINGS)); /* shut up confused gcc */
- sbuf_printf(m, "%s command stream:\n", ring_str(ring));
- sbuf_printf(m, " HEAD: 0x%08x\n", error->head[ring]);
- sbuf_printf(m, " TAIL: 0x%08x\n", error->tail[ring]);
- sbuf_printf(m, " ACTHD: 0x%08x\n", error->acthd[ring]);
- sbuf_printf(m, " IPEIR: 0x%08x\n", error->ipeir[ring]);
- sbuf_printf(m, " IPEHR: 0x%08x\n", error->ipehr[ring]);
- sbuf_printf(m, " INSTDONE: 0x%08x\n", error->instdone[ring]);
- if (ring == RCS && INTEL_INFO(dev)->gen >= 4) {
- sbuf_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
- sbuf_printf(m, " BBADDR: 0x%08jx\n", (uintmax_t)error->bbaddr);
- }
+ seq_printf(m, "%s command stream:\n", ring_str(ring));
+ seq_printf(m, " HEAD: 0x%08x\n", error->head[ring]);
+ seq_printf(m, " TAIL: 0x%08x\n", error->tail[ring]);
+ seq_printf(m, " CTL: 0x%08x\n", error->ctl[ring]);
+ seq_printf(m, " ACTHD: 0x%08x\n", error->acthd[ring]);
+ seq_printf(m, " IPEIR: 0x%08x\n", error->ipeir[ring]);
+ seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr[ring]);
+ seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone[ring]);
+ if (ring == RCS && INTEL_INFO(dev)->gen >= 4)
+ seq_printf(m, " BBADDR: 0x%08jx\n", error->bbaddr);
+
if (INTEL_INFO(dev)->gen >= 4)
- sbuf_printf(m, " INSTPS: 0x%08x\n", error->instps[ring]);
- sbuf_printf(m, " INSTPM: 0x%08x\n", error->instpm[ring]);
- sbuf_printf(m, " FADDR: 0x%08x\n", error->faddr[ring]);
+ seq_printf(m, " INSTPS: 0x%08x\n", error->instps[ring]);
+ seq_printf(m, " INSTPM: 0x%08x\n", error->instpm[ring]);
+ seq_printf(m, " FADDR: 0x%08x\n", error->faddr[ring]);
if (INTEL_INFO(dev)->gen >= 6) {
- sbuf_printf(m, " FAULT_REG: 0x%08x\n", error->fault_reg[ring]);
- sbuf_printf(m, " SYNC_0: 0x%08x\n",
- error->semaphore_mboxes[ring][0]);
- sbuf_printf(m, " SYNC_1: 0x%08x\n",
- error->semaphore_mboxes[ring][1]);
+ seq_printf(m, " RC PSMI: 0x%08x\n", error->rc_psmi[ring]);
+ seq_printf(m, " FAULT_REG: 0x%08x\n", error->fault_reg[ring]);
+ seq_printf(m, " SYNC_0: 0x%08x [last synced 0x%08x]\n",
+ error->semaphore_mboxes[ring][0],
+ error->semaphore_seqno[ring][0]);
+ seq_printf(m, " SYNC_1: 0x%08x [last synced 0x%08x]\n",
+ error->semaphore_mboxes[ring][1],
+ error->semaphore_seqno[ring][1]);
}
- sbuf_printf(m, " seqno: 0x%08x\n", error->seqno[ring]);
- sbuf_printf(m, " waiting: %s\n", yesno(error->waiting[ring]));
- sbuf_printf(m, " ring->head: 0x%08x\n", error->cpu_ring_head[ring]);
- sbuf_printf(m, " ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
+ seq_printf(m, " seqno: 0x%08x\n", error->seqno[ring]);
+ seq_printf(m, " waiting: %s\n", yesno(error->waiting[ring]));
+ seq_printf(m, " ring->head: 0x%08x\n", error->cpu_ring_head[ring]);
+ seq_printf(m, " ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
}
static int i915_error_state(struct drm_device *dev, struct sbuf *m,
@@ -671,27 +657,38 @@ static int i915_error_state(struct drm_device *dev, struct sbuf *m,
if (error != NULL)
refcount_acquire(&error->ref);
mtx_unlock(&dev_priv->error_lock);
+
if (!error) {
- sbuf_printf(m, "no error state collected\n");
+ seq_printf(m, "no error state collected\n");
return 0;
}
- sbuf_printf(m, "Time: %jd s %jd us\n", (intmax_t)error->time.tv_sec,
+ seq_printf(m, "Time: %jd s %jd us\n", (intmax_t)error->time.tv_sec,
(intmax_t)error->time.tv_usec);
- sbuf_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
- sbuf_printf(m, "EIR: 0x%08x\n", error->eir);
- sbuf_printf(m, "IER: 0x%08x\n", error->ier);
- sbuf_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er);
+ seq_printf(m, "Kernel: %s\n", version);
+ seq_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
+ seq_printf(m, "EIR: 0x%08x\n", error->eir);
+ seq_printf(m, "IER: 0x%08x\n", error->ier);
+ seq_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er);
+ seq_printf(m, "FORCEWAKE: 0x%08x\n", error->forcewake);
+ seq_printf(m, "DERRMR: 0x%08x\n", error->derrmr);
+ seq_printf(m, "CCID: 0x%08x\n", error->ccid);
for (i = 0; i < dev_priv->num_fence_regs; i++)
- sbuf_printf(m, " fence[%d] = %08jx\n", i,
+ seq_printf(m, " fence[%d] = %08jx\n", i,
(uintmax_t)error->fence[i]);
+ for (i = 0; i < ARRAY_SIZE(error->extra_instdone); i++)
+ seq_printf(m, " INSTDONE_%d: 0x%08x\n", i, error->extra_instdone[i]);
+
if (INTEL_INFO(dev)->gen >= 6) {
- sbuf_printf(m, "ERROR: 0x%08x\n", error->error);
- sbuf_printf(m, "DONE_REG: 0x%08x\n", error->done_reg);
+ seq_printf(m, "ERROR: 0x%08x\n", error->error);
+ seq_printf(m, "DONE_REG: 0x%08x\n", error->done_reg);
}
+ if (INTEL_INFO(dev)->gen == 7)
+ seq_printf(m, "ERR_INT: 0x%08x\n", error->err_int);
+
for_each_ring(ring, dev_priv, i)
i915_ring_error_state(m, dev, error, i);
@@ -709,25 +706,24 @@ static int i915_error_state(struct drm_device *dev, struct sbuf *m,
struct drm_i915_error_object *obj;
if ((obj = error->ring[i].batchbuffer)) {
- sbuf_printf(m, "%s --- gtt_offset = 0x%08x\n",
- dev_priv->rings[i].name,
+ seq_printf(m, "%s --- gtt_offset = 0x%08x\n",
+ dev_priv->ring[i].name,
obj->gtt_offset);
offset = 0;
for (page = 0; page < obj->page_count; page++) {
for (elt = 0; elt < PAGE_SIZE/4; elt++) {
- sbuf_printf(m, "%08x : %08x\n",
- offset, obj->pages[page][elt]);
+ seq_printf(m, "%08x : %08x\n", offset, obj->pages[page][elt]);
offset += 4;
}
}
}
if (error->ring[i].num_requests) {
- sbuf_printf(m, "%s --- %d requests\n",
- dev_priv->rings[i].name,
+ seq_printf(m, "%s --- %d requests\n",
+ dev_priv->ring[i].name,
error->ring[i].num_requests);
for (j = 0; j < error->ring[i].num_requests; j++) {
- sbuf_printf(m, " seqno 0x%08x, emitted %ld, tail 0x%08x\n",
+ seq_printf(m, " seqno 0x%08x, emitted %ld, tail 0x%08x\n",
error->ring[i].requests[j].seqno,
error->ring[i].requests[j].jiffies,
error->ring[i].requests[j].tail);
@@ -735,13 +731,13 @@ static int i915_error_state(struct drm_device *dev, struct sbuf *m,
}
if ((obj = error->ring[i].ringbuffer)) {
- sbuf_printf(m, "%s --- ringbuffer = 0x%08x\n",
- dev_priv->rings[i].name,
+ seq_printf(m, "%s --- ringbuffer = 0x%08x\n",
+ dev_priv->ring[i].name,
obj->gtt_offset);
offset = 0;
for (page = 0; page < obj->page_count; page++) {
for (elt = 0; elt < PAGE_SIZE/4; elt++) {
- sbuf_printf(m, "%08x : %08x\n",
+ seq_printf(m, "%08x : %08x\n",
offset,
obj->pages[page][elt]);
offset += 4;
@@ -765,16 +761,13 @@ static int i915_error_state(struct drm_device *dev, struct sbuf *m,
static int
i915_error_state_write(struct drm_device *dev, const char *str, void *unused)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
- struct drm_i915_error_state *error;
DRM_DEBUG_DRIVER("Resetting error state\n");
- mtx_lock(&dev_priv->error_lock);
- error = dev_priv->first_error;
- dev_priv->first_error = NULL;
- mtx_unlock(&dev_priv->error_lock);
- if (error != NULL && refcount_release(&error->ref))
- i915_error_state_free(error);
+
+ DRM_LOCK(dev);
+ i915_destroy_error_state(dev);
+ DRM_UNLOCK(dev);
+
return (0);
}
@@ -790,7 +783,7 @@ static int i915_rstdby_delays(struct drm_device *dev, struct sbuf *m, void *unus
DRM_UNLOCK(dev);
- sbuf_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f));
+ seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f));
return 0;
}
@@ -803,17 +796,17 @@ static int i915_cur_delayinfo(struct drm_device *dev, struct sbuf *m, void *unus
u16 rgvswctl = I915_READ16(MEMSWCTL);
u16 rgvstat = I915_READ16(MEMSTAT_ILK);
- sbuf_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf);
- sbuf_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f);
- sbuf_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >>
+ seq_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf);
+ seq_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f);
+ seq_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >>
MEMSTAT_VID_SHIFT);
- sbuf_printf(m, "Current P-state: %d\n",
+ seq_printf(m, "Current P-state: %d\n",
(rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT);
- } else if (IS_GEN6(dev)) {
+ } else if (IS_GEN6(dev) || IS_GEN7(dev)) {
u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
- u32 rpstat;
+ u32 rpstat, cagf;
u32 rpupei, rpcurup, rpprevup;
u32 rpdownei, rpcurdown, rpprevdown;
int max_freq;
@@ -830,46 +823,50 @@ static int i915_cur_delayinfo(struct drm_device *dev, struct sbuf *m, void *unus
rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI);
rpcurdown = I915_READ(GEN6_RP_CUR_DOWN);
rpprevdown = I915_READ(GEN6_RP_PREV_DOWN);
+ if (IS_HASWELL(dev))
+ cagf = (rpstat & HSW_CAGF_MASK) >> HSW_CAGF_SHIFT;
+ else
+ cagf = (rpstat & GEN6_CAGF_MASK) >> GEN6_CAGF_SHIFT;
+ cagf *= GT_FREQUENCY_MULTIPLIER;
gen6_gt_force_wake_put(dev_priv);
DRM_UNLOCK(dev);
- sbuf_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
- sbuf_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
- sbuf_printf(m, "Render p-state ratio: %d\n",
+ seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
+ seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
+ seq_printf(m, "Render p-state ratio: %d\n",
(gt_perf_status & 0xff00) >> 8);
- sbuf_printf(m, "Render p-state VID: %d\n",
+ seq_printf(m, "Render p-state VID: %d\n",
gt_perf_status & 0xff);
- sbuf_printf(m, "Render p-state limit: %d\n",
+ seq_printf(m, "Render p-state limit: %d\n",
rp_state_limits & 0xff);
- sbuf_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >>
- GEN6_CAGF_SHIFT) * 50);
- sbuf_printf(m, "RP CUR UP EI: %dus\n", rpupei &
+ seq_printf(m, "CAGF: %dMHz\n", cagf);
+ seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &
GEN6_CURICONT_MASK);
- sbuf_printf(m, "RP CUR UP: %dus\n", rpcurup &
+ seq_printf(m, "RP CUR UP: %dus\n", rpcurup &
GEN6_CURBSYTAVG_MASK);
- sbuf_printf(m, "RP PREV UP: %dus\n", rpprevup &
+ seq_printf(m, "RP PREV UP: %dus\n", rpprevup &
GEN6_CURBSYTAVG_MASK);
- sbuf_printf(m, "RP CUR DOWN EI: %dus\n", rpdownei &
+ seq_printf(m, "RP CUR DOWN EI: %dus\n", rpdownei &
GEN6_CURIAVG_MASK);
- sbuf_printf(m, "RP CUR DOWN: %dus\n", rpcurdown &
+ seq_printf(m, "RP CUR DOWN: %dus\n", rpcurdown &
GEN6_CURBSYTAVG_MASK);
- sbuf_printf(m, "RP PREV DOWN: %dus\n", rpprevdown &
+ seq_printf(m, "RP PREV DOWN: %dus\n", rpprevdown &
GEN6_CURBSYTAVG_MASK);
max_freq = (rp_state_cap & 0xff0000) >> 16;
- sbuf_printf(m, "Lowest (RPN) frequency: %dMHz\n",
- max_freq * 50);
+ seq_printf(m, "Lowest (RPN) frequency: %dMHz\n",
+ max_freq * GT_FREQUENCY_MULTIPLIER);
max_freq = (rp_state_cap & 0xff00) >> 8;
- sbuf_printf(m, "Nominal (RP1) frequency: %dMHz\n",
- max_freq * 50);
+ seq_printf(m, "Nominal (RP1) frequency: %dMHz\n",
+ max_freq * GT_FREQUENCY_MULTIPLIER);
max_freq = rp_state_cap & 0xff;
- sbuf_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
- max_freq * 50);
+ seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
+ max_freq * GT_FREQUENCY_MULTIPLIER);
} else {
- sbuf_printf(m, "no P-state info available\n");
+ seq_printf(m, "no P-state info available\n");
}
return 0;
@@ -886,7 +883,7 @@ static int i915_delayfreq_table(struct drm_device *dev, struct sbuf *m, void *un
for (i = 0; i < 16; i++) {
delayfreq = I915_READ(PXVFREQ_BASE + i * 4);
- sbuf_printf(m, "P%02dVIDFREQ: 0x%08x (VID: %d)\n", i, delayfreq,
+ seq_printf(m, "P%02dVIDFREQ: 0x%08x (VID: %d)\n", i, delayfreq,
(delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT);
}
@@ -911,7 +908,7 @@ static int i915_inttoext_table(struct drm_device *dev, struct sbuf *m, void *unu
for (i = 1; i <= 32; i++) {
inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4);
- sbuf_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext);
+ seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext);
}
DRM_UNLOCK(dev);
@@ -934,48 +931,48 @@ static int ironlake_drpc_info(struct drm_device *dev, struct sbuf *m)
DRM_UNLOCK(dev);
- sbuf_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ?
+ seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ?
"yes" : "no");
- sbuf_printf(m, "Boost freq: %d\n",
+ seq_printf(m, "Boost freq: %d\n",
(rgvmodectl & MEMMODE_BOOST_FREQ_MASK) >>
MEMMODE_BOOST_FREQ_SHIFT);
- sbuf_printf(m, "HW control enabled: %s\n",
+ seq_printf(m, "HW control enabled: %s\n",
rgvmodectl & MEMMODE_HWIDLE_EN ? "yes" : "no");
- sbuf_printf(m, "SW control enabled: %s\n",
+ seq_printf(m, "SW control enabled: %s\n",
rgvmodectl & MEMMODE_SWMODE_EN ? "yes" : "no");
- sbuf_printf(m, "Gated voltage change: %s\n",
+ seq_printf(m, "Gated voltage change: %s\n",
rgvmodectl & MEMMODE_RCLK_GATE ? "yes" : "no");
- sbuf_printf(m, "Starting frequency: P%d\n",
+ seq_printf(m, "Starting frequency: P%d\n",
(rgvmodectl & MEMMODE_FSTART_MASK) >> MEMMODE_FSTART_SHIFT);
- sbuf_printf(m, "Max P-state: P%d\n",
+ seq_printf(m, "Max P-state: P%d\n",
(rgvmodectl & MEMMODE_FMAX_MASK) >> MEMMODE_FMAX_SHIFT);
- sbuf_printf(m, "Min P-state: P%d\n", (rgvmodectl & MEMMODE_FMIN_MASK));
- sbuf_printf(m, "RS1 VID: %d\n", (crstandvid & 0x3f));
- sbuf_printf(m, "RS2 VID: %d\n", ((crstandvid >> 8) & 0x3f));
- sbuf_printf(m, "Render standby enabled: %s\n",
+ seq_printf(m, "Min P-state: P%d\n", (rgvmodectl & MEMMODE_FMIN_MASK));
+ seq_printf(m, "RS1 VID: %d\n", (crstandvid & 0x3f));
+ seq_printf(m, "RS2 VID: %d\n", ((crstandvid >> 8) & 0x3f));
+ seq_printf(m, "Render standby enabled: %s\n",
(rstdbyctl & RCX_SW_EXIT) ? "no" : "yes");
- sbuf_printf(m, "Current RS state: ");
+ seq_printf(m, "Current RS state: ");
switch (rstdbyctl & RSX_STATUS_MASK) {
case RSX_STATUS_ON:
- sbuf_printf(m, "on\n");
+ seq_printf(m, "on\n");
break;
case RSX_STATUS_RC1:
- sbuf_printf(m, "RC1\n");
+ seq_printf(m, "RC1\n");
break;
case RSX_STATUS_RC1E:
- sbuf_printf(m, "RC1E\n");
+ seq_printf(m, "RC1E\n");
break;
case RSX_STATUS_RS1:
- sbuf_printf(m, "RS1\n");
+ seq_printf(m, "RS1\n");
break;
case RSX_STATUS_RS2:
- sbuf_printf(m, "RS2 (RC6)\n");
+ seq_printf(m, "RS2 (RC6)\n");
break;
case RSX_STATUS_RS3:
- sbuf_printf(m, "RC3 (RC6+)\n");
+ seq_printf(m, "RC3 (RC6+)\n");
break;
default:
- sbuf_printf(m, "unknown\n");
+ seq_printf(m, "unknown\n");
break;
}
@@ -984,8 +981,8 @@ static int ironlake_drpc_info(struct drm_device *dev, struct sbuf *m)
static int gen6_drpc_info(struct drm_device *dev, struct sbuf *m)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
- u32 rpmodectl1, gt_core_status, rcctl1;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 rpmodectl1, gt_core_status, rcctl1, rc6vids = 0;
unsigned forcewake_count;
int count=0;
@@ -998,13 +995,13 @@ static int gen6_drpc_info(struct drm_device *dev, struct sbuf *m)
mtx_unlock(&dev_priv->gt_lock);
if (forcewake_count) {
- sbuf_printf(m, "RC information inaccurate because userspace "
- "holds a reference \n");
+ seq_printf(m, "RC information inaccurate because somebody "
+ "holds a forcewake reference \n");
} else {
/* NB: we cannot use forcewake, else we read the wrong values */
while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1))
udelay(10);
- sbuf_printf(m, "RC information accurate: %s\n", yesno(count < 51));
+ seq_printf(m, "RC information accurate: %s\n", yesno(count < 51));
}
gt_core_status = DRM_READ32(dev_priv->mmio_map, GEN6_GT_CORE_STATUS);
@@ -1013,57 +1010,66 @@ static int gen6_drpc_info(struct drm_device *dev, struct sbuf *m)
rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
rcctl1 = I915_READ(GEN6_RC_CONTROL);
DRM_UNLOCK(dev);
+ sx_xlock(&dev_priv->rps.hw_lock);
+ sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS, &rc6vids);
+ sx_xunlock(&dev_priv->rps.hw_lock);
- sbuf_printf(m, "Video Turbo Mode: %s\n",
+ seq_printf(m, "Video Turbo Mode: %s\n",
yesno(rpmodectl1 & GEN6_RP_MEDIA_TURBO));
- sbuf_printf(m, "HW control enabled: %s\n",
+ seq_printf(m, "HW control enabled: %s\n",
yesno(rpmodectl1 & GEN6_RP_ENABLE));
- sbuf_printf(m, "SW control enabled: %s\n",
+ seq_printf(m, "SW control enabled: %s\n",
yesno((rpmodectl1 & GEN6_RP_MEDIA_MODE_MASK) ==
GEN6_RP_MEDIA_SW_MODE));
- sbuf_printf(m, "RC1e Enabled: %s\n",
+ seq_printf(m, "RC1e Enabled: %s\n",
yesno(rcctl1 & GEN6_RC_CTL_RC1e_ENABLE));
- sbuf_printf(m, "RC6 Enabled: %s\n",
+ seq_printf(m, "RC6 Enabled: %s\n",
yesno(rcctl1 & GEN6_RC_CTL_RC6_ENABLE));
- sbuf_printf(m, "Deep RC6 Enabled: %s\n",
+ seq_printf(m, "Deep RC6 Enabled: %s\n",
yesno(rcctl1 & GEN6_RC_CTL_RC6p_ENABLE));
- sbuf_printf(m, "Deepest RC6 Enabled: %s\n",
+ seq_printf(m, "Deepest RC6 Enabled: %s\n",
yesno(rcctl1 & GEN6_RC_CTL_RC6pp_ENABLE));
- sbuf_printf(m, "Current RC state: ");
+ seq_printf(m, "Current RC state: ");
switch (gt_core_status & GEN6_RCn_MASK) {
case GEN6_RC0:
if (gt_core_status & GEN6_CORE_CPD_STATE_MASK)
- sbuf_printf(m, "Core Power Down\n");
+ seq_printf(m, "Core Power Down\n");
else
- sbuf_printf(m, "on\n");
+ seq_printf(m, "on\n");
break;
case GEN6_RC3:
- sbuf_printf(m, "RC3\n");
+ seq_printf(m, "RC3\n");
break;
case GEN6_RC6:
- sbuf_printf(m, "RC6\n");
+ seq_printf(m, "RC6\n");
break;
case GEN6_RC7:
- sbuf_printf(m, "RC7\n");
+ seq_printf(m, "RC7\n");
break;
default:
- sbuf_printf(m, "Unknown\n");
+ seq_printf(m, "Unknown\n");
break;
}
- sbuf_printf(m, "Core Power Down: %s\n",
+ seq_printf(m, "Core Power Down: %s\n",
yesno(gt_core_status & GEN6_CORE_CPD_STATE_MASK));
/* Not exactly sure what this is */
- sbuf_printf(m, "RC6 \"Locked to RPn\" residency since boot: %u\n",
+ seq_printf(m, "RC6 \"Locked to RPn\" residency since boot: %u\n",
I915_READ(GEN6_GT_GFX_RC6_LOCKED));
- sbuf_printf(m, "RC6 residency since boot: %u\n",
+ seq_printf(m, "RC6 residency since boot: %u\n",
I915_READ(GEN6_GT_GFX_RC6));
- sbuf_printf(m, "RC6+ residency since boot: %u\n",
+ seq_printf(m, "RC6+ residency since boot: %u\n",
I915_READ(GEN6_GT_GFX_RC6p));
- sbuf_printf(m, "RC6++ residency since boot: %u\n",
+ seq_printf(m, "RC6++ residency since boot: %u\n",
I915_READ(GEN6_GT_GFX_RC6pp));
+ seq_printf(m, "RC6 voltage: %dmV\n",
+ GEN6_DECODE_RC6_VID(((rc6vids >> 0) & 0xff)));
+ seq_printf(m, "RC6+ voltage: %dmV\n",
+ GEN6_DECODE_RC6_VID(((rc6vids >> 8) & 0xff)));
+ seq_printf(m, "RC6++ voltage: %dmV\n",
+ GEN6_DECODE_RC6_VID(((rc6vids >> 16) & 0xff)));
return 0;
}
@@ -1081,39 +1087,43 @@ static int i915_fbc_status(struct drm_device *dev, struct sbuf *m, void *unused)
drm_i915_private_t *dev_priv = dev->dev_private;
if (!I915_HAS_FBC(dev)) {
- sbuf_printf(m, "FBC unsupported on this chipset");
+ seq_printf(m, "FBC unsupported on this chipset\n");
return 0;
}
if (intel_fbc_enabled(dev)) {
- sbuf_printf(m, "FBC enabled");
+ seq_printf(m, "FBC enabled\n");
} else {
- sbuf_printf(m, "FBC disabled: ");
+ seq_printf(m, "FBC disabled: ");
switch (dev_priv->no_fbc_reason) {
case FBC_NO_OUTPUT:
- sbuf_printf(m, "no outputs");
+ seq_printf(m, "no outputs");
break;
case FBC_STOLEN_TOO_SMALL:
- sbuf_printf(m, "not enough stolen memory");
+ seq_printf(m, "not enough stolen memory");
break;
case FBC_UNSUPPORTED_MODE:
- sbuf_printf(m, "mode not supported");
+ seq_printf(m, "mode not supported");
break;
case FBC_MODE_TOO_LARGE:
- sbuf_printf(m, "mode too large");
+ seq_printf(m, "mode too large");
break;
case FBC_BAD_PLANE:
- sbuf_printf(m, "FBC unsupported on plane");
+ seq_printf(m, "FBC unsupported on plane");
break;
case FBC_NOT_TILED:
- sbuf_printf(m, "scanout buffer not tiled");
+ seq_printf(m, "scanout buffer not tiled");
break;
case FBC_MULTIPLE_PIPES:
- sbuf_printf(m, "multiple pipes are enabled");
+ seq_printf(m, "multiple pipes are enabled");
+ break;
+ case FBC_MODULE_PARAM:
+ seq_printf(m, "disabled per module param (default off)");
break;
default:
- sbuf_printf(m, "unknown reason");
+ seq_printf(m, "unknown reason");
}
+ seq_printf(m, "\n");
}
return 0;
}
@@ -1132,7 +1142,7 @@ static int i915_sr_status(struct drm_device *dev, struct sbuf *m, void *unused)
else if (IS_PINEVIEW(dev))
sr_enabled = I915_READ(DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
- sbuf_printf(m, "self-refresh: %s",
+ seq_printf(m, "self-refresh: %s\n",
sr_enabled ? "enabled" : "disabled");
return 0;
@@ -1154,10 +1164,10 @@ static int i915_emon_status(struct drm_device *dev, struct sbuf *m, void *unused
gfx = i915_gfx_val(dev_priv);
DRM_UNLOCK(dev);
- sbuf_printf(m, "GMCH temp: %ld\n", temp);
- sbuf_printf(m, "Chipset power: %ld\n", chipset);
- sbuf_printf(m, "GFX power: %ld\n", gfx);
- sbuf_printf(m, "Total power: %ld\n", chipset + gfx);
+ seq_printf(m, "GMCH temp: %ld\n", temp);
+ seq_printf(m, "Chipset power: %ld\n", chipset);
+ seq_printf(m, "GFX power: %ld\n", gfx);
+ seq_printf(m, "Total power: %ld\n", chipset + gfx);
return 0;
}
@@ -1169,31 +1179,25 @@ static int i915_ring_freq_table(struct drm_device *dev, struct sbuf *m,
int gpu_freq, ia_freq;
if (!(IS_GEN6(dev) || IS_GEN7(dev))) {
- sbuf_printf(m, "unsupported on this chipset");
+ seq_printf(m, "unsupported on this chipset\n");
return 0;
}
- if (sx_xlock_sig(&dev->dev_struct_lock))
- return -EINTR;
+ sx_xlock(&dev_priv->rps.hw_lock);
- sbuf_printf(m, "GPU freq (MHz)\tEffective CPU freq (MHz)\n");
+ seq_printf(m, "GPU freq (MHz)\tEffective CPU freq (MHz)\n");
- for (gpu_freq = dev_priv->min_delay; gpu_freq <= dev_priv->max_delay;
+ for (gpu_freq = dev_priv->rps.min_delay;
+ gpu_freq <= dev_priv->rps.max_delay;
gpu_freq++) {
- I915_WRITE(GEN6_PCODE_DATA, gpu_freq);
- I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY |
- GEN6_PCODE_READ_MIN_FREQ_TABLE);
- if (_intel_wait_for(dev,
- (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
- 10, 1, "915frq")) {
- DRM_ERROR("pcode read of freq table timed out\n");
- continue;
- }
- ia_freq = I915_READ(GEN6_PCODE_DATA);
- sbuf_printf(m, "%d\t\t%d\n", gpu_freq * 50, ia_freq * 100);
+ ia_freq = gpu_freq;
+ sandybridge_pcode_read(dev_priv,
+ GEN6_PCODE_READ_MIN_FREQ_TABLE,
+ &ia_freq);
+ seq_printf(m, "%d\t\t%d\n", gpu_freq * GT_FREQUENCY_MULTIPLIER, ia_freq * 100);
}
- DRM_UNLOCK(dev);
+ sx_xunlock(&dev_priv->rps.hw_lock);
return 0;
}
@@ -1205,7 +1209,7 @@ static int i915_gfxec(struct drm_device *dev, struct sbuf *m, void *unused)
if (sx_xlock_sig(&dev->dev_struct_lock))
return -EINTR;
- sbuf_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4));
+ seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4));
DRM_UNLOCK(dev);
@@ -1246,25 +1250,25 @@ static int i915_gem_framebuffer_info(struct drm_device *dev, struct sbuf *m, voi
}
fb = to_intel_framebuffer(ifbdev->helper.fb);
- sbuf_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, obj ",
+ seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, obj ",
fb->base.width,
fb->base.height,
fb->base.depth,
fb->base.bits_per_pixel);
describe_obj(m, fb->obj);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
list_for_each_entry(fb, &dev->mode_config.fb_list, base.head) {
if (&fb->base == ifbdev->helper.fb)
continue;
- sbuf_printf(m, "user size: %d x %d, depth %d, %d bpp, obj ",
+ seq_printf(m, "user size: %d x %d, depth %d, %d bpp, obj ",
fb->base.width,
fb->base.height,
fb->base.depth,
fb->base.bits_per_pixel);
describe_obj(m, fb->obj);
- sbuf_printf(m, "\n");
+ seq_printf(m, "\n");
}
DRM_UNLOCK(dev);
@@ -1274,24 +1278,23 @@ static int i915_gem_framebuffer_info(struct drm_device *dev, struct sbuf *m, voi
static int i915_context_status(struct drm_device *dev, struct sbuf *m, void *data)
{
- drm_i915_private_t *dev_priv;
+ drm_i915_private_t *dev_priv = dev->dev_private;
int ret;
- dev_priv = dev->dev_private;
ret = sx_xlock_sig(&dev->mode_config.mutex);
if (ret != 0)
return -EINTR;
- if (dev_priv->pwrctx != NULL) {
- sbuf_printf(m, "power context ");
- describe_obj(m, dev_priv->pwrctx);
- sbuf_printf(m, "\n");
+ if (dev_priv->ips.pwrctx) {
+ seq_printf(m, "power context ");
+ describe_obj(m, dev_priv->ips.pwrctx);
+ seq_printf(m, "\n");
}
- if (dev_priv->renderctx != NULL) {
- sbuf_printf(m, "render context ");
- describe_obj(m, dev_priv->renderctx);
- sbuf_printf(m, "\n");
+ if (dev_priv->ips.renderctx) {
+ seq_printf(m, "render context ");
+ describe_obj(m, dev_priv->ips.renderctx);
+ seq_printf(m, "\n");
}
sx_xunlock(&dev->mode_config.mutex);
@@ -1309,7 +1312,7 @@ static int i915_gen6_forcewake_count_info(struct drm_device *dev, struct sbuf *m
forcewake_count = dev_priv->forcewake_count;
mtx_unlock(&dev_priv->gt_lock);
- sbuf_printf(m, "forcewake count = %u\n", forcewake_count);
+ seq_printf(m, "forcewake count = %u\n", forcewake_count);
return 0;
}
@@ -1348,30 +1351,30 @@ static int i915_swizzle_info(struct drm_device *dev, struct sbuf *m, void *data)
if (ret)
return -EINTR;
- sbuf_printf(m, "bit6 swizzle for X-tiling = %s\n",
+ seq_printf(m, "bit6 swizzle for X-tiling = %s\n",
swizzle_string(dev_priv->mm.bit_6_swizzle_x));
- sbuf_printf(m, "bit6 swizzle for Y-tiling = %s\n",
+ seq_printf(m, "bit6 swizzle for Y-tiling = %s\n",
swizzle_string(dev_priv->mm.bit_6_swizzle_y));
if (IS_GEN3(dev) || IS_GEN4(dev)) {
- sbuf_printf(m, "DDC = 0x%08x\n",
+ seq_printf(m, "DDC = 0x%08x\n",
I915_READ(DCC));
- sbuf_printf(m, "C0DRB3 = 0x%04x\n",
+ seq_printf(m, "C0DRB3 = 0x%04x\n",
I915_READ16(C0DRB3));
- sbuf_printf(m, "C1DRB3 = 0x%04x\n",
+ seq_printf(m, "C1DRB3 = 0x%04x\n",
I915_READ16(C1DRB3));
} else if (IS_GEN6(dev) || IS_GEN7(dev)) {
- sbuf_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
+ seq_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
I915_READ(MAD_DIMM_C0));
- sbuf_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
+ seq_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
I915_READ(MAD_DIMM_C1));
- sbuf_printf(m, "MAD_DIMM_C2 = 0x%08x\n",
+ seq_printf(m, "MAD_DIMM_C2 = 0x%08x\n",
I915_READ(MAD_DIMM_C2));
- sbuf_printf(m, "TILECTL = 0x%08x\n",
+ seq_printf(m, "TILECTL = 0x%08x\n",
I915_READ(TILECTL));
- sbuf_printf(m, "ARB_MODE = 0x%08x\n",
+ seq_printf(m, "ARB_MODE = 0x%08x\n",
I915_READ(ARB_MODE));
- sbuf_printf(m, "DISP_ARB_CTL = 0x%08x\n",
+ seq_printf(m, "DISP_ARB_CTL = 0x%08x\n",
I915_READ(DISP_ARB_CTL));
}
DRM_UNLOCK(dev);
@@ -1390,25 +1393,23 @@ static int i915_ppgtt_info(struct drm_device *dev, struct sbuf *m, void *data)
if (ret)
return -EINTR;
if (INTEL_INFO(dev)->gen == 6)
- sbuf_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
-
- for (i = 0; i < I915_NUM_RINGS; i++) {
- ring = &dev_priv->rings[i];
+ seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
- sbuf_printf(m, "%s\n", ring->name);
+ for_each_ring(ring, dev_priv, i) {
+ seq_printf(m, "%s\n", ring->name);
if (INTEL_INFO(dev)->gen == 7)
- sbuf_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(RING_MODE_GEN7(ring)));
- sbuf_printf(m, "PP_DIR_BASE: 0x%08x\n", I915_READ(RING_PP_DIR_BASE(ring)));
- sbuf_printf(m, "PP_DIR_BASE_READ: 0x%08x\n", I915_READ(RING_PP_DIR_BASE_READ(ring)));
- sbuf_printf(m, "PP_DIR_DCLV: 0x%08x\n", I915_READ(RING_PP_DIR_DCLV(ring)));
+ seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(RING_MODE_GEN7(ring)));
+ seq_printf(m, "PP_DIR_BASE: 0x%08x\n", I915_READ(RING_PP_DIR_BASE(ring)));
+ seq_printf(m, "PP_DIR_BASE_READ: 0x%08x\n", I915_READ(RING_PP_DIR_BASE_READ(ring)));
+ seq_printf(m, "PP_DIR_DCLV: 0x%08x\n", I915_READ(RING_PP_DIR_DCLV(ring)));
}
if (dev_priv->mm.aliasing_ppgtt) {
struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
- sbuf_printf(m, "aliasing PPGTT:\n");
- sbuf_printf(m, "pd gtt offset: 0x%08x\n", ppgtt->pd_offset);
+ seq_printf(m, "aliasing PPGTT:\n");
+ seq_printf(m, "pd gtt offset: 0x%08x\n", ppgtt->pd_offset);
}
- sbuf_printf(m, "ECOCHK: 0x%08x\n", I915_READ(GAM_ECOCHK));
+ seq_printf(m, "ECOCHK: 0x%08x\n", I915_READ(GAM_ECOCHK));
DRM_UNLOCK(dev);
return 0;
@@ -1421,7 +1422,7 @@ static int i915_dpio_info(struct drm_device *dev, struct sbuf *m, void *data)
if (!IS_VALLEYVIEW(dev)) {
- sbuf_printf(m, "unsupported\n");
+ seq_printf(m, "unsupported\n");
return 0;
}
@@ -1429,29 +1430,29 @@ static int i915_dpio_info(struct drm_device *dev, struct sbuf *m, void *data)
if (ret)
return -EINTR;
- sbuf_printf(m, "DPIO_CTL: 0x%08x\n", I915_READ(DPIO_CTL));
+ seq_printf(m, "DPIO_CTL: 0x%08x\n", I915_READ(DPIO_CTL));
- sbuf_printf(m, "DPIO_DIV_A: 0x%08x\n",
+ seq_printf(m, "DPIO_DIV_A: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_DIV_A));
- sbuf_printf(m, "DPIO_DIV_B: 0x%08x\n",
+ seq_printf(m, "DPIO_DIV_B: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_DIV_B));
- sbuf_printf(m, "DPIO_REFSFR_A: 0x%08x\n",
+ seq_printf(m, "DPIO_REFSFR_A: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_REFSFR_A));
- sbuf_printf(m, "DPIO_REFSFR_B: 0x%08x\n",
+ seq_printf(m, "DPIO_REFSFR_B: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_REFSFR_B));
- sbuf_printf(m, "DPIO_CORE_CLK_A: 0x%08x\n",
+ seq_printf(m, "DPIO_CORE_CLK_A: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_CORE_CLK_A));
- sbuf_printf(m, "DPIO_CORE_CLK_B: 0x%08x\n",
+ seq_printf(m, "DPIO_CORE_CLK_B: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_CORE_CLK_B));
- sbuf_printf(m, "DPIO_LFP_COEFF_A: 0x%08x\n",
+ seq_printf(m, "DPIO_LFP_COEFF_A: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_LFP_COEFF_A));
- sbuf_printf(m, "DPIO_LFP_COEFF_B: 0x%08x\n",
+ seq_printf(m, "DPIO_LFP_COEFF_B: 0x%08x\n",
intel_dpio_read(dev_priv, _DPIO_LFP_COEFF_B));
- sbuf_printf(m, "DPIO_FASTCLK_DISABLE: 0x%08x\n",
+ seq_printf(m, "DPIO_FASTCLK_DISABLE: 0x%08x\n",
intel_dpio_read(dev_priv, DPIO_FASTCLK_DISABLE));
sx_xunlock(&dev->mode_config.mutex);
@@ -1460,21 +1461,48 @@ static int i915_dpio_info(struct drm_device *dev, struct sbuf *m, void *data)
}
static int
-i915_debug_set_wedged(SYSCTL_HANDLER_ARGS)
+i915_wedged(SYSCTL_HANDLER_ARGS)
{
struct drm_device *dev = arg1;
drm_i915_private_t *dev_priv = dev->dev_private;
- int error, wedged;
+ int val = 1, ret;
if (dev_priv == NULL)
return (EBUSY);
- wedged = dev_priv->mm.wedged;
- error = sysctl_handle_int(oidp, &wedged, 0, req);
- if (error || !req->newptr)
- return (error);
- DRM_INFO("Manually setting wedged to %d\n", wedged);
- i915_handle_error(dev, wedged);
- return (error);
+
+ val = atomic_read(&dev_priv->mm.wedged);
+ ret = sysctl_handle_int(oidp, &val, 0, req);
+ if (ret != 0 || !req->newptr)
+ return (ret);
+
+ DRM_INFO("Manually setting wedged to %d\n", val);
+ i915_handle_error(dev, val);
+
+ return (ret);
+}
+
+static int
+i915_ring_stop(SYSCTL_HANDLER_ARGS)
+{
+ struct drm_device *dev = arg1;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int val = 0, ret;
+
+ if (dev_priv == NULL)
+ return (EBUSY);
+
+ val = dev_priv->stop_rings;
+ ret = sysctl_handle_int(oidp, &val, 0, req);
+ if (ret != 0 || !req->newptr)
+ return (ret);
+
+ DRM_DEBUG_DRIVER("Stopping rings 0x%08x\n", val);
+
+ sx_xlock(&dev_priv->rps.hw_lock);
+ dev_priv->stop_rings = val;
+ sx_xunlock(&dev_priv->rps.hw_lock);
+
+ return (0);
}
static int
@@ -1482,73 +1510,102 @@ i915_max_freq(SYSCTL_HANDLER_ARGS)
{
struct drm_device *dev = arg1;
drm_i915_private_t *dev_priv = dev->dev_private;
- int error, max_freq;
+ int val = 1, ret;
if (dev_priv == NULL)
return (EBUSY);
- max_freq = dev_priv->max_delay * 50;
- error = sysctl_handle_int(oidp, &max_freq, 0, req);
- if (error || !req->newptr)
- return (error);
- DRM_DEBUG("Manually setting max freq to %d\n", max_freq);
+ if (!(IS_GEN6(dev) || IS_GEN7(dev)))
+ return (ENODEV);
+
+ sx_xlock(&dev_priv->rps.hw_lock);
+
+ val = dev_priv->rps.max_delay * GT_FREQUENCY_MULTIPLIER;
+ ret = sysctl_handle_int(oidp, &val, 0, req);
+ if (ret != 0 || !req->newptr) {
+ sx_xunlock(&dev_priv->rps.hw_lock);
+ return (ret);
+ }
+
+ DRM_DEBUG_DRIVER("Manually setting max freq to %d\n", val);
+
/*
* Turbo will still be enabled, but won't go above the set value.
*/
- dev_priv->max_delay = max_freq / 50;
- gen6_set_rps(dev, max_freq / 50);
- return (error);
+ dev_priv->rps.max_delay = val / GT_FREQUENCY_MULTIPLIER;
+
+ gen6_set_rps(dev, val / GT_FREQUENCY_MULTIPLIER);
+ sx_xunlock(&dev_priv->rps.hw_lock);
+
+ return (ret);
}
static int
-i915_cache_sharing(SYSCTL_HANDLER_ARGS)
+i915_min_freq(SYSCTL_HANDLER_ARGS)
{
struct drm_device *dev = arg1;
drm_i915_private_t *dev_priv = dev->dev_private;
- int error, snpcr, cache_sharing;
+ int val = 1, ret;
if (dev_priv == NULL)
return (EBUSY);
- DRM_LOCK(dev);
- snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
- DRM_UNLOCK(dev);
- cache_sharing = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
- error = sysctl_handle_int(oidp, &cache_sharing, 0, req);
- if (error || !req->newptr)
- return (error);
- if (cache_sharing < 0 || cache_sharing > 3)
- return (EINVAL);
- DRM_DEBUG("Manually setting uncore sharing to %d\n", cache_sharing);
+ if (!(IS_GEN6(dev) || IS_GEN7(dev)))
+ return (ENODEV);
- DRM_LOCK(dev);
- /* Update the cache sharing policy here as well */
- snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
- snpcr &= ~GEN6_MBC_SNPCR_MASK;
- snpcr |= (cache_sharing << GEN6_MBC_SNPCR_SHIFT);
- I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
- DRM_UNLOCK(dev);
- return (0);
+ sx_xlock(&dev_priv->rps.hw_lock);
+
+ val = dev_priv->rps.min_delay * GT_FREQUENCY_MULTIPLIER;
+ ret = sysctl_handle_int(oidp, &val, 0, req);
+ if (ret != 0 || !req->newptr) {
+ sx_xunlock(&dev_priv->rps.hw_lock);
+ return (ret);
+ }
+
+ DRM_DEBUG_DRIVER("Manually setting min freq to %d\n", val);
+
+ /*
+ * Turbo will still be enabled, but won't go above the set value.
+ */
+ dev_priv->rps.min_delay = val / GT_FREQUENCY_MULTIPLIER;
+
+ gen6_set_rps(dev, val / GT_FREQUENCY_MULTIPLIER);
+ sx_xunlock(&dev_priv->rps.hw_lock);
+
+ return (ret);
}
static int
-i915_stop_rings(SYSCTL_HANDLER_ARGS)
+i915_cache_sharing(SYSCTL_HANDLER_ARGS)
{
struct drm_device *dev = arg1;
drm_i915_private_t *dev_priv = dev->dev_private;
- int error, val;
+ u32 snpcr;
+ int val = 1, ret;
if (dev_priv == NULL)
return (EBUSY);
- DRM_LOCK(dev);
- val = dev_priv->stop_rings;
- DRM_UNLOCK(dev);
- error = sysctl_handle_int(oidp, &val, 0, req);
- if (error || !req->newptr)
- return (error);
- DRM_DEBUG("Stopping rings 0x%08x\n", val);
+ if (!(IS_GEN6(dev) || IS_GEN7(dev)))
+ return (ENODEV);
+
+ sx_xlock(&dev_priv->rps.hw_lock);
+ snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
+ sx_xunlock(&dev_priv->rps.hw_lock);
+
+ val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
+ ret = sysctl_handle_int(oidp, &val, 0, req);
+ if (ret != 0 || !req->newptr)
+ return (ret);
+
+ if (val < 0 || val > 3)
+ return (EINVAL);
+
+ DRM_DEBUG_DRIVER("Manually setting uncore sharing to %d\n", val);
+
+ /* Update the cache sharing policy here as well */
+ snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
+ snpcr &= ~GEN6_MBC_SNPCR_MASK;
+ snpcr |= (val << GEN6_MBC_SNPCR_SHIFT);
+ I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
- DRM_LOCK(dev);
- dev_priv->stop_rings = val;
- DRM_UNLOCK(dev);
return (0);
}
@@ -1564,7 +1621,6 @@ static struct i915_info_sysctl_list {
{"i915_gem_gtt", i915_gem_gtt_info, NULL, 0},
{"i915_gem_pinned", i915_gem_gtt_info, NULL, 0, (void *)PINNED_LIST},
{"i915_gem_active", i915_gem_object_list_info, NULL, 0, (void *)ACTIVE_LIST},
- {"i915_gem_flushing", i915_gem_object_list_info, NULL, 0, (void *)FLUSHING_LIST},
{"i915_gem_inactive", i915_gem_object_list_info, NULL, 0, (void *)INACTIVE_LIST},
{"i915_gem_pageflip", i915_gem_pageflip_info, NULL, 0},
{"i915_gem_request", i915_gem_request_info, NULL, 0},
@@ -1643,8 +1699,6 @@ out:
return (error);
}
-extern int i915_gem_sync_exec_requests;
-extern int i915_fix_mi_batchbuffer_end;
extern int i915_intr_pf;
extern long i915_gem_wired_pages_cnt;
@@ -1682,7 +1736,7 @@ i915_sysctl_init(struct drm_device *dev, struct sysctl_ctx_list *ctx,
NULL);
oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "wedged",
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, 0,
- i915_debug_set_wedged, "I", NULL);
+ i915_wedged, "I", NULL);
if (oid == NULL)
return (-ENOMEM);
oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "max_freq",
@@ -1690,22 +1744,19 @@ i915_sysctl_init(struct drm_device *dev, struct sysctl_ctx_list *ctx,
"I", NULL);
if (oid == NULL)
return (-ENOMEM);
+ oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "min_freq",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, 0, i915_min_freq,
+ "I", NULL);
+ if (oid == NULL)
+ return (-ENOMEM);
oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO,
"cache_sharing", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev,
0, i915_cache_sharing, "I", NULL);
if (oid == NULL)
return (-ENOMEM);
oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO,
- "stop_rings", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev,
- 0, i915_stop_rings, "I", NULL);
- if (oid == NULL)
- return (-ENOMEM);
- oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "sync_exec",
- CTLFLAG_RW, &i915_gem_sync_exec_requests, 0, NULL);
- if (oid == NULL)
- return (-ENOMEM);
- oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "fix_mi",
- CTLFLAG_RW, &i915_fix_mi_batchbuffer_end, 0, NULL);
+ "ring_stop", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev,
+ 0, i915_ring_stop, "I", NULL);
if (oid == NULL)
return (-ENOMEM);
oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "intr_pf",
@@ -1726,3 +1777,5 @@ i915_sysctl_cleanup(struct drm_device *dev)
free(dev->sysctl_private, DRM_MEM_DRIVER);
}
+
+//#endif /* CONFIG_DEBUG_FS */
diff --git a/sys/dev/drm2/i915/i915_dma.c b/sys/dev/drm2/i915/i915_dma.c
index ad2c147..e2d8e4c 100644
--- a/sys/dev/drm2/i915/i915_dma.c
+++ b/sys/dev/drm2/i915/i915_dma.c
@@ -29,14 +29,16 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/drm_fb_helper.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/i915/intel_ringbuffer.h>
-#define LP_RING(d) (&((struct drm_i915_private *)(d))->rings[RCS])
+#define LP_RING(d) (&((struct drm_i915_private *)(d))->ring[RCS])
#define BEGIN_LP_RING(n) \
intel_ring_begin(LP_RING(dev_priv), (n))
@@ -62,7 +64,7 @@ static inline u32
intel_read_legacy_status_page(struct drm_i915_private *dev_priv, int reg)
{
if (I915_NEED_GFX_HWS(dev_priv->dev))
- return ((volatile u32*)(dev_priv->dri1.gfx_hws_cpu_addr))[reg];
+ return ioread32(dev_priv->dri1.gfx_hws_cpu_addr + reg);
else
return intel_read_status_page(LP_RING(dev_priv), reg);
}
@@ -96,39 +98,6 @@ static void i915_write_hws_pga(struct drm_device *dev)
}
/**
- * Sets up the hardware status page for devices that need a physical address
- * in the register.
- */
-static int i915_init_phys_hws(struct drm_device *dev)
-{
- drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = LP_RING(dev_priv);
-
- /*
- * Program Hardware Status Page
- * XXXKIB Keep 4GB limit for allocation for now. This method
- * of allocation is used on <= 965 hardware, that has several
- * erratas regarding the use of physical memory > 4 GB.
- */
- dev_priv->status_page_dmah =
- drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, BUS_SPACE_MAXADDR);
- if (!dev_priv->status_page_dmah) {
- DRM_ERROR("Can not allocate hardware status page\n");
- return -ENOMEM;
- }
- ring->status_page.page_addr = dev_priv->hw_status_page =
- dev_priv->status_page_dmah->vaddr;
- dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr;
-
- memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
-
- i915_write_hws_pga(dev);
- DRM_DEBUG("Enabled hardware status page, phys %jx\n",
- (uintmax_t)dev_priv->dma_status_page);
- return 0;
-}
-
-/**
* Frees the hardware status page, whether it's a physical address or a virtual
* address set up by the X Server.
*/
@@ -142,8 +111,7 @@ static void i915_free_hws(struct drm_device *dev)
dev_priv->status_page_dmah = NULL;
}
- if (dev_priv->status_gfx_addr) {
- dev_priv->status_gfx_addr = 0;
+ if (ring->status_page.gfx_addr) {
ring->status_page.gfx_addr = 0;
pmap_unmapdev((vm_offset_t)dev_priv->dri1.gfx_hws_cpu_addr,
PAGE_SIZE);
@@ -168,7 +136,7 @@ void i915_kernel_lost_context(struct drm_device * dev)
ring->head = I915_READ_HEAD(ring) & HEAD_ADDR;
ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
- ring->space = ring->head - (ring->tail + 8);
+ ring->space = ring->head - (ring->tail + I915_RING_FREE_SPACE);
if (ring->space < 0)
ring->space += ring->size;
@@ -194,7 +162,7 @@ static int i915_dma_cleanup(struct drm_device * dev)
DRM_LOCK(dev);
for (i = 0; i < I915_NUM_RINGS; i++)
- intel_cleanup_ring_buffer(&dev_priv->rings[i]);
+ intel_cleanup_ring_buffer(&dev_priv->ring[i]);
DRM_UNLOCK(dev);
/* Clear the HWS virtual address at teardown */
@@ -235,10 +203,10 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
}
}
- dev_priv->cpp = init->cpp;
- dev_priv->back_offset = init->back_offset;
- dev_priv->front_offset = init->front_offset;
- dev_priv->current_page = 0;
+ dev_priv->dri1.cpp = init->cpp;
+ dev_priv->dri1.back_offset = init->back_offset;
+ dev_priv->dri1.front_offset = init->front_offset;
+ dev_priv->dri1.current_page = 0;
if (master_priv->sarea_priv)
master_priv->sarea_priv->pf_current_page = 0;
@@ -376,33 +344,24 @@ static int validate_cmd(int cmd)
static int i915_emit_cmds(struct drm_device * dev, int *buffer, int dwords)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- int i;
+ int i, ret;
if ((dwords+1) * sizeof(int) >= LP_RING(dev_priv)->size - 8)
return -EINVAL;
- BEGIN_LP_RING((dwords+1)&~1);
-
for (i = 0; i < dwords;) {
- int cmd, sz;
-
- if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i], sizeof(cmd)))
+ int sz = validate_cmd(buffer[i]);
+ if (sz == 0 || i + sz > dwords)
return -EINVAL;
-
- if ((sz = validate_cmd(cmd)) == 0 || i + sz > dwords)
- return -EINVAL;
-
- OUT_RING(cmd);
-
- while (++i, --sz) {
- if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i],
- sizeof(cmd))) {
- return -EINVAL;
- }
- OUT_RING(cmd);
- }
+ i += sz;
}
+ ret = BEGIN_LP_RING((dwords+1)&~1);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < dwords; i++)
+ OUT_RING(buffer[i]);
if (dwords & 1)
OUT_RING(0);
@@ -461,15 +420,16 @@ static void i915_emit_breadcrumb(struct drm_device *dev)
drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
- if (++dev_priv->counter > 0x7FFFFFFFUL)
- dev_priv->counter = 0;
+ dev_priv->dri1.counter++;
+ if (dev_priv->dri1.counter > 0x7FFFFFFFUL)
+ dev_priv->dri1.counter = 0;
if (master_priv->sarea_priv)
- master_priv->sarea_priv->last_enqueue = dev_priv->counter;
+ master_priv->sarea_priv->last_enqueue = dev_priv->dri1.counter;
if (BEGIN_LP_RING(4) == 0) {
OUT_RING(MI_STORE_DWORD_INDEX);
OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
- OUT_RING(dev_priv->counter);
+ OUT_RING(dev_priv->dri1.counter);
OUT_RING(0);
ADVANCE_LP_RING();
}
@@ -484,7 +444,7 @@ static int i915_dispatch_cmdbuffer(struct drm_device * dev,
int i = 0, count, ret;
if (cmd->sz & 0x3) {
- DRM_ERROR("alignment\n");
+ DRM_ERROR("alignment");
return -EINVAL;
}
@@ -517,11 +477,8 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
int nbox = batch->num_cliprects;
int i, count, ret;
- if (drm_core_check_feature(dev, DRIVER_MODESET))
- return -ENODEV;
-
if ((batch->start | batch->used) & 0x7) {
- DRM_ERROR("alignment\n");
+ DRM_ERROR("alignment");
return -EINVAL;
}
@@ -561,6 +518,15 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
ADVANCE_LP_RING();
}
+
+ if (IS_G4X(dev) || IS_GEN5(dev)) {
+ if (BEGIN_LP_RING(2) == 0) {
+ OUT_RING(MI_FLUSH | MI_NO_WRITE_FLUSH | MI_INVALIDATE_ISP);
+ OUT_RING(MI_NOOP);
+ ADVANCE_LP_RING();
+ }
+ }
+
i915_emit_breadcrumb(dev);
return 0;
}
@@ -577,7 +543,7 @@ static int i915_dispatch_flip(struct drm_device * dev)
DRM_DEBUG_DRIVER("%s: page=%d pfCurrentPage=%d\n",
__func__,
- dev_priv->current_page,
+ dev_priv->dri1.current_page,
master_priv->sarea_priv->pf_current_page);
i915_kernel_lost_context(dev);
@@ -591,12 +557,12 @@ static int i915_dispatch_flip(struct drm_device * dev)
OUT_RING(CMD_OP_DISPLAYBUFFER_INFO | ASYNC_FLIP);
OUT_RING(0);
- if (dev_priv->current_page == 0) {
- OUT_RING(dev_priv->back_offset);
- dev_priv->current_page = 1;
+ if (dev_priv->dri1.current_page == 0) {
+ OUT_RING(dev_priv->dri1.back_offset);
+ dev_priv->dri1.current_page = 1;
} else {
- OUT_RING(dev_priv->front_offset);
- dev_priv->current_page = 0;
+ OUT_RING(dev_priv->dri1.front_offset);
+ dev_priv->dri1.current_page = 0;
}
OUT_RING(0);
@@ -605,24 +571,24 @@ static int i915_dispatch_flip(struct drm_device * dev)
ADVANCE_LP_RING();
- master_priv->sarea_priv->last_enqueue = dev_priv->counter++;
+ master_priv->sarea_priv->last_enqueue = dev_priv->dri1.counter++;
if (BEGIN_LP_RING(4) == 0) {
OUT_RING(MI_STORE_DWORD_INDEX);
OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
- OUT_RING(dev_priv->counter);
+ OUT_RING(dev_priv->dri1.counter);
OUT_RING(0);
ADVANCE_LP_RING();
}
- master_priv->sarea_priv->pf_current_page = dev_priv->current_page;
+ master_priv->sarea_priv->pf_current_page = dev_priv->dri1.current_page;
return 0;
}
static int i915_quiescent(struct drm_device *dev)
{
i915_kernel_lost_context(dev);
- return intel_wait_ring_idle(LP_RING(dev->dev_private));
+ return intel_ring_idle(LP_RING(dev->dev_private));
}
static int i915_flush_ioctl(struct drm_device *dev, void *data,
@@ -650,10 +616,12 @@ int i915_batchbuffer(struct drm_device *dev, void *data,
drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
master_priv->sarea_priv;
drm_i915_batchbuffer_t *batch = data;
- size_t cliplen;
int ret;
struct drm_clip_rect *cliprects = NULL;
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return -ENODEV;
+
if (!dev_priv->dri1.allow_batchbuffer) {
DRM_ERROR("Batchbuffer ioctl disabled\n");
return -EINVAL;
@@ -662,24 +630,28 @@ int i915_batchbuffer(struct drm_device *dev, void *data,
DRM_DEBUG_DRIVER("i915 batchbuffer, start %x used %d cliprects %d\n",
batch->start, batch->used, batch->num_cliprects);
- cliplen = batch->num_cliprects * sizeof(struct drm_clip_rect);
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
if (batch->num_cliprects < 0)
- return -EFAULT;
- if (batch->num_cliprects != 0) {
+ return -EINVAL;
+
+ if (batch->num_cliprects) {
cliprects = malloc(batch->num_cliprects *
sizeof(struct drm_clip_rect),
DRM_MEM_DMA, M_WAITOK | M_ZERO);
+ if (cliprects == NULL)
+ return -ENOMEM;
- ret = -copyin(batch->cliprects, cliprects,
+ ret = copy_from_user(cliprects, batch->cliprects,
batch->num_cliprects *
sizeof(struct drm_clip_rect));
- if (ret != 0)
+ if (ret != 0) {
+ ret = -EFAULT;
goto fail_free;
- } else
- cliprects = NULL;
+ }
+ }
DRM_LOCK(dev);
- RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
ret = i915_dispatch_batchbuffer(dev, batch, cliprects);
DRM_UNLOCK(dev);
@@ -710,27 +682,39 @@ int i915_cmdbuffer(struct drm_device *dev, void *data,
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
if (cmdbuf->num_cliprects < 0)
return -EINVAL;
batch_data = malloc(cmdbuf->sz, DRM_MEM_DMA, M_WAITOK);
+ if (batch_data == NULL)
+ return -ENOMEM;
- ret = -copyin(cmdbuf->buf, batch_data, cmdbuf->sz);
- if (ret != 0)
+ ret = copy_from_user(batch_data, cmdbuf->buf, cmdbuf->sz);
+ if (ret != 0) {
+ ret = -EFAULT;
goto fail_batch_free;
+ }
if (cmdbuf->num_cliprects) {
cliprects = malloc(cmdbuf->num_cliprects *
sizeof(struct drm_clip_rect), DRM_MEM_DMA, M_WAITOK | M_ZERO);
- ret = -copyin(cmdbuf->cliprects, cliprects,
+ if (cliprects == NULL) {
+ ret = -ENOMEM;
+ goto fail_batch_free;
+ }
+
+ ret = copy_from_user(cliprects, cmdbuf->cliprects,
cmdbuf->num_cliprects *
sizeof(struct drm_clip_rect));
- if (ret != 0)
+ if (ret != 0) {
+ ret = -EFAULT;
goto fail_clip_free;
+ }
}
DRM_LOCK(dev);
- RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
ret = i915_dispatch_cmdbuffer(dev, cmdbuf, cliprects, batch_data);
DRM_UNLOCK(dev);
if (ret) {
@@ -758,21 +742,21 @@ static int i915_emit_irq(struct drm_device * dev)
DRM_DEBUG_DRIVER("\n");
- dev_priv->counter++;
- if (dev_priv->counter > 0x7FFFFFFFUL)
- dev_priv->counter = 1;
+ dev_priv->dri1.counter++;
+ if (dev_priv->dri1.counter > 0x7FFFFFFFUL)
+ dev_priv->dri1.counter = 1;
if (master_priv->sarea_priv)
- master_priv->sarea_priv->last_enqueue = dev_priv->counter;
+ master_priv->sarea_priv->last_enqueue = dev_priv->dri1.counter;
if (BEGIN_LP_RING(4) == 0) {
OUT_RING(MI_STORE_DWORD_INDEX);
OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
- OUT_RING(dev_priv->counter);
+ OUT_RING(dev_priv->dri1.counter);
OUT_RING(MI_USER_INTERRUPT);
ADVANCE_LP_RING();
}
- return dev_priv->counter;
+ return dev_priv->dri1.counter;
}
static int i915_wait_irq(struct drm_device * dev, int irq_nr)
@@ -794,27 +778,22 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
if (master_priv->sarea_priv)
master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
- ret = 0;
- mtx_lock(&dev_priv->irq_lock);
if (ring->irq_get(ring)) {
+ mtx_lock(&dev_priv->irq_lock);
while (ret == 0 && READ_BREADCRUMB(dev_priv) < irq_nr) {
- ret = -msleep(ring, &dev_priv->irq_lock, PCATCH,
- "915wtq", 3 * hz);
+ ret = -msleep(&ring->irq_queue, &dev_priv->irq_lock,
+ PCATCH, "915wtq", 3 * DRM_HZ);
if (ret == -ERESTART)
ret = -ERESTARTSYS;
}
- ring->irq_put(ring);
- mtx_unlock(&dev_priv->irq_lock);
- } else {
mtx_unlock(&dev_priv->irq_lock);
- if (_intel_wait_for(dev, READ_BREADCRUMB(dev_priv) >= irq_nr,
- 3000, 1, "915wir"))
- ret = -EBUSY;
- }
+ ring->irq_put(ring);
+ } else if (wait_for(READ_BREADCRUMB(dev_priv) >= irq_nr, 3000))
+ ret = -EBUSY;
if (ret == -EBUSY) {
DRM_ERROR("EBUSY -- rec: %d emitted: %d\n",
- READ_BREADCRUMB(dev_priv), (int)dev_priv->counter);
+ READ_BREADCRUMB(dev_priv), (int)dev_priv->dri1.counter);
}
return ret;
@@ -969,13 +948,14 @@ int i915_getparam(struct drm_device *dev, void *data,
value = 1;
break;
case I915_PARAM_HAS_EXECBUF2:
+ /* depends on GEM */
value = 1;
break;
case I915_PARAM_HAS_BSD:
- value = intel_ring_initialized(&dev_priv->rings[VCS]);
+ value = intel_ring_initialized(&dev_priv->ring[VCS]);
break;
case I915_PARAM_HAS_BLT:
- value = intel_ring_initialized(&dev_priv->rings[BCS]);
+ value = intel_ring_initialized(&dev_priv->ring[BCS]);
break;
case I915_PARAM_HAS_RELAXED_FENCING:
value = 1;
@@ -998,6 +978,23 @@ int i915_getparam(struct drm_device *dev, void *data,
case I915_PARAM_HAS_ALIASING_PPGTT:
value = dev_priv->mm.aliasing_ppgtt ? 1 : 0;
break;
+ case I915_PARAM_HAS_WAIT_TIMEOUT:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_SEMAPHORES:
+ value = i915_semaphore_is_enabled(dev);
+ break;
+ case I915_PARAM_HAS_PRIME_VMAP_FLUSH:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_SECURE_BATCHES:
+ /* FIXME Linux<->FreeBSD: Is there a better choice than
+ * curthread? */
+ value = DRM_SUSER(curthread);
+ break;
+ case I915_PARAM_HAS_PINNED_BATCHES:
+ value = 1;
+ break;
default:
DRM_DEBUG_DRIVER("Unknown parameter %d\n",
param->param);
@@ -1066,34 +1063,33 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
}
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- DRM_ERROR("tried to set status page when mode setting active\n");
+ WARN(1, "tried to set status page when mode setting active\n");
return 0;
}
DRM_DEBUG_DRIVER("set status page addr 0x%08x\n", (u32)hws->addr);
ring = LP_RING(dev_priv);
- ring->status_page.gfx_addr = dev_priv->status_gfx_addr =
- hws->addr & (0x1ffff<<12);
+ ring->status_page.gfx_addr = hws->addr & (0x1ffff<<12);
dev_priv->dri1.gfx_hws_cpu_addr =
- pmap_mapdev_attr(dev->agp->base + hws->addr, PAGE_SIZE,
+ pmap_mapdev_attr(dev_priv->mm.gtt_base_addr + hws->addr, PAGE_SIZE,
VM_MEMATTR_WRITE_COMBINING);
if (dev_priv->dri1.gfx_hws_cpu_addr == NULL) {
i915_dma_cleanup(dev);
- ring->status_page.gfx_addr = dev_priv->status_gfx_addr = 0;
+ ring->status_page.gfx_addr = 0;
DRM_ERROR("can not ioremap virtual address for"
" G33 hw status page\n");
return -ENOMEM;
}
- memset(dev_priv->dri1.gfx_hws_cpu_addr, 0, PAGE_SIZE);
- I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
+ memset_io(dev_priv->dri1.gfx_hws_cpu_addr, 0, PAGE_SIZE);
+ I915_WRITE(HWS_PGA, ring->status_page.gfx_addr);
DRM_DEBUG_DRIVER("load hws HWS_PGA with gfx mem 0x%x\n",
- dev_priv->status_gfx_addr);
+ ring->status_page.gfx_addr);
DRM_DEBUG_DRIVER("load hws at %p\n",
- dev_priv->hw_status_page);
+ ring->status_page.page_addr);
return 0;
}
@@ -1101,7 +1097,7 @@ static int i915_get_bridge_dev(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- dev_priv->bridge_dev = intel_gtt_get_bridge_device();
+ dev_priv->bridge_dev = pci_find_dbsf(0, 0, 0, 0);
if (!dev_priv->bridge_dev) {
DRM_ERROR("bridge device not found\n");
return -1;
@@ -1123,15 +1119,15 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
drm_i915_private_t *dev_priv = dev->dev_private;
int reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp_lo, temp_hi = 0;
- u64 mchbar_addr, temp;
+ u64 mchbar_addr;
if (INTEL_INFO(dev)->gen >= 4)
- temp_hi = pci_read_config(dev_priv->bridge_dev, reg + 4, 4);
- temp_lo = pci_read_config(dev_priv->bridge_dev, reg, 4);
+ pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi);
+ pci_read_config_dword(dev_priv->bridge_dev, reg, &temp_lo);
mchbar_addr = ((u64)temp_hi << 32) | temp_lo;
/* If ACPI doesn't have it, assume we need to allocate it ourselves */
-#ifdef XXX_CONFIG_PNP
+#ifdef CONFIG_PNP
if (mchbar_addr &&
pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE))
return 0;
@@ -1149,16 +1145,16 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
return -ENOMEM;
}
- if (INTEL_INFO(dev)->gen >= 4) {
- temp = rman_get_start(dev_priv->mch_res);
- temp >>= 32;
- pci_write_config(dev_priv->bridge_dev, reg + 4, temp, 4);
- }
- pci_write_config(dev_priv->bridge_dev, reg,
- rman_get_start(dev_priv->mch_res) & UINT32_MAX, 4);
+ if (INTEL_INFO(dev)->gen >= 4)
+ pci_write_config_dword(dev_priv->bridge_dev, reg + 4,
+ upper_32_bits(rman_get_start(dev_priv->mch_res)));
+
+ pci_write_config_dword(dev_priv->bridge_dev, reg,
+ lower_32_bits(rman_get_start(dev_priv->mch_res)));
return 0;
}
+/* Setup MCHBAR if possible, return true if we should disable it again */
static void
intel_setup_mchbar(struct drm_device *dev)
{
@@ -1170,18 +1166,16 @@ intel_setup_mchbar(struct drm_device *dev)
dev_priv->mchbar_need_disable = false;
if (IS_I915G(dev) || IS_I915GM(dev)) {
- temp = pci_read_config(dev_priv->bridge_dev, DEVEN_REG, 4);
- enabled = (temp & DEVEN_MCHBAR_EN) != 0;
+ pci_read_config_dword(dev_priv->bridge_dev, DEVEN_REG, &temp);
+ enabled = !!(temp & DEVEN_MCHBAR_EN);
} else {
- temp = pci_read_config(dev_priv->bridge_dev, mchbar_reg, 4);
+ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
enabled = temp & 1;
}
/* If it's already enabled, don't have to do anything */
- if (enabled) {
- DRM_DEBUG("mchbar already enabled\n");
+ if (enabled)
return;
- }
if (intel_alloc_mchbar_resource(dev))
return;
@@ -1190,11 +1184,11 @@ intel_setup_mchbar(struct drm_device *dev)
/* Space is allocated or reserved, so enable it. */
if (IS_I915G(dev) || IS_I915GM(dev)) {
- pci_write_config(dev_priv->bridge_dev, DEVEN_REG,
- temp | DEVEN_MCHBAR_EN, 4);
+ pci_write_config_dword(dev_priv->bridge_dev, DEVEN_REG,
+ temp | DEVEN_MCHBAR_EN);
} else {
- temp = pci_read_config(dev_priv->bridge_dev, mchbar_reg, 4);
- pci_write_config(dev_priv->bridge_dev, mchbar_reg, temp | 1, 4);
+ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
+ pci_write_config_dword(dev_priv->bridge_dev, mchbar_reg, temp | 1);
}
}
@@ -1207,17 +1201,13 @@ intel_teardown_mchbar(struct drm_device *dev)
if (dev_priv->mchbar_need_disable) {
if (IS_I915G(dev) || IS_I915GM(dev)) {
- temp = pci_read_config(dev_priv->bridge_dev,
- DEVEN_REG, 4);
+ pci_read_config_dword(dev_priv->bridge_dev, DEVEN_REG, &temp);
temp &= ~DEVEN_MCHBAR_EN;
- pci_write_config(dev_priv->bridge_dev, DEVEN_REG,
- temp, 4);
+ pci_write_config_dword(dev_priv->bridge_dev, DEVEN_REG, temp);
} else {
- temp = pci_read_config(dev_priv->bridge_dev,
- mchbar_reg, 4);
+ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
temp &= ~1;
- pci_write_config(dev_priv->bridge_dev, mchbar_reg,
- temp, 4);
+ pci_write_config_dword(dev_priv->bridge_dev, mchbar_reg, temp);
}
}
@@ -1232,6 +1222,57 @@ intel_teardown_mchbar(struct drm_device *dev)
}
}
+#ifdef __linux__
+/* true = enable decode, false = disable decoder */
+static unsigned int i915_vga_set_decode(void *cookie, bool state)
+{
+ struct drm_device *dev = cookie;
+
+ intel_modeset_vga_set_state(dev, state);
+ if (state)
+ return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
+ VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
+ else
+ return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
+}
+
+static void i915_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state)
+{
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
+ if (state == VGA_SWITCHEROO_ON) {
+ pr_info("switched on\n");
+ dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ /* i915 resume handler doesn't set to D0 */
+ pci_set_power_state(dev->pdev, PCI_D0);
+ i915_resume(dev);
+ dev->switch_power_state = DRM_SWITCH_POWER_ON;
+ } else {
+ pr_err("switched off\n");
+ dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ i915_suspend(dev, pmm);
+ dev->switch_power_state = DRM_SWITCH_POWER_OFF;
+ }
+}
+
+static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
+{
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ bool can_switch;
+
+ spin_lock(&dev->count_lock);
+ can_switch = (dev->open_count == 0);
+ spin_unlock(&dev->count_lock);
+ return can_switch;
+}
+
+static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
+ .set_gpu_state = i915_switcheroo_set_state,
+ .reprobe = NULL,
+ .can_switch = i915_switcheroo_can_switch,
+};
+#endif
+
static int i915_load_modeset_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1241,8 +1282,23 @@ static int i915_load_modeset_init(struct drm_device *dev)
if (ret)
DRM_INFO("failed to find VBIOS tables\n");
-#if 0
+#ifdef __linux__
+ /* If we have > 1 VGA cards, then we need to arbitrate access
+ * to the common VGA resources.
+ *
+ * If we are a secondary display controller (!PCI_DISPLAY_CLASS_VGA),
+ * then we do not take part in VGA arbitration and the
+ * vga_client_register() fails with -ENODEV.
+ */
+ ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
+ if (ret && ret != -ENODEV)
+ goto out;
+
intel_register_dsm_handler();
+
+ ret = vga_switcheroo_register_client(dev->pdev, &i915_switcheroo_ops);
+ if (ret)
+ goto cleanup_vga_client;
#endif
/* Initialise stolen first so that we may reserve preallocated
@@ -1260,15 +1316,20 @@ static int i915_load_modeset_init(struct drm_device *dev)
intel_modeset_gem_init(dev);
+ TASK_INIT(&dev_priv->console_resume_work, 0, intel_console_resume,
+ dev->dev_private);
+
ret = drm_irq_install(dev);
if (ret)
goto cleanup_gem;
+ /* Always safe in the mode setting case. */
+ /* FIXME: do pre/post-mode set stuff in core KMS code */
dev->vblank_disable_allowed = 1;
ret = intel_fbdev_init(dev);
if (ret)
- goto cleanup_gem;
+ goto cleanup_irq;
drm_kms_helper_poll_init(dev);
@@ -1277,6 +1338,8 @@ static int i915_load_modeset_init(struct drm_device *dev)
return 0;
+cleanup_irq:
+ drm_irq_uninstall(dev);
cleanup_gem:
DRM_LOCK(dev);
i915_gem_cleanup_ringbuffer(dev);
@@ -1285,6 +1348,13 @@ cleanup_gem:
cleanup_gem_stolen:
i915_gem_cleanup_stolen(dev);
cleanup_vga_switcheroo:
+#ifdef __linux__
+ vga_switcheroo_unregister_client(dev->pdev);
+cleanup_vga_client:
+ vga_client_register(dev->pdev, NULL, NULL, NULL);
+out:
+#endif
+ intel_free_parsed_bios_data(dev);
return ret;
}
@@ -1292,7 +1362,7 @@ int i915_master_create(struct drm_device *dev, struct drm_master *master)
{
struct drm_i915_master_private *master_priv;
- master_priv = malloc(sizeof(*master_priv), DRM_MEM_DMA, M_NOWAIT | M_ZERO);
+ master_priv = malloc(sizeof(*master_priv), DRM_MEM_DMA, M_WAITOK | M_ZERO);
if (!master_priv)
return -ENOMEM;
@@ -1312,6 +1382,67 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
master->driver_priv = NULL;
}
+static void
+i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base,
+ unsigned long size)
+{
+ dev_priv->mm.gtt_mtrr = -1;
+
+#if defined(CONFIG_X86_PAT)
+ if (cpu_has_pat)
+ return;
+#endif
+
+ /* Set up a WC MTRR for non-PAT systems. This is more common than
+ * one would think, because the kernel disables PAT on first
+ * generation Core chips because WC PAT gets overridden by a UC
+ * MTRR if present. Even if a UC MTRR isn't present.
+ */
+ dev_priv->mm.gtt_mtrr = drm_mtrr_add(base, size, DRM_MTRR_WC);
+ if (dev_priv->mm.gtt_mtrr < 0) {
+ DRM_INFO("MTRR allocation failed. Graphics "
+ "performance may suffer.\n");
+ }
+}
+
+#ifdef __linux__
+static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
+{
+ struct apertures_struct *ap;
+ struct pci_dev *pdev = dev_priv->dev->pdev;
+ bool primary;
+
+ ap = alloc_apertures(1);
+ if (!ap)
+ return;
+
+ ap->ranges[0].base = dev_priv->mm.gtt->gma_bus_addr;
+ ap->ranges[0].size =
+ dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
+ primary =
+ pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
+
+ remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
+
+ kfree(ap);
+}
+#endif
+
+static void i915_dump_device_info(struct drm_i915_private *dev_priv)
+{
+ const struct intel_device_info *info = dev_priv->info;
+
+#define DEV_INFO_FLAG(name) info->name ? #name "," : ""
+#define DEV_INFO_SEP ,
+ DRM_DEBUG_DRIVER("i915 device info: gen=%i, pciid=0x%04x flags="
+ "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+ info->gen,
+ dev_priv->dev->pci_device,
+ DEV_INFO_FLAGS);
+#undef DEV_INFO_FLAG
+#undef DEV_INFO_SEP
+}
+
/**
* i915_driver_load - setup chip and create an initial config
* @dev: DRM device
@@ -1327,8 +1458,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
{
struct drm_i915_private *dev_priv;
const struct intel_device_info *info;
- unsigned long base, size;
- int ret = 0, mmio_bar;
+ int ret = 0, mmio_bar, mmio_size;
+ uint32_t aperture_size;
info = i915_get_device_id(dev->pci_device);
@@ -1345,42 +1476,113 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
dev_priv = malloc(sizeof(drm_i915_private_t), DRM_MEM_DRIVER,
M_WAITOK | M_ZERO);
+ if (dev_priv == NULL)
+ return -ENOMEM;
dev->dev_private = (void *)dev_priv;
dev_priv->dev = dev;
dev_priv->info = info;
+ i915_dump_device_info(dev_priv);
+
if (i915_get_bridge_dev(dev)) {
- free(dev_priv, DRM_MEM_DRIVER);
- return -EIO;
+ ret = -EIO;
+ goto free_priv;
}
- dev_priv->mm.gtt = intel_gtt_get();
- /* Add register map (needed for suspend/resume) */
+ ret = i915_gem_gtt_init(dev);
+ if (ret)
+ goto put_bridge;
+
+#ifdef __linux__
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ i915_kick_out_firmware_fb(dev_priv);
+
+ pci_set_master(dev->pdev);
+
+ /* overlay on gen2 is broken and can't address above 1G */
+ if (IS_GEN2(dev))
+ dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(30));
+
+ /* 965GM sometimes incorrectly writes to hardware status page (HWS)
+ * using 32bit addressing, overwriting memory if HWS is located
+ * above 4GB.
+ *
+ * The documentation also mentions an issue with undefined
+ * behaviour if any general state is accessed within a page above 4GB,
+ * which also needs to be handled carefully.
+ */
+ if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
+ dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(32));
+#endif
+
mmio_bar = IS_GEN2(dev) ? 1 : 0;
- base = drm_get_resource_start(dev, mmio_bar);
- size = drm_get_resource_len(dev, mmio_bar);
+ /* Before gen4, the registers and the GTT are behind different BARs.
+ * However, from gen4 onwards, the registers and the GTT are shared
+ * in the same BAR, so we want to restrict this ioremap from
+ * clobbering the GTT which we want ioremap_wc instead. Fortunately,
+ * the register BAR remains the same size for all the earlier
+ * generations up to Ironlake.
+ */
+ if (info->gen < 5)
+ mmio_size = 512*1024;
+ else
+ mmio_size = 2*1024*1024;
ret = drm_addmap(dev,
- base, size,
+ drm_get_resource_start(dev, mmio_bar), mmio_size,
_DRM_REGISTERS, _DRM_KERNEL | _DRM_DRIVER, &dev_priv->mmio_map);
if (ret != 0) {
- DRM_ERROR("Failed to allocate mmio_map: %d\n", ret);
- free(dev_priv, DRM_MEM_DRIVER);
- return ret;
+ DRM_ERROR("failed to map registers\n");
+ ret = -EIO;
+ goto put_gmch;
}
- dev_priv->tq = taskqueue_create("915", M_WAITOK,
- taskqueue_thread_enqueue, &dev_priv->tq);
- taskqueue_start_threads(&dev_priv->tq, 1, PWAIT, "i915 taskq");
- mtx_init(&dev_priv->gt_lock, "915gt", NULL, MTX_DEF);
- mtx_init(&dev_priv->error_lock, "915err", NULL, MTX_DEF);
- mtx_init(&dev_priv->error_completion_lock, "915cmp", NULL, MTX_DEF);
- mtx_init(&dev_priv->rps_lock, "915rps", NULL, MTX_DEF);
- mtx_init(&dev_priv->dpio_lock, "915dpi", NULL, MTX_DEF);
+ aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
+ dev_priv->mm.gtt_base_addr = dev_priv->mm.gtt->gma_bus_addr;
+
+#ifdef __linux__
+ dev_priv->mm.gtt_mapping =
+ io_mapping_create_wc(dev_priv->mm.gtt_base_addr,
+ aperture_size);
+ if (dev_priv->mm.gtt_mapping == NULL) {
+ ret = -EIO;
+ goto out_rmmap;
+ }
+#endif
+
+ i915_mtrr_setup(dev_priv, dev_priv->mm.gtt_base_addr,
+ aperture_size);
+
+ /* The i915 workqueue is primarily used for batched retirement of
+ * requests (and thus managing bo) once the task has been completed
+ * by the GPU. i915_gem_retire_requests() is called directly when we
+ * need high-priority retirement, such as waiting for an explicit
+ * bo.
+ *
+ * It is also used for periodic low-priority events, such as
+ * idle-timers and recording error state.
+ *
+ * All tasks on the workqueue are expected to acquire the dev mutex
+ * so there is no point in running more than one instance of the
+ * workqueue at any time. Use an ordered one.
+ */
+ dev_priv->wq = taskqueue_create("915", M_WAITOK,
+ taskqueue_thread_enqueue, &dev_priv->wq);
+ if (dev_priv->wq == NULL) {
+ DRM_ERROR("Failed to create our workqueue.\n");
+ ret = -ENOMEM;
+ goto out_mtrrfree;
+ }
+ taskqueue_start_threads(&dev_priv->wq, 1, PWAIT, "i915 taskq");
+
+ /* This must be called before any calls to HAS_PCH_* */
+ intel_detect_pch(dev);
intel_irq_init(dev);
+ intel_gt_init(dev);
+ /* Try to make sure MCHBAR is enabled before poking at it */
intel_setup_mchbar(dev);
intel_setup_gmbus(dev);
intel_opregion_setup(dev);
@@ -1403,17 +1605,12 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (!IS_I945G(dev) && !IS_I945GM(dev))
drm_pci_enable_msi(dev);
- /* Init HWS */
- if (!I915_NEED_GFX_HWS(dev)) {
- ret = i915_init_phys_hws(dev);
- if (ret != 0) {
- drm_rmmap(dev, dev_priv->mmio_map);
- free(dev_priv, DRM_MEM_DRIVER);
- return ret;
- }
- }
-
mtx_init(&dev_priv->irq_lock, "userirq", NULL, MTX_DEF);
+ mtx_init(&dev_priv->error_lock, "915err", NULL, MTX_DEF);
+ mtx_init(&dev_priv->rps.lock, "915rps", NULL, MTX_DEF);
+ sx_init(&dev_priv->dpio_lock, "915dpi");
+
+ sx_init(&dev_priv->rps.hw_lock, "915rpshw");
if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
dev_priv->num_pipe = 3;
@@ -1429,8 +1626,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
/* Start out suspended */
dev_priv->mm.suspended = 1;
- intel_detect_pch(dev);
-
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
ret = i915_load_modeset_init(dev);
if (ret < 0) {
@@ -1441,7 +1636,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
pci_enable_busmaster(dev->dev);
+#ifdef __linux__
+ i915_setup_sysfs(dev);
+#endif
+
+ /* Must be done after probing outputs */
intel_opregion_init(dev);
+#ifdef __linux__
+ acpi_video_register();
+#endif
callout_init(&dev_priv->hangcheck_timer, 1);
callout_reset(&dev_priv->hangcheck_timer, DRM_I915_HANGCHECK_PERIOD,
@@ -1453,9 +1656,48 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
return 0;
out_gem_unload:
- /* XXXKIB */
- (void) i915_driver_unload(dev);
- return (ret);
+ EVENTHANDLER_DEREGISTER(vm_lowmem, dev_priv->mm.inactive_shrinker);
+
+ free_completion(&dev_priv->error_completion);
+ mtx_destroy(&dev_priv->irq_lock);
+ mtx_destroy(&dev_priv->error_lock);
+ mtx_destroy(&dev_priv->rps.lock);
+ sx_destroy(&dev_priv->dpio_lock);
+
+ sx_destroy(&dev_priv->rps.hw_lock);
+
+ if (dev->msi_enabled)
+ drm_pci_disable_msi(dev);
+
+ intel_teardown_gmbus(dev);
+ intel_teardown_mchbar(dev);
+ if (dev_priv->wq != NULL) {
+ taskqueue_free(dev_priv->wq);
+ dev_priv->wq = NULL;
+ }
+out_mtrrfree:
+ if (dev_priv->mm.gtt_mtrr >= 0) {
+ drm_mtrr_del(dev_priv->mm.gtt_mtrr,
+ dev_priv->mm.gtt_base_addr,
+ aperture_size,
+ DRM_MTRR_WC);
+ dev_priv->mm.gtt_mtrr = -1;
+ }
+#ifdef __linux__
+ io_mapping_free(dev_priv->mm.gtt_mapping);
+out_rmmap:
+#endif
+ if (dev_priv->mmio_map != NULL)
+ drm_rmmap(dev, dev_priv->mmio_map);
+put_gmch:
+ i915_gem_gtt_fini(dev);
+put_bridge:
+#ifdef __linux__
+ pci_dev_put(dev_priv->bridge_dev);
+#endif
+free_priv:
+ free(dev_priv, DRM_MEM_DRIVER);
+ return ret;
}
int i915_driver_unload(struct drm_device *dev)
@@ -1463,6 +1705,17 @@ int i915_driver_unload(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
+ intel_gpu_ips_teardown();
+
+#ifdef __linux__
+ i915_teardown_sysfs(dev);
+
+ if (dev_priv->mm.inactive_shrinker.shrink)
+ unregister_shrinker(&dev_priv->mm.inactive_shrinker);
+#endif
+
+ intel_free_parsed_bios_data(dev);
+
DRM_LOCK(dev);
ret = i915_gpu_idle(dev);
if (ret)
@@ -1470,19 +1723,56 @@ int i915_driver_unload(struct drm_device *dev)
i915_gem_retire_requests(dev);
DRM_UNLOCK(dev);
- i915_free_hws(dev);
+ /* Cancel the retire work handler, which should be idle now. */
+ while (taskqueue_cancel_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work, NULL) != 0)
+ taskqueue_drain_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work);
- intel_teardown_mchbar(dev);
+#ifdef __linux__
+ io_mapping_free(dev_priv->mm.gtt_mapping);
+#endif
+ if (dev_priv->mm.gtt_mtrr >= 0) {
+ drm_mtrr_del(dev_priv->mm.gtt_mtrr,
+ dev_priv->mm.gtt_base_addr,
+ dev_priv->mm.gtt->gtt_mappable_entries * PAGE_SIZE,
+ DRM_MTRR_WC);
+ dev_priv->mm.gtt_mtrr = -1;
+ }
+
+#ifdef __linux__
+ acpi_video_unregister();
+#endif
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
intel_fbdev_fini(dev);
intel_modeset_cleanup(dev);
+ while (taskqueue_cancel(dev_priv->wq,
+ &dev_priv->console_resume_work, NULL) != 0)
+ taskqueue_drain(dev_priv->wq,
+ &dev_priv->console_resume_work);
+
+ /*
+ * free the memory space allocated for the child device
+ * config parsed from VBT
+ */
+ if (dev_priv->child_dev && dev_priv->child_dev_num) {
+ free(dev_priv->child_dev, DRM_MEM_DRIVER);
+ dev_priv->child_dev = NULL;
+ dev_priv->child_dev_num = 0;
+ }
+
+#ifdef __linux__
+ vga_switcheroo_unregister_client(dev->pdev);
+ vga_client_register(dev->pdev, NULL, NULL, NULL);
+#endif
}
/* Free error state after interrupts are fully disabled. */
callout_stop(&dev_priv->hangcheck_timer);
callout_drain(&dev_priv->hangcheck_timer);
-
+ while (taskqueue_cancel(dev_priv->wq, &dev_priv->error_work, NULL) != 0)
+ taskqueue_drain(dev_priv->wq, &dev_priv->error_work);
i915_destroy_error_state(dev);
if (dev->msi_enabled)
@@ -1491,18 +1781,16 @@ int i915_driver_unload(struct drm_device *dev)
intel_opregion_fini(dev);
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Flush any outstanding unpin_work. */
+ taskqueue_drain_all(dev_priv->wq);
+
DRM_LOCK(dev);
i915_gem_free_all_phys_object(dev);
i915_gem_cleanup_ringbuffer(dev);
i915_gem_context_fini(dev);
DRM_UNLOCK(dev);
i915_gem_cleanup_aliasing_ppgtt(dev);
-#if 1
- KIB_NOTYET();
-#else
- if (I915_HAS_FBC(dev) && i915_powersave)
- i915_cleanup_compression(dev);
-#endif
+ i915_gem_cleanup_stolen(dev);
drm_mm_takedown(&dev_priv->mm.stolen);
intel_cleanup_overlay(dev);
@@ -1511,21 +1799,31 @@ int i915_driver_unload(struct drm_device *dev)
i915_free_hws(dev);
}
- i915_gem_unload(dev);
-
- mtx_destroy(&dev_priv->irq_lock);
+ intel_teardown_gmbus(dev);
+ intel_teardown_mchbar(dev);
- if (dev_priv->tq != NULL)
- taskqueue_free(dev_priv->tq);
+ /*
+ * NOTE Linux<->FreeBSD: Free mmio_map after
+ * intel_teardown_gmbus(), because, on FreeBSD,
+ * intel_i2c_reset() is called during iicbus_detach().
+ */
+ if (dev_priv->mmio_map != NULL)
+ drm_rmmap(dev, dev_priv->mmio_map);
- bus_generic_detach(dev->dev);
- drm_rmmap(dev, dev_priv->mmio_map);
- intel_teardown_gmbus(dev);
+ if (dev_priv->wq != NULL)
+ taskqueue_free(dev_priv->wq);
- mtx_destroy(&dev_priv->dpio_lock);
+ free_completion(&dev_priv->error_completion);
+ mtx_destroy(&dev_priv->irq_lock);
mtx_destroy(&dev_priv->error_lock);
- mtx_destroy(&dev_priv->error_completion_lock);
- mtx_destroy(&dev_priv->rps_lock);
+ mtx_destroy(&dev_priv->rps.lock);
+ sx_destroy(&dev_priv->dpio_lock);
+
+ sx_destroy(&dev_priv->rps.hw_lock);
+
+#ifdef __linux__
+ pci_dev_put(dev_priv->bridge_dev);
+#endif
free(dev->dev_private, DRM_MEM_DRIVER);
return 0;
@@ -1535,11 +1833,14 @@ int i915_driver_open(struct drm_device *dev, struct drm_file *file)
{
struct drm_i915_file_private *file_priv;
+ DRM_DEBUG_DRIVER("\n");
file_priv = malloc(sizeof(*file_priv), DRM_MEM_FILES, M_WAITOK | M_ZERO);
+ if (!file_priv)
+ return -ENOMEM;
file->driver_priv = file_priv;
- mtx_init(&file_priv->mm.lck, "915fp", NULL, MTX_DEF);
+ mtx_init(&file_priv->mm.lock, "915fp", NULL, MTX_DEF);
INIT_LIST_HEAD(&file_priv->mm.request_list);
drm_gem_names_init(&file_priv->context_idr);
@@ -1570,10 +1871,8 @@ void i915_driver_lastclose(struct drm_device * dev)
return;
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-#if 1
- KIB_NOTYET();
-#else
- drm_fb_helper_restore();
+ intel_fb_restore_mode(dev);
+#ifdef __linux__
vga_switcheroo_process_delayed_switch();
#endif
return;
@@ -1594,104 +1893,62 @@ void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
{
struct drm_i915_file_private *file_priv = file->driver_priv;
- mtx_destroy(&file_priv->mm.lck);
+ mtx_destroy(&file_priv->mm.lock);
free(file_priv, DRM_MEM_FILES);
}
struct drm_ioctl_desc i915_ioctls[] = {
- DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_FLIP, i915_flip_bufs, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_GETPARAM, i915_getparam, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- DRM_IOCTL_DEF(DRM_I915_ALLOC, drm_noop, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_FREE, drm_noop, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_INIT_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_DESTROY_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
- DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
- DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH ),
- DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
- DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- DRM_IOCTL_DEF(DRM_I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH | DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH | DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_ENTERVT, i915_gem_entervt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_LEAVEVT, i915_gem_leavevt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_CREATE, i915_gem_create_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_MMAP, i915_gem_mmap_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_MMAP_GTT, i915_gem_mmap_gtt_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_SET_SPRITE_COLORKEY, intel_sprite_set_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GET_SPRITE_COLORKEY, intel_sprite_get_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_CONTEXT_CREATE, i915_gem_context_create_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_FLIP, i915_flip_bufs, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_GETPARAM, i915_getparam, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_ALLOC, drm_noop, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_FREE, drm_noop, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_INIT_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_DESTROY_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_SET_VBLANK_PIPE, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
+ DRM_IOCTL_DEF_DRV(I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF_DRV(I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_SET_CACHING, i915_gem_set_caching_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_GET_CACHING, i915_gem_get_caching_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_ENTERVT, i915_gem_entervt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_LEAVEVT, i915_gem_leavevt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_CREATE, i915_gem_create_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_MMAP, i915_gem_mmap_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_MMAP_GTT, i915_gem_mmap_gtt_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_SET_TILING, i915_gem_set_tiling, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_GET_TILING, i915_gem_get_tiling, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_SET_SPRITE_COLORKEY, intel_sprite_set_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GET_SPRITE_COLORKEY, intel_sprite_get_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_WAIT, i915_gem_wait_ioctl, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_CREATE, i915_gem_context_create_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_UNLOCKED),
};
-#ifdef COMPAT_FREEBSD32
-extern struct drm_ioctl_desc i915_compat_ioctls[];
-extern int i915_compat_ioctls_nr;
-#endif
-
-struct drm_driver i915_driver_info = {
- /*
- * FIXME Linux<->FreeBSD: DRIVER_USE_MTRR is commented out on
- * Linux.
- */
- .driver_features =
- DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | DRIVER_USE_MTRR |
- DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | DRIVER_PRIME,
-
- .buf_priv_size = sizeof(drm_i915_private_t),
- .load = i915_driver_load,
- .open = i915_driver_open,
- .unload = i915_driver_unload,
- .preclose = i915_driver_preclose,
- .lastclose = i915_driver_lastclose,
- .postclose = i915_driver_postclose,
- .device_is_agp = i915_driver_device_is_agp,
- .master_create = i915_master_create,
- .master_destroy = i915_master_destroy,
- .gem_init_object = i915_gem_init_object,
- .gem_free_object = i915_gem_free_object,
- .gem_pager_ops = &i915_gem_pager_ops,
- .dumb_create = i915_gem_dumb_create,
- .dumb_map_offset = i915_gem_mmap_gtt,
- .dumb_destroy = i915_gem_dumb_destroy,
- .sysctl_init = i915_sysctl_init,
- .sysctl_cleanup = i915_sysctl_cleanup,
-
- .ioctls = i915_ioctls,
-#ifdef COMPAT_FREEBSD32
- .compat_ioctls = i915_compat_ioctls,
- .num_compat_ioctls = &i915_compat_ioctls_nr,
-#endif
- .num_ioctls = ARRAY_SIZE(i915_ioctls),
-
- .name = DRIVER_NAME,
- .desc = DRIVER_DESC,
- .date = DRIVER_DATE,
- .major = DRIVER_MAJOR,
- .minor = DRIVER_MINOR,
- .patchlevel = DRIVER_PATCHLEVEL,
-};
+int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
/*
* This is really ugly: Because old userspace abused the linux agp interface to
diff --git a/sys/dev/drm2/i915/i915_drm.h b/sys/dev/drm2/i915/i915_drm.h
index deae206..c6f0be3 100644
--- a/sys/dev/drm2/i915/i915_drm.h
+++ b/sys/dev/drm2/i915/i915_drm.h
@@ -1,4 +1,4 @@
-/*-
+/*
* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
@@ -24,17 +24,18 @@
*
*/
+#ifndef _UAPI_I915_DRM_H_
+#define _UAPI_I915_DRM_H_
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef _I915_DRM_H_
-#define _I915_DRM_H_
+#include <dev/drm2/drm.h>
/* Please note that modifications to all structs defined here are
* subject to backwards-compatibility constraints.
*/
-#include <dev/drm2/drm.h>
/* Each region is a minimum of 16k, and there are at most 255 of them.
*/
@@ -46,12 +47,7 @@ typedef struct _drm_i915_init {
enum {
I915_INIT_DMA = 0x01,
I915_CLEANUP_DMA = 0x02,
- I915_RESUME_DMA = 0x03,
-
- /* Since this struct isn't versioned, just used a new
- * 'func' code to indicate the presence of dri2 sarea
- * info. */
- I915_INIT_DMA2 = 0x04
+ I915_RESUME_DMA = 0x03
} func;
unsigned int mmio_offset;
int sarea_priv_offset;
@@ -69,7 +65,6 @@ typedef struct _drm_i915_init {
unsigned int depth_pitch;
unsigned int cpp;
unsigned int chipset;
- unsigned int sarea_handle;
} drm_i915_init_t;
typedef struct _drm_i915_sarea {
@@ -123,20 +118,18 @@ typedef struct _drm_i915_sarea {
int pipeB_w;
int pipeB_h;
- /* Triple buffering */
- drm_handle_t third_handle;
- int third_offset;
- int third_size;
- unsigned int third_tiled;
+ /* fill out some space for old userspace triple buffer */
+ drm_handle_t unused_handle;
+ __u32 unused1, unused2, unused3;
- /* buffer object handles for the static buffers. May change
- * over the lifetime of the client, though it doesn't in our current
- * implementation.
+ /* buffer object handles for static buffers. May change
+ * over the lifetime of the client.
*/
__u32 front_bo_handle;
__u32 back_bo_handle;
- __u32 third_bo_handle;
+ __u32 unused_bo_handle;
__u32 depth_bo_handle;
+
} drm_i915_sarea_t;
/* due to userspace building against these headers we need some compat here */
@@ -149,16 +142,6 @@ typedef struct _drm_i915_sarea {
#define planeB_w pipeB_w
#define planeB_h pipeB_h
-/* Driver specific fence types and classes.
- */
-
-/* The only fence class we support */
-#define DRM_I915_FENCE_CLASS_ACCEL 0
-/* Fence type that guarantees read-write flush */
-#define DRM_I915_FENCE_TYPE_RW 2
-/* MI_FLUSH programmed just before the fence */
-#define DRM_I915_FENCE_FLAG_FLUSHED 0x01000000
-
/* Flags for perf_boxes
*/
#define I915_BOX_RING_EMPTY 0x1
@@ -186,9 +169,7 @@ typedef struct _drm_i915_sarea {
#define DRM_I915_SET_VBLANK_PIPE 0x0d
#define DRM_I915_GET_VBLANK_PIPE 0x0e
#define DRM_I915_VBLANK_SWAP 0x0f
-#define DRM_I915_MMIO 0x10
#define DRM_I915_HWS_ADDR 0x11
-#define DRM_I915_EXECBUFFER 0x12
#define DRM_I915_GEM_INIT 0x13
#define DRM_I915_GEM_EXECBUFFER 0x14
#define DRM_I915_GEM_PIN 0x15
@@ -212,14 +193,18 @@ typedef struct _drm_i915_sarea {
#define DRM_I915_OVERLAY_PUT_IMAGE 0x27
#define DRM_I915_OVERLAY_ATTRS 0x28
#define DRM_I915_GEM_EXECBUFFER2 0x29
-#define DRM_I915_GET_SPRITE_COLORKEY 0x2a
-#define DRM_I915_SET_SPRITE_COLORKEY 0x2b
+#define DRM_I915_GET_SPRITE_COLORKEY 0x2a
+#define DRM_I915_SET_SPRITE_COLORKEY 0x2b
+#define DRM_I915_GEM_WAIT 0x2c
#define DRM_I915_GEM_CONTEXT_CREATE 0x2d
#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e
+#define DRM_I915_GEM_SET_CACHING 0x2f
+#define DRM_I915_GEM_GET_CACHING 0x30
+#define DRM_I915_REG_READ 0x31
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
-#define DRM_IOCTL_I915_FLIP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FLIP, drm_i915_flip_t)
+#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
@@ -233,13 +218,15 @@ typedef struct _drm_i915_sarea {
#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
-#define DRM_IOCTL_I915_MMIO DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_MMIO, drm_i915_mmio)
+#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init)
#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
+#define DRM_IOCTL_I915_GEM_SET_CACHING DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching)
+#define DRM_IOCTL_I915_GEM_GET_CACHING DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching)
#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
@@ -255,24 +242,14 @@ typedef struct _drm_i915_sarea {
#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id)
#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise)
-#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_IOCTL_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image)
+#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image)
#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs)
#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
+#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait)
#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)
#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)
-
-/* Asynchronous page flipping:
- */
-typedef struct drm_i915_flip {
- /*
- * This is really talking about planes, and we could rename it
- * except for the fact that some of the duplicated i915_drm.h files
- * out there check for HAVE_I915_FLIP and so might pick up this
- * version.
- */
- int pipes;
-} drm_i915_flip_t;
+#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
/* Allow drivers to submit batchbuffers directly to hardware, relying
* on the security mechanisms provided by hardware.
@@ -310,15 +287,15 @@ typedef struct drm_i915_irq_wait {
/* Ioctl to query kernel params:
*/
-#define I915_PARAM_IRQ_ACTIVE 1
-#define I915_PARAM_ALLOW_BATCHBUFFER 2
-#define I915_PARAM_LAST_DISPATCH 3
-#define I915_PARAM_CHIPSET_ID 4
-#define I915_PARAM_HAS_GEM 5
-#define I915_PARAM_NUM_FENCES_AVAIL 6
-#define I915_PARAM_HAS_OVERLAY 7
+#define I915_PARAM_IRQ_ACTIVE 1
+#define I915_PARAM_ALLOW_BATCHBUFFER 2
+#define I915_PARAM_LAST_DISPATCH 3
+#define I915_PARAM_CHIPSET_ID 4
+#define I915_PARAM_HAS_GEM 5
+#define I915_PARAM_NUM_FENCES_AVAIL 6
+#define I915_PARAM_HAS_OVERLAY 7
#define I915_PARAM_HAS_PAGEFLIPPING 8
-#define I915_PARAM_HAS_EXECBUF2 9
+#define I915_PARAM_HAS_EXECBUF2 9
#define I915_PARAM_HAS_BSD 10
#define I915_PARAM_HAS_BLT 11
#define I915_PARAM_HAS_RELAXED_FENCING 12
@@ -326,8 +303,14 @@ typedef struct drm_i915_irq_wait {
#define I915_PARAM_HAS_EXEC_CONSTANTS 14
#define I915_PARAM_HAS_RELAXED_DELTA 15
#define I915_PARAM_HAS_GEN7_SOL_RESET 16
-#define I915_PARAM_HAS_LLC 17
+#define I915_PARAM_HAS_LLC 17
#define I915_PARAM_HAS_ALIASING_PPGTT 18
+#define I915_PARAM_HAS_WAIT_TIMEOUT 19
+#define I915_PARAM_HAS_SEMAPHORES 20
+#define I915_PARAM_HAS_PRIME_VMAP_FLUSH 21
+#define I915_PARAM_RSVD_FOR_FUTURE_USE 22
+#define I915_PARAM_HAS_SECURE_BATCHES 23
+#define I915_PARAM_HAS_PINNED_BATCHES 24
typedef struct drm_i915_getparam {
int param;
@@ -392,70 +375,10 @@ typedef struct drm_i915_vblank_swap {
unsigned int sequence;
} drm_i915_vblank_swap_t;
-#define I915_MMIO_READ 0
-#define I915_MMIO_WRITE 1
-
-#define I915_MMIO_MAY_READ 0x1
-#define I915_MMIO_MAY_WRITE 0x2
-
-#define MMIO_REGS_IA_PRIMATIVES_COUNT 0
-#define MMIO_REGS_IA_VERTICES_COUNT 1
-#define MMIO_REGS_VS_INVOCATION_COUNT 2
-#define MMIO_REGS_GS_PRIMITIVES_COUNT 3
-#define MMIO_REGS_GS_INVOCATION_COUNT 4
-#define MMIO_REGS_CL_PRIMITIVES_COUNT 5
-#define MMIO_REGS_CL_INVOCATION_COUNT 6
-#define MMIO_REGS_PS_INVOCATION_COUNT 7
-#define MMIO_REGS_PS_DEPTH_COUNT 8
-
-typedef struct drm_i915_mmio_entry {
- unsigned int flag;
- unsigned int offset;
- unsigned int size;
-} drm_i915_mmio_entry_t;
-
-typedef struct drm_i915_mmio {
- unsigned int read_write:1;
- unsigned int reg:31;
- void __user *data;
-} drm_i915_mmio_t;
-
typedef struct drm_i915_hws_addr {
__u64 addr;
} drm_i915_hws_addr_t;
-/*
- * Relocation header is 4 uint32_ts
- * 0 - 32 bit reloc count
- * 1 - 32-bit relocation type
- * 2-3 - 64-bit user buffer handle ptr for another list of relocs.
- */
-#define I915_RELOC_HEADER 4
-
-/*
- * type 0 relocation has 4-uint32_t stride
- * 0 - offset into buffer
- * 1 - delta to add in
- * 2 - buffer handle
- * 3 - reserved (for optimisations later).
- */
-/*
- * type 1 relocation has 4-uint32_t stride.
- * Hangs off the first item in the op list.
- * Performed after all valiations are done.
- * Try to group relocs into the same relocatee together for
- * performance reasons.
- * 0 - offset into buffer
- * 1 - delta to add in
- * 2 - buffer index in op list.
- * 3 - relocatee index in op list.
- */
-#define I915_RELOC_TYPE_0 0
-#define I915_RELOC0_STRIDE 4
-#define I915_RELOC_TYPE_1 1
-#define I915_RELOC1_STRIDE 4
-
-
struct drm_i915_gem_init {
/**
* Beginning offset in the GTT to be managed by the DRM memory
@@ -493,8 +416,12 @@ struct drm_i915_gem_pread {
__u64 offset;
/** Length of data to read */
__u64 size;
- /** Pointer to write the data into. */
- __u64 data_ptr; /* void *, but pointers are not 32/64 compatible */
+ /**
+ * Pointer to write the data into.
+ *
+ * This is a fixed-size type for 32/64 compatibility.
+ */
+ __u64 data_ptr;
};
struct drm_i915_gem_pwrite {
@@ -505,8 +432,12 @@ struct drm_i915_gem_pwrite {
__u64 offset;
/** Length of data to write */
__u64 size;
- /** Pointer to read the data from. */
- __u64 data_ptr; /* void *, but pointers are not 32/64 compatible */
+ /**
+ * Pointer to read the data from.
+ *
+ * This is a fixed-size type for 32/64 compatibility.
+ */
+ __u64 data_ptr;
};
struct drm_i915_gem_mmap {
@@ -521,8 +452,12 @@ struct drm_i915_gem_mmap {
* The value will be page-aligned.
*/
__u64 size;
- /** Returned pointer the data was mapped at */
- __u64 addr_ptr; /* void *, but pointers are not 32/64 compatible */
+ /**
+ * Returned pointer the data was mapped at.
+ *
+ * This is a fixed-size type for 32/64 compatibility.
+ */
+ __u64 addr_ptr;
};
struct drm_i915_gem_mmap_gtt {
@@ -667,7 +602,8 @@ struct drm_i915_gem_execbuffer {
__u32 DR1;
__u32 DR4;
__u32 num_cliprects;
- __u64 cliprects_ptr; /* struct drm_clip_rect *cliprects */
+ /** This is a struct drm_clip_rect *cliprects */
+ __u64 cliprects_ptr;
};
struct drm_i915_gem_exec_object2 {
@@ -696,7 +632,7 @@ struct drm_i915_gem_exec_object2 {
#define EXEC_OBJECT_NEEDS_FENCE (1<<0)
__u64 flags;
- __u64 rsvd1; /* now used for context info */
+ __u64 rsvd1;
__u64 rsvd2;
};
@@ -733,13 +669,27 @@ struct drm_i915_gem_execbuffer2 {
#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6)
#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
__u64 flags;
- __u64 rsvd1;
+ __u64 rsvd1; /* now used for context info */
__u64 rsvd2;
};
/** Resets the SO write offset registers for transform feedback on gen7. */
#define I915_EXEC_GEN7_SOL_RESET (1<<8)
+/** Request a privileged ("secure") batch buffer. Note only available for
+ * DRM_ROOT_ONLY | DRM_MASTER processes.
+ */
+#define I915_EXEC_SECURE (1<<9)
+
+/** Inform the kernel that the batch is and will always be pinned. This
+ * negates the requirement for a workaround to be performed to avoid
+ * an incoherent CS (such as can be found on 830/845). If this flag is
+ * not passed, the kernel will endeavour to make sure the batch is
+ * coherent with the CS before execution. If this flag is passed,
+ * userspace assumes the responsibility for ensuring the same.
+ */
+#define I915_EXEC_IS_PINNED (1<<10)
+
#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
#define i915_execbuffer2_set_context_id(eb2, context) \
(eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
@@ -768,10 +718,31 @@ struct drm_i915_gem_busy {
/** Handle of the buffer to check for busy */
__u32 handle;
- /** Return busy status (1 if busy, 0 if idle) */
+ /** Return busy status (1 if busy, 0 if idle).
+ * The high word is used to indicate on which rings the object
+ * currently resides:
+ * 16:31 - busy (r or r/w) rings (16 render, 17 bsd, 18 blt, etc)
+ */
__u32 busy;
};
+#define I915_CACHING_NONE 0
+#define I915_CACHING_CACHED 1
+
+struct drm_i915_gem_caching {
+ /**
+ * Handle of the buffer to set/get the caching level of. */
+ __u32 handle;
+
+ /**
+ * Cacheing level to apply or return value
+ *
+ * bits0-15 are for generic caching control (i.e. the above defined
+ * values). bits16-31 are reserved for platform-specific variations
+ * (e.g. l3$ caching on gen7). */
+ __u32 caching;
+};
+
#define I915_TILING_NONE 0
#define I915_TILING_X 1
#define I915_TILING_Y 2
@@ -856,7 +827,7 @@ struct drm_i915_get_pipe_from_crtc_id {
#define I915_MADV_WILLNEED 0
#define I915_MADV_DONTNEED 1
-#define I915_MADV_PURGED_INTERNAL 2 /* internal state */
+#define __I915_MADV_PURGED 2 /* internal state */
struct drm_i915_gem_madvise {
/** Handle of the buffer to change the backing store advice */
@@ -871,6 +842,7 @@ struct drm_i915_gem_madvise {
__u32 retained;
};
+/* flags */
#define I915_OVERLAY_TYPE_MASK 0xff
#define I915_OVERLAY_YUV_PLANAR 0x01
#define I915_OVERLAY_YUV_PACKED 0x02
@@ -968,6 +940,14 @@ struct drm_intel_sprite_colorkey {
__u32 flags;
};
+struct drm_i915_gem_wait {
+ /** Handle of BO we shall wait on */
+ __u32 bo_handle;
+ __u32 flags;
+ /** Number of nanoseconds to wait, Returns time remaining. */
+ __s64 timeout_ns;
+};
+
struct drm_i915_gem_context_create {
/* output: id of new context*/
__u32 ctx_id;
@@ -979,4 +959,15 @@ struct drm_i915_gem_context_destroy {
__u32 pad;
};
-#endif /* _I915_DRM_H_ */
+struct drm_i915_reg_read {
+ __u64 offset;
+ __u64 val; /* Return value */
+};
+
+/* For use by IPS driver */
+extern unsigned long i915_read_mch_val(void);
+extern bool i915_gpu_raise(void);
+extern bool i915_gpu_lower(void);
+extern bool i915_gpu_busy(void);
+extern bool i915_gpu_turbo_disable(void);
+#endif /* _UAPI_I915_DRM_H_ */
diff --git a/sys/dev/drm2/i915/i915_drv.c b/sys/dev/drm2/i915/i915_drv.c
index e4bf06e..0e54e9d 100644
--- a/sys/dev/drm2/i915/i915_drv.c
+++ b/sys/dev/drm2/i915/i915_drv.c
@@ -1,31 +1,29 @@
-/* i915_drv.c -- Intel i915 driver -*- linux-c -*-
- * Created: Wed Feb 14 17:10:04 2001 by gareth@valinux.com
+/* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
*/
-/*-
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+/*
+ *
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
*
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
*
- * Authors:
- * Gareth Hughes <gareth@valinux.com>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
@@ -33,57 +31,126 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/drm_mm.h>
-#include <dev/drm2/i915/i915_drm.h>
-#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/drm_pciids.h>
-#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include "dev/drm2/i915/i915_drv.h"
+#ifdef __linux__
+#include "dev/drm2/i915/i915_trace.h"
+#endif
+#include "dev/drm2/i915/intel_drv.h"
+
+#include <dev/drm2/drm_crtc_helper.h>
#include "fb_if.h"
-int intel_iommu_enabled = 0;
-TUNABLE_INT("drm.i915.intel_iommu_enabled", &intel_iommu_enabled);
-int intel_iommu_gfx_mapped = 0;
-TUNABLE_INT("drm.i915.intel_iommu_gfx_mapped", &intel_iommu_gfx_mapped);
+static int i915_modeset __read_mostly = 1;
+TUNABLE_INT("drm.i915.modeset", &i915_modeset);
+module_param_named(modeset, i915_modeset, int, 0400);
+MODULE_PARM_DESC(modeset,
+ "Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, "
+ "1=on, -1=force vga console preference [default])");
+
+#ifdef __linux__
+unsigned int i915_fbpercrtc __always_unused = 0;
+module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
+#endif
-int i915_prefault_disable;
-TUNABLE_INT("drm.i915.prefault_disable", &i915_prefault_disable);
-int i915_semaphores = -1;
-TUNABLE_INT("drm.i915.semaphores", &i915_semaphores);
-static int i915_try_reset = 1;
-TUNABLE_INT("drm.i915.try_reset", &i915_try_reset);
-unsigned int i915_lvds_downclock = 0;
-TUNABLE_INT("drm.i915.lvds_downclock", &i915_lvds_downclock);
-int i915_vbt_sdvo_panel_type = -1;
-TUNABLE_INT("drm.i915.vbt_sdvo_panel_type", &i915_vbt_sdvo_panel_type);
-unsigned int i915_powersave = 1;
+int i915_panel_ignore_lid __read_mostly = 1;
+TUNABLE_INT("drm.i915.panel_ignore_lid", &i915_panel_ignore_lid);
+module_param_named(panel_ignore_lid, i915_panel_ignore_lid, int, 0600);
+MODULE_PARM_DESC(panel_ignore_lid,
+ "Override lid status (0=autodetect, 1=autodetect disabled [default], "
+ "-1=force lid closed, -2=force lid open)");
+
+unsigned int i915_powersave __read_mostly = 1;
TUNABLE_INT("drm.i915.powersave", &i915_powersave);
-int i915_enable_fbc = 0;
-TUNABLE_INT("drm.i915.enable_fbc", &i915_enable_fbc);
-int i915_enable_rc6 = 0;
+module_param_named(powersave, i915_powersave, int, 0600);
+MODULE_PARM_DESC(powersave,
+ "Enable powersavings, fbc, downclocking, etc. (default: true)");
+
+int i915_semaphores __read_mostly = -1;
+TUNABLE_INT("drm.i915.semaphores", &i915_semaphores);
+module_param_named(semaphores, i915_semaphores, int, 0600);
+MODULE_PARM_DESC(semaphores,
+ "Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))");
+
+int i915_enable_rc6 __read_mostly = -1;
TUNABLE_INT("drm.i915.enable_rc6", &i915_enable_rc6);
-int i915_lvds_channel_mode;
+module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0400);
+MODULE_PARM_DESC(i915_enable_rc6,
+ "Enable power-saving render C-state 6. "
+ "Different stages can be selected via bitmask values "
+ "(0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). "
+ "For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. "
+ "default: -1 (use per-chip default)");
+
+int i915_enable_fbc __read_mostly = -1;
+TUNABLE_INT("drm.i915.enable_fbc", &i915_enable_fbc);
+module_param_named(i915_enable_fbc, i915_enable_fbc, int, 0600);
+MODULE_PARM_DESC(i915_enable_fbc,
+ "Enable frame buffer compression for power savings "
+ "(default: -1 (use per-chip default))");
+
+unsigned int i915_lvds_downclock __read_mostly = 0;
+TUNABLE_INT("drm.i915.lvds_downclock", &i915_lvds_downclock);
+module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400);
+MODULE_PARM_DESC(lvds_downclock,
+ "Use panel (LVDS/eDP) downclocking for power savings "
+ "(default: false)");
+
+int i915_lvds_channel_mode __read_mostly;
TUNABLE_INT("drm.i915.lvds_channel_mode", &i915_lvds_channel_mode);
-int i915_panel_use_ssc = -1;
+module_param_named(lvds_channel_mode, i915_lvds_channel_mode, int, 0600);
+MODULE_PARM_DESC(lvds_channel_mode,
+ "Specify LVDS channel mode "
+ "(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
+
+int i915_panel_use_ssc __read_mostly = -1;
TUNABLE_INT("drm.i915.panel_use_ssc", &i915_panel_use_ssc);
-int i915_panel_ignore_lid = 0;
-TUNABLE_INT("drm.i915.panel_ignore_lid", &i915_panel_ignore_lid);
-int i915_panel_invert_brightness;
-TUNABLE_INT("drm.i915.panel_invert_brightness", &i915_panel_invert_brightness);
-int i915_modeset = 1;
-TUNABLE_INT("drm.i915.modeset", &i915_modeset);
-int i915_enable_ppgtt = -1;
-TUNABLE_INT("drm.i915.enable_ppgtt", &i915_enable_ppgtt);
-int i915_enable_hangcheck = 1;
+module_param_named(lvds_use_ssc, i915_panel_use_ssc, int, 0600);
+MODULE_PARM_DESC(lvds_use_ssc,
+ "Use Spread Spectrum Clock with panels [LVDS/eDP] "
+ "(default: auto from VBT)");
+
+int i915_vbt_sdvo_panel_type __read_mostly = -1;
+TUNABLE_INT("drm.i915.vbt_sdvo_panel_type", &i915_vbt_sdvo_panel_type);
+module_param_named(vbt_sdvo_panel_type, i915_vbt_sdvo_panel_type, int, 0600);
+MODULE_PARM_DESC(vbt_sdvo_panel_type,
+ "Override/Ignore selection of SDVO panel mode in the VBT "
+ "(-2=ignore, -1=auto [default], index in VBT BIOS table)");
+
+static int i915_try_reset __read_mostly = true;
+TUNABLE_INT("drm.i915.try_reset", &i915_try_reset);
+module_param_named(reset, i915_try_reset, bool, 0600);
+MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");
+
+int i915_enable_hangcheck __read_mostly = true;
TUNABLE_INT("drm.i915.enable_hangcheck", &i915_enable_hangcheck);
-static int i915_enable_unsupported = 0;
-TUNABLE_INT("drm.i915.enable_unsupported", &i915_enable_unsupported);
+module_param_named(enable_hangcheck, i915_enable_hangcheck, bool, 0644);
+MODULE_PARM_DESC(enable_hangcheck,
+ "Periodically check GPU activity for detecting hangs. "
+ "WARNING: Disabling this can cause system wide hangs. "
+ "(default: true)");
-/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
-static drm_pci_id_list_t i915_pciidlist[] = {
- i915_PCI_IDS
-};
+int i915_enable_ppgtt __read_mostly = -1;
+TUNABLE_INT("drm.i915.enable_ppgtt", &i915_enable_ppgtt);
+module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, int, 0600);
+MODULE_PARM_DESC(i915_enable_ppgtt,
+ "Enable PPGTT (default: true)");
+
+unsigned int i915_preliminary_hw_support __read_mostly = 0;
+TUNABLE_INT("drm.i915.enable_unsupported", &i915_preliminary_hw_support);
+module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600);
+MODULE_PARM_DESC(preliminary_hw_support,
+ "Enable preliminary hardware support. "
+ "Enable Haswell and ValleyView Support. "
+ "(default: false)");
+
+int intel_iommu_gfx_mapped = 0;
+TUNABLE_INT("drm.i915.intel_iommu_gfx_mapped", &intel_iommu_gfx_mapped);
+
+static struct drm_driver driver;
+int intel_agp_enabled = 1; /* On FreeBSD, agp is a required dependency. */
#define INTEL_VGA_DEVICE(id, info_) { \
.device = id, \
@@ -175,15 +242,13 @@ static const struct intel_device_info intel_ironlake_d_info = {
.gen = 5,
.need_gfx_hws = 1, .has_hotplug = 1,
.has_bsd_ring = 1,
- .has_pch_split = 1,
};
static const struct intel_device_info intel_ironlake_m_info = {
.gen = 5, .is_mobile = 1,
.need_gfx_hws = 1, .has_hotplug = 1,
- .has_fbc = 0, /* disabled due to buggy hardware */
+ .has_fbc = 1,
.has_bsd_ring = 1,
- .has_pch_split = 1,
};
static const struct intel_device_info intel_sandybridge_d_info = {
@@ -192,7 +257,7 @@ static const struct intel_device_info intel_sandybridge_d_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
+ .has_force_wake = 1,
};
static const struct intel_device_info intel_sandybridge_m_info = {
@@ -202,7 +267,7 @@ static const struct intel_device_info intel_sandybridge_m_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
+ .has_force_wake = 1,
};
static const struct intel_device_info intel_ivybridge_d_info = {
@@ -211,7 +276,7 @@ static const struct intel_device_info intel_ivybridge_d_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
+ .has_force_wake = 1,
};
static const struct intel_device_info intel_ivybridge_m_info = {
@@ -221,7 +286,7 @@ static const struct intel_device_info intel_ivybridge_m_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
+ .has_force_wake = 1,
};
static const struct intel_device_info intel_valleyview_m_info = {
@@ -231,7 +296,6 @@ static const struct intel_device_info intel_valleyview_m_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.is_valleyview = 1,
- .not_supported = 1,
};
static const struct intel_device_info intel_valleyview_d_info = {
@@ -241,7 +305,6 @@ static const struct intel_device_info intel_valleyview_d_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.is_valleyview = 1,
- .not_supported = 1,
};
static const struct intel_device_info intel_haswell_d_info = {
@@ -250,8 +313,7 @@ static const struct intel_device_info intel_haswell_d_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
- .not_supported = 1,
+ .has_force_wake = 1,
};
static const struct intel_device_info intel_haswell_m_info = {
@@ -260,8 +322,12 @@ static const struct intel_device_info intel_haswell_m_info = {
.has_bsd_ring = 1,
.has_blt_ring = 1,
.has_llc = 1,
- .has_pch_split = 1,
- .not_supported = 1,
+ .has_force_wake = 1,
+};
+
+/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
+static const drm_pci_id_list_t pciidlist[] = {
+ i915_PCI_IDS
};
static const struct intel_gfx_device_id {
@@ -354,45 +420,58 @@ static const struct intel_gfx_device_id {
{0, 0}
};
-#define PCI_VENDOR_INTEL 0x8086
-#define INTEL_PCH_DEVICE_ID_MASK 0xff00
-#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
-#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
-#define INTEL_PCH_PPT_DEVICE_ID_TYPE 0x1e00
-#define INTEL_PCH_LPT_DEVICE_ID_TYPE 0x8c00
+#if defined(CONFIG_DRM_I915_KMS)
+MODULE_DEVICE_TABLE(pci, pciidlist);
+#endif
void intel_detect_pch(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
device_t pch;
- uint32_t id;
+ /*
+ * The reason to probe ISA bridge instead of Dev31:Fun0 is to
+ * make graphics device passthrough work easy for VMM, that only
+ * need to expose ISA bridge to let driver know the real hardware
+ * underneath. This is a requirement from virtualization team.
+ */
pch = pci_find_class(PCIC_BRIDGE, PCIS_BRIDGE_ISA);
- if (pch != NULL && pci_get_vendor(pch) == PCI_VENDOR_INTEL) {
- id = pci_get_device(pch) & INTEL_PCH_DEVICE_ID_MASK;
- if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_IBX;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
- } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_CPT;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found CougarPoint PCH\n");
- } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
- /* PantherPoint is CPT compatible */
- dev_priv->pch_type = PCH_CPT;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found PatherPoint PCH\n");
- } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_LPT;
- dev_priv->num_pch_pll = 0;
- DRM_DEBUG_KMS("Found LynxPoint PCH\n");
- } else
- DRM_DEBUG_KMS("No PCH detected\n");
- KASSERT(dev_priv->num_pch_pll <= I915_NUM_PLLS,
- ("num_pch_pll %d\n", dev_priv->num_pch_pll));
- } else
- DRM_DEBUG_KMS("No Intel PCI-ISA bridge found\n");
+ if (pch) {
+ if (pci_get_vendor(pch) == PCI_VENDOR_ID_INTEL) {
+ unsigned short id;
+ id = pci_get_device(pch) & INTEL_PCH_DEVICE_ID_MASK;
+ dev_priv->pch_id = id;
+
+ if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_IBX;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
+ WARN_ON(!IS_GEN5(dev));
+ } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_CPT;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found CougarPoint PCH\n");
+ WARN_ON(!(IS_GEN6(dev) || IS_IVYBRIDGE(dev)));
+ } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
+ /* PantherPoint is CPT compatible */
+ dev_priv->pch_type = PCH_CPT;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found PatherPoint PCH\n");
+ WARN_ON(!(IS_GEN6(dev) || IS_IVYBRIDGE(dev)));
+ } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_LPT;
+ dev_priv->num_pch_pll = 0;
+ DRM_DEBUG_KMS("Found LynxPoint PCH\n");
+ WARN_ON(!IS_HASWELL(dev));
+ } else if (id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_LPT;
+ dev_priv->num_pch_pll = 0;
+ DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
+ WARN_ON(!IS_HASWELL(dev));
+ }
+ BUG_ON(dev_priv->num_pch_pll > I915_NUM_PLLS);
+ }
+ }
}
bool i915_semaphore_is_enabled(struct drm_device *dev)
@@ -403,9 +482,11 @@ bool i915_semaphore_is_enabled(struct drm_device *dev)
if (i915_semaphores >= 0)
return i915_semaphores;
+#ifdef CONFIG_INTEL_IOMMU
/* Enable semaphores on SNB when IO remapping is off */
if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
return false;
+#endif
return 1;
}
@@ -416,7 +497,7 @@ static int i915_drm_freeze(struct drm_device *dev)
drm_kms_helper_poll_disable(dev);
-#if 0
+#ifdef __linux__
pci_save_state(dev->pdev);
#endif
@@ -424,10 +505,16 @@ static int i915_drm_freeze(struct drm_device *dev)
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
int error = i915_gem_idle(dev);
if (error) {
- device_printf(dev->dev,
+ dev_err(dev->dev,
"GEM idle failed, resume might fail\n");
return error;
}
+
+ taskqueue_cancel_timeout(dev_priv->wq,
+ &dev_priv->rps.delayed_resume_work, NULL);
+
+ intel_modeset_disable(dev);
+
drm_irq_uninstall(dev);
}
@@ -438,48 +525,67 @@ static int i915_drm_freeze(struct drm_device *dev)
/* Modeset on resume, not lid events */
dev_priv->modeset_on_lid = 0;
+ console_lock();
+ intel_fbdev_set_suspend(dev, 1);
+ console_unlock();
+
return 0;
}
-static int i915_suspend(device_t kdev)
+int i915_suspend(struct drm_device *dev, pm_message_t state)
{
- struct drm_device *dev;
int error;
- dev = device_get_softc(kdev);
if (!dev || !dev->dev_private) {
+ DRM_ERROR("dev: %p\n", dev);
DRM_ERROR("DRM not initialized, aborting suspend.\n");
- return ENODEV;
+ return -ENODEV;
}
- DRM_DEBUG_KMS("starting suspend\n");
+ if (state.event == PM_EVENT_PRETHAW)
+ return 0;
+
+
+ if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
+ return 0;
+
error = i915_drm_freeze(dev);
if (error)
- return -error;
+ return error;
+
+ if (state.event == PM_EVENT_SUSPEND) {
+#ifdef __linux__
+ /* Shut down the device */
+ pci_disable_device(dev->pdev);
+ pci_set_power_state(dev->pdev, PCI_D3hot);
+#endif
+ }
+
+ return 0;
+}
- error = bus_generic_suspend(kdev);
- DRM_DEBUG_KMS("finished suspend %d\n", error);
- return (error);
+void intel_console_resume(void *arg, int pending)
+{
+ struct drm_i915_private *dev_priv =
+ arg;
+ struct drm_device *dev = dev_priv->dev;
+
+ console_lock();
+ intel_fbdev_set_suspend(dev, 0);
+ console_unlock();
}
-static int i915_drm_thaw(struct drm_device *dev)
+static int __i915_drm_thaw(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
int error = 0;
- if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- DRM_LOCK(dev);
- i915_gem_restore_gtt_mappings(dev);
- DRM_UNLOCK(dev);
- }
-
i915_restore_state(dev);
intel_opregion_setup(dev);
/* KMS EnterVT equivalent */
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- if (HAS_PCH_SPLIT(dev))
- ironlake_init_pch_refclk(dev);
+ intel_init_pch_refclk(dev);
DRM_LOCK(dev);
dev_priv->mm.suspended = 0;
@@ -488,46 +594,83 @@ static int i915_drm_thaw(struct drm_device *dev)
DRM_UNLOCK(dev);
intel_modeset_init_hw(dev);
- sx_xlock(&dev->mode_config.mutex);
- drm_mode_config_reset(dev);
- sx_xunlock(&dev->mode_config.mutex);
+ intel_modeset_setup_hw_state(dev, false);
drm_irq_install(dev);
-
- sx_xlock(&dev->mode_config.mutex);
- /* Resume the modeset for every activated CRTC */
- drm_helper_resume_force_mode(dev);
- sx_xunlock(&dev->mode_config.mutex);
}
intel_opregion_init(dev);
dev_priv->modeset_on_lid = 0;
+ /*
+ * The console lock can be pretty contented on resume due
+ * to all the printk activity. Try to keep it out of the hot
+ * path of resume if possible.
+ */
+ if (console_trylock()) {
+ intel_fbdev_set_suspend(dev, 0);
+ console_unlock();
+ } else {
+ taskqueue_enqueue(dev_priv->wq,
+ &dev_priv->console_resume_work);
+ }
+
return error;
}
-static int i915_resume(device_t kdev)
+#ifdef __linux__
+static int i915_drm_thaw(struct drm_device *dev)
{
- struct drm_device *dev;
+ int error = 0;
+
+ intel_gt_reset(dev);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ DRM_LOCK(dev);
+ i915_gem_restore_gtt_mappings(dev);
+ DRM_UNLOCK(dev);
+ }
+
+ __i915_drm_thaw(dev);
+
+ return error;
+}
+#endif
+
+int i915_resume(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
- dev = device_get_softc(kdev);
- DRM_DEBUG_KMS("starting resume\n");
-#if 0
+ if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
+ return 0;
+
+#ifdef __linux__
if (pci_enable_device(dev->pdev))
return -EIO;
pci_set_master(dev->pdev);
#endif
- ret = i915_drm_thaw(dev);
+ intel_gt_reset(dev);
+
+ /*
+ * Platforms with opregion should have sane BIOS, older ones (gen3 and
+ * earlier) need this since the BIOS might clear all our scratch PTEs.
+ */
+ if (drm_core_check_feature(dev, DRIVER_MODESET) &&
+ !dev_priv->opregion.header) {
+ DRM_LOCK(dev);
+ i915_gem_restore_gtt_mappings(dev);
+ DRM_UNLOCK(dev);
+ }
+
+ ret = __i915_drm_thaw(dev);
if (ret)
- return -ret;
+ return ret;
drm_kms_helper_poll_enable(dev);
- ret = bus_generic_resume(kdev);
- DRM_DEBUG_KMS("finished resume %d\n", ret);
- return (ret);
+ return 0;
}
static int i8xx_do_reset(struct drm_device *dev)
@@ -568,8 +711,7 @@ static int i8xx_do_reset(struct drm_device *dev)
static int i965_reset_complete(struct drm_device *dev)
{
u8 gdrst;
-
- gdrst = pci_read_config(dev->dev, I965_GDRST, 1);
+ pci_read_config_byte(dev->dev, I965_GDRST, &gdrst);
return (gdrst & GRDOM_RESET_ENABLE) == 0;
}
@@ -583,19 +725,19 @@ static int i965_do_reset(struct drm_device *dev)
* well as the reset bit (GR/bit 0). Setting the GR bit
* triggers the reset; when done, the hardware will clear it.
*/
- gdrst = pci_read_config(dev->dev, I965_GDRST, 1);
- pci_write_config(dev->dev, I965_GDRST,
+ pci_read_config_byte(dev->dev, I965_GDRST, &gdrst);
+ pci_write_config_byte(dev->dev, I965_GDRST,
gdrst | GRDOM_RENDER |
- GRDOM_RESET_ENABLE, 1);
+ GRDOM_RESET_ENABLE);
ret = wait_for(i965_reset_complete(dev), 500);
if (ret)
return ret;
/* We can't reset render&media without also resetting display ... */
- gdrst = pci_read_config(dev->dev, I965_GDRST, 1);
- pci_write_config(dev->dev, I965_GDRST,
+ pci_read_config_byte(dev->dev, I965_GDRST, &gdrst);
+ pci_write_config_byte(dev->dev, I965_GDRST,
gdrst | GRDOM_MEDIA |
- GRDOM_RESET_ENABLE, 1);
+ GRDOM_RESET_ENABLE);
return wait_for(i965_reset_complete(dev), 500);
}
@@ -639,15 +781,21 @@ static int gen6_do_reset(struct drm_device *dev)
I915_WRITE_NOTRACE(GEN6_GDRST, GEN6_GRDOM_FULL);
/* Spin waiting for the device to ack the reset request */
+ /*
+ * NOTE Linux<->FreeBSD: We use _intel_wait_for() instead of
+ * wait_for(), because we want to set the 4th argument to 0.
+ * This allows us to use a struct mtx for dev_priv->gt_lock and
+ * avoid a LOR.
+ */
ret = _intel_wait_for(dev,
(I915_READ_NOTRACE(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0,
500, 0, "915rst");
/* If reset with a user forcewake, try to restore, otherwise turn it off */
if (dev_priv->forcewake_count)
- dev_priv->display.force_wake_get(dev_priv);
+ dev_priv->gt.force_wake_get(dev_priv);
else
- dev_priv->display.force_wake_put(dev_priv);
+ dev_priv->gt.force_wake_put(dev_priv);
/* Restore fifo count */
dev_priv->gt_fifo_count = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
@@ -714,20 +862,17 @@ int i915_reset(struct drm_device *dev)
if (!i915_try_reset)
return 0;
- if (!sx_try_xlock(&dev->dev_struct_lock))
- return (-EBUSY);
-
- dev_priv->stop_rings = 0;
+ DRM_LOCK(dev);
i915_gem_reset(dev);
ret = -ENODEV;
- if (time_second - dev_priv->last_gpu_reset < 5)
+ if (get_seconds() - dev_priv->last_gpu_reset < 5)
DRM_ERROR("GPU hanging too fast, declaring wedged!\n");
else
ret = intel_gpu_reset(dev);
- dev_priv->last_gpu_reset = time_second;
+ dev_priv->last_gpu_reset = get_seconds();
if (ret) {
DRM_ERROR("Failed to reset chip.\n");
DRM_UNLOCK(dev);
@@ -771,9 +916,6 @@ int i915_reset(struct drm_device *dev)
DRM_UNLOCK(dev);
- if (drm_core_check_feature(dev, DRIVER_MODESET))
- intel_modeset_init_hw(dev);
-
drm_irq_uninstall(dev);
drm_irq_install(dev);
} else {
@@ -791,8 +933,6 @@ i915_get_device_id(int device)
for (did = &i915_infolist[0]; did->device != 0; did++) {
if (did->device != device)
continue;
- if (did->info->not_supported && !i915_enable_unsupported)
- return (NULL);
return (did->info);
}
return (NULL);
@@ -805,16 +945,243 @@ static int i915_probe(device_t kdev)
if (intel_info == NULL)
return (ENXIO);
+ if (intel_info->is_valleyview)
+ if(!i915_preliminary_hw_support) {
+ DRM_ERROR("Preliminary hardware support disabled\n");
+ return (ENXIO);
+ }
+
+ /* Only bind to function 0 of the device. Early generations
+ * used function 1 as a placeholder for multi-head. This causes
+ * us confusion instead, especially on the systems where both
+ * functions have the same PCI-ID!
+ */
+ if (pci_get_function(kdev))
+ return (ENXIO);
+
+ /* We've managed to ship a kms-enabled ddx that shipped with an XvMC
+ * implementation for gen3 (and only gen3) that used legacy drm maps
+ * (gasp!) to share buffers between X and the client. Hence we need to
+ * keep around the fake agp stuff for gen3, even when kms is enabled. */
+ if (intel_info->gen != 3) {
+ driver.driver_features &=
+ ~(DRIVER_USE_AGP | DRIVER_REQUIRE_AGP);
+ } else if (!intel_agp_enabled) {
+ DRM_ERROR("drm/i915 can't work without intel_agp module!\n");
+ return (ENXIO);
+ }
- return -drm_probe_helper(kdev, i915_pciidlist);
+ return -drm_probe_helper(kdev, pciidlist);
}
-static int i915_attach(device_t kdev)
+#ifdef __linux__
+static void
+i915_pci_remove(struct pci_dev *pdev)
+{
+ struct drm_device *dev = pci_get_drvdata(pdev);
+
+ drm_put_dev(dev);
+}
+
+static int i915_pm_suspend(struct device *dev)
{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+ int error;
+ if (!drm_dev || !drm_dev->dev_private) {
+ dev_err(dev, "DRM not initialized, aborting suspend.\n");
+ return -ENODEV;
+ }
+
+ if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF)
+ return 0;
+
+ error = i915_drm_freeze(drm_dev);
+ if (error)
+ return error;
+
+ pci_disable_device(pdev);
+ pci_set_power_state(pdev, PCI_D3hot);
+
+ return 0;
+}
+
+static int i915_pm_resume(struct device *dev)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+
+ return i915_resume(drm_dev);
+}
+
+static int i915_pm_freeze(struct device *dev)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+
+ if (!drm_dev || !drm_dev->dev_private) {
+ dev_err(dev, "DRM not initialized, aborting suspend.\n");
+ return -ENODEV;
+ }
+
+ return i915_drm_freeze(drm_dev);
+}
+
+static int i915_pm_thaw(struct device *dev)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+
+ return i915_drm_thaw(drm_dev);
+}
+
+static int i915_pm_poweroff(struct device *dev)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+
+ return i915_drm_freeze(drm_dev);
+}
+
+static const struct dev_pm_ops i915_pm_ops = {
+ .suspend = i915_pm_suspend,
+ .resume = i915_pm_resume,
+ .freeze = i915_pm_freeze,
+ .thaw = i915_pm_thaw,
+ .poweroff = i915_pm_poweroff,
+ .restore = i915_pm_resume,
+};
+
+static const struct vm_operations_struct i915_gem_vm_ops = {
+ .fault = i915_gem_fault,
+ .open = drm_gem_vm_open,
+ .close = drm_gem_vm_close,
+};
+
+static const struct file_operations i915_driver_fops = {
+ .owner = THIS_MODULE,
+ .open = drm_open,
+ .release = drm_release,
+ .unlocked_ioctl = drm_ioctl,
+ .mmap = drm_gem_mmap,
+ .poll = drm_poll,
+ .fasync = drm_fasync,
+ .read = drm_read,
+#ifdef CONFIG_COMPAT
+ .compat_ioctl = i915_compat_ioctl,
+#endif
+ .llseek = noop_llseek,
+};
+#endif /* __linux__ */
+
+#ifdef COMPAT_FREEBSD32
+extern struct drm_ioctl_desc i915_compat_ioctls[];
+extern int i915_compat_ioctls_nr;
+#endif
+
+static struct drm_driver driver = {
+ /* Don't use MTRRs here; the Xserver or userspace app should
+ * deal with them for Intel hardware.
+ */
+ .driver_features =
+ DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/
+ DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | DRIVER_PRIME,
+ .load = i915_driver_load,
+ .unload = i915_driver_unload,
+ .open = i915_driver_open,
+ .lastclose = i915_driver_lastclose,
+ .preclose = i915_driver_preclose,
+ .postclose = i915_driver_postclose,
+
+ /* Used in place of i915_pm_ops for non-DRIVER_MODESET */
+ .suspend = i915_suspend,
+ .resume = i915_resume,
+
+ .device_is_agp = i915_driver_device_is_agp,
+ .master_create = i915_master_create,
+ .master_destroy = i915_master_destroy,
+#if defined(CONFIG_DEBUG_FS)
+ .debugfs_init = i915_debugfs_init,
+ .debugfs_cleanup = i915_debugfs_cleanup,
+#endif
+ .gem_init_object = i915_gem_init_object,
+ .gem_free_object = i915_gem_free_object,
+#if defined(__linux__)
+ .gem_vm_ops = &i915_gem_vm_ops,
+#elif defined(__FreeBSD__)
+ .gem_pager_ops = &i915_gem_pager_ops,
+#endif
+
+#ifdef FREEBSD_WIP
+ .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
+ .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
+ .gem_prime_export = i915_gem_prime_export,
+ .gem_prime_import = i915_gem_prime_import,
+#endif /* FREEBSD_WIP */
+
+ .dumb_create = i915_gem_dumb_create,
+ .dumb_map_offset = i915_gem_mmap_gtt,
+ .dumb_destroy = i915_gem_dumb_destroy,
+ .ioctls = i915_ioctls,
+#ifdef COMPAT_FREEBSD32
+ .compat_ioctls = i915_compat_ioctls,
+ .num_compat_ioctls = &i915_compat_ioctls_nr,
+#endif
+#ifdef __linux__
+ .fops = &i915_driver_fops,
+#endif
+#ifdef __FreeBSD__
+ .sysctl_init = i915_sysctl_init,
+ .sysctl_cleanup = i915_sysctl_cleanup,
+#endif
+ .name = DRIVER_NAME,
+ .desc = DRIVER_DESC,
+ .date = DRIVER_DATE,
+ .major = DRIVER_MAJOR,
+ .minor = DRIVER_MINOR,
+ .patchlevel = DRIVER_PATCHLEVEL,
+};
+
+#ifdef __linux__
+static struct pci_driver i915_pci_driver = {
+ .name = DRIVER_NAME,
+ .id_table = pciidlist,
+ .probe = i915_pci_probe,
+ .remove = i915_pci_remove,
+ .driver.pm = &i915_pm_ops,
+};
+#endif
+
+static int __init i915_attach(device_t kdev)
+{
+ driver.num_ioctls = i915_max_ioctl;
+
+ /*
+ * If CONFIG_DRM_I915_KMS is set, default to KMS unless
+ * explicitly disabled with the module pararmeter.
+ *
+ * Otherwise, just follow the parameter (defaulting to off).
+ *
+ * Allow optional vga_text_mode_force boot option to override
+ * the default behavior.
+ */
+#if defined(CONFIG_DRM_I915_KMS)
+ if (i915_modeset != 0)
+ driver.driver_features |= DRIVER_MODESET;
+#endif
if (i915_modeset == 1)
- i915_driver_info.driver_features |= DRIVER_MODESET;
- return (-drm_attach_helper(kdev, i915_pciidlist, &i915_driver_info));
+ driver.driver_features |= DRIVER_MODESET;
+
+#ifdef CONFIG_VGA_CONSOLE
+ if (vgacon_text_force() && i915_modeset == -1)
+ driver.driver_features &= ~DRIVER_MODESET;
+#endif
+
+ if (!(driver.driver_features & DRIVER_MODESET))
+ driver.get_vblank_timestamp = NULL;
+
+ return (-drm_attach_helper(kdev, pciidlist, &driver));
}
static struct fb_info *
@@ -840,8 +1207,8 @@ static device_method_t i915_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, i915_probe),
DEVMETHOD(device_attach, i915_attach),
- DEVMETHOD(device_suspend, i915_suspend),
- DEVMETHOD(device_resume, i915_resume),
+ DEVMETHOD(device_suspend, drm_generic_suspend),
+ DEVMETHOD(device_resume, drm_generic_resume),
DEVMETHOD(device_detach, drm_generic_detach),
/* Framebuffer service methods */
@@ -856,6 +1223,10 @@ static driver_t i915_driver = {
sizeof(struct drm_device)
};
+MODULE_AUTHOR(DRIVER_AUTHOR);
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL and additional rights");
+
extern devclass_t drm_devclass;
DRIVER_MODULE_ORDERED(i915kms, vgapci, i915_driver, drm_devclass, 0, 0,
SI_ORDER_ANY);
@@ -867,154 +1238,129 @@ MODULE_DEPEND(i915kms, iicbb, 1, 1, 1);
/* We give fast paths for the really cool registers */
#define NEEDS_FORCE_WAKE(dev_priv, reg) \
- (((dev_priv)->info->gen >= 6) && \
+ ((HAS_FORCE_WAKE((dev_priv)->dev)) && \
((reg) < 0x40000) && \
- ((reg) != FORCEWAKE)) && \
- (!IS_VALLEYVIEW((dev_priv)->dev))
+ ((reg) != FORCEWAKE))
-void
-__gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+static bool IS_DISPLAYREG(u32 reg)
{
- int count;
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1))
- DELAY(10);
+ /*
+ * This should make it easier to transition modules over to the
+ * new register block scheme, since we can do it incrementally.
+ */
+ if (reg >= VLV_DISPLAY_BASE)
+ return false;
- I915_WRITE_NOTRACE(FORCEWAKE, 1);
- POSTING_READ(FORCEWAKE);
+ if (reg >= RENDER_RING_BASE &&
+ reg < RENDER_RING_BASE + 0xff)
+ return false;
+ if (reg >= GEN6_BSD_RING_BASE &&
+ reg < GEN6_BSD_RING_BASE + 0xff)
+ return false;
+ if (reg >= BLT_RING_BASE &&
+ reg < BLT_RING_BASE + 0xff)
+ return false;
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1) == 0)
- DELAY(10);
-}
+ if (reg == PGTBL_ER)
+ return false;
-void
-__gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
-{
- int count;
+ if (reg >= IPEIR_I965 &&
+ reg < HWSTAM)
+ return false;
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1))
- DELAY(10);
+ if (reg == MI_MODE)
+ return false;
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
- POSTING_READ(FORCEWAKE_MT);
+ if (reg == GFX_MODE_GEN7)
+ return false;
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1) == 0)
- DELAY(10);
-}
+ if (reg == RENDER_HWS_PGA_GEN7 ||
+ reg == BSD_HWS_PGA_GEN7 ||
+ reg == BLT_HWS_PGA_GEN7)
+ return false;
-void
-gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
-{
+ if (reg == GEN6_BSD_SLEEP_PSMI_CONTROL ||
+ reg == GEN6_BSD_RNCID)
+ return false;
- mtx_lock(&dev_priv->gt_lock);
- if (dev_priv->forcewake_count++ == 0)
- dev_priv->display.force_wake_get(dev_priv);
- mtx_unlock(&dev_priv->gt_lock);
-}
+ if (reg == GEN6_BLITTER_ECOSKPD)
+ return false;
-static void
-gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
-{
- u32 gtfifodbg;
+ if (reg >= 0x4000c &&
+ reg <= 0x4002c)
+ return false;
- gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
- if ((gtfifodbg & GT_FIFO_CPU_ERROR_MASK) != 0) {
- printf("MMIO read or write has been dropped %x\n", gtfifodbg);
- I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
- }
-}
+ if (reg >= 0x4f000 &&
+ reg <= 0x4f08f)
+ return false;
-void
-__gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
+ if (reg >= 0x4f100 &&
+ reg <= 0x4f11f)
+ return false;
- I915_WRITE_NOTRACE(FORCEWAKE, 0);
- /* The below doubles as a POSTING_READ */
- gen6_gt_check_fifodbg(dev_priv);
-}
+ if (reg >= VLV_MASTER_IER &&
+ reg <= GEN6_PMIER)
+ return false;
-void
-__gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
-{
+ if (reg >= FENCE_REG_SANDYBRIDGE_0 &&
+ reg < (FENCE_REG_SANDYBRIDGE_0 + (16*8)))
+ return false;
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1));
- /* The below doubles as a POSTING_READ */
- gen6_gt_check_fifodbg(dev_priv);
-}
+ if (reg >= VLV_IIR_RW &&
+ reg <= VLV_ISR)
+ return false;
-void
-gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
+ if (reg == FORCEWAKE_VLV ||
+ reg == FORCEWAKE_ACK_VLV)
+ return false;
- mtx_lock(&dev_priv->gt_lock);
- if (--dev_priv->forcewake_count == 0)
- dev_priv->display.force_wake_put(dev_priv);
- mtx_unlock(&dev_priv->gt_lock);
-}
+ if (reg == GEN6_GDRST)
+ return false;
-int
-__gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
-{
- int ret = 0;
-
- if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
- int loop = 500;
- u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
- DELAY(10);
- fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- }
- if (loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES) {
- printf("%s loop\n", __func__);
- ++ret;
- }
- dev_priv->gt_fifo_count = fifo;
+ switch (reg) {
+ case _3D_CHICKEN3:
+ case IVB_CHICKEN3:
+ case GEN7_COMMON_SLICE_CHICKEN1:
+ case GEN7_L3CNTLREG1:
+ case GEN7_L3_CHICKEN_MODE_REGISTER:
+ case GEN7_ROW_CHICKEN2:
+ case GEN7_L3SQCREG4:
+ case GEN7_SQ_CHICKEN_MBCUNIT_CONFIG:
+ case GEN7_HALF_SLICE_CHICKEN1:
+ case GEN6_MBCTL:
+ case GEN6_UCGCTL2:
+ return false;
+ default:
+ break;
}
- dev_priv->gt_fifo_count--;
- return (ret);
+ return true;
}
-void vlv_force_wake_get(struct drm_i915_private *dev_priv)
-{
- int count;
-
- count = 0;
-
- /* Already awake? */
- if ((I915_READ(0x130094) & 0xa1) == 0xa1)
- return;
-
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
- POSTING_READ(FORCEWAKE_VLV);
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0)
- DELAY(10);
-}
-
-void vlv_force_wake_put(struct drm_i915_private *dev_priv)
+static void
+ilk_dummy_write(struct drm_i915_private *dev_priv)
{
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffff0000);
- /* FIXME: confirm VLV behavior with Punit folks */
- POSTING_READ(FORCEWAKE_VLV);
+ /* WaIssueDummyWriteToWakeupFromRC6: Issue a dummy write to wake up the
+ * chip from rc6 before touching it for real. MI_MODE is masked, hence
+ * harmless to write 0 into. */
+ I915_WRITE_NOTRACE(MI_MODE, 0);
}
#define __i915_read(x, y) \
u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
u##x val = 0; \
+ if (IS_GEN5(dev_priv->dev)) \
+ ilk_dummy_write(dev_priv); \
if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
mtx_lock(&dev_priv->gt_lock); \
if (dev_priv->forcewake_count == 0) \
- dev_priv->display.force_wake_get(dev_priv); \
+ dev_priv->gt.force_wake_get(dev_priv); \
val = DRM_READ##x(dev_priv->mmio_map, reg); \
if (dev_priv->forcewake_count == 0) \
- dev_priv->display.force_wake_put(dev_priv); \
+ dev_priv->gt.force_wake_put(dev_priv); \
mtx_unlock(&dev_priv->gt_lock); \
+ } else if (IS_VALLEYVIEW(dev_priv->dev) && IS_DISPLAYREG(reg)) { \
+ val = DRM_READ##x(dev_priv->mmio_map, reg + 0x180000); \
} else { \
val = DRM_READ##x(dev_priv->mmio_map, reg); \
} \
@@ -1022,10 +1368,10 @@ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
return val; \
}
-__i915_read(8, 8)
-__i915_read(16, 16)
-__i915_read(32, 32)
-__i915_read(64, 64)
+__i915_read(8, b)
+__i915_read(16, w)
+__i915_read(32, l)
+__i915_read(64, q)
#undef __i915_read
#define __i915_write(x, y) \
@@ -1035,13 +1381,73 @@ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
__fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
} \
- DRM_WRITE##x(dev_priv->mmio_map, reg, val); \
- if (__predict_false(__fifo_ret)) { \
+ if (IS_GEN5(dev_priv->dev)) \
+ ilk_dummy_write(dev_priv); \
+ if (IS_HASWELL(dev_priv->dev) && (I915_READ_NOTRACE(GEN7_ERR_INT) & ERR_INT_MMIO_UNCLAIMED)) { \
+ DRM_ERROR("Unknown unclaimed register before writing to %x\n", reg); \
+ I915_WRITE_NOTRACE(GEN7_ERR_INT, ERR_INT_MMIO_UNCLAIMED); \
+ } \
+ if (IS_VALLEYVIEW(dev_priv->dev) && IS_DISPLAYREG(reg)) { \
+ DRM_WRITE##x(dev_priv->mmio_map, reg + 0x180000, val); \
+ } else { \
+ DRM_WRITE##x(dev_priv->mmio_map, reg, val); \
+ } \
+ if (unlikely(__fifo_ret)) { \
gen6_gt_check_fifodbg(dev_priv); \
} \
+ if (IS_HASWELL(dev_priv->dev) && (I915_READ_NOTRACE(GEN7_ERR_INT) & ERR_INT_MMIO_UNCLAIMED)) { \
+ DRM_ERROR("Unclaimed write to %x\n", reg); \
+ DRM_WRITE32(dev_priv->mmio_map, GEN7_ERR_INT, ERR_INT_MMIO_UNCLAIMED); \
+ } \
}
-__i915_write(8, 8)
-__i915_write(16, 16)
-__i915_write(32, 32)
-__i915_write(64, 64)
+__i915_write(8, b)
+__i915_write(16, w)
+__i915_write(32, l)
+__i915_write(64, q)
#undef __i915_write
+
+static const struct register_whitelist {
+ uint64_t offset;
+ uint32_t size;
+ uint32_t gen_bitmask; /* support gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
+} whitelist[] = {
+ { RING_TIMESTAMP(RENDER_RING_BASE), 8, 0xF0 },
+};
+
+int i915_reg_read_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_reg_read *reg = data;
+ struct register_whitelist const *entry = whitelist;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) {
+ if (entry->offset == reg->offset &&
+ (1 << INTEL_INFO(dev)->gen & entry->gen_bitmask))
+ break;
+ }
+
+ if (i == ARRAY_SIZE(whitelist))
+ return -EINVAL;
+
+ switch (entry->size) {
+ case 8:
+ reg->val = I915_READ64(reg->offset);
+ break;
+ case 4:
+ reg->val = I915_READ(reg->offset);
+ break;
+ case 2:
+ reg->val = I915_READ16(reg->offset);
+ break;
+ case 1:
+ reg->val = I915_READ8(reg->offset);
+ break;
+ default:
+ WARN_ON(1);
+ return -EINVAL;
+ }
+
+ return 0;
+}
diff --git a/sys/dev/drm2/i915/i915_drv.h b/sys/dev/drm2/i915/i915_drv.h
index ffdbc18..2dff53c 100644
--- a/sys/dev/drm2/i915/i915_drv.h
+++ b/sys/dev/drm2/i915/i915_drv.h
@@ -57,7 +57,14 @@ enum pipe {
I915_MAX_PIPES
};
#define pipe_name(p) ((p) + 'A')
-#define I915_NUM_PIPE 2
+
+enum transcoder {
+ TRANSCODER_A = 0,
+ TRANSCODER_B,
+ TRANSCODER_C,
+ TRANSCODER_EDP = 0xF,
+};
+#define transcoder_name(t) ((t) + 'A')
enum plane {
PLANE_A = 0,
@@ -78,9 +85,12 @@ enum port {
#define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT))
-
#define for_each_pipe(p) for ((p) = 0; (p) < dev_priv->num_pipe; (p)++)
+#define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \
+ list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \
+ if ((intel_encoder)->base.crtc == (__crtc))
+
struct intel_pch_pll {
int refcount; /* count of number of CRTCs sharing this PLL */
int active; /* count of number of active CRTCs (i.e. DPMS on) */
@@ -91,6 +101,12 @@ struct intel_pch_pll {
};
#define I915_NUM_PLLS 2
+struct intel_ddi_plls {
+ int spll_refcount;
+ int wrpll1_refcount;
+ int wrpll2_refcount;
+};
+
/* Interface history:
*
* 1.1: Original.
@@ -106,12 +122,8 @@ struct intel_pch_pll {
#define DRIVER_PATCHLEVEL 0
#define WATCH_COHERENCY 0
-#define WATCH_BUF 0
-#define WATCH_EXEC 0
-#define WATCH_LRU 0
-#define WATCH_RELOC 0
-#define WATCH_INACTIVE 0
-#define WATCH_PWRITE 0
+#define WATCH_LISTS 0
+#define WATCH_GTT 0
#define I915_GEM_PHYS_CURSOR_0 1
#define I915_GEM_PHYS_CURSOR_1 2
@@ -124,10 +136,120 @@ struct drm_i915_gem_phys_object {
struct drm_i915_gem_object *cur_obj;
};
+struct opregion_header;
+struct opregion_acpi;
+struct opregion_swsci;
+struct opregion_asle;
struct drm_i915_private;
+struct intel_opregion {
+ struct opregion_header __iomem *header;
+ struct opregion_acpi __iomem *acpi;
+ struct opregion_swsci __iomem *swsci;
+ struct opregion_asle __iomem *asle;
+ void __iomem *vbt;
+ u32 __iomem *lid_state;
+};
+#define OPREGION_SIZE (8*1024)
+
+struct intel_overlay;
+struct intel_overlay_error_state;
+
+struct drm_i915_master_private {
+ drm_local_map_t *sarea;
+ struct _drm_i915_sarea *sarea_priv;
+};
+#define I915_FENCE_REG_NONE -1
+#define I915_MAX_NUM_FENCES 16
+/* 16 fences + sign bit for FENCE_REG_NONE */
+#define I915_MAX_NUM_FENCE_BITS 5
+
+struct drm_i915_fence_reg {
+ struct list_head lru_list;
+ struct drm_i915_gem_object *obj;
+ int pin_count;
+};
+
+struct sdvo_device_mapping {
+ u8 initialized;
+ u8 dvo_port;
+ u8 slave_addr;
+ u8 dvo_wiring;
+ u8 i2c_pin;
+ u8 ddc_pin;
+};
+
+struct intel_display_error_state;
+
+struct drm_i915_error_state {
+ u_int ref;
+ u32 eir;
+ u32 pgtbl_er;
+ u32 ier;
+ u32 ccid;
+ u32 derrmr;
+ u32 forcewake;
+ bool waiting[I915_NUM_RINGS];
+ u32 pipestat[I915_MAX_PIPES];
+ u32 tail[I915_NUM_RINGS];
+ u32 head[I915_NUM_RINGS];
+ u32 ctl[I915_NUM_RINGS];
+ u32 ipeir[I915_NUM_RINGS];
+ u32 ipehr[I915_NUM_RINGS];
+ u32 instdone[I915_NUM_RINGS];
+ u32 acthd[I915_NUM_RINGS];
+ u32 semaphore_mboxes[I915_NUM_RINGS][I915_NUM_RINGS - 1];
+ u32 semaphore_seqno[I915_NUM_RINGS][I915_NUM_RINGS - 1];
+ u32 rc_psmi[I915_NUM_RINGS]; /* sleep state */
+ /* our own tracking of ring head and tail */
+ u32 cpu_ring_head[I915_NUM_RINGS];
+ u32 cpu_ring_tail[I915_NUM_RINGS];
+ u32 error; /* gen6+ */
+ u32 err_int; /* gen7 */
+ u32 instpm[I915_NUM_RINGS];
+ u32 instps[I915_NUM_RINGS];
+ u32 extra_instdone[I915_NUM_INSTDONE_REG];
+ u32 seqno[I915_NUM_RINGS];
+ u64 bbaddr;
+ u32 fault_reg[I915_NUM_RINGS];
+ u32 done_reg;
+ u32 faddr[I915_NUM_RINGS];
+ u64 fence[I915_MAX_NUM_FENCES];
+ struct timeval time;
+ struct drm_i915_error_ring {
+ struct drm_i915_error_object {
+ int page_count;
+ u32 gtt_offset;
+ u32 *pages[0];
+ } *ringbuffer, *batchbuffer;
+ struct drm_i915_error_request {
+ long jiffies;
+ u32 seqno;
+ u32 tail;
+ } *requests;
+ int num_requests;
+ } ring[I915_NUM_RINGS];
+ struct drm_i915_error_buffer {
+ u32 size;
+ u32 name;
+ u32 rseqno, wseqno;
+ u32 gtt_offset;
+ u32 read_domains;
+ u32 write_domain;
+ s32 fence_reg:I915_MAX_NUM_FENCE_BITS;
+ s32 pinned:2;
+ u32 tiling:2;
+ u32 dirty:1;
+ u32 purgeable:1;
+ s32 ring:4;
+ u32 cache_level:2;
+ } *active_bo, *pinned_bo;
+ u32 active_bo_count, pinned_bo_count;
+ struct intel_overlay_error_state *overlay;
+ struct intel_display_error_state *display;
+};
+
struct drm_i915_display_funcs {
- void (*dpms)(struct drm_crtc *crtc, int mode);
bool (*fbc_enabled)(struct drm_device *dev);
void (*enable_fbc)(struct drm_crtc *crtc, unsigned long interval);
void (*disable_fbc)(struct drm_device *dev);
@@ -136,25 +258,24 @@ struct drm_i915_display_funcs {
void (*update_wm)(struct drm_device *dev);
void (*update_sprite_wm)(struct drm_device *dev, int pipe,
uint32_t sprite_width, int pixel_size);
- void (*sanitize_pm)(struct drm_device *dev);
void (*update_linetime_wm)(struct drm_device *dev, int pipe,
struct drm_display_mode *mode);
+ void (*modeset_global_resources)(struct drm_device *dev);
int (*crtc_mode_set)(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode,
int x, int y,
struct drm_framebuffer *old_fb);
+ void (*crtc_enable)(struct drm_crtc *crtc);
+ void (*crtc_disable)(struct drm_crtc *crtc);
void (*off)(struct drm_crtc *crtc);
void (*write_eld)(struct drm_connector *connector,
struct drm_crtc *crtc);
void (*fdi_link_train)(struct drm_crtc *crtc);
void (*init_clock_gating)(struct drm_device *dev);
- void (*init_pch_clock_gating)(struct drm_device *dev);
int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc,
struct drm_framebuffer *fb,
struct drm_i915_gem_object *obj);
- void (*force_wake_get)(struct drm_i915_private *dev_priv);
- void (*force_wake_put)(struct drm_i915_private *dev_priv);
int (*update_plane)(struct drm_crtc *crtc, struct drm_framebuffer *fb,
int x, int y);
/* clock updates for mode set */
@@ -164,9 +285,39 @@ struct drm_i915_display_funcs {
/* pll clock increase/decrease */
};
+struct drm_i915_gt_funcs {
+ void (*force_wake_get)(struct drm_i915_private *dev_priv);
+ void (*force_wake_put)(struct drm_i915_private *dev_priv);
+};
+
+#define DEV_INFO_FLAGS \
+ DEV_INFO_FLAG(is_mobile) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_i85x) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_i915g) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_i945gm) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_g33) DEV_INFO_SEP \
+ DEV_INFO_FLAG(need_gfx_hws) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_g4x) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_pineview) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_broadwater) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_crestline) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_ivybridge) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_valleyview) DEV_INFO_SEP \
+ DEV_INFO_FLAG(is_haswell) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_force_wake) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_fbc) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_pipe_cxsr) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_hotplug) DEV_INFO_SEP \
+ DEV_INFO_FLAG(cursor_needs_physical) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_overlay) DEV_INFO_SEP \
+ DEV_INFO_FLAG(overlay_needs_physical) DEV_INFO_SEP \
+ DEV_INFO_FLAG(supports_tv) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_bsd_ring) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_blt_ring) DEV_INFO_SEP \
+ DEV_INFO_FLAG(has_llc)
+
struct intel_device_info {
u8 gen;
- u8 not_supported:1;
u8 is_mobile:1;
u8 is_i85x:1;
u8 is_i915g:1;
@@ -179,7 +330,7 @@ struct intel_device_info {
u8 is_crestline:1;
u8 is_ivybridge:1;
u8 is_valleyview:1;
- u8 has_pch_split:1;
+ u8 has_force_wake:1;
u8 is_haswell:1;
u8 has_fbc:1;
u8 has_pipe_cxsr:1;
@@ -196,6 +347,7 @@ struct intel_device_info {
#define I915_PPGTT_PD_ENTRIES 512
#define I915_PPGTT_PT_ENTRIES 1024
struct i915_hw_ppgtt {
+ struct drm_device *dev;
unsigned num_pd_entries;
vm_page_t *pt_pages;
uint32_t pd_offset;
@@ -225,59 +377,18 @@ enum no_fbc_reason {
FBC_MODULE_PARAM,
};
-struct mem_block {
- struct mem_block *next;
- struct mem_block *prev;
- int start;
- int size;
- struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
-};
-
-struct opregion_header;
-struct opregion_acpi;
-struct opregion_swsci;
-struct opregion_asle;
-
-struct intel_opregion {
- struct opregion_header *header;
- struct opregion_acpi *acpi;
- struct opregion_swsci *swsci;
- struct opregion_asle *asle;
- void *vbt;
- u32 *lid_state;
-};
-#define OPREGION_SIZE (8*1024)
-
-struct drm_i915_master_private {
- drm_local_map_t *sarea;
- struct _drm_i915_sarea *sarea_priv;
-};
-#define I915_FENCE_REG_NONE -1
-#define I915_MAX_NUM_FENCES 16
-/* 16 fences + sign bit for FENCE_REG_NONE */
-#define I915_MAX_NUM_FENCE_BITS 5
-
-struct drm_i915_fence_reg {
- struct list_head lru_list;
- struct drm_i915_gem_object *obj;
- int pin_count;
-};
-
-struct sdvo_device_mapping {
- u8 initialized;
- u8 dvo_port;
- u8 slave_addr;
- u8 dvo_wiring;
- u8 i2c_pin;
- u8 ddc_pin;
-};
-
enum intel_pch {
+ PCH_NONE = 0, /* No PCH present */
PCH_IBX, /* Ibexpeak PCH */
PCH_CPT, /* Cougarpoint PCH */
PCH_LPT, /* Lynxpoint PCH */
};
+enum intel_sbi_destination {
+ SBI_ICLK,
+ SBI_MPHY,
+};
+
#define QUIRK_PIPEA_FORCE (1<<0)
#define QUIRK_LVDS_SSC_DISABLE (1<<1)
#define QUIRK_INVERT_BRIGHTNESS (1<<2)
@@ -285,133 +396,22 @@ enum intel_pch {
struct intel_fbdev;
struct intel_fbc_work;
-typedef struct drm_i915_private {
- struct drm_device *dev;
-
- device_t gmbus_bridge[GMBUS_NUM_PORTS + 1];
- device_t bbbus_bridge[GMBUS_NUM_PORTS + 1];
- device_t gmbus[GMBUS_NUM_PORTS + 1];
- device_t bbbus[GMBUS_NUM_PORTS + 1];
- /** gmbus_sx protects against concurrent usage of the single hw gmbus
- * controller on different i2c buses. */
- struct sx gmbus_sx;
- uint32_t gpio_mmio_base;
-
- int relative_constants_mode;
-
- drm_local_map_t *mmio_map;
-
- /** gt_fifo_count and the subsequent register write are synchronized
- * with dev->struct_mutex. */
- unsigned gt_fifo_count;
- /** forcewake_count is protected by gt_lock */
- unsigned forcewake_count;
- /** gt_lock is also taken in irq contexts. */
- struct mtx gt_lock;
-
- /* drm_i915_ring_buffer_t ring; */
- struct intel_ring_buffer rings[I915_NUM_RINGS];
- uint32_t next_seqno;
-
- drm_dma_handle_t *status_page_dmah;
- void *hw_status_page;
- dma_addr_t dma_status_page;
- uint32_t counter;
- unsigned int status_gfx_addr;
- struct drm_gem_object *hws_obj;
-
- struct drm_i915_gem_object *pwrctx;
- struct drm_i915_gem_object *renderctx;
-
- unsigned int cpp;
- int back_offset;
- int front_offset;
- int current_page;
- int page_flipping;
-
- atomic_t irq_received;
- u32 trace_irq_seqno;
-
- /** Cached value of IER to avoid reads in updating the bitfield */
- u32 pipestat[2];
- u32 irq_mask;
- u32 gt_irq_mask;
- u32 pch_irq_mask;
- struct mtx irq_lock;
-
- struct mtx dpio_lock;
-
- u32 hotplug_supported_mask;
-
- unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
- int num_pipe;
- int num_pch_pll;
-
- /* For hangcheck timer */
-#define DRM_I915_HANGCHECK_PERIOD ((1500 /* in ms */ * hz) / 1000)
- int hangcheck_count;
- uint32_t last_acthd[I915_NUM_RINGS];
- uint32_t last_instdone;
- uint32_t last_instdone1;
-
- unsigned int stop_rings;
-
- struct intel_opregion opregion;
-
-
- /* overlay */
- struct intel_overlay *overlay;
- bool sprite_scaling_enabled;
-
- /* LVDS info */
- int backlight_level; /* restore backlight to this value */
- bool backlight_enabled;
- struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
- struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
-
- /* Feature bits from the VBIOS */
- unsigned int int_tv_support:1;
- unsigned int lvds_dither:1;
- unsigned int lvds_vbt:1;
- unsigned int int_crt_support:1;
- unsigned int lvds_use_ssc:1;
- unsigned int display_clock_mode:1;
- int lvds_ssc_freq;
- unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
- unsigned int lvds_val; /* used for checking LVDS channel mode */
- struct {
- int rate;
- int lanes;
- int preemphasis;
- int vswing;
-
- bool initialized;
- bool support;
- int bpp;
- struct edp_power_seq pps;
- } edp;
- bool no_aux_handshake;
-
- int crt_ddc_pin;
- struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES]; /* assume 965 */
- int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
- int num_fence_regs; /* 8 on pre-965, 16 otherwise */
-
- /* PCH chipset type */
- enum intel_pch pch_type;
-
- /* Display functions */
- struct drm_i915_display_funcs display;
-
- unsigned long quirks;
+struct intel_gmbus {
+ device_t gmbus_bridge;
+ device_t gmbus;
+ device_t bbbus_bridge;
+ device_t bbbus;
+ u32 force_bit;
+ u32 reg0;
+ u32 gpio_reg;
+ struct drm_i915_private *dev_priv;
+};
- /* Register state */
- bool modeset_on_lid;
+struct i915_suspend_saved_registers {
u8 saveLBB;
u32 saveDSPACNTR;
u32 saveDSPBCNTR;
u32 saveDSPARB;
- u32 saveHWS;
u32 savePIPEACONF;
u32 savePIPEBCONF;
u32 savePIPEASRC;
@@ -557,27 +557,243 @@ typedef struct drm_i915_private {
u32 savePIPEB_LINK_N1;
u32 saveMCHBAR_RENDER_STANDBY;
u32 savePCH_PORT_HOTPLUG;
+};
+
+struct intel_gen6_power_mgmt {
+ struct task work;
+ u32 pm_iir;
+ /* lock - irqsave spinlock that protectects the work_struct and
+ * pm_iir. */
+ struct mtx lock;
+
+ /* The below variables an all the rps hw state are protected by
+ * dev->struct mutext. */
+ u8 cur_delay;
+ u8 min_delay;
+ u8 max_delay;
+
+ struct timeout_task delayed_resume_work;
+
+ /*
+ * Protects RPS/RC6 register access and PCU communication.
+ * Must be taken after struct_mutex if nested.
+ */
+ struct sx hw_lock;
+};
+
+struct intel_ilk_power_mgmt {
+ u8 cur_delay;
+ u8 min_delay;
+ u8 max_delay;
+ u8 fmax;
+ u8 fstart;
+
+ u64 last_count1;
+ unsigned long last_time1;
+ unsigned long chipset_power;
+ u64 last_count2;
+ struct timespec last_time2;
+ unsigned long gfx_power;
+ u8 corr;
+
+ int c_m;
+ int r_t;
+
+ struct drm_i915_gem_object *pwrctx;
+ struct drm_i915_gem_object *renderctx;
+};
+
+struct i915_dri1_state {
+ unsigned allow_batchbuffer : 1;
+ u32 __iomem *gfx_hws_cpu_addr;
+
+ unsigned int cpp;
+ int back_offset;
+ int front_offset;
+ int current_page;
+ int page_flipping;
+
+ uint32_t counter;
+};
+
+struct intel_l3_parity {
+ u32 *remap_info;
+ struct task error_work;
+};
+
+typedef struct drm_i915_private {
+ struct drm_device *dev;
+
+ const struct intel_device_info *info;
+
+ int relative_constants_mode;
+
+ /* FIXME Linux<->FreeBSD: "void *regs" on Linux. */
+ drm_local_map_t *mmio_map;
+
+ struct drm_i915_gt_funcs gt;
+ /** gt_fifo_count and the subsequent register write are synchronized
+ * with dev->struct_mutex. */
+ unsigned gt_fifo_count;
+ /** forcewake_count is protected by gt_lock */
+ unsigned forcewake_count;
+ /** gt_lock is also taken in irq contexts. */
+ struct mtx gt_lock;
+
+ struct intel_gmbus gmbus[GMBUS_NUM_PORTS];
+
+ /** gmbus_mutex protects against concurrent usage of the single hw gmbus
+ * controller on different i2c buses. */
+ struct sx gmbus_mutex;
+
+ /**
+ * Base address of the gmbus and gpio block.
+ */
+ uint32_t gpio_mmio_base;
+
+ device_t bridge_dev;
+ struct intel_ring_buffer ring[I915_NUM_RINGS];
+ uint32_t next_seqno;
+
+ drm_dma_handle_t *status_page_dmah;
+ int mch_res_rid;
+ struct resource *mch_res;
+
+ atomic_t irq_received;
+
+ /* protects the irq masks */
+ struct mtx irq_lock;
+
+ /* DPIO indirect register protection */
+ struct sx dpio_lock;
+
+ /** Cached value of IMR to avoid reads in updating the bitfield */
+ u32 pipestat[2];
+ u32 irq_mask;
+ u32 gt_irq_mask;
+ u32 pch_irq_mask;
+
+ u32 hotplug_supported_mask;
+ struct task hotplug_work;
+
+ int num_pipe;
+ int num_pch_pll;
+
+ /* For hangcheck timer */
+#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
+#define DRM_I915_HANGCHECK_JIFFIES msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)
+ struct callout hangcheck_timer;
+ int hangcheck_count;
+ uint32_t last_acthd[I915_NUM_RINGS];
+ uint32_t prev_instdone[I915_NUM_INSTDONE_REG];
+
+ unsigned int stop_rings;
+
+ unsigned long cfb_size;
+ unsigned int cfb_fb;
+ enum plane cfb_plane;
+ int cfb_y;
+ struct intel_fbc_work *fbc_work;
+
+ struct intel_opregion opregion;
+
+ /* overlay */
+ struct intel_overlay *overlay;
+ bool sprite_scaling_enabled;
+
+ /* LVDS info */
+ int backlight_level; /* restore backlight to this value */
+ bool backlight_enabled;
+ struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
+ struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
+ /* Feature bits from the VBIOS */
+ unsigned int int_tv_support:1;
+ unsigned int lvds_dither:1;
+ unsigned int lvds_vbt:1;
+ unsigned int int_crt_support:1;
+ unsigned int lvds_use_ssc:1;
+ unsigned int display_clock_mode:1;
+ unsigned int fdi_rx_polarity_inverted:1;
+ int lvds_ssc_freq;
+ unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
+ unsigned int lvds_val; /* used for checking LVDS channel mode */
struct {
+ int rate;
+ int lanes;
+ int preemphasis;
+ int vswing;
+
+ bool initialized;
+ bool support;
+ int bpp;
+ struct edp_power_seq pps;
+ } edp;
+ bool no_aux_handshake;
+
+ int crt_ddc_pin;
+ struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES]; /* assume 965 */
+ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
+ int num_fence_regs; /* 8 on pre-965, 16 otherwise */
+
+ unsigned int fsb_freq, mem_freq, is_ddr3;
+
+ struct mtx error_lock;
+ /* Protected by dev->error_lock. */
+ struct drm_i915_error_state *first_error;
+ struct task error_work;
+ struct completion error_completion;
+ struct taskqueue *wq;
+
+ /* Display functions */
+ struct drm_i915_display_funcs display;
+
+ /* PCH chipset type */
+ enum intel_pch pch_type;
+ unsigned short pch_id;
+
+ unsigned long quirks;
+
+ /* Register state */
+ bool modeset_on_lid;
+
+ struct {
+ /** Bridge to intel-gtt-ko */
+ struct intel_gtt *gtt;
/** Memory allocator for GTT stolen memory */
struct drm_mm stolen;
/** Memory allocator for GTT */
struct drm_mm gtt_space;
/** List of all objects in gtt_space. Used to restore gtt
* mappings on resume */
- struct list_head gtt_list;
+ struct list_head bound_list;
+ /**
+ * List of objects which are not bound to the GTT (thus
+ * are idle and not used by the GPU) but still have
+ * (presumably uncached) pages still attached.
+ */
+ struct list_head unbound_list;
/** Usable portion of the GTT for GEM */
unsigned long gtt_start;
unsigned long gtt_mappable_end;
unsigned long gtt_end;
+ unsigned long stolen_base; /* limited to low memory (32-bit) */
+
+#ifdef __linux__
+ struct io_mapping *gtt_mapping;
+#endif
+ vm_paddr_t gtt_base_addr;
+ int gtt_mtrr;
/** PPGTT used for aliasing the PPGTT with the GTT */
struct i915_hw_ppgtt *aliasing_ppgtt;
+ eventhandler_tag inactive_shrinker;
+ bool shrinker_no_lock_stealing;
+
/**
- * List of objects currently involved in rendering from the
- * ringbuffer.
+ * List of objects currently involved in rendering.
*
* Includes buffers having the contents of their GPU caches
* flushed, not necessarily primitives. last_rendering_seqno
@@ -588,15 +804,6 @@ typedef struct drm_i915_private {
struct list_head active_list;
/**
- * List of objects which are not in the ringbuffer but which
- * still have a write_domain which needs to be flushed before
- * unbinding.
- *
- * A reference is held on the buffer while on this list.
- */
- struct list_head flushing_list;
-
- /**
* LRU list of objects which are not in the ringbuffer and
* are ready to unbind, but are still in the GTT.
*
@@ -618,26 +825,14 @@ typedef struct drm_i915_private {
* fire periodically while the ring is running. When it
* fires, go retire requests.
*/
- struct timeout_task retire_task;
+ struct timeout_task retire_work;
- /**
+ /**
* Are we in a non-interruptible section of code like
* modesetting?
*/
bool interruptible;
- uint32_t next_gem_seqno;
-
- /**
- * Waiting sequence number, if any
- */
- uint32_t waiting_gem_seqno;
-
- /**
- * Last seq seen at irq time
- */
- uint32_t irq_gem_seqno;
-
/**
* Flag if the X Server, and thus DRM, is not currently in
* control of the device.
@@ -652,10 +847,10 @@ typedef struct drm_i915_private {
* Flag if the hardware appears to be wedged.
*
* This is set when attempts to idle the device timeout.
- * It prevents command submission from occuring and makes
+ * It prevents command submission from occurring and makes
* every pending request fail
*/
- int wedged;
+ atomic_t wedged;
/** Bit 6 swizzling required for X tiling */
uint32_t bit_6_swizzle_x;
@@ -670,20 +865,8 @@ typedef struct drm_i915_private {
size_t mappable_gtt_total;
size_t object_memory;
u32 object_count;
-
- struct intel_gtt gtt;
- eventhandler_tag i915_lowmem;
} mm;
- const struct intel_device_info *info;
-
- /* Old dri1 support infrastructure, beware the dragons ya fools entering
- * here! */
- struct {
- unsigned allow_batchbuffer : 1;
- u32 *gfx_hws_cpu_addr;
- } dri1;
-
/* Kernel Modesetting */
struct sdvo_device_mapping sdvo_mappings[2];
@@ -694,88 +877,68 @@ typedef struct drm_i915_private {
struct drm_crtc *plane_to_crtc_mapping[3];
struct drm_crtc *pipe_to_crtc_mapping[3];
- /* wait_queue_head_t pending_flip_queue; XXXKIB */
+ wait_queue_head_t pending_flip_queue;
struct intel_pch_pll pch_plls[I915_NUM_PLLS];
+ struct intel_ddi_plls ddi_plls;
/* Reclocking support */
bool render_reclock_avail;
bool lvds_downclock_avail;
/* indicates the reduced downclock for LVDS*/
int lvds_downclock;
- struct task idle_task;
- struct callout idle_callout;
- bool busy;
u16 orig_clock;
int child_dev_num;
struct child_device_config *child_dev;
- struct drm_connector *int_lvds_connector;
- struct drm_connector *int_edp_connector;
- device_t bridge_dev;
bool mchbar_need_disable;
- int mch_res_rid;
- struct resource *mch_res;
- struct mtx rps_lock;
- u32 pm_iir;
- struct task rps_task;
+ struct intel_l3_parity l3_parity;
- u8 cur_delay;
- u8 min_delay;
- u8 max_delay;
- u8 fmax;
- u8 fstart;
+ /* gen6+ rps state */
+ struct intel_gen6_power_mgmt rps;
- u64 last_count1;
- unsigned long last_time1;
- unsigned long chipset_power;
- u64 last_count2;
- struct timespec last_time2;
- unsigned long gfx_power;
- int c_m;
- int r_t;
- u8 corr;
- struct mtx *mchdev_lock;
+ /* ilk-only ips/rps state. Everything in here is protected by the global
+ * mchdev_lock in intel_pm.c */
+ struct intel_ilk_power_mgmt ips;
enum no_fbc_reason no_fbc_reason;
struct drm_mm_node *compressed_fb;
struct drm_mm_node *compressed_llb;
- unsigned long cfb_size;
- unsigned int cfb_fb;
- int cfb_plane;
- int cfb_y;
- struct intel_fbc_work *fbc_work;
-
- unsigned int fsb_freq, mem_freq, is_ddr3;
-
- struct taskqueue *tq;
- struct task error_task;
- struct task hotplug_task;
- int error_completion;
- struct mtx error_completion_lock;
- /* Protected by dev->error_lock. */
- struct drm_i915_error_state *first_error;
- struct mtx error_lock;
- struct callout hangcheck_timer;
-
unsigned long last_gpu_reset;
+ /* list of fbdev register on this device */
struct intel_fbdev *fbdev;
+ /*
+ * The console may be contended at resume, but we don't
+ * want it to block on it.
+ */
+ struct task console_resume_work;
+
+ struct backlight_device *backlight;
+
struct drm_property *broadcast_rgb_property;
struct drm_property *force_audio_property;
bool hw_contexts_disabled;
uint32_t hw_context_size;
+
+ u32 fdi_rx_config;
+
+ struct i915_suspend_saved_registers regfile;
+
+ /* Old dri1 support infrastructure, beware the dragons ya fools entering
+ * here! */
+ struct i915_dri1_state dri1;
} drm_i915_private_t;
/* Iterate over initialised rings */
#define for_each_ring(ring__, dev_priv__, i__) \
for ((i__) = 0; (i__) < I915_NUM_RINGS; (i__)++) \
- if (((ring__) = &(dev_priv__)->rings[(i__)]), intel_ring_initialized((ring__)))
+ if (((ring__) = &(dev_priv__)->ring[(i__)]), intel_ring_initialized((ring__)))
enum hdmi_force_audio {
HDMI_AUDIO_OFF_DVI = -2, /* no aux data for HDMI-DVI converter */
@@ -785,37 +948,48 @@ enum hdmi_force_audio {
};
enum i915_cache_level {
- I915_CACHE_NONE,
+ I915_CACHE_NONE = 0,
I915_CACHE_LLC,
- I915_CACHE_LLC_MLC, /* gen6+ */
+ I915_CACHE_LLC_MLC, /* gen6+, in docs at least! */
};
-enum intel_chip_family {
- CHIP_I8XX = 0x01,
- CHIP_I9XX = 0x02,
- CHIP_I915 = 0x04,
- CHIP_I965 = 0x08,
+struct drm_i915_gem_object_ops {
+ /* Interface between the GEM object and its backing storage.
+ * get_pages() is called once prior to the use of the associated set
+ * of pages before to binding them into the GTT, and put_pages() is
+ * called after we no longer need them. As we expect there to be
+ * associated cost with migrating pages between the backing storage
+ * and making them available for the GPU (e.g. clflush), we may hold
+ * onto the pages after they are no longer referenced by the GPU
+ * in case they may be used again shortly (for example migrating the
+ * pages to a different memory domain within the GTT). put_pages()
+ * will therefore most likely be called when the object itself is
+ * being released or under memory pressure (where we attempt to
+ * reap pages for the shrinker).
+ */
+ int (*get_pages)(struct drm_i915_gem_object *);
+ void (*put_pages)(struct drm_i915_gem_object *);
};
-/** driver private structure attached to each drm_gem_object */
struct drm_i915_gem_object {
struct drm_gem_object base;
+ const struct drm_i915_gem_object_ops *ops;
+
/** Current space allocated to this object in the GTT, if any. */
struct drm_mm_node *gtt_space;
struct list_head gtt_list;
- /** This object's place on the active/flushing/inactive lists */
+
+ /** This object's place on the active/inactive lists */
struct list_head ring_list;
struct list_head mm_list;
- /** This object's place on GPU write list */
- struct list_head gpu_write_list;
/** This object's place in the batchbuffer or on the eviction list */
struct list_head exec_list;
/**
- * This is set if the object is on the active or flushing lists
- * (has pending rendering), and is not set if it's on inactive (ready
- * to be unbound).
+ * This is set if the object is on the active lists (has pending
+ * rendering and so a non-zero seqno), and is not set if it i s on
+ * inactive (ready to be unbound) list.
*/
unsigned int active:1;
@@ -826,12 +1000,6 @@ struct drm_i915_gem_object {
unsigned int dirty:1;
/**
- * This is set if the object has been written to since the last
- * GPU flush.
- */
- unsigned int pending_gpu_write:1;
-
- /**
* Fence register bits (if any) for this object. Will be set
* as needed when mapped into the GTT.
* Protected by dev->struct_mutex.
@@ -893,19 +1061,15 @@ struct drm_i915_gem_object {
unsigned int has_aliasing_ppgtt_mapping:1;
unsigned int has_global_gtt_mapping:1;
+ unsigned int has_dma_mapping:1;
vm_page_t *pages;
int pages_pin_count;
/**
- * DMAR support
- */
- struct sglist *sg_list;
-
- /**
* Used for performing relocations during execbuffer insertion.
*/
- LIST_ENTRY(drm_i915_gem_object) exec_node;
+ struct hlist_node exec_node;
unsigned long exec_handle;
struct drm_i915_gem_exec_object2 *exec_entry;
@@ -919,7 +1083,8 @@ struct drm_i915_gem_object {
struct intel_ring_buffer *ring;
/** Breadcrumb of last rendering to the buffer. */
- uint32_t last_rendering_seqno;
+ uint32_t last_read_seqno;
+ uint32_t last_write_seqno;
/** Breadcrumb of last fenced GPU access to the buffer. */
uint32_t last_fenced_seqno;
@@ -941,10 +1106,11 @@ struct drm_i915_gem_object {
* will be page flipped away on the next vblank. When it
* reaches 0, dev_priv->pending_flip_queue will be woken up.
*/
- int pending_flip;
+ atomic_t pending_flip;
};
+#define to_gem_object(obj) (&((struct drm_i915_gem_object *)(obj))->base)
-#define to_intel_bo(x) __containerof(x, struct drm_i915_gem_object, base)
+#define to_intel_bo(x) container_of(x, struct drm_i915_gem_object, base)
/**
* Request queue structure.
@@ -979,72 +1145,110 @@ struct drm_i915_gem_request {
struct drm_i915_file_private {
struct {
+ struct mtx lock;
struct list_head request_list;
- struct mtx lck;
} mm;
struct drm_gem_names context_idr;
};
-struct drm_i915_error_state {
- u_int ref;
- u32 eir;
- u32 pgtbl_er;
- u32 ier;
- bool waiting[I915_NUM_RINGS];
- u32 pipestat[I915_MAX_PIPES];
- u32 tail[I915_NUM_RINGS];
- u32 head[I915_NUM_RINGS];
- u32 ipeir[I915_NUM_RINGS];
- u32 ipehr[I915_NUM_RINGS];
- u32 instdone[I915_NUM_RINGS];
- u32 acthd[I915_NUM_RINGS];
- u32 semaphore_mboxes[I915_NUM_RINGS][I915_NUM_RINGS - 1];
- /* our own tracking of ring head and tail */
- u32 cpu_ring_head[I915_NUM_RINGS];
- u32 cpu_ring_tail[I915_NUM_RINGS];
- u32 error; /* gen6+ */
- u32 instpm[I915_NUM_RINGS];
- u32 instps[I915_NUM_RINGS];
- u32 instdone1;
- u32 seqno[I915_NUM_RINGS];
- u64 bbaddr;
- u32 fault_reg[I915_NUM_RINGS];
- u32 done_reg;
- u32 faddr[I915_NUM_RINGS];
- u64 fence[I915_MAX_NUM_FENCES];
- struct timeval time;
- struct drm_i915_error_ring {
- struct drm_i915_error_object {
- int page_count;
- u32 gtt_offset;
- u32 *pages[0];
- } *ringbuffer, *batchbuffer;
- struct drm_i915_error_request {
- long jiffies;
- u32 seqno;
- u32 tail;
- } *requests;
- int num_requests;
- } ring[I915_NUM_RINGS];
- struct drm_i915_error_buffer {
- u32 size;
- u32 name;
- u32 seqno;
- u32 gtt_offset;
- u32 read_domains;
- u32 write_domain;
- s32 fence_reg:I915_MAX_NUM_FENCE_BITS;
- s32 pinned:2;
- u32 tiling:2;
- u32 dirty:1;
- u32 purgeable:1;
- s32 ring:4;
- u32 cache_level:2;
- } *active_bo, *pinned_bo;
- u32 active_bo_count, pinned_bo_count;
- struct intel_overlay_error_state *overlay;
- struct intel_display_error_state *display;
-};
+#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info)
+
+#define IS_I830(dev) ((dev)->pci_device == 0x3577)
+#define IS_845G(dev) ((dev)->pci_device == 0x2562)
+#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
+#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
+#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
+#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
+#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
+#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
+#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
+#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
+#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
+#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
+#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
+#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011)
+#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview)
+#define IS_G33(dev) (INTEL_INFO(dev)->is_g33)
+#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
+#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
+#define IS_IVYBRIDGE(dev) (INTEL_INFO(dev)->is_ivybridge)
+#define IS_IVB_GT1(dev) ((dev)->pci_device == 0x0156 || \
+ (dev)->pci_device == 0x0152 || \
+ (dev)->pci_device == 0x015a)
+#define IS_SNB_GT1(dev) ((dev)->pci_device == 0x0102 || \
+ (dev)->pci_device == 0x0106 || \
+ (dev)->pci_device == 0x010A)
+#define IS_VALLEYVIEW(dev) (INTEL_INFO(dev)->is_valleyview)
+#define IS_HASWELL(dev) (INTEL_INFO(dev)->is_haswell)
+#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
+#define IS_ULT(dev) (IS_HASWELL(dev) && \
+ ((dev)->pci_device & 0xFF00) == 0x0A00)
+
+/*
+ * The genX designation typically refers to the render engine, so render
+ * capability related checks should use IS_GEN, while display and other checks
+ * have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular
+ * chips, etc.).
+ */
+#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
+#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
+#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
+#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
+#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
+#define IS_GEN7(dev) (INTEL_INFO(dev)->gen == 7)
+
+#define HAS_BSD(dev) (INTEL_INFO(dev)->has_bsd_ring)
+#define HAS_BLT(dev) (INTEL_INFO(dev)->has_blt_ring)
+#define HAS_LLC(dev) (INTEL_INFO(dev)->has_llc)
+#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
+
+#define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->gen >= 6)
+#define HAS_ALIASING_PPGTT(dev) (INTEL_INFO(dev)->gen >=6 && !IS_VALLEYVIEW(dev))
+
+#define HAS_OVERLAY(dev) (INTEL_INFO(dev)->has_overlay)
+#define OVERLAY_NEEDS_PHYSICAL(dev) (INTEL_INFO(dev)->overlay_needs_physical)
+
+/* Early gen2 have a totally busted CS tlb and require pinned batches. */
+#define HAS_BROKEN_CS_TLB(dev) (IS_I830(dev) || IS_845G(dev))
+
+/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
+ * rows, which changed the alignment requirements and fence programming.
+ */
+#define HAS_128_BYTE_Y_TILING(dev) (!IS_GEN2(dev) && !(IS_I915G(dev) || \
+ IS_I915GM(dev)))
+#define SUPPORTS_DIGITAL_OUTPUTS(dev) (!IS_GEN2(dev) && !IS_PINEVIEW(dev))
+#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_GEN5(dev))
+#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_GEN5(dev))
+#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
+#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
+#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
+/* dsparb controlled by hw only */
+#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
+
+#define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2)
+#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
+#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
+
+#define HAS_PIPE_CONTROL(dev) (INTEL_INFO(dev)->gen >= 5)
+
+#define INTEL_PCH_DEVICE_ID_MASK 0xff00
+#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
+#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
+#define INTEL_PCH_PPT_DEVICE_ID_TYPE 0x1e00
+#define INTEL_PCH_LPT_DEVICE_ID_TYPE 0x8c00
+#define INTEL_PCH_LPT_LP_DEVICE_ID_TYPE 0x9c00
+
+#define INTEL_PCH_TYPE(dev) (((struct drm_i915_private *)(dev)->dev_private)->pch_type)
+#define HAS_PCH_LPT(dev) (INTEL_PCH_TYPE(dev) == PCH_LPT)
+#define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
+#define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
+#define HAS_PCH_SPLIT(dev) (INTEL_PCH_TYPE(dev) != PCH_NONE)
+
+#define HAS_FORCE_WAKE(dev) (INTEL_INFO(dev)->has_force_wake)
+
+#define HAS_L3_GPU_CACHE(dev) (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
+
+#define GT_FREQUENCY_MULTIPLIER 50
/**
* RC6 is a special power stage which allows the GPU to enter an very
@@ -1067,45 +1271,39 @@ struct drm_i915_error_state {
#define INTEL_RC6p_ENABLE (1<<1)
#define INTEL_RC6pp_ENABLE (1<<2)
-extern int intel_iommu_enabled;
extern struct drm_ioctl_desc i915_ioctls[];
+extern int i915_max_ioctl;
+extern unsigned int i915_fbpercrtc __always_unused;
+extern int i915_panel_ignore_lid __read_mostly;
+extern unsigned int i915_powersave __read_mostly;
+extern int i915_semaphores __read_mostly;
+extern unsigned int i915_lvds_downclock __read_mostly;
+extern int i915_lvds_channel_mode __read_mostly;
+extern int i915_panel_use_ssc __read_mostly;
+extern int i915_vbt_sdvo_panel_type __read_mostly;
+extern int i915_enable_rc6 __read_mostly;
+extern int i915_enable_fbc __read_mostly;
+extern int i915_enable_hangcheck __read_mostly;
+extern int i915_enable_ppgtt __read_mostly;
+extern unsigned int i915_preliminary_hw_support __read_mostly;
+
extern struct drm_driver i915_driver_info;
extern struct cdev_pager_ops i915_gem_pager_ops;
-extern unsigned int i915_fbpercrtc;
-extern int i915_panel_ignore_lid;
-extern int i915_panel_invert_brightness;
-extern unsigned int i915_powersave;
-extern int i915_prefault_disable;
-extern int i915_semaphores;
-extern unsigned int i915_lvds_downclock;
-extern int i915_lvds_channel_mode;
-extern int i915_panel_use_ssc;
-extern int i915_vbt_sdvo_panel_type;
-extern int i915_enable_rc6;
-extern int i915_enable_fbc;
-extern int i915_enable_ppgtt;
-extern int i915_enable_hangcheck;
+extern int intel_iommu_gfx_mapped;
const struct intel_device_info *i915_get_device_id(int device);
-int i915_reset(struct drm_device *dev);
-extern int intel_gpu_reset(struct drm_device *dev);
-
/* i915_debug.c */
int i915_sysctl_init(struct drm_device *dev, struct sysctl_ctx_list *ctx,
struct sysctl_oid *top);
void i915_sysctl_cleanup(struct drm_device *dev);
+extern int i915_suspend(struct drm_device *dev, pm_message_t state);
+extern int i915_resume(struct drm_device *dev);
extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
/* i915_dma.c */
-int i915_batchbuffer(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
-int i915_cmdbuffer(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
-int i915_getparam(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
void i915_update_dri1_breadcrumb(struct drm_device *dev);
extern void i915_kernel_lost_context(struct drm_device * dev);
extern int i915_driver_load(struct drm_device *, unsigned long flags);
@@ -1117,35 +1315,54 @@ extern void i915_driver_preclose(struct drm_device *dev,
extern void i915_driver_postclose(struct drm_device *dev,
struct drm_file *file_priv);
extern int i915_driver_device_is_agp(struct drm_device * dev);
+#ifdef CONFIG_COMPAT
extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg);
+#endif
extern int i915_emit_box(struct drm_device *dev,
struct drm_clip_rect *box,
int DR1, int DR4);
-unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
-unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
-void i915_update_gfx_val(struct drm_i915_private *dev_priv);
-unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
-unsigned long i915_read_mch_val(void);
-bool i915_gpu_raise(void);
-bool i915_gpu_lower(void);
-bool i915_gpu_busy(void);
-bool i915_gpu_turbo_disable(void);
+extern int intel_gpu_reset(struct drm_device *dev);
+extern int i915_reset(struct drm_device *dev);
+extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
+extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
+extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
+extern void i915_update_gfx_val(struct drm_i915_private *dev_priv);
-/* i915_irq.c */
+extern int i915_batchbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int i915_cmdbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
extern int i915_irq_emit(struct drm_device *dev, void *data,
struct drm_file *file_priv);
-extern void intel_irq_init(struct drm_device *dev);
+extern int i915_getparam(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
-void intel_enable_asle(struct drm_device *dev);
-void i915_hangcheck_elapsed(void *context);
+extern void intel_console_resume(void *context, int pending);
+
+/* i915_irq.c */
+void i915_hangcheck_elapsed(void *data);
void i915_handle_error(struct drm_device *dev, bool wedged);
+
+extern void intel_irq_init(struct drm_device *dev);
+extern void intel_gt_init(struct drm_device *dev);
+extern void intel_gt_reset(struct drm_device *dev);
+
void i915_error_state_free(struct drm_i915_error_state *error);
-void i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
-void i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
+void
+i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
+
+void
+i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
-void i915_destroy_error_state(struct drm_device *dev);
+void intel_enable_asle(struct drm_device *dev);
+
+//#ifdef CONFIG_DEBUG_FS
+extern void i915_destroy_error_state(struct drm_device *dev);
+//#else
+//#define i915_destroy_error_state(x)
+//#endif
/* i915_gem.c */
int i915_gem_init_ioctl(struct drm_device *dev, void *data,
@@ -1167,13 +1384,17 @@ int i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
int i915_gem_execbuffer(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_execbuffer2(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
+ struct drm_file *file_priv);
int i915_gem_pin_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_unpin_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_busy_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
+int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file);
+int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file);
int i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
@@ -1188,16 +1409,64 @@ int i915_gem_get_tiling(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
+int i915_gem_wait_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
void i915_gem_load(struct drm_device *dev);
-void i915_gem_unload(struct drm_device *dev);
int i915_gem_init_object(struct drm_gem_object *obj);
+void i915_gem_object_init(struct drm_i915_gem_object *obj,
+ const struct drm_i915_gem_object_ops *ops);
+struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
+ size_t size);
void i915_gem_free_object(struct drm_gem_object *obj);
-int i915_gem_object_pin(struct drm_i915_gem_object *obj, uint32_t alignment,
- bool map_and_fenceable);
+int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj,
+ uint32_t alignment,
+ bool map_and_fenceable,
+ bool nonblocking);
void i915_gem_object_unpin(struct drm_i915_gem_object *obj);
-int i915_gem_object_unbind(struct drm_i915_gem_object *obj);
+int __must_check i915_gem_object_unbind(struct drm_i915_gem_object *obj);
+void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
void i915_gem_lastclose(struct drm_device *dev);
+
+int __must_check i915_gem_object_get_pages(struct drm_i915_gem_object *obj);
uint32_t i915_get_gem_seqno(struct drm_device *dev);
+static inline void i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
+{
+ /* KASSERT(obj->pages != NULL, ("pin and NULL pages")); */
+ obj->pages_pin_count++;
+}
+
+static inline void i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
+{
+ KASSERT(obj->pages_pin_count != 0, ("zero pages_pin_count"));
+ obj->pages_pin_count--;
+}
+
+int __must_check i915_mutex_lock_interruptible(struct drm_device *dev);
+int i915_gem_object_sync(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *to);
+void i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring);
+
+int i915_gem_dumb_create(struct drm_file *file_priv,
+ struct drm_device *dev,
+ struct drm_mode_create_dumb *args);
+int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
+ uint32_t handle, uint64_t *offset);
+int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
+ uint32_t handle);
+/**
+ * Returns true if seq1 is later than seq2.
+ */
+static inline bool
+i915_seqno_passed(uint32_t seq1, uint32_t seq2)
+{
+ return (int32_t)(seq1 - seq2) >= 0;
+}
+
+extern int i915_gem_get_seqno(struct drm_device *dev, u32 *seqno);
+
+int __must_check i915_gem_object_get_fence(struct drm_i915_gem_object *obj);
+int __must_check i915_gem_object_put_fence(struct drm_i915_gem_object *obj);
static inline bool
i915_gem_object_pin_fence(struct drm_i915_gem_object *obj)
@@ -1221,46 +1490,66 @@ i915_gem_object_unpin_fence(struct drm_i915_gem_object *obj)
void i915_gem_retire_requests(struct drm_device *dev);
void i915_gem_retire_requests_ring(struct intel_ring_buffer *ring);
+int __must_check i915_gem_check_wedge(struct drm_i915_private *dev_priv,
+ bool interruptible);
+
+void i915_gem_reset(struct drm_device *dev);
void i915_gem_clflush_object(struct drm_i915_gem_object *obj);
-struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
- size_t size);
-uint32_t i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
- uint32_t size, int tiling_mode);
-int i915_mutex_lock_interruptible(struct drm_device *dev);
-int i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj,
- bool write);
-int i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj,
- bool write);
-int i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
- u32 alignment, struct intel_ring_buffer *pipelined);
-void i915_gem_object_unpin_from_display_plane(struct drm_i915_gem_object *obj);
-int i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj);
-int i915_gem_flush_ring(struct intel_ring_buffer *ring,
- uint32_t invalidate_domains, uint32_t flush_domains);
-void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
-int i915_gem_object_sync(struct drm_i915_gem_object *obj,
- struct intel_ring_buffer *to);
-int i915_gem_object_put_fence(struct drm_i915_gem_object *obj);
-int i915_gem_idle(struct drm_device *dev);
-int i915_gem_init(struct drm_device *dev);
-int i915_gem_init_hw(struct drm_device *dev);
+int __must_check i915_gem_object_set_domain(struct drm_i915_gem_object *obj,
+ uint32_t read_domains,
+ uint32_t write_domain);
+int __must_check i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj);
+int __must_check i915_gem_init(struct drm_device *dev);
+int __must_check i915_gem_init_hw(struct drm_device *dev);
+void i915_gem_l3_remap(struct drm_device *dev);
void i915_gem_init_swizzling(struct drm_device *dev);
void i915_gem_init_ppgtt(struct drm_device *dev);
void i915_gem_cleanup_ringbuffer(struct drm_device *dev);
-int i915_gpu_idle(struct drm_device *dev);
-void i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
- struct intel_ring_buffer *ring, uint32_t seqno);
-int i915_add_request(struct intel_ring_buffer *ring, struct drm_file *file,
- struct drm_i915_gem_request *request);
-int i915_gem_object_get_fence(struct drm_i915_gem_object *obj);
-void i915_gem_reset(struct drm_device *dev);
-int i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno);
-int i915_gem_mmap(struct drm_device *dev, uint64_t offset, int prot);
+int __must_check i915_gpu_idle(struct drm_device *dev);
+int __must_check i915_gem_idle(struct drm_device *dev);
+int i915_add_request(struct intel_ring_buffer *ring,
+ struct drm_file *file,
+ u32 *seqno);
+int __must_check i915_wait_seqno(struct intel_ring_buffer *ring,
+ uint32_t seqno);
int i915_gem_fault(struct drm_device *dev, uint64_t offset, int prot,
uint64_t *phys);
+int __must_check
+i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj,
+ bool write);
+int __must_check
+i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write);
+int __must_check
+i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
+ u32 alignment,
+ struct intel_ring_buffer *pipelined);
+void i915_gem_object_unpin_from_display_plane(struct drm_i915_gem_object *obj);
+int i915_gem_attach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj,
+ int id,
+ int align);
+void i915_gem_detach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj);
+void i915_gem_free_all_phys_object(struct drm_device *dev);
void i915_gem_release(struct drm_device *dev, struct drm_file *file);
+
+uint32_t
+i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
+ uint32_t size,
+ int tiling_mode);
+
int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
- enum i915_cache_level cache_level);
+ enum i915_cache_level cache_level);
+
+#ifdef FREEBSD_WIP
+struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
+ struct dma_buf *dma_buf);
+
+struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
+ struct drm_gem_object *gem_obj, int flags);
+#endif /* FREEBSD_WIP */
+
+int i915_gem_mmap(struct drm_device *dev, uint64_t offset, int prot);
/* i915_gem_context.c */
void i915_gem_context_init(struct drm_device *dev);
@@ -1273,18 +1562,44 @@ int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
struct drm_file *file);
-void i915_gem_free_all_phys_object(struct drm_device *dev);
-void i915_gem_detach_phys_object(struct drm_device *dev,
- struct drm_i915_gem_object *obj);
-int i915_gem_attach_phys_object(struct drm_device *dev,
- struct drm_i915_gem_object *obj, int id, int align);
+/* i915_gem_gtt.c */
+int __must_check i915_gem_init_aliasing_ppgtt(struct drm_device *dev);
+void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev);
+void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level);
+void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj);
-int i915_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
- struct drm_mode_create_dumb *args);
-int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
- uint32_t handle, uint64_t *offset);
-int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
- uint32_t handle);
+void i915_gem_restore_gtt_mappings(struct drm_device *dev);
+int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
+void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level);
+void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj);
+void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj);
+void i915_gem_init_global_gtt(struct drm_device *dev,
+ unsigned long start,
+ unsigned long mappable_end,
+ unsigned long end);
+int i915_gem_gtt_init(struct drm_device *dev);
+void i915_gem_gtt_fini(struct drm_device *dev);
+static inline void i915_gem_chipset_flush(struct drm_device *dev)
+{
+ if (INTEL_INFO(dev)->gen < 6)
+ intel_gtt_chipset_flush();
+}
+
+/* i915_gem_evict.c */
+int __must_check i915_gem_evict_something(struct drm_device *dev, int min_size,
+ unsigned alignment,
+ unsigned cache_level,
+ bool mappable,
+ bool nonblock);
+int i915_gem_evict_everything(struct drm_device *dev);
+
+/* i915_gem_stolen.c */
+int i915_gem_init_stolen(struct drm_device *dev);
+void i915_gem_cleanup_stolen(struct drm_device *dev);
/* i915_gem_tiling.c */
void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
@@ -1293,56 +1608,62 @@ void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj);
void i915_gem_object_do_bit_17_swizzle_page(struct drm_i915_gem_object *obj,
struct vm_page *m);
-/* i915_gem_evict.c */
-int i915_gem_evict_something(struct drm_device *dev, int min_size,
- unsigned alignment, bool mappable);
-int i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only);
-
-/* i915_gem_stolen.c */
-int i915_gem_init_stolen(struct drm_device *dev);
-void i915_gem_cleanup_stolen(struct drm_device *dev);
+/* i915_gem_debug.c */
+void i915_gem_dump_object(struct drm_i915_gem_object *obj, int len,
+ const char *where, uint32_t mark);
+#if WATCH_LISTS
+int i915_verify_lists(struct drm_device *dev);
+#else
+#define i915_verify_lists(dev) 0
+#endif
+void i915_gem_object_check_coherency(struct drm_i915_gem_object *obj,
+ int handle);
+void i915_gem_dump_object(struct drm_i915_gem_object *obj, int len,
+ const char *where, uint32_t mark);
/* i915_suspend.c */
extern int i915_save_state(struct drm_device *dev);
extern int i915_restore_state(struct drm_device *dev);
-/* intel_iic.c */
+/* intel_i2c.c */
extern int intel_setup_gmbus(struct drm_device *dev);
extern void intel_teardown_gmbus(struct drm_device *dev);
-extern void intel_gmbus_set_speed(device_t idev, int speed);
-extern void intel_gmbus_force_bit(device_t idev, bool force_bit);
-extern void intel_iic_reset(struct drm_device *dev);
static inline bool intel_gmbus_is_port_valid(unsigned port)
{
return (port >= GMBUS_PORT_SSC && port <= GMBUS_PORT_DPD);
}
-extern device_t intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
- unsigned port);
+
+extern device_t intel_gmbus_get_adapter(
+ struct drm_i915_private *dev_priv, unsigned port);
+extern void intel_gmbus_set_speed(device_t idev, int speed);
+extern void intel_gmbus_force_bit(device_t idev, bool force_bit);
+extern bool intel_gmbus_is_forced_bit(device_t adapter);
+extern void intel_i2c_reset(struct drm_device *dev);
/* intel_opregion.c */
-int intel_opregion_setup(struct drm_device *dev);
+extern int intel_opregion_setup(struct drm_device *dev);
+#ifdef CONFIG_ACPI
extern void intel_opregion_init(struct drm_device *dev);
extern void intel_opregion_fini(struct drm_device *dev);
extern void intel_opregion_asle_intr(struct drm_device *dev);
extern void intel_opregion_gse_intr(struct drm_device *dev);
extern void intel_opregion_enable_asle(struct drm_device *dev);
+#else
+static inline void intel_opregion_init(struct drm_device *dev) { return; }
+static inline void intel_opregion_fini(struct drm_device *dev) { return; }
+static inline void intel_opregion_asle_intr(struct drm_device *dev) { return; }
+static inline void intel_opregion_gse_intr(struct drm_device *dev) { return; }
+static inline void intel_opregion_enable_asle(struct drm_device *dev) { return; }
+#endif
-/* i915_gem_gtt.c */
-int i915_gem_init_aliasing_ppgtt(struct drm_device *dev);
-void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev);
-void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
- struct drm_i915_gem_object *obj, enum i915_cache_level cache_level);
-void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
- struct drm_i915_gem_object *obj);
-
-void i915_gem_restore_gtt_mappings(struct drm_device *dev);
-int i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
-void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
- enum i915_cache_level cache_level);
-void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj);
-void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj);
-int i915_gem_init_global_gtt(struct drm_device *dev, unsigned long start,
- unsigned long mappable_end, unsigned long end);
+/* intel_acpi.c */
+#ifdef CONFIG_ACPI
+extern void intel_register_dsm_handler(void);
+extern void intel_unregister_dsm_handler(void);
+#else
+static inline void intel_register_dsm_handler(void) { return; }
+static inline void intel_unregister_dsm_handler(void) { return; }
+#endif /* CONFIG_ACPI */
/* modesetting */
extern void intel_modeset_init_hw(struct drm_device *dev);
@@ -1350,34 +1671,31 @@ extern void intel_modeset_init(struct drm_device *dev);
extern void intel_modeset_gem_init(struct drm_device *dev);
extern void intel_modeset_cleanup(struct drm_device *dev);
extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
+extern void intel_modeset_setup_hw_state(struct drm_device *dev,
+ bool force_restore);
+extern bool intel_fbc_enabled(struct drm_device *dev);
extern void intel_disable_fbc(struct drm_device *dev);
extern bool ironlake_set_drps(struct drm_device *dev, u8 val);
-extern void ironlake_init_pch_refclk(struct drm_device *dev);
-extern void ironlake_enable_rc6(struct drm_device *dev);
+extern void intel_init_pch_refclk(struct drm_device *dev);
extern void gen6_set_rps(struct drm_device *dev, u8 val);
extern void intel_detect_pch(struct drm_device *dev);
extern int intel_trans_dp_port_sel(struct drm_crtc *crtc);
-/* IPS */
-extern void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
-extern void intel_gpu_ips_teardown(void);
+extern int intel_enable_rc6(const struct drm_device *dev);
extern bool i915_semaphore_is_enabled(struct drm_device *dev);
-extern void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
-extern void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv);
-extern void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
-extern void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv);
-
-extern void vlv_force_wake_get(struct drm_i915_private *dev_priv);
-extern void vlv_force_wake_put(struct drm_i915_private *dev_priv);
-
-extern struct intel_overlay_error_state *intel_overlay_capture_error_state(
- struct drm_device *dev);
-extern void intel_overlay_print_error_state(struct sbuf *m,
- struct intel_overlay_error_state *error);
-extern struct intel_display_error_state *intel_display_capture_error_state(
- struct drm_device *dev);
+int i915_reg_read_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file);
+
+/* overlay */
+//#ifdef CONFIG_DEBUG_FS
+extern struct intel_overlay_error_state *intel_overlay_capture_error_state(struct drm_device *dev);
+extern void intel_overlay_print_error_state(struct sbuf *m, struct intel_overlay_error_state *error);
+
+extern struct intel_display_error_state *intel_display_capture_error_state(struct drm_device *dev);
extern void intel_display_print_error_state(struct sbuf *m,
- struct drm_device *dev, struct intel_display_error_state *error);
+ struct drm_device *dev,
+ struct intel_display_error_state *error);
+//#endif
static inline void
trace_i915_reg_rw(boolean_t rw, int reg, uint64_t val, int sz)
@@ -1394,6 +1712,9 @@ void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
+int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u8 mbox, u32 *val);
+int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u8 mbox, u32 val);
+
#define __i915_read(x, y) \
u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
@@ -1431,143 +1752,6 @@ __i915_write(64, 64)
#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
-#define I915_VERBOSE 0
-
-/**
- * Reads a dword out of the status page, which is written to from the command
- * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
- * MI_STORE_DATA_IMM.
- *
- * The following dwords have a reserved meaning:
- * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
- * 0x04: ring 0 head pointer
- * 0x05: ring 1 head pointer (915-class)
- * 0x06: ring 2 head pointer (915-class)
- * 0x10-0x1b: Context status DWords (GM45)
- * 0x1f: Last written status offset. (GM45)
- *
- * The area from dword 0x20 to 0x3ff is available for driver usage.
- */
-#define I915_GEM_HWS_INDEX 0x20
-
-#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info)
-
-#define IS_I830(dev) ((dev)->pci_device == 0x3577)
-#define IS_845G(dev) ((dev)->pci_device == 0x2562)
-#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
-#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
-#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
-#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
-#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
-#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
-#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
-#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
-#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
-#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
-#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
-#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011)
-#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview)
-#define IS_G33(dev) (INTEL_INFO(dev)->is_g33)
-#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
-#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
-#define IS_IVYBRIDGE(dev) (INTEL_INFO(dev)->is_ivybridge)
-#define IS_VALLEYVIEW(dev) (INTEL_INFO(dev)->is_valleyview)
-#define IS_HASWELL(dev) (INTEL_INFO(dev)->is_haswell)
-#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
-
-/* XXXKIB LEGACY */
-#define IS_I965G(dev) ((dev)->pci_device == 0x2972 || \
- (dev)->pci_device == 0x2982 || \
- (dev)->pci_device == 0x2992 || \
- (dev)->pci_device == 0x29A2 || \
- (dev)->pci_device == 0x2A02 || \
- (dev)->pci_device == 0x2A12 || \
- (dev)->pci_device == 0x2A42 || \
- (dev)->pci_device == 0x2E02 || \
- (dev)->pci_device == 0x2E12 || \
- (dev)->pci_device == 0x2E22 || \
- (dev)->pci_device == 0x2E32)
-
-#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02)
-
-#define IS_IGDG(dev) ((dev)->pci_device == 0xa001)
-#define IS_IGDGM(dev) ((dev)->pci_device == 0xa011)
-#define IS_IGD(dev) (IS_IGDG(dev) || IS_IGDGM(dev))
-
-#define IS_I9XX(dev) (IS_I915G(dev) || IS_I915GM(dev) || IS_I945G(dev) || \
- IS_I945GM(dev) || IS_I965G(dev) || IS_G33(dev))
-/* XXXKIB LEGACY END */
-
-#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
-#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
-#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
-#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
-#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
-#define IS_GEN7(dev) (INTEL_INFO(dev)->gen == 7)
-
-#define HAS_BSD(dev) (INTEL_INFO(dev)->has_bsd_ring)
-#define HAS_BLT(dev) (INTEL_INFO(dev)->has_blt_ring)
-#define HAS_LLC(dev) (INTEL_INFO(dev)->has_llc)
-#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
-
-#define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->gen >= 6)
-#define HAS_ALIASING_PPGTT(dev) (INTEL_INFO(dev)->gen >=6)
-
-#define HAS_OVERLAY(dev) (INTEL_INFO(dev)->has_overlay)
-#define OVERLAY_NEEDS_PHYSICAL(dev) (INTEL_INFO(dev)->overlay_needs_physical)
-
-/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
- * rows, which changed the alignment requirements and fence programming.
- */
-#define HAS_128_BYTE_Y_TILING(dev) (!IS_GEN2(dev) && !(IS_I915G(dev) || \
- IS_I915GM(dev)))
-#define SUPPORTS_DIGITAL_OUTPUTS(dev) (!IS_GEN2(dev) && !IS_PINEVIEW(dev))
-#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_GEN5(dev))
-#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_GEN5(dev))
-#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
-#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
-#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
-/* dsparb controlled by hw only */
-#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
-
-#define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2)
-#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
-#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
-
-#define HAS_PCH_SPLIT(dev) (INTEL_INFO(dev)->has_pch_split)
-#define HAS_PIPE_CONTROL(dev) (INTEL_INFO(dev)->gen >= 5)
-
-#define INTEL_PCH_TYPE(dev) (((struct drm_i915_private *)(dev)->dev_private)->pch_type)
-#define HAS_PCH_LPT(dev) (INTEL_PCH_TYPE(dev) == PCH_LPT)
-#define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
-#define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
-
-#define PRIMARY_RINGBUFFER_SIZE (128*1024)
-
-static inline bool
-i915_seqno_passed(uint32_t seq1, uint32_t seq2)
-{
-
- return ((int32_t)(seq1 - seq2) >= 0);
-}
-
-static inline void i915_gem_chipset_flush(struct drm_device *dev)
-{
- if (INTEL_INFO(dev)->gen < 6)
- intel_gtt_chipset_flush();
-}
-
-static inline void i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
-{
- /* KASSERT(obj->pages != NULL, ("pin and NULL pages")); */
- obj->pages_pin_count++;
-}
-static inline void i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
-{
- KASSERT(obj->pages_pin_count != 0, ("zero pages_pin_count"));
- obj->pages_pin_count--;
-}
-
u32 i915_gem_next_request_seqno(struct intel_ring_buffer *ring);
#endif
diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c
index 2d97f74..bece6b2 100644
--- a/sys/dev/drm2/i915/i915_gem.c
+++ b/sys/dev/drm2/i915/i915_gem.c
@@ -55,11 +55,9 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/i915/intel_ringbuffer.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
@@ -70,19 +68,12 @@ __FBSDID("$FreeBSD$");
#include <machine/md_var.h>
-#define __user
-#define __force
-#define __iomem
-#define __must_check
-#define to_user_ptr(x) ((void *)(uintptr_t)(x))
-#define offset_in_page(x) ((x) & PAGE_MASK)
-#define page_to_phys(x) VM_PAGE_TO_PHYS(x)
-
static void i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj);
static void i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj);
static __must_check int i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
unsigned alignment,
- bool map_and_fenceable);
+ bool map_and_fenceable,
+ bool nonblocking);
static int i915_gem_phys_pwrite(struct drm_device *dev,
struct drm_i915_gem_object *obj,
struct drm_i915_gem_pwrite *args,
@@ -94,13 +85,13 @@ static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
struct drm_i915_fence_reg *fence,
bool enable);
-static void i915_gem_lowmem(void *arg);
+static void i915_gem_inactive_shrink(void *);
+static long i915_gem_purge(struct drm_i915_private *dev_priv, long target);
+static void i915_gem_shrink_all(struct drm_i915_private *dev_priv);
static void i915_gem_object_truncate(struct drm_i915_gem_object *obj);
static int i915_gem_object_get_pages_range(struct drm_i915_gem_object *obj,
off_t start, off_t end);
-static void i915_gem_object_put_pages_range(struct drm_i915_gem_object *obj,
- off_t start, off_t end);
static vm_page_t i915_gem_wire_page(vm_object_t object, vm_pindex_t pindex,
bool *fresh);
@@ -108,20 +99,6 @@ static vm_page_t i915_gem_wire_page(vm_object_t object, vm_pindex_t pindex,
MALLOC_DEFINE(DRM_I915_GEM, "i915gem", "Allocations from i915 gem");
long i915_gem_wired_pages_cnt;
-static bool cpu_cache_is_coherent(struct drm_device *dev,
- enum i915_cache_level level)
-{
- return HAS_LLC(dev) || level != I915_CACHE_NONE;
-}
-
-static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
-{
- if (!cpu_cache_is_coherent(obj->base.dev, obj->cache_level))
- return true;
-
- return obj->pin_display;
-}
-
static inline void i915_gem_object_fence_lost(struct drm_i915_gem_object *obj)
{
if (obj->tiling_mode)
@@ -153,33 +130,34 @@ static int
i915_gem_wait_for_error(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct completion *x = &dev_priv->error_completion;
int ret;
- if (!atomic_load_acq_int(&dev_priv->mm.wedged))
+ if (!atomic_read(&dev_priv->mm.wedged))
return 0;
- mtx_lock(&dev_priv->error_completion_lock);
- while (dev_priv->error_completion == 0) {
- ret = -msleep(&dev_priv->error_completion,
- &dev_priv->error_completion_lock, PCATCH, "915wco", 0);
- if (ret == -ERESTART)
- ret = -ERESTARTSYS;
- if (ret != 0) {
- mtx_unlock(&dev_priv->error_completion_lock);
- return ret;
- }
+ /*
+ * Only wait 10 seconds for the gpu reset to complete to avoid hanging
+ * userspace. If it takes that long something really bad is going on and
+ * we should simply try to bail out and fail as gracefully as possible.
+ */
+ ret = wait_for_completion_interruptible_timeout(x, 10*HZ);
+ if (ret == 0) {
+ DRM_ERROR("Timed out waiting for the gpu reset to complete\n");
+ return -EIO;
+ } else if (ret < 0) {
+ return ret;
}
- mtx_unlock(&dev_priv->error_completion_lock);
- if (atomic_load_acq_int(&dev_priv->mm.wedged)) {
+ if (atomic_read(&dev_priv->mm.wedged)) {
/* GPU is hung, bump the completion count to account for
* the token we just consumed so that we never hit zero and
* end up waiting upon a subsequent completion event that
* will never happen.
*/
- mtx_lock(&dev_priv->error_completion_lock);
- dev_priv->error_completion++;
- mtx_unlock(&dev_priv->error_completion_lock);
+ mtx_lock(&x->lock);
+ x->done++;
+ mtx_unlock(&x->lock);
}
return 0;
}
@@ -196,17 +174,18 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
* interruptible shall it be. might indeed be if dev_lock is
* changed to sx
*/
- ret = -sx_xlock_sig(&dev->dev_struct_lock);
+ ret = sx_xlock_sig(&dev->dev_struct_lock);
if (ret)
- return ret;
+ return -EINTR;
+ WARN_ON(i915_verify_lists(dev));
return 0;
}
static inline bool
i915_gem_object_is_inactive(struct drm_i915_gem_object *obj)
{
- return !obj->active;
+ return obj->gtt_space && !obj->active;
}
int
@@ -214,8 +193,6 @@ i915_gem_init_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
struct drm_i915_gem_init *args = data;
- drm_i915_private_t *dev_priv = dev->dev_private;
- int ret;
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
@@ -224,9 +201,6 @@ i915_gem_init_ioctl(struct drm_device *dev, void *data,
(args->gtt_end | args->gtt_start) & (PAGE_SIZE - 1))
return -EINVAL;
- if (mtx_initialized(&dev_priv->mm.gtt_space.unused_lock))
- return -EBUSY;
-
/* GEM with user mode setting was never supported on ilk and later. */
if (INTEL_INFO(dev)->gen >= 5)
return -ENODEV;
@@ -236,11 +210,11 @@ i915_gem_init_ioctl(struct drm_device *dev, void *data,
* against.
*/
DRM_LOCK(dev);
- ret = i915_gem_init_global_gtt(dev, args->gtt_start,
+ i915_gem_init_global_gtt(dev, args->gtt_start,
args->gtt_end, args->gtt_end);
DRM_UNLOCK(dev);
- return ret;
+ return 0;
}
int
@@ -254,7 +228,7 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
pinned = 0;
DRM_LOCK(dev);
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list)
+ list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list)
if (obj->pin_count)
pinned += obj->gtt_space->size;
DRM_UNLOCK(dev);
@@ -341,79 +315,6 @@ static int i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj)
}
static inline int
-__copy_to_user_inatomic(void __user *to, const void *from, unsigned n)
-{
- return (copyout_nofault(from, to, n) != 0 ? n : 0);
-}
-static inline unsigned long
-__copy_from_user_inatomic_nocache(void *to, const void __user *from,
- unsigned long n)
-{
-
- /*
- * XXXKIB. Equivalent Linux function is implemented using
- * MOVNTI for aligned moves. For unaligned head and tail,
- * normal move is performed. As such, it is not incorrect, if
- * only somewhat slower, to use normal copyin. All uses
- * except shmem_pwrite_fast() have the destination mapped WC.
- */
- return ((copyin_nofault(__DECONST(void *, from), to, n) != 0 ? n : 0));
-}
-static inline int
-fault_in_multipages_readable(const char __user *uaddr, int size)
-{
- char c;
- int ret = 0;
- const char __user *end = uaddr + size - 1;
-
- if (unlikely(size == 0))
- return ret;
-
- while (uaddr <= end) {
- ret = -copyin(uaddr, &c, 1);
- if (ret != 0)
- return -EFAULT;
- uaddr += PAGE_SIZE;
- }
-
- /* Check whether the range spilled into the next page. */
- if (((unsigned long)uaddr & ~PAGE_MASK) ==
- ((unsigned long)end & ~PAGE_MASK)) {
- ret = -copyin(end, &c, 1);
- }
-
- return ret;
-}
-
-static inline int
-fault_in_multipages_writeable(char __user *uaddr, int size)
-{
- int ret = 0;
- char __user *end = uaddr + size - 1;
-
- if (unlikely(size == 0))
- return ret;
-
- /*
- * Writing zeroes into userspace here is OK, because we know that if
- * the zero gets there, we'll be overwriting it.
- */
- while (uaddr <= end) {
- ret = subyte(uaddr, 0);
- if (ret != 0)
- return -EFAULT;
- uaddr += PAGE_SIZE;
- }
-
- /* Check whether the range spilled into the next page. */
- if (((unsigned long)uaddr & ~PAGE_MASK) ==
- ((unsigned long)end & ~PAGE_MASK))
- ret = subyte(end, 0);
-
- return ret;
-}
-
-static inline int
__copy_to_user_swizzled(char __user *cpu_vaddr,
const char *gpu_vaddr, int gpu_offset,
int length)
@@ -511,8 +412,8 @@ shmem_clflush_swizzled_range(char *addr, unsigned long length,
* channels. Lame, but simple and it works. Swizzled
* pwrite/pread is far from a hotpath - current userspace
* doesn't use it at all. */
- start = rounddown2(start, 128);
- end = roundup2(end, 128);
+ start = round_down(start, 128);
+ end = round_up(end, 128);
drm_clflush_virt_range((void *)start, end - start);
} else {
@@ -559,15 +460,16 @@ i915_gem_shmem_pread(struct drm_device *dev,
struct drm_file *file)
{
char __user *user_data;
- ssize_t remain, sremain;
- off_t offset, soffset;
+ ssize_t remain;
+ off_t offset;
int shmem_page_offset, page_length, ret = 0;
int obj_do_bit17_swizzling, page_do_bit17_swizzling;
+ int hit_slowpath = 0;
int prefaulted = 0;
int needs_clflush = 0;
user_data = to_user_ptr(args->data_ptr);
- sremain = remain = args->size;
+ remain = args->size;
obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
@@ -576,19 +478,23 @@ i915_gem_shmem_pread(struct drm_device *dev,
* read domain and manually flush cachelines (if required). This
* optimizes for the case when the gpu will dirty the data
* anyway again before the next pread happens. */
- needs_clflush = !cpu_cache_is_coherent(dev, obj->cache_level);
- ret = i915_gem_object_set_to_gtt_domain(obj, false);
- if (ret)
- return ret;
+ if (obj->cache_level == I915_CACHE_NONE)
+ needs_clflush = 1;
+ if (obj->gtt_space) {
+ ret = i915_gem_object_set_to_gtt_domain(obj, false);
+ if (ret)
+ return ret;
+ }
}
- soffset = offset = args->offset;
- ret = i915_gem_object_get_pages_range(obj, soffset, soffset + sremain);
+ ret = i915_gem_object_get_pages(obj);
if (ret)
return ret;
i915_gem_object_pin_pages(obj);
+ offset = args->offset;
+
VM_OBJECT_WLOCK(obj->base.vm_obj);
for (vm_page_t page = vm_page_find_least(obj->base.vm_obj,
OFF_TO_IDX(offset));; page = vm_page_next(page)) {
@@ -616,9 +522,10 @@ i915_gem_shmem_pread(struct drm_device *dev,
if (ret == 0)
goto next_page;
+ hit_slowpath = 1;
DRM_UNLOCK(dev);
- if (likely(!i915_prefault_disable) && !prefaulted) {
+ if (!prefaulted) {
ret = fault_in_multipages_writeable(user_data, remain);
/* Userspace is tricking us, but we've already clobbered
* its pages with the prefault and promised to write the
@@ -648,7 +555,12 @@ next_page:
out:
i915_gem_object_unpin_pages(obj);
- i915_gem_object_put_pages_range(obj, soffset, soffset + sremain);
+
+ if (hit_slowpath) {
+ /* Fixup: Kill any reinstated backing storage pages */
+ if (obj->madv == __I915_MADV_PURGED)
+ i915_gem_object_truncate(obj);
+ }
return ret;
}
@@ -689,9 +601,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
goto out;
}
-#if 1
- KIB_NOTYET();
-#else
+#ifdef FREEBSD_WIP
/* prime objects have no backing filp to GEM pread/pwrite
* pages from.
*/
@@ -699,7 +609,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
ret = -EINVAL;
goto out;
}
-#endif
+#endif /* FREEBSD_WIP */
CTR3(KTR_DRM, "pread %p %jx %jx", obj, args->offset, args->size);
@@ -717,7 +627,7 @@ unlock:
*/
static inline int
-fast_user_write(struct drm_device *dev,
+fast_user_write(vm_paddr_t mapping_addr,
off_t page_base, int page_offset,
char __user *user_data,
int length)
@@ -726,7 +636,7 @@ fast_user_write(struct drm_device *dev,
void *vaddr;
unsigned long unwritten;
- vaddr_atomic = pmap_mapdev_attr(dev->agp->base + page_base,
+ vaddr_atomic = pmap_mapdev_attr(mapping_addr + page_base,
length, PAT_WRITE_COMBINING);
/* We can use the cpu mem copy function because this is X86. */
vaddr = (char __force*)vaddr_atomic + page_offset;
@@ -746,13 +656,13 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
struct drm_i915_gem_pwrite *args,
struct drm_file *file)
{
+ drm_i915_private_t *dev_priv = dev->dev_private;
ssize_t remain;
off_t offset, page_base;
char __user *user_data;
int page_offset, page_length, ret;
- ret = i915_gem_object_pin(obj, 0, true);
- /* XXXKIB ret = i915_gem_obj_ggtt_pin(obj, 0, true, true); */
+ ret = i915_gem_object_pin(obj, 0, true, true);
if (ret)
goto out;
@@ -786,7 +696,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
* source page isn't available. Return the error and we'll
* retry in the slow path.
*/
- if (fast_user_write(dev, page_base,
+ if (fast_user_write(dev_priv->mm.gtt_base_addr, page_base,
page_offset, user_data, page_length)) {
ret = -EFAULT;
goto out_unpin;
@@ -885,8 +795,8 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
struct drm_i915_gem_pwrite *args,
struct drm_file *file)
{
- ssize_t remain, sremain;
- off_t offset, soffset;
+ ssize_t remain;
+ off_t offset;
char __user *user_data;
int shmem_page_offset, page_length, ret = 0;
int obj_do_bit17_swizzling, page_do_bit17_swizzling;
@@ -895,7 +805,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
int needs_clflush_before = 0;
user_data = to_user_ptr(args->data_ptr);
- sremain = remain = args->size;
+ remain = args->size;
obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
@@ -904,24 +814,27 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
* write domain and manually flush cachelines (if required). This
* optimizes for the case when the gpu will use the data
* right away and we therefore have to clflush anyway. */
- needs_clflush_after = cpu_write_needs_clflush(obj);
- ret = i915_gem_object_set_to_gtt_domain(obj, true);
- if (ret)
- return ret;
+ if (obj->cache_level == I915_CACHE_NONE)
+ needs_clflush_after = 1;
+ if (obj->gtt_space) {
+ ret = i915_gem_object_set_to_gtt_domain(obj, true);
+ if (ret)
+ return ret;
+ }
}
- /* Same trick applies to invalidate partially written cachelines read
- * before writing. */
- if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0)
- needs_clflush_before =
- !cpu_cache_is_coherent(dev, obj->cache_level);
+ /* Same trick applies for invalidate partially written cachelines before
+ * writing. */
+ if (!(obj->base.read_domains & I915_GEM_DOMAIN_CPU)
+ && obj->cache_level == I915_CACHE_NONE)
+ needs_clflush_before = 1;
- soffset = offset = args->offset;
- ret = i915_gem_object_get_pages_range(obj, soffset, soffset + sremain);
+ ret = i915_gem_object_get_pages(obj);
if (ret)
return ret;
i915_gem_object_pin_pages(obj);
+ offset = args->offset;
obj->dirty = 1;
VM_OBJECT_WLOCK(obj->base.vm_obj);
@@ -985,16 +898,14 @@ next_page:
out:
i915_gem_object_unpin_pages(obj);
- i915_gem_object_put_pages_range(obj, soffset, soffset + sremain);
if (hit_slowpath) {
- /*
- * Fixup: Flush cpu caches in case we didn't flush the dirty
- * cachelines in-line while writing and the object moved
- * out of the cpu write domain while we've dropped the lock.
- */
- if (!needs_clflush_after &&
- obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
+ /* Fixup: Kill any reinstated backing storage pages */
+ if (obj->madv == __I915_MADV_PURGED)
+ i915_gem_object_truncate(obj);
+ /* and flush dirty cachelines in case the object isn't in the cpu write
+ * domain anymore. */
+ if (obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
i915_gem_clflush_object(obj);
i915_gem_chipset_flush(dev);
}
@@ -1025,12 +936,10 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
if (!useracc(to_user_ptr(args->data_ptr), args->size, VM_PROT_READ))
return -EFAULT;
- if (likely(!i915_prefault_disable)) {
- ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
- args->size);
- if (ret)
- return -EFAULT;
- }
+ ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
+ args->size);
+ if (ret)
+ return -EFAULT;
ret = i915_mutex_lock_interruptible(dev);
if (ret)
@@ -1049,9 +958,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
goto out;
}
-#if 1
- KIB_NOTYET();
-#else
+#ifdef FREEBSD_WIP
/* prime objects have no backing filp to GEM pread/pwrite
* pages from.
*/
@@ -1059,7 +966,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
ret = -EINVAL;
goto out;
}
-#endif
+#endif /* FREEBSD_WIP */
CTR3(KTR_DRM, "pwrite %p %jx %jx", obj, args->offset, args->size);
@@ -1075,9 +982,9 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
goto out;
}
- if (obj->tiling_mode == I915_TILING_NONE &&
- obj->base.write_domain != I915_GEM_DOMAIN_CPU &&
- cpu_write_needs_clflush(obj)) {
+ if (obj->cache_level == I915_CACHE_NONE &&
+ obj->tiling_mode == I915_TILING_NONE &&
+ obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
ret = i915_gem_gtt_pwrite_fast(dev, obj, args, file);
/* Note that the gtt paths might fail with non-page-backed user
* pointers (e.g. gtt mappings when moving data between
@@ -1094,20 +1001,29 @@ unlock:
return ret;
}
-static int
-i915_gem_check_wedge(struct drm_i915_private *dev_priv)
+int
+i915_gem_check_wedge(struct drm_i915_private *dev_priv,
+ bool interruptible)
{
- DRM_LOCK_ASSERT(dev_priv->dev);
-
- if (atomic_load_acq_int(&dev_priv->mm.wedged) != 0) {
+ if (atomic_read(&dev_priv->mm.wedged)) {
+ struct completion *x = &dev_priv->error_completion;
bool recovery_complete;
/* Give the error handler a chance to run. */
- mtx_lock(&dev_priv->error_completion_lock);
- recovery_complete = (&dev_priv->error_completion) > 0;
- mtx_unlock(&dev_priv->error_completion_lock);
+ mtx_lock(&x->lock);
+ recovery_complete = x->done > 0;
+ mtx_unlock(&x->lock);
- return (recovery_complete ? -EIO : -EAGAIN);
+ /* Non-interruptible callers can't handle -EAGAIN, hence return
+ * -EIO unconditionally for these. */
+ if (!interruptible)
+ return -EIO;
+
+ /* Recovery complete, but still wedged means reset failure. */
+ if (recovery_complete)
+ return -EIO;
+
+ return -EAGAIN;
}
return 0;
@@ -1125,54 +1041,114 @@ i915_gem_check_olr(struct intel_ring_buffer *ring, u32 seqno)
DRM_LOCK_ASSERT(ring->dev);
ret = 0;
- if (seqno == ring->outstanding_lazy_request) {
- struct drm_i915_gem_request *request;
+ if (seqno == ring->outstanding_lazy_request)
+ ret = i915_add_request(ring, NULL, NULL);
- request = malloc(sizeof(*request), DRM_I915_GEM,
- M_WAITOK | M_ZERO);
-
- ret = i915_add_request(ring, NULL, request);
- if (ret != 0) {
- free(request, DRM_I915_GEM);
- return ret;
- }
-
- MPASS(seqno == request->seqno);
- }
return ret;
}
+/**
+ * __wait_seqno - wait until execution of seqno has finished
+ * @ring: the ring expected to report seqno
+ * @seqno: duh!
+ * @interruptible: do an interruptible wait (normally yes)
+ * @timeout: in - how long to wait (NULL forever); out - how much time remaining
+ *
+ * Returns 0 if the seqno was found within the alloted time. Else returns the
+ * errno with remaining time filled in timeout argument.
+ */
static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
- bool interruptible)
+ bool interruptible, struct timespec *timeout)
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
- int ret = 0, flags;
+ struct timespec before, now, wait_time={1,0};
+ sbintime_t timeout_sbt;
+ long end;
+ bool wait_forever = true;
+ int ret, flags;
- if (i915_seqno_passed(ring->get_seqno(ring), seqno))
+ if (i915_seqno_passed(ring->get_seqno(ring, true), seqno))
return 0;
CTR2(KTR_DRM, "request_wait_begin %s %d", ring->name, seqno);
- mtx_lock(&dev_priv->irq_lock);
- if (!ring->irq_get(ring)) {
- mtx_unlock(&dev_priv->irq_lock);
- return -ENODEV;
+ if (timeout != NULL) {
+ wait_time = *timeout;
+ wait_forever = false;
}
+ timeout_sbt = tstosbt(wait_time);
+
+ if (WARN_ON(!ring->irq_get(ring)))
+ return -ENODEV;
+
+ /* Record current time in case interrupted by signal, or wedged * */
+ getrawmonotonic(&before);
+
+#define EXIT_COND \
+ (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \
+ atomic_read(&dev_priv->mm.wedged))
flags = interruptible ? PCATCH : 0;
- while (!i915_seqno_passed(ring->get_seqno(ring), seqno)
- && !atomic_load_acq_int(&dev_priv->mm.wedged) &&
- ret == 0) {
- ret = -msleep(ring, &dev_priv->irq_lock, flags, "915gwr", 0);
- if (ret == -ERESTART)
- ret = -ERESTARTSYS;
- }
- ring->irq_put(ring);
+ mtx_lock(&dev_priv->irq_lock);
+ do {
+ if (EXIT_COND) {
+ end = 1;
+ } else {
+ ret = -msleep_sbt(&ring->irq_queue, &dev_priv->irq_lock, flags,
+ "915gwr", timeout_sbt, 0, 0);
+
+ /*
+ * NOTE Linux<->FreeBSD: Convert msleep_sbt() return
+ * value to something close to wait_event*_timeout()
+ * functions used on Linux.
+ *
+ * >0 -> condition is true (end = time remaining)
+ * =0 -> sleep timed out
+ * <0 -> error (interrupted)
+ *
+ * We fake the remaining time by returning 1. We
+ * compute a proper value later.
+ */
+ if (EXIT_COND)
+ /* We fake a remaining time of 1 tick. */
+ end = 1;
+ else if (ret == -EINTR || ret == -ERESTART)
+ /* Interrupted. */
+ end = -ERESTARTSYS;
+ else
+ /* Timeout. */
+ end = 0;
+ }
+
+ ret = i915_gem_check_wedge(dev_priv, interruptible);
+ if (ret)
+ end = ret;
+ } while (end == 0 && wait_forever);
mtx_unlock(&dev_priv->irq_lock);
- CTR3(KTR_DRM, "request_wait_end %s %d %d", ring->name, seqno, ret);
+ getrawmonotonic(&now);
- return ret;
+ ring->irq_put(ring);
+ CTR3(KTR_DRM, "request_wait_end %s %d %d", ring->name, seqno, end);
+#undef EXIT_COND
+
+ if (timeout) {
+ timespecsub(&now, &before);
+ timespecsub(timeout, &now);
+ }
+
+ switch (end) {
+ case -EIO:
+ case -EAGAIN: /* Wedged */
+ case -ERESTARTSYS: /* Signal */
+ case -ETIMEDOUT: /* Timeout */
+ return (int)end;
+ case 0: /* Timeout */
+ return -ETIMEDOUT;
+ default: /* Completed */
+ WARN_ON(end < 0); /* We're not aware of other errors */
+ return 0;
+ }
}
/**
@@ -1180,15 +1156,17 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
* request and object lists appropriately for that event.
*/
int
-i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno)
+i915_wait_seqno(struct intel_ring_buffer *ring, uint32_t seqno)
{
struct drm_device *dev = ring->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ bool interruptible = dev_priv->mm.interruptible;
int ret;
- KASSERT(seqno != 0, ("Zero seqno"));
+ DRM_LOCK_ASSERT(dev);
+ BUG_ON(seqno == 0);
- ret = i915_gem_check_wedge(dev_priv);
+ ret = i915_gem_check_wedge(dev_priv, interruptible);
if (ret)
return ret;
@@ -1196,11 +1174,7 @@ i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno)
if (ret)
return ret;
- ret = __wait_seqno(ring, seqno, dev_priv->mm.interruptible);
- if (atomic_load_acq_int(&dev_priv->mm.wedged))
- ret = -EAGAIN;
-
- return ret;
+ return __wait_seqno(ring, seqno, interruptible, NULL);
}
/**
@@ -1208,26 +1182,86 @@ i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno)
* safe to unbind from the GTT or access from the CPU.
*/
static __must_check int
-i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj)
+i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj,
+ bool readonly)
{
+ struct intel_ring_buffer *ring = obj->ring;
+ u32 seqno;
int ret;
- KASSERT((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0,
- ("In GPU write domain"));
+ seqno = readonly ? obj->last_write_seqno : obj->last_read_seqno;
+ if (seqno == 0)
+ return 0;
+
+ ret = i915_wait_seqno(ring, seqno);
+ if (ret)
+ return ret;
- CTR5(KTR_DRM, "object_wait_rendering %p %s %x %d %d", obj,
- obj->ring != NULL ? obj->ring->name : "none", obj->gtt_offset,
- obj->active, obj->last_rendering_seqno);
- if (obj->active) {
- ret = i915_wait_request(obj->ring, obj->last_rendering_seqno);
- if (ret != 0)
- return (ret);
- i915_gem_retire_requests_ring(obj->ring);
+ i915_gem_retire_requests_ring(ring);
+
+ /* Manually manage the write flush as we may have not yet
+ * retired the buffer.
+ */
+ if (obj->last_write_seqno &&
+ i915_seqno_passed(seqno, obj->last_write_seqno)) {
+ obj->last_write_seqno = 0;
+ obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;
}
return 0;
}
+/* A nonblocking variant of the above wait. This is a highly dangerous routine
+ * as the object state may change during this call.
+ */
+static __must_check int
+i915_gem_object_wait_rendering__nonblocking(struct drm_i915_gem_object *obj,
+ bool readonly)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = obj->ring;
+ u32 seqno;
+ int ret;
+
+ DRM_LOCK_ASSERT(dev);
+ BUG_ON(!dev_priv->mm.interruptible);
+
+ seqno = readonly ? obj->last_write_seqno : obj->last_read_seqno;
+ if (seqno == 0)
+ return 0;
+
+ ret = i915_gem_check_wedge(dev_priv, true);
+ if (ret)
+ return ret;
+
+ ret = i915_gem_check_olr(ring, seqno);
+ if (ret)
+ return ret;
+
+ DRM_UNLOCK(dev);
+ ret = __wait_seqno(ring, seqno, true, NULL);
+ DRM_LOCK(dev);
+
+ i915_gem_retire_requests_ring(ring);
+
+ /* Manually manage the write flush as we may have not yet
+ * retired the buffer.
+ */
+ if (ret == 0 &&
+ obj->last_write_seqno &&
+ i915_seqno_passed(seqno, obj->last_write_seqno)) {
+ obj->last_write_seqno = 0;
+ obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;
+ }
+
+ return ret;
+}
+
+/**
+ * Called when user space prepares to use an object with the CPU, either
+ * through the mmap ioctl's mapping or a GTT mapping.
+ */
int
i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
@@ -1261,6 +1295,14 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
goto unlock;
}
+ /* Try to flush the object off the GPU without holding the lock.
+ * We will repeat the flush holding the lock in the normal manner
+ * to catch cases where we are gazumped.
+ */
+ ret = i915_gem_object_wait_rendering__nonblocking(obj, !write_domain);
+ if (ret)
+ goto unref;
+
if (read_domains & I915_GEM_DOMAIN_GTT) {
ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
@@ -1274,6 +1316,7 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
}
+unref:
drm_gem_object_unreference(&obj->base);
unlock:
DRM_UNLOCK(dev);
@@ -1334,6 +1377,16 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
if (obj == NULL)
return -ENOENT;
+#ifdef FREEBSD_WIP
+ /* prime objects have no backing filp to GEM mmap
+ * pages from.
+ */
+ if (!obj->filp) {
+ drm_gem_object_unreference_unlocked(obj);
+ return -EINVAL;
+ }
+#endif /* FREEBSD_WIP */
+
error = 0;
if (args->size == 0)
goto out;
@@ -1360,7 +1413,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
args->addr_ptr = (uint64_t)addr;
}
out:
- drm_gem_object_unreference(obj);
+ drm_gem_object_unreference_unlocked(obj);
return (error);
}
@@ -1369,6 +1422,34 @@ i915_gem_pager_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot,
vm_ooffset_t foff, struct ucred *cred, u_short *color)
{
+ /*
+ * NOTE Linux<->FreeBSD: drm_gem_mmap_single() takes care of
+ * calling drm_gem_object_reference(). That's why we don't
+ * do this here. i915_gem_pager_dtor(), below, will call
+ * drm_gem_object_unreference().
+ *
+ * On Linux, drm_gem_vm_open() references the object because
+ * it's called the mapping is copied. drm_gem_vm_open() is not
+ * called when the mapping is created. So the possible sequences
+ * are:
+ * 1. drm_gem_mmap(): ref++
+ * 2. drm_gem_vm_close(): ref--
+ *
+ * 1. drm_gem_mmap(): ref++
+ * 2. drm_gem_vm_open(): ref++ (for the copied vma)
+ * 3. drm_gem_vm_close(): ref-- (for the copied vma)
+ * 4. drm_gem_vm_close(): ref-- (for the initial vma)
+ *
+ * On FreeBSD, i915_gem_pager_ctor() is called once during the
+ * creation of the mapping. No callback is called when the
+ * mapping is shared during a fork(). i915_gem_pager_dtor() is
+ * called when the last reference to the mapping is dropped. So
+ * the only sequence is:
+ * 1. drm_gem_mmap_single(): ref++
+ * 2. i915_gem_pager_ctor(): <noop>
+ * 3. i915_gem_pager_dtor(): ref--
+ */
+
*color = 0; /* XXXKIB */
return (0);
}
@@ -1396,23 +1477,19 @@ static int
i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
vm_page_t *mres)
{
- struct drm_gem_object *gem_obj;
- struct drm_i915_gem_object *obj;
- struct drm_device *dev;
- drm_i915_private_t *dev_priv;
+ struct drm_gem_object *gem_obj = vm_obj->handle;
+ struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
vm_page_t page, oldpage;
- int cause, ret;
- bool write;
-
- gem_obj = vm_obj->handle;
- obj = to_intel_bo(gem_obj);
- dev = obj->base.dev;
- dev_priv = dev->dev_private;
-#if 0
- write = (prot & VM_PROT_WRITE) != 0;
+ int ret = 0;
+#ifdef FREEBSD_WIP
+ bool write = (prot & VM_PROT_WRITE) != 0;
#else
- write = true;
-#endif
+ bool write = true;
+#endif /* FREEBSD_WIP */
+ bool pinned;
+
vm_object_pip_add(vm_obj, 1);
/*
@@ -1422,7 +1499,7 @@ i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
* object, then it owns the drm device sx and might find the
* placeholder already. Then, since the page is busy,
* i915_gem_release_mmap() sleeps waiting for the busy state
- * of the page cleared. We will be not able to acquire drm
+ * of the page cleared. We will be unable to acquire drm
* device lock until i915_gem_release_mmap() is able to make a
* progress.
*/
@@ -1436,15 +1513,14 @@ i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
oldpage = NULL;
VM_OBJECT_WUNLOCK(vm_obj);
retry:
- cause = ret = 0;
+ ret = 0;
+ pinned = 0;
page = NULL;
if (i915_intr_pf) {
ret = i915_mutex_lock_interruptible(dev);
- if (ret != 0) {
- cause = 10;
+ if (ret != 0)
goto out;
- }
} else
DRM_LOCK(dev);
@@ -1468,56 +1544,37 @@ retry:
VM_OBJECT_WUNLOCK(vm_obj);
/* Now bind it into the GTT if needed */
- if (!obj->map_and_fenceable) {
- ret = i915_gem_object_unbind(obj);
- if (ret != 0) {
- cause = 20;
- goto unlock;
- }
- }
- if (!obj->gtt_space) {
- ret = i915_gem_object_bind_to_gtt(obj, 0, true);
- if (ret != 0) {
- cause = 30;
- goto unlock;
- }
-
- ret = i915_gem_object_set_to_gtt_domain(obj, write);
- if (ret != 0) {
- cause = 40;
- goto unlock;
- }
- }
+ ret = i915_gem_object_pin(obj, 0, true, false);
+ if (ret)
+ goto unlock;
+ pinned = 1;
- if (!obj->has_global_gtt_mapping)
- i915_gem_gtt_bind_object(obj, obj->cache_level);
+ ret = i915_gem_object_set_to_gtt_domain(obj, write);
+ if (ret)
+ goto unpin;
ret = i915_gem_object_get_fence(obj);
- if (ret != 0) {
- cause = 50;
- goto unlock;
- }
-
- if (i915_gem_object_is_inactive(obj))
- list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+ if (ret)
+ goto unpin;
obj->fault_mappable = true;
+
VM_OBJECT_WLOCK(vm_obj);
- page = PHYS_TO_VM_PAGE(dev->agp->base + obj->gtt_offset + offset);
+ page = PHYS_TO_VM_PAGE(dev_priv->mm.gtt_base_addr + obj->gtt_offset + offset);
KASSERT((page->flags & PG_FICTITIOUS) != 0,
("physical address %#jx not fictitious",
- (uintmax_t)(dev->agp->base + obj->gtt_offset + offset)));
+ (uintmax_t)(dev_priv->mm.gtt_base_addr + obj->gtt_offset + offset)));
if (page == NULL) {
VM_OBJECT_WUNLOCK(vm_obj);
- cause = 60;
ret = -EFAULT;
- goto unlock;
+ goto unpin;
}
KASSERT((page->flags & PG_FICTITIOUS) != 0,
("not fictitious %p", page));
KASSERT(page->wire_count == 1, ("wire_count not 1 %p", page));
if (vm_page_busied(page)) {
+ i915_gem_object_unpin(obj);
DRM_UNLOCK(dev);
vm_page_lock(page);
VM_OBJECT_WUNLOCK(vm_obj);
@@ -1525,6 +1582,7 @@ retry:
goto retry;
}
if (vm_page_insert(page, vm_obj, OFF_TO_IDX(offset))) {
+ i915_gem_object_unpin(obj);
DRM_UNLOCK(dev);
VM_OBJECT_WUNLOCK(vm_obj);
VM_WAIT;
@@ -1537,6 +1595,13 @@ have_page:
CTR4(KTR_DRM, "fault %p %jx %x phys %x", gem_obj, offset, prot,
page->phys_addr);
+ if (pinned) {
+ /*
+ * We may have not pinned the object if the page was
+ * found by the call to vm_page_lookup()
+ */
+ i915_gem_object_unpin(obj);
+ }
DRM_UNLOCK(dev);
if (oldpage != NULL) {
vm_page_lock(oldpage);
@@ -1546,12 +1611,14 @@ have_page:
vm_object_pip_wakeup(vm_obj);
return (VM_PAGER_OK);
+unpin:
+ i915_gem_object_unpin(obj);
unlock:
DRM_UNLOCK(dev);
out:
KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));
- CTR5(KTR_DRM, "fault_fail %p %jx %x err %d %d", gem_obj, offset, prot,
- -ret, cause);
+ CTR4(KTR_DRM, "fault_fail %p %jx %x err %d", gem_obj, offset, prot,
+ -ret);
if (ret == -EAGAIN || ret == -EIO || ret == -EINTR) {
kern_yield(PRI_USER);
goto retry;
@@ -1564,15 +1631,10 @@ out:
static void
i915_gem_pager_dtor(void *handle)
{
- struct drm_gem_object *obj;
- struct drm_device *dev;
-
- obj = handle;
- dev = obj->dev;
+ struct drm_gem_object *obj = handle;
+ struct drm_device *dev = obj->dev;
DRM_LOCK(dev);
- drm_gem_free_mmap_offset(obj);
- i915_gem_release_mmap(to_intel_bo(obj));
drm_gem_object_unreference(obj);
DRM_UNLOCK(dev);
}
@@ -1707,6 +1769,48 @@ i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
return i915_gem_get_gtt_size(dev, size, tiling_mode);
}
+static int i915_gem_object_create_mmap_offset(struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+ int ret;
+
+ if (obj->base.on_map)
+ return 0;
+
+ dev_priv->mm.shrinker_no_lock_stealing = true;
+
+ ret = drm_gem_create_mmap_offset(&obj->base);
+ if (ret != -ENOSPC)
+ goto out;
+
+ /* Badly fragmented mmap space? The only way we can recover
+ * space is by destroying unwanted objects. We can't randomly release
+ * mmap_offsets as userspace expects them to be persistent for the
+ * lifetime of the objects. The closest we can is to release the
+ * offsets on purgeable objects by truncating it and marking it purged,
+ * which prevents userspace from ever using that object again.
+ */
+ i915_gem_purge(dev_priv, obj->base.size >> PAGE_SHIFT);
+ ret = drm_gem_create_mmap_offset(&obj->base);
+ if (ret != -ENOSPC)
+ goto out;
+
+ i915_gem_shrink_all(dev_priv);
+ ret = drm_gem_create_mmap_offset(&obj->base);
+out:
+ dev_priv->mm.shrinker_no_lock_stealing = false;
+
+ return ret;
+}
+
+static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj)
+{
+ if (!obj->base.on_map)
+ return;
+
+ drm_gem_free_mmap_offset(&obj->base);
+}
+
int
i915_gem_mmap_gtt(struct drm_file *file,
struct drm_device *dev,
@@ -1738,7 +1842,7 @@ i915_gem_mmap_gtt(struct drm_file *file,
goto out;
}
- ret = drm_gem_create_mmap_offset(&obj->base);
+ ret = i915_gem_object_create_mmap_offset(obj);
if (ret)
goto out;
@@ -1786,8 +1890,9 @@ i915_gem_object_truncate(struct drm_i915_gem_object *obj)
VM_OBJECT_WLOCK(vm_obj);
vm_object_page_remove(vm_obj, 0, 0, false);
VM_OBJECT_WUNLOCK(vm_obj);
- drm_gem_free_mmap_offset(&obj->base);
- obj->madv = I915_MADV_PURGED_INTERNAL;
+ i915_gem_object_free_mmap_offset(obj);
+
+ obj->madv = __I915_MADV_PURGED;
}
static inline int
@@ -1846,27 +1951,24 @@ i915_gem_assert_pages_not_mapped(struct drm_device *dev, vm_page_t *ma,
#endif
static void
-i915_gem_object_put_pages_range(struct drm_i915_gem_object *obj,
- off_t start, off_t end)
-{
- vm_object_t vm_obj;
-
- vm_obj = obj->base.vm_obj;
- VM_OBJECT_WLOCK(vm_obj);
- i915_gem_object_put_pages_range_locked(obj,
- OFF_TO_IDX(trunc_page(start)), OFF_TO_IDX(round_page(end)));
- VM_OBJECT_WUNLOCK(vm_obj);
-}
-
-static void
i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
{
int page_count = obj->base.size / PAGE_SIZE;
- int i;
+ int ret, i;
+
+ BUG_ON(obj->madv == __I915_MADV_PURGED);
- KASSERT(obj->madv != I915_MADV_PURGED_INTERNAL, ("Purged object"));
+ ret = i915_gem_object_set_to_cpu_domain(obj, true);
+ if (ret) {
+ /* In the event of a disaster, abandon all caches and
+ * hope for the best.
+ */
+ WARN_ON(ret != -EIO);
+ i915_gem_clflush_object(obj);
+ obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
+ }
- if (obj->tiling_mode != I915_TILING_NONE)
+ if (i915_gem_object_needs_bit17_swizzle(obj))
i915_gem_object_save_bit_17_swizzle(obj);
if (obj->madv == I915_MADV_DONTNEED)
@@ -1898,65 +2000,80 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
}
static int
-i915_gpu_is_active(struct drm_device *dev)
+i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
+ const struct drm_i915_gem_object_ops *ops = obj->ops;
- return (!list_empty(&dev_priv->mm.flushing_list) ||
- !list_empty(&dev_priv->mm.active_list));
-}
+ if (obj->pages == NULL)
+ return 0;
-static void
-i915_gem_lowmem(void *arg)
-{
- struct drm_device *dev;
- struct drm_i915_private *dev_priv;
- struct drm_i915_gem_object *obj, *next;
- int cnt, cnt_fail, cnt_total;
+ BUG_ON(obj->gtt_space);
- dev = arg;
- dev_priv = dev->dev_private;
+ if (obj->pages_pin_count)
+ return -EBUSY;
- if (!sx_try_xlock(&dev->dev_struct_lock))
- return;
+ /* ->put_pages might need to allocate memory for the bit17 swizzle
+ * array, hence protect them from being reaped by removing them from gtt
+ * lists early. */
+ list_del(&obj->gtt_list);
- CTR0(KTR_DRM, "gem_lowmem");
+ ops->put_pages(obj);
+ obj->pages = NULL;
-rescan:
- /* first scan for clean buffers */
- i915_gem_retire_requests(dev);
+ if (i915_gem_object_is_purgeable(obj))
+ i915_gem_object_truncate(obj);
- cnt_total = cnt_fail = cnt = 0;
+ return 0;
+}
- list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
- mm_list) {
- if (i915_gem_object_is_purgeable(obj)) {
- if (i915_gem_object_unbind(obj) != 0)
- cnt_total++;
- } else
- cnt_total++;
+static long
+__i915_gem_shrink(struct drm_i915_private *dev_priv, long target,
+ bool purgeable_only)
+{
+ struct drm_i915_gem_object *obj, *next;
+ long count = 0;
+
+ list_for_each_entry_safe(obj, next,
+ &dev_priv->mm.unbound_list,
+ gtt_list) {
+ if ((i915_gem_object_is_purgeable(obj) || !purgeable_only) &&
+ i915_gem_object_put_pages(obj) == 0) {
+ count += obj->base.size >> PAGE_SHIFT;
+ if (target != -1 && count >= target)
+ return count;
+ }
}
- /* second pass, evict/count anything still on the inactive list */
- list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
- mm_list) {
- if (i915_gem_object_unbind(obj) == 0)
- cnt++;
- else
- cnt_fail++;
+ list_for_each_entry_safe(obj, next,
+ &dev_priv->mm.inactive_list,
+ mm_list) {
+ if ((i915_gem_object_is_purgeable(obj) || !purgeable_only) &&
+ i915_gem_object_unbind(obj) == 0 &&
+ i915_gem_object_put_pages(obj) == 0) {
+ count += obj->base.size >> PAGE_SHIFT;
+ if (target != -1 && count >= target)
+ return count;
+ }
}
- if (cnt_fail > cnt_total / 100 && i915_gpu_is_active(dev)) {
- /*
- * We are desperate for pages, so as a last resort, wait
- * for the GPU to finish and discard whatever we can.
- * This has a dramatic impact to reduce the number of
- * OOM-killer events whilst running the GPU aggressively.
- */
- if (i915_gpu_idle(dev) == 0)
- goto rescan;
- }
- DRM_UNLOCK(dev);
+ return count;
+}
+
+static long
+i915_gem_purge(struct drm_i915_private *dev_priv, long target)
+{
+ return __i915_gem_shrink(dev_priv, target, true);
+}
+
+static void
+i915_gem_shrink_all(struct drm_i915_private *dev_priv)
+{
+ struct drm_i915_gem_object *obj, *next;
+
+ i915_gem_evict_everything(dev_priv->dev);
+
+ list_for_each_entry_safe(obj, next, &dev_priv->mm.unbound_list, gtt_list)
+ i915_gem_object_put_pages(obj);
}
static int
@@ -1989,14 +2106,19 @@ failed:
}
static int
-i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj,
- int flags)
+i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
{
vm_object_t vm_obj;
vm_page_t page;
vm_pindex_t i, page_count;
int res;
+ /* Assert that the object is not currently in any GPU domain. As it
+ * wasn't in the GTT, there shouldn't be any way it could have been in
+ * a GPU cache
+ */
+ BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS);
+ BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS);
KASSERT(obj->pages == NULL, ("Obj already has pages"));
page_count = OFF_TO_IDX(obj->base.size);
@@ -2020,15 +2142,42 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj,
return (0);
}
+/* Ensure that the associated pages are gathered from the backing storage
+ * and pinned into our object. i915_gem_object_get_pages() may be called
+ * multiple times before they are released by a single call to
+ * i915_gem_object_put_pages() - once the pages are no longer referenced
+ * either as a result of memory pressure (reaping pages under the shrinker)
+ * or as the object is itself released.
+ */
+int
+i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+ const struct drm_i915_gem_object_ops *ops = obj->ops;
+ int ret;
+
+ if (obj->pages)
+ return 0;
+
+ BUG_ON(obj->pages_pin_count);
+
+ ret = ops->get_pages(obj);
+ if (ret)
+ return ret;
+
+ list_add_tail(&obj->gtt_list, &dev_priv->mm.unbound_list);
+ return 0;
+}
+
void
i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
- struct intel_ring_buffer *ring, uint32_t seqno)
+ struct intel_ring_buffer *ring)
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_i915_fence_reg *reg;
+ u32 seqno = intel_ring_get_seqno(ring);
- KASSERT(ring != NULL, ("NULL ring"));
+ BUG_ON(ring == NULL);
obj->ring = ring;
/* Add a reference if we're newly entering the active list. */
@@ -2041,12 +2190,15 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
list_move_tail(&obj->mm_list, &dev_priv->mm.active_list);
list_move_tail(&obj->ring_list, &ring->active_list);
- obj->last_rendering_seqno = seqno;
+ obj->last_read_seqno = seqno;
+
if (obj->fenced_gpu_access) {
obj->last_fenced_seqno = seqno;
/* Bump MRU to take account of the delayed flush */
if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ struct drm_i915_fence_reg *reg;
+
reg = &dev_priv->fence_regs[obj->fence_reg];
list_move_tail(&reg->lru_list,
&dev_priv->mm.fence_list);
@@ -2055,114 +2207,141 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
}
static void
-i915_gem_object_move_off_active(struct drm_i915_gem_object *obj)
-{
- list_del_init(&obj->ring_list);
- obj->last_rendering_seqno = 0;
- obj->last_fenced_seqno = 0;
-}
-
-static void
-i915_gem_object_move_to_flushing(struct drm_i915_gem_object *obj)
-{
- struct drm_device *dev = obj->base.dev;
- drm_i915_private_t *dev_priv = dev->dev_private;
-
- KASSERT(obj->active, ("Object not active"));
- list_move_tail(&obj->mm_list, &dev_priv->mm.flushing_list);
-
- i915_gem_object_move_off_active(obj);
-}
-
-static void
i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
+ BUG_ON(!obj->active);
+
list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
- KASSERT(list_empty(&obj->gpu_write_list), ("On gpu_write_list"));
- KASSERT(obj->active, ("Object not active"));
+ list_del_init(&obj->ring_list);
obj->ring = NULL;
- i915_gem_object_move_off_active(obj);
+ obj->last_read_seqno = 0;
+ obj->last_write_seqno = 0;
+ obj->base.write_domain = 0;
+
+ obj->last_fenced_seqno = 0;
obj->fenced_gpu_access = false;
obj->active = 0;
- obj->pending_gpu_write = false;
drm_gem_object_unreference(&obj->base);
-#if 1
- KIB_NOTYET();
-#else
WARN_ON(i915_verify_lists(dev));
-#endif
}
-static u32
-i915_gem_get_seqno(struct drm_device *dev)
+static int
+i915_gem_handle_seqno_wrap(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
- u32 seqno = dev_priv->next_seqno;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+ int ret, i, j;
- /* reserve 0 for non-seqno */
- if (++dev_priv->next_seqno == 0)
- dev_priv->next_seqno = 1;
+ /* The hardware uses various monotonic 32-bit counters, if we
+ * detect that they will wraparound we need to idle the GPU
+ * and reset those counters.
+ */
+ ret = 0;
+ for_each_ring(ring, dev_priv, i) {
+ for (j = 0; j < ARRAY_SIZE(ring->sync_seqno); j++)
+ ret |= ring->sync_seqno[j] != 0;
+ }
+ if (ret == 0)
+ return ret;
+
+ ret = i915_gpu_idle(dev);
+ if (ret)
+ return ret;
- return seqno;
+ i915_gem_retire_requests(dev);
+ for_each_ring(ring, dev_priv, i) {
+ for (j = 0; j < ARRAY_SIZE(ring->sync_seqno); j++)
+ ring->sync_seqno[j] = 0;
+ }
+
+ return 0;
}
-u32
-i915_gem_next_request_seqno(struct intel_ring_buffer *ring)
+int
+i915_gem_get_seqno(struct drm_device *dev, u32 *seqno)
{
- if (ring->outstanding_lazy_request == 0)
- ring->outstanding_lazy_request = i915_gem_get_seqno(ring->dev);
+ struct drm_i915_private *dev_priv = dev->dev_private;
- return ring->outstanding_lazy_request;
+ /* reserve 0 for non-seqno */
+ if (dev_priv->next_seqno == 0) {
+ int ret = i915_gem_handle_seqno_wrap(dev);
+ if (ret)
+ return ret;
+
+ dev_priv->next_seqno = 1;
+ }
+
+ *seqno = dev_priv->next_seqno++;
+ return 0;
}
int
i915_add_request(struct intel_ring_buffer *ring,
struct drm_file *file,
- struct drm_i915_gem_request *request)
+ u32 *out_seqno)
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
- struct drm_i915_file_private *file_priv;
- uint32_t seqno;
+ struct drm_i915_gem_request *request;
u32 request_ring_position;
int was_empty;
int ret;
- KASSERT(request != NULL, ("NULL request in add"));
- DRM_LOCK_ASSERT(ring->dev);
+ /*
+ * Emit any outstanding flushes - execbuf can fail to emit the flush
+ * after having emitted the batchbuffer command. Hence we need to fix
+ * things up similar to emitting the lazy request. The difference here
+ * is that the flush _must_ happen before the next request, no matter
+ * what.
+ */
+ ret = intel_ring_flush_all_caches(ring);
+ if (ret)
+ return ret;
- seqno = i915_gem_next_request_seqno(ring);
- request_ring_position = intel_ring_get_tail(ring);
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_NOWAIT);
+ if (request == NULL)
+ return -ENOMEM;
- ret = ring->add_request(ring, &seqno);
- if (ret != 0)
- return ret;
- CTR2(KTR_DRM, "request_add %s %d", ring->name, seqno);
+ /* Record the position of the start of the request so that
+ * should we detect the updated seqno part-way through the
+ * GPU processing the request, we never over-estimate the
+ * position of the head.
+ */
+ request_ring_position = intel_ring_get_tail(ring);
- request->seqno = seqno;
+ ret = ring->add_request(ring);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+
+ request->seqno = intel_ring_get_seqno(ring);
request->ring = ring;
request->tail = request_ring_position;
- request->emitted_jiffies = ticks;
+ request->emitted_jiffies = jiffies;
was_empty = list_empty(&ring->request_list);
list_add_tail(&request->list, &ring->request_list);
+ request->file_priv = NULL;
if (file) {
- file_priv = file->driver_priv;
+ struct drm_i915_file_private *file_priv = file->driver_priv;
- mtx_lock(&file_priv->mm.lck);
+ mtx_lock(&file_priv->mm.lock);
request->file_priv = file_priv;
list_add_tail(&request->client_list,
&file_priv->mm.request_list);
- mtx_unlock(&file_priv->mm.lck);
+ mtx_unlock(&file_priv->mm.lock);
}
+ CTR2(KTR_DRM, "request_add %s %d", ring->name, request->seqno);
ring->outstanding_lazy_request = 0;
if (!dev_priv->mm.suspended) {
@@ -2170,11 +2349,15 @@ i915_add_request(struct intel_ring_buffer *ring,
callout_schedule(&dev_priv->hangcheck_timer,
DRM_I915_HANGCHECK_PERIOD);
}
- if (was_empty)
- taskqueue_enqueue_timeout(dev_priv->tq,
- &dev_priv->mm.retire_task, hz);
+ if (was_empty) {
+ taskqueue_enqueue_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work, hz);
+ intel_mark_busy(dev_priv->dev);
+ }
}
+ if (out_seqno)
+ *out_seqno = request->seqno;
return 0;
}
@@ -2186,14 +2369,12 @@ i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
if (!file_priv)
return;
- DRM_LOCK_ASSERT(request->ring->dev);
-
- mtx_lock(&file_priv->mm.lck);
+ mtx_lock(&file_priv->mm.lock);
if (request->file_priv) {
list_del(&request->client_list);
request->file_priv = NULL;
}
- mtx_unlock(&file_priv->mm.lck);
+ mtx_unlock(&file_priv->mm.lock);
}
static void i915_gem_reset_ring_lists(struct drm_i915_private *dev_priv,
@@ -2221,8 +2402,6 @@ static void i915_gem_reset_ring_lists(struct drm_i915_private *dev_priv,
struct drm_i915_gem_object,
ring_list);
- obj->base.write_domain = 0;
- list_del_init(&obj->gpu_write_list);
i915_gem_object_move_to_inactive(obj);
}
}
@@ -2258,24 +2437,13 @@ void i915_gem_reset(struct drm_device *dev)
for_each_ring(ring, dev_priv, i)
i915_gem_reset_ring_lists(dev_priv, ring);
- /* Remove anything from the flushing lists. The GPU cache is likely
- * to be lost on reset along with the data, so simply move the
- * lost bo to the inactive list.
- */
- while (!list_empty(&dev_priv->mm.flushing_list)) {
- obj = list_first_entry(&dev_priv->mm.flushing_list,
- struct drm_i915_gem_object,
- mm_list);
-
- obj->base.write_domain = 0;
- list_del_init(&obj->gpu_write_list);
- i915_gem_object_move_to_inactive(obj);
- }
-
/* Move everything out of the GPU domains to ensure we do any
* necessary invalidation upon reuse.
*/
- list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
+ list_for_each_entry(obj,
+ &dev_priv->mm.inactive_list,
+ mm_list)
+ {
obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
}
@@ -2290,17 +2458,14 @@ void
i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
{
uint32_t seqno;
- int i;
if (list_empty(&ring->request_list))
return;
- seqno = ring->get_seqno(ring);
- CTR2(KTR_DRM, "retire_request_ring %s %d", ring->name, seqno);
+ WARN_ON(i915_verify_lists(ring->dev));
- for (i = 0; i < ARRAY_SIZE(ring->sync_seqno); i++)
- if (seqno >= ring->sync_seqno[i])
- ring->sync_seqno[i] = 0;
+ seqno = ring->get_seqno(ring, true);
+ CTR2(KTR_DRM, "retire_request_ring %s %d", ring->name, seqno);
while (!list_empty(&ring->request_list)) {
struct drm_i915_gem_request *request;
@@ -2314,6 +2479,11 @@ i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
CTR2(KTR_DRM, "retire_request_seqno_passed %s %d",
ring->name, seqno);
+ /* We know the GPU must have read the request to have
+ * sent us the seqno + interrupt, so use the position
+ * of tail of the request to update the last known position
+ * of the GPU head.
+ */
ring->last_retired_head = request->tail;
list_del(&request->list);
@@ -2331,23 +2501,19 @@ i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
struct drm_i915_gem_object,
ring_list);
- if (!i915_seqno_passed(seqno, obj->last_rendering_seqno))
+ if (!i915_seqno_passed(seqno, obj->last_read_seqno))
break;
- if (obj->base.write_domain != 0)
- i915_gem_object_move_to_flushing(obj);
- else
- i915_gem_object_move_to_inactive(obj);
+ i915_gem_object_move_to_inactive(obj);
}
- if (ring->trace_irq_seqno &&
- i915_seqno_passed(seqno, ring->trace_irq_seqno)) {
- struct drm_i915_private *dev_priv = ring->dev->dev_private;
- mtx_lock(&dev_priv->irq_lock);
+ if (unlikely(ring->trace_irq_seqno &&
+ i915_seqno_passed(seqno, ring->trace_irq_seqno))) {
ring->irq_put(ring);
- mtx_unlock(&dev_priv->irq_lock);
ring->trace_irq_seqno = 0;
}
+
+ WARN_ON(i915_verify_lists(ring->dev));
}
void
@@ -2362,49 +2528,7 @@ i915_gem_retire_requests(struct drm_device *dev)
}
static void
-i915_gem_process_flushing_list(struct intel_ring_buffer *ring,
- uint32_t flush_domains)
-{
- struct drm_i915_gem_object *obj, *next;
- uint32_t old_write_domain;
-
- list_for_each_entry_safe(obj, next, &ring->gpu_write_list,
- gpu_write_list) {
- if (obj->base.write_domain & flush_domains) {
- old_write_domain = obj->base.write_domain;
- obj->base.write_domain = 0;
- list_del_init(&obj->gpu_write_list);
- i915_gem_object_move_to_active(obj, ring,
- i915_gem_next_request_seqno(ring));
-
- CTR3(KTR_DRM, "object_change_domain process_flush %p %x %x",
- obj, obj->base.read_domains, old_write_domain);
- }
- }
-}
-
-int
-i915_gem_flush_ring(struct intel_ring_buffer *ring, uint32_t invalidate_domains,
- uint32_t flush_domains)
-{
- int ret;
-
- if (((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) == 0)
- return 0;
-
- CTR3(KTR_DRM, "ring_flush %s %x %x", ring->name, invalidate_domains,
- flush_domains);
- ret = ring->flush(ring, invalidate_domains, flush_domains);
- if (ret)
- return ret;
-
- if (flush_domains & I915_GEM_GPU_DOMAINS)
- i915_gem_process_flushing_list(ring, flush_domains);
- return 0;
-}
-
-static void
-i915_gem_retire_task_handler(void *arg, int pending)
+i915_gem_retire_work_handler(void *arg, int pending)
{
drm_i915_private_t *dev_priv;
struct drm_device *dev;
@@ -2417,8 +2541,8 @@ i915_gem_retire_task_handler(void *arg, int pending)
/* Come back later if the device is busy... */
if (!sx_try_xlock(&dev->dev_struct_lock)) {
- taskqueue_enqueue_timeout(dev_priv->tq,
- &dev_priv->mm.retire_task, hz);
+ taskqueue_enqueue_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work, hz);
return;
}
@@ -2431,31 +2555,138 @@ i915_gem_retire_task_handler(void *arg, int pending)
*/
idle = true;
for_each_ring(ring, dev_priv, i) {
- struct intel_ring_buffer *ring = &dev_priv->rings[i];
-
- if (!list_empty(&ring->gpu_write_list)) {
- struct drm_i915_gem_request *request;
- int ret;
-
- ret = i915_gem_flush_ring(ring,
- 0, I915_GEM_GPU_DOMAINS);
- request = malloc(sizeof(*request), DRM_I915_GEM,
- M_WAITOK | M_ZERO);
- if (ret || request == NULL ||
- i915_add_request(ring, NULL, request))
- free(request, DRM_I915_GEM);
- }
+ if (ring->gpu_caches_dirty)
+ i915_add_request(ring, NULL, NULL);
idle &= list_empty(&ring->request_list);
}
if (!dev_priv->mm.suspended && !idle)
- taskqueue_enqueue_timeout(dev_priv->tq,
- &dev_priv->mm.retire_task, hz);
+ taskqueue_enqueue_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work, hz);
+ if (idle)
+ intel_mark_idle(dev);
+
+ DRM_UNLOCK(dev);
+}
+
+/**
+ * Ensures that an object will eventually get non-busy by flushing any required
+ * write domains, emitting any outstanding lazy request and retiring and
+ * completed requests.
+ */
+static int
+i915_gem_object_flush_active(struct drm_i915_gem_object *obj)
+{
+ int ret;
+
+ if (obj->active) {
+ ret = i915_gem_check_olr(obj->ring, obj->last_read_seqno);
+ if (ret)
+ return ret;
+
+ i915_gem_retire_requests_ring(obj->ring);
+ }
+
+ return 0;
+}
+
+/**
+ * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT
+ * @DRM_IOCTL_ARGS: standard ioctl arguments
+ *
+ * Returns 0 if successful, else an error is returned with the remaining time in
+ * the timeout parameter.
+ * -ETIME: object is still busy after timeout
+ * -ERESTARTSYS: signal interrupted the wait
+ * -ENONENT: object doesn't exist
+ * Also possible, but rare:
+ * -EAGAIN: GPU wedged
+ * -ENOMEM: damn
+ * -ENODEV: Internal IRQ fail
+ * -E?: The add request failed
+ *
+ * The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any
+ * non-zero timeout parameter the wait ioctl will wait for the given number of
+ * nanoseconds on an object becoming unbusy. Since the wait itself does so
+ * without holding struct_mutex the object may become re-busied before this
+ * function completes. A similar but shorter * race condition exists in the busy
+ * ioctl
+ */
+int
+i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
+{
+ struct drm_i915_gem_wait *args = data;
+ struct drm_i915_gem_object *obj;
+ struct intel_ring_buffer *ring = NULL;
+ struct timespec timeout_stack, *timeout = NULL;
+ u32 seqno = 0;
+ int ret = 0;
+
+ if (args->timeout_ns >= 0) {
+ timeout_stack.tv_sec = args->timeout_ns / 1000000;
+ timeout_stack.tv_nsec = args->timeout_ns % 1000000;
+ timeout = &timeout_stack;
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->bo_handle));
+ if (&obj->base == NULL) {
+ DRM_UNLOCK(dev);
+ return -ENOENT;
+ }
+
+ /* Need to make sure the object gets inactive eventually. */
+ ret = i915_gem_object_flush_active(obj);
+ if (ret)
+ goto out;
+
+ if (obj->active) {
+ seqno = obj->last_read_seqno;
+ ring = obj->ring;
+ }
+
+ if (seqno == 0)
+ goto out;
+
+ /* Do this after OLR check to make sure we make forward progress polling
+ * on this IOCTL with a 0 timeout (like busy ioctl)
+ */
+ if (!args->timeout_ns) {
+ ret = -ETIMEDOUT;
+ goto out;
+ }
+
+ drm_gem_object_unreference(&obj->base);
+ DRM_UNLOCK(dev);
+ ret = __wait_seqno(ring, seqno, true, timeout);
+ if (timeout) {
+ args->timeout_ns = timeout->tv_sec * 1000000 + timeout->tv_nsec;
+ }
+ return ret;
+
+out:
+ drm_gem_object_unreference(&obj->base);
DRM_UNLOCK(dev);
+ return ret;
}
+/**
+ * i915_gem_object_sync - sync an object to a ring.
+ *
+ * @obj: object which may be in use on another ring.
+ * @to: ring we wish to use the object on. May be NULL.
+ *
+ * This code is meant to abstract object synchronization with the GPU.
+ * Calling with NULL implies synchronizing the object with the CPU
+ * rather than a particular GPU ring.
+ *
+ * Returns 0 if successful, else propagates up the lower layer error.
+ */
int
i915_gem_object_sync(struct drm_i915_gem_object *obj,
struct intel_ring_buffer *to)
@@ -2468,31 +2699,25 @@ i915_gem_object_sync(struct drm_i915_gem_object *obj,
return 0;
if (to == NULL || !i915_semaphore_is_enabled(obj->base.dev))
- return i915_gem_object_wait_rendering(obj);
+ return i915_gem_object_wait_rendering(obj, false);
idx = intel_ring_sync_index(from, to);
- seqno = obj->last_rendering_seqno;
+ seqno = obj->last_read_seqno;
if (seqno <= from->sync_seqno[idx])
return 0;
- if (seqno == from->outstanding_lazy_request) {
- struct drm_i915_gem_request *request;
-
- request = malloc(sizeof(*request), DRM_I915_GEM,
- M_WAITOK | M_ZERO);
- ret = i915_add_request(from, NULL, request);
- if (ret) {
- free(request, DRM_I915_GEM);
- return ret;
- }
- seqno = request->seqno;
- }
-
+ ret = i915_gem_check_olr(obj->ring, seqno);
+ if (ret)
+ return ret;
ret = to->sync_to(to, from, seqno);
if (!ret)
- from->sync_seqno[idx] = seqno;
+ /* We use last_read_seqno because sync_to()
+ * might have just caused seqno wrap under
+ * the radar.
+ */
+ from->sync_seqno[idx] = obj->last_read_seqno;
return ret;
}
@@ -2533,24 +2758,20 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
return 0;
if (obj->pin_count)
- return -EINVAL;
+ return -EBUSY;
+
+ BUG_ON(obj->pages == NULL);
ret = i915_gem_object_finish_gpu(obj);
- if (ret == -ERESTARTSYS || ret == -EINTR)
+ if (ret)
return ret;
+ /* Continue on if we fail due to EIO, the GPU is hung so we
+ * should be safe and we need to cleanup or else we might
+ * cause memory corruption through use-after-free.
+ */
i915_gem_object_finish_gtt(obj);
- if (ret == 0)
- ret = i915_gem_object_set_to_cpu_domain(obj, 1);
- if (ret == -ERESTARTSYS || ret == -EINTR)
- return ret;
- if (ret != 0) {
- i915_gem_clflush_object(obj);
- obj->base.read_domains = obj->base.write_domain =
- I915_GEM_DOMAIN_CPU;
- }
-
/* release the fence reg _after_ flushing */
ret = i915_gem_object_put_fence(obj);
if (ret)
@@ -2564,39 +2785,16 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
}
i915_gem_gtt_finish_object(obj);
- i915_gem_object_put_pages_gtt(obj);
-
- list_del_init(&obj->gtt_list);
- list_del_init(&obj->mm_list);
+ list_del(&obj->mm_list);
+ list_move_tail(&obj->gtt_list, &dev_priv->mm.unbound_list);
+ /* Avoid an unnecessary call to unbind on rebind. */
obj->map_and_fenceable = true;
drm_mm_put_block(obj->gtt_space);
obj->gtt_space = NULL;
obj->gtt_offset = 0;
- if (i915_gem_object_is_purgeable(obj))
- i915_gem_object_truncate(obj);
- CTR1(KTR_DRM, "object_unbind %p", obj);
-
- return ret;
-}
-
-static int
-i915_ring_idle(struct intel_ring_buffer *ring)
-{
- int ret;
-
- if (list_empty(&ring->gpu_write_list) && list_empty(&ring->active_list))
- return 0;
-
- if (!list_empty(&ring->gpu_write_list)) {
- ret = i915_gem_flush_ring(ring, I915_GEM_GPU_DOMAINS,
- I915_GEM_GPU_DOMAINS);
- if (ret != 0)
- return ret;
- }
-
- return (i915_wait_request(ring, i915_gem_next_request_seqno(ring)));
+ return 0;
}
int i915_gpu_idle(struct drm_device *dev)
@@ -2611,13 +2809,9 @@ int i915_gpu_idle(struct drm_device *dev)
if (ret)
return ret;
- ret = i915_ring_idle(ring);
+ ret = intel_ring_idle(ring);
if (ret)
return ret;
-
- /* Is the device fubar? */
- if (!list_empty(&ring->gpu_write_list))
- return -EBUSY;
}
return 0;
@@ -2682,10 +2876,9 @@ static void i915_write_fence_reg(struct drm_device *dev, int reg,
int pitch_val;
int tile_width;
- if ((obj->gtt_offset & ~I915_FENCE_START_MASK) ||
+ WARN((obj->gtt_offset & ~I915_FENCE_START_MASK) ||
(size & -size) != size ||
- (obj->gtt_offset & (size - 1)))
- printf(
+ (obj->gtt_offset & (size - 1)),
"object 0x%08x [fenceable? %d] not 1M or pot-size (0x%08x) aligned\n",
obj->gtt_offset, obj->map_and_fenceable, size);
@@ -2726,10 +2919,9 @@ static void i830_write_fence_reg(struct drm_device *dev, int reg,
u32 size = obj->gtt_space->size;
uint32_t pitch_val;
- if ((obj->gtt_offset & ~I830_FENCE_START_MASK) ||
+ WARN((obj->gtt_offset & ~I830_FENCE_START_MASK) ||
(size & -size) != size ||
- (obj->gtt_offset & (size - 1)))
- printf(
+ (obj->gtt_offset & (size - 1)),
"object 0x%08x not 512K or pot-size 0x%08x aligned\n",
obj->gtt_offset, size);
@@ -2769,6 +2961,11 @@ static inline int fence_number(struct drm_i915_private *dev_priv,
return fence - dev_priv->fence_regs;
}
+static void i915_gem_write_fence__ipi(void *data)
+{
+ wbinvd();
+}
+
static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
struct drm_i915_fence_reg *fence,
bool enable)
@@ -2777,6 +2974,18 @@ static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
struct drm_i915_private *dev_priv = dev->dev_private;
int fence_reg = fence_number(dev_priv, fence);
+ /* In order to fully serialize access to the fenced region and
+ * the update to the fence register we need to take extreme
+ * measures on SNB+. In theory, the write to the fence register
+ * flushes all memory transactions before, and coupled with the
+ * mb() placed around the register write we serialise all memory
+ * operations with respect to the changes in the tiler. Yet, on
+ * SNB+ we need to take a step further and emit an explicit wbinvd()
+ * on each processor in order to manually flush all memory
+ * transactions before updating the fence register.
+ */
+ if (HAS_LLC(obj->base.dev))
+ on_each_cpu(i915_gem_write_fence__ipi, NULL, 1);
i915_gem_write_fence(dev, fence_reg, enable ? obj : NULL);
if (enable) {
@@ -2793,22 +3002,8 @@ static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
static int
i915_gem_object_flush_fence(struct drm_i915_gem_object *obj)
{
- int ret;
-
- if (obj->fenced_gpu_access) {
- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
- ret = i915_gem_flush_ring(obj->ring,
- 0, obj->base.write_domain);
- if (ret)
- return ret;
- }
-
- obj->fenced_gpu_access = false;
- }
-
if (obj->last_fenced_seqno) {
- ret = i915_wait_request(obj->ring,
- obj->last_fenced_seqno);
+ int ret = i915_wait_seqno(obj->ring, obj->last_fenced_seqno);
if (ret)
return ret;
@@ -2821,6 +3016,7 @@ i915_gem_object_flush_fence(struct drm_i915_gem_object *obj)
if (obj->base.read_domains & I915_GEM_DOMAIN_GTT)
mb();
+ obj->fenced_gpu_access = false;
return 0;
}
@@ -2940,17 +3136,88 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj)
return 0;
}
+static bool i915_gem_valid_gtt_space(struct drm_device *dev,
+ struct drm_mm_node *gtt_space,
+ unsigned long cache_level)
+{
+ struct drm_mm_node *other;
+
+ /* On non-LLC machines we have to be careful when putting differing
+ * types of snoopable memory together to avoid the prefetcher
+ * crossing memory domains and dieing.
+ */
+ if (HAS_LLC(dev))
+ return true;
+
+ if (gtt_space == NULL)
+ return true;
+
+ if (list_empty(&gtt_space->node_list))
+ return true;
+
+ other = list_entry(gtt_space->node_list.prev, struct drm_mm_node, node_list);
+ if (other->allocated && !other->hole_follows && other->color != cache_level)
+ return false;
+
+ other = list_entry(gtt_space->node_list.next, struct drm_mm_node, node_list);
+ if (other->allocated && !gtt_space->hole_follows && other->color != cache_level)
+ return false;
+
+ return true;
+}
+
+static void i915_gem_verify_gtt(struct drm_device *dev)
+{
+#if WATCH_GTT
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ int err = 0;
+
+ list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ if (obj->gtt_space == NULL) {
+ DRM_ERROR("object found on GTT list with no space reserved\n");
+ err++;
+ continue;
+ }
+
+ if (obj->cache_level != obj->gtt_space->color) {
+ DRM_ERROR("object reserved space [%08lx, %08lx] with wrong color, cache_level=%x, color=%lx\n",
+ obj->gtt_space->start,
+ obj->gtt_space->start + obj->gtt_space->size,
+ obj->cache_level,
+ obj->gtt_space->color);
+ err++;
+ continue;
+ }
+
+ if (!i915_gem_valid_gtt_space(dev,
+ obj->gtt_space,
+ obj->cache_level)) {
+ DRM_ERROR("invalid GTT space found at [%08lx, %08lx] - color=%x\n",
+ obj->gtt_space->start,
+ obj->gtt_space->start + obj->gtt_space->size,
+ obj->cache_level);
+ err++;
+ continue;
+ }
+ }
+
+ WARN_ON(err);
+#endif
+}
+
/**
* Finds free space in the GTT aperture and binds the object there.
*/
static int
i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
unsigned alignment,
- bool map_and_fenceable)
+ bool map_and_fenceable,
+ bool nonblocking)
{
struct drm_device *dev = obj->base.dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- struct drm_mm_node *free_space;
+ struct drm_mm_node *node;
u32 size, fence_size, fence_alignment, unfenced_alignment;
bool mappable, fenceable;
int ret;
@@ -2990,75 +3257,70 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
return -E2BIG;
}
+ ret = i915_gem_object_get_pages(obj);
+ if (ret)
+ return ret;
+
+ i915_gem_object_pin_pages(obj);
+
+ node = malloc(sizeof(*node), DRM_I915_GEM, M_NOWAIT | M_ZERO);
+ if (node == NULL) {
+ i915_gem_object_unpin_pages(obj);
+ return -ENOMEM;
+ }
+
search_free:
if (map_and_fenceable)
- free_space = drm_mm_search_free_in_range(
- &dev_priv->mm.gtt_space, size, alignment, 0,
- dev_priv->mm.gtt_mappable_end, 0);
+ ret = drm_mm_insert_node_in_range_generic(&dev_priv->mm.gtt_space, node,
+ size, alignment, obj->cache_level,
+ 0, dev_priv->mm.gtt_mappable_end);
else
- free_space = drm_mm_search_free(&dev_priv->mm.gtt_space,
- size, alignment, 0);
- if (free_space != NULL) {
- if (map_and_fenceable)
- obj->gtt_space = drm_mm_get_block_range_generic(
- free_space, size, alignment, 0, 0,
- dev_priv->mm.gtt_mappable_end, 1);
- else
- obj->gtt_space = drm_mm_get_block_generic(free_space,
- size, alignment, 0, 1);
- }
- if (obj->gtt_space == NULL) {
- ret = i915_gem_evict_something(dev, size, alignment,
- map_and_fenceable);
- if (ret != 0)
- return ret;
- goto search_free;
- }
- ret = i915_gem_object_get_pages_gtt(obj, 0);
+ ret = drm_mm_insert_node_generic(&dev_priv->mm.gtt_space, node,
+ size, alignment, obj->cache_level);
if (ret) {
- drm_mm_put_block(obj->gtt_space);
- obj->gtt_space = NULL;
- /*
- * i915_gem_object_get_pages_gtt() cannot return
- * ENOMEM, since we use vm_page_grab().
- */
+ ret = i915_gem_evict_something(dev, size, alignment,
+ obj->cache_level,
+ map_and_fenceable,
+ nonblocking);
+ if (ret == 0)
+ goto search_free;
+
+ i915_gem_object_unpin_pages(obj);
+ free(node, DRM_I915_GEM);
return ret;
}
+ if (WARN_ON(!i915_gem_valid_gtt_space(dev, node, obj->cache_level))) {
+ i915_gem_object_unpin_pages(obj);
+ drm_mm_put_block(node);
+ return -EINVAL;
+ }
ret = i915_gem_gtt_prepare_object(obj);
if (ret) {
- i915_gem_object_put_pages_gtt(obj);
- drm_mm_put_block(obj->gtt_space);
- obj->gtt_space = NULL;
- if (i915_gem_evict_everything(dev, false))
- return ret;
- goto search_free;
+ i915_gem_object_unpin_pages(obj);
+ drm_mm_put_block(node);
+ return ret;
}
- if (!dev_priv->mm.aliasing_ppgtt)
- i915_gem_gtt_bind_object(obj, obj->cache_level);
-
- list_add_tail(&obj->gtt_list, &dev_priv->mm.gtt_list);
+ list_move_tail(&obj->gtt_list, &dev_priv->mm.bound_list);
list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
- KASSERT((obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0,
- ("Object in gpu read domain"));
- KASSERT((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0,
- ("Object in gpu write domain"));
-
- obj->gtt_offset = obj->gtt_space->start;
+ obj->gtt_space = node;
+ obj->gtt_offset = node->start;
fenceable =
- obj->gtt_space->size == fence_size &&
- (obj->gtt_space->start & (fence_alignment - 1)) == 0;
+ node->size == fence_size &&
+ (node->start & (fence_alignment - 1)) == 0;
mappable =
obj->gtt_offset + obj->base.size <= dev_priv->mm.gtt_mappable_end;
obj->map_and_fenceable = mappable && fenceable;
+ i915_gem_object_unpin_pages(obj);
CTR4(KTR_DRM, "object_bind %p %x %x %d", obj, obj->gtt_offset,
obj->base.size, map_and_fenceable);
+ i915_gem_verify_gtt(dev);
return 0;
}
@@ -3124,7 +3386,7 @@ i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
return;
i915_gem_clflush_object(obj);
- intel_gtt_chipset_flush();
+ i915_gem_chipset_flush(obj->base.dev);
old_write_domain = obj->base.write_domain;
obj->base.write_domain = 0;
@@ -3132,15 +3394,6 @@ i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
obj->base.read_domains, old_write_domain);
}
-static int
-i915_gem_object_flush_gpu_write_domain(struct drm_i915_gem_object *obj)
-{
-
- if ((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0)
- return (0);
- return (i915_gem_flush_ring(obj->ring, 0, obj->base.write_domain));
-}
-
/**
* Moves a single object to the GTT read, and possibly write domain.
*
@@ -3161,16 +3414,10 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
return 0;
- ret = i915_gem_object_flush_gpu_write_domain(obj);
+ ret = i915_gem_object_wait_rendering(obj, !write);
if (ret)
return ret;
- if (obj->pending_gpu_write || write) {
- ret = i915_gem_object_wait_rendering(obj);
- if (ret)
- return (ret);
- }
-
i915_gem_object_flush_cpu_write_domain(obj);
old_write_domain = obj->base.write_domain;
@@ -3179,8 +3426,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
/* It should now be out of any other write domains, and we can update
* the domain values for our changes.
*/
- KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) == 0,
- ("In GTT write domain"));
+ BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
if (write) {
obj->base.read_domains = I915_GEM_DOMAIN_GTT;
@@ -3213,6 +3459,12 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
return -EBUSY;
}
+ if (!i915_gem_valid_gtt_space(dev, obj->gtt_space, cache_level)) {
+ ret = i915_gem_object_unbind(obj);
+ if (ret)
+ return ret;
+ }
+
if (obj->gtt_space) {
ret = i915_gem_object_finish_gpu(obj);
if (ret)
@@ -3224,7 +3476,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
* registers with snooped memory, so relinquish any fences
* currently pointing to our region in the aperture.
*/
- if (INTEL_INFO(obj->base.dev)->gen < 6) {
+ if (INTEL_INFO(dev)->gen < 6) {
ret = i915_gem_object_put_fence(obj);
if (ret)
return ret;
@@ -3235,6 +3487,8 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
if (obj->has_aliasing_ppgtt_mapping)
i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
obj, cache_level);
+
+ obj->gtt_space->color = cache_level;
}
if (cache_level == I915_CACHE_NONE) {
@@ -3246,10 +3500,8 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
* in obj->write_domain and have been skipping the clflushes.
* Just set it to the CPU cache for now.
*/
- KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
- ("obj %p in CPU write domain", obj));
- KASSERT((obj->base.read_domains & ~I915_GEM_DOMAIN_CPU) == 0,
- ("obj %p in CPU read domain", obj));
+ WARN_ON(obj->base.write_domain & ~I915_GEM_DOMAIN_CPU);
+ WARN_ON(obj->base.read_domains & ~I915_GEM_DOMAIN_CPU);
old_read_domains = obj->base.read_domains;
old_write_domain = obj->base.write_domain;
@@ -3262,9 +3514,72 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
}
obj->cache_level = cache_level;
+ i915_gem_verify_gtt(dev);
return 0;
}
+int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_caching *args = data;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ args->caching = obj->cache_level != I915_CACHE_NONE;
+
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return ret;
+}
+
+int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_caching *args = data;
+ struct drm_i915_gem_object *obj;
+ enum i915_cache_level level;
+ int ret;
+
+ switch (args->caching) {
+ case I915_CACHING_NONE:
+ level = I915_CACHE_NONE;
+ break;
+ case I915_CACHING_CACHED:
+ level = I915_CACHE_LLC;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ ret = i915_gem_object_set_cache_level(obj, level);
+
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return ret;
+}
+
static bool is_pin_display(struct drm_i915_gem_object *obj)
{
/* There are 3 sources that pin objects:
@@ -3281,6 +3596,11 @@ static bool is_pin_display(struct drm_i915_gem_object *obj)
return obj->pin_count - !!obj->user_pin_count;
}
+/*
+ * Prepare buffer for display plane (scanout, cursors, etc).
+ * Can be called from an uninterruptible phase (modesetting) and allows
+ * any flushes to be pipelined (for pageflips).
+ */
int
i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
u32 alignment,
@@ -3289,10 +3609,6 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
u32 old_read_domains, old_write_domain;
int ret;
- ret = i915_gem_object_flush_gpu_write_domain(obj);
- if (ret)
- return ret;
-
if (pipelined != obj->ring) {
ret = i915_gem_object_sync(obj, pipelined);
if (ret)
@@ -3321,7 +3637,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
* (e.g. libkms for the bootup splash), we have to ensure that we
* always use map_and_fenceable for all scanout buffers.
*/
- ret = i915_gem_object_pin(obj, alignment, true);
+ ret = i915_gem_object_pin(obj, alignment, true, false);
if (ret)
goto err_unpin_display;
@@ -3330,12 +3646,14 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
old_write_domain = obj->base.write_domain;
old_read_domains = obj->base.read_domains;
- KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) == 0,
- ("obj %p in GTT write domain", obj));
+ /* It should now be out of any other write domains, and we can update
+ * the domain values for our changes.
+ */
+ obj->base.write_domain = 0;
obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
CTR3(KTR_DRM, "object_change_domain pin_to_display_plan %p %x %x",
- obj, old_read_domains, obj->base.write_domain);
+ obj, old_read_domains, old_write_domain);
return 0;
@@ -3359,13 +3677,7 @@ i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj)
if ((obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0)
return 0;
- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
- ret = i915_gem_flush_ring(obj->ring, 0, obj->base.write_domain);
- if (ret)
- return ret;
- }
-
- ret = i915_gem_object_wait_rendering(obj);
+ ret = i915_gem_object_wait_rendering(obj, false);
if (ret)
return ret;
@@ -3389,16 +3701,10 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
if (obj->base.write_domain == I915_GEM_DOMAIN_CPU)
return 0;
- ret = i915_gem_object_flush_gpu_write_domain(obj);
+ ret = i915_gem_object_wait_rendering(obj, !write);
if (ret)
return ret;
- if (write || obj->pending_gpu_write) {
- ret = i915_gem_object_wait_rendering(obj);
- if (ret)
- return ret;
- }
-
i915_gem_object_flush_gtt_write_domain(obj);
old_write_domain = obj->base.write_domain;
@@ -3414,8 +3720,7 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
/* It should now be out of any other write domains, and we can update
* the domain values for our changes.
*/
- KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
- ("In cpu write domain"));
+ BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) != 0);
/* If we're writing through the CPU, then the GPU read domains will
* need to be invalidated at next use.
@@ -3446,30 +3751,32 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_file_private *file_priv = file->driver_priv;
- unsigned long recent_enough = ticks - (20 * hz / 1000);
+ unsigned long recent_enough = jiffies - msecs_to_jiffies(20);
struct drm_i915_gem_request *request;
struct intel_ring_buffer *ring = NULL;
u32 seqno = 0;
int ret;
- if (atomic_load_acq_int(&dev_priv->mm.wedged))
+ if (atomic_read(&dev_priv->mm.wedged))
return -EIO;
- mtx_lock(&file_priv->mm.lck);
+ mtx_lock(&file_priv->mm.lock);
list_for_each_entry(request, &file_priv->mm.request_list, client_list) {
if (time_after_eq(request->emitted_jiffies, recent_enough))
break;
+
ring = request->ring;
seqno = request->seqno;
}
- mtx_unlock(&file_priv->mm.lck);
+ mtx_unlock(&file_priv->mm.lock);
+
if (seqno == 0)
return 0;
- ret = __wait_seqno(ring, seqno, true);
+ ret = __wait_seqno(ring, seqno, true, NULL);
if (ret == 0)
- taskqueue_enqueue_timeout(dev_priv->tq,
- &dev_priv->mm.retire_task, 0);
+ taskqueue_enqueue_timeout(dev_priv->wq,
+ &dev_priv->mm.retire_work, 0);
return ret;
}
@@ -3477,17 +3784,19 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
int
i915_gem_object_pin(struct drm_i915_gem_object *obj,
uint32_t alignment,
- bool map_and_fenceable)
+ bool map_and_fenceable,
+ bool nonblocking)
{
int ret;
- if (obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT)
+ if (WARN_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
return -EBUSY;
if (obj->gtt_space != NULL) {
if ((alignment && obj->gtt_offset & (alignment - 1)) ||
(map_and_fenceable && !obj->map_and_fenceable)) {
- DRM_DEBUG("bo is already pinned with incorrect alignment:"
+ WARN(obj->pin_count,
+ "bo is already pinned with incorrect alignment:"
" offset=%x, req.alignment=%x, req.map_and_fenceable=%d,"
" obj->map_and_fenceable=%d\n",
obj->gtt_offset, alignment,
@@ -3500,10 +3809,16 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
}
if (obj->gtt_space == NULL) {
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+
ret = i915_gem_object_bind_to_gtt(obj, alignment,
- map_and_fenceable);
+ map_and_fenceable,
+ nonblocking);
if (ret)
return ret;
+
+ if (!dev_priv->mm.aliasing_ppgtt)
+ i915_gem_gtt_bind_object(obj, obj->cache_level);
}
if (!obj->has_global_gtt_mapping && map_and_fenceable)
@@ -3518,9 +3833,8 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
void
i915_gem_object_unpin(struct drm_i915_gem_object *obj)
{
-
- KASSERT(obj->pin_count != 0, ("zero pin count"));
- KASSERT(obj->gtt_space != NULL, ("No gtt mapping"));
+ BUG_ON(obj->pin_count == 0);
+ BUG_ON(obj->gtt_space == NULL);
if (--obj->pin_count == 0)
obj->pin_mappable = false;
@@ -3532,19 +3846,17 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data,
{
struct drm_i915_gem_pin *args = data;
struct drm_i915_gem_object *obj;
- struct drm_gem_object *gobj;
int ret;
ret = i915_mutex_lock_interruptible(dev);
if (ret)
return ret;
- gobj = drm_gem_object_lookup(dev, file, args->handle);
- if (gobj == NULL) {
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
ret = -ENOENT;
goto unlock;
}
- obj = to_intel_bo(gobj);
if (obj->madv != I915_MADV_WILLNEED) {
DRM_ERROR("Attempting to pin a purgeable buffer\n");
@@ -3559,14 +3871,15 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data,
goto out;
}
- obj->user_pin_count++;
- obj->pin_filp = file;
- if (obj->user_pin_count == 1) {
- ret = i915_gem_object_pin(obj, args->alignment, true);
+ if (obj->user_pin_count == 0) {
+ ret = i915_gem_object_pin(obj, args->alignment, true, false);
if (ret)
goto out;
}
+ obj->user_pin_count++;
+ obj->pin_filp = file;
+
/* XXX - flush the CPU caches for pinned objects
* as the X server doesn't manage domains yet
*/
@@ -3634,18 +3947,17 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
goto unlock;
}
- args->busy = obj->active;
- if (args->busy) {
- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
- ret = i915_gem_flush_ring(obj->ring,
- 0, obj->base.write_domain);
- } else {
- ret = i915_gem_check_olr(obj->ring,
- obj->last_rendering_seqno);
- }
+ /* Count all active objects as busy, even if they are currently not used
+ * by the gpu. Users of this interface expect objects to eventually
+ * become non-busy without any further actions, therefore emit any
+ * necessary flushes here.
+ */
+ ret = i915_gem_object_flush_active(obj);
- i915_gem_retire_requests_ring(obj->ring);
- args->busy = obj->active;
+ args->busy = obj->active;
+ if (obj->ring) {
+ BUILD_BUG_ON(I915_NUM_RINGS > 16);
+ args->busy |= intel_ring_flag(obj->ring) << 16;
}
drm_gem_object_unreference(&obj->base);
@@ -3692,14 +4004,14 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
goto out;
}
- if (obj->madv != I915_MADV_PURGED_INTERNAL)
+ if (obj->madv != __I915_MADV_PURGED)
obj->madv = args->madv;
/* if the object is no longer attached, discard its backing storage */
- if (i915_gem_object_is_purgeable(obj) && obj->gtt_space == NULL)
+ if (i915_gem_object_is_purgeable(obj) && obj->pages == NULL)
i915_gem_object_truncate(obj);
- args->retained = obj->madv != I915_MADV_PURGED_INTERNAL;
+ args->retained = obj->madv != __I915_MADV_PURGED;
out:
drm_gem_object_unreference(&obj->base);
@@ -3708,21 +4020,57 @@ unlock:
return ret;
}
+void i915_gem_object_init(struct drm_i915_gem_object *obj,
+ const struct drm_i915_gem_object_ops *ops)
+{
+ INIT_LIST_HEAD(&obj->mm_list);
+ INIT_LIST_HEAD(&obj->gtt_list);
+ INIT_LIST_HEAD(&obj->ring_list);
+ INIT_LIST_HEAD(&obj->exec_list);
+
+ obj->ops = ops;
+
+ obj->fence_reg = I915_FENCE_REG_NONE;
+ obj->madv = I915_MADV_WILLNEED;
+ /* Avoid an unnecessary call to unbind on the first bind. */
+ obj->map_and_fenceable = true;
+
+ i915_gem_info_add_obj(obj->base.dev->dev_private, obj->base.size);
+}
+
+static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
+ .get_pages = i915_gem_object_get_pages_gtt,
+ .put_pages = i915_gem_object_put_pages_gtt,
+};
+
struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
size_t size)
{
- struct drm_i915_private *dev_priv;
struct drm_i915_gem_object *obj;
- dev_priv = dev->dev_private;
-
obj = malloc(sizeof(*obj), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (obj == NULL)
+ return NULL;
if (drm_gem_object_init(dev, &obj->base, size) != 0) {
free(obj, DRM_I915_GEM);
return NULL;
}
+#ifdef FREEBSD_WIP
+ mask = GFP_HIGHUSER | __GFP_RECLAIMABLE;
+ if (IS_CRESTLINE(dev) || IS_BROADWATER(dev)) {
+ /* 965gm cannot relocate objects above 4GiB. */
+ mask &= ~__GFP_HIGHMEM;
+ mask |= __GFP_DMA32;
+ }
+
+ mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping;
+ mapping_set_gfp_mask(mapping, mask);
+#endif /* FREEBSD_WIP */
+
+ i915_gem_object_init(obj, &i915_gem_object_ops);
+
obj->base.write_domain = I915_GEM_DOMAIN_CPU;
obj->base.read_domains = I915_GEM_DOMAIN_CPU;
@@ -3742,18 +4090,6 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
obj->cache_level = I915_CACHE_LLC;
} else
obj->cache_level = I915_CACHE_NONE;
- obj->base.driver_private = NULL;
- obj->fence_reg = I915_FENCE_REG_NONE;
- INIT_LIST_HEAD(&obj->mm_list);
- INIT_LIST_HEAD(&obj->gtt_list);
- INIT_LIST_HEAD(&obj->ring_list);
- INIT_LIST_HEAD(&obj->exec_list);
- INIT_LIST_HEAD(&obj->gpu_write_list);
- obj->madv = I915_MADV_WILLNEED;
- /* Avoid an unnecessary call to unbind on the first bind. */
- obj->map_and_fenceable = true;
-
- i915_gem_info_add_obj(dev_priv, size);
return obj;
}
@@ -3777,19 +4113,28 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
i915_gem_detach_phys_object(dev, obj);
obj->pin_count = 0;
- if (i915_gem_object_unbind(obj) == -ERESTARTSYS) {
+ if (WARN_ON(i915_gem_object_unbind(obj) == -ERESTARTSYS)) {
bool was_interruptible;
was_interruptible = dev_priv->mm.interruptible;
dev_priv->mm.interruptible = false;
- if (i915_gem_object_unbind(obj))
- printf("i915_gem_free_object: unbind\n");
+ WARN_ON(i915_gem_object_unbind(obj));
dev_priv->mm.interruptible = was_interruptible;
}
- drm_gem_free_mmap_offset(&obj->base);
+ obj->pages_pin_count = 0;
+ i915_gem_object_put_pages(obj);
+ i915_gem_object_free_mmap_offset(obj);
+
+ BUG_ON(obj->pages);
+
+#ifdef FREEBSD_WIP
+ if (obj->base.import_attach)
+ drm_prime_gem_destroy(&obj->base, NULL);
+#endif /* FREEBSD_WIP */
+
drm_gem_object_release(&obj->base);
i915_gem_info_remove_obj(dev_priv, obj->base.size);
@@ -3818,13 +4163,8 @@ i915_gem_idle(struct drm_device *dev)
i915_gem_retire_requests(dev);
/* Under UMS, be paranoid and evict. */
- if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
- ret = i915_gem_evict_everything(dev, false);
- if (ret) {
- DRM_UNLOCK(dev);
- return ret;
- }
- }
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ i915_gem_evict_everything(dev);
i915_gem_reset_fences(dev);
@@ -3841,9 +4181,41 @@ i915_gem_idle(struct drm_device *dev)
DRM_UNLOCK(dev);
/* Cancel the retire work handler, which should be idle now. */
- taskqueue_cancel_timeout(dev_priv->tq, &dev_priv->mm.retire_task, NULL);
+ taskqueue_cancel_timeout(dev_priv->wq, &dev_priv->mm.retire_work, NULL);
- return ret;
+ return 0;
+}
+
+void i915_gem_l3_remap(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 misccpctl;
+ int i;
+
+ if (!HAS_L3_GPU_CACHE(dev))
+ return;
+
+ if (!dev_priv->l3_parity.remap_info)
+ return;
+
+ misccpctl = I915_READ(GEN7_MISCCPCTL);
+ I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
+ POSTING_READ(GEN7_MISCCPCTL);
+
+ for (i = 0; i < GEN7_L3LOG_SIZE; i += 4) {
+ u32 remap = I915_READ(GEN7_L3LOG_BASE + i);
+ if (remap && remap != dev_priv->l3_parity.remap_info[i/4])
+ DRM_DEBUG("0x%x was already programmed to %x\n",
+ GEN7_L3LOG_BASE + i, remap);
+ if (remap && !dev_priv->l3_parity.remap_info[i/4])
+ DRM_DEBUG_DRIVER("Clearing remapped register\n");
+ I915_WRITE(GEN7_L3LOG_BASE + i, dev_priv->l3_parity.remap_info[i/4]);
+ }
+
+ /* Make sure all the writes land before disabling dop clock gating */
+ POSTING_READ(GEN7_L3LOG_BASE);
+
+ I915_WRITE(GEN7_MISCCPCTL, misccpctl);
}
void i915_gem_init_swizzling(struct drm_device *dev)
@@ -3867,12 +4239,38 @@ void i915_gem_init_swizzling(struct drm_device *dev)
I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
}
+static bool
+intel_enable_blt(struct drm_device *dev)
+{
+ if (!HAS_BLT(dev))
+ return false;
+
+ /* The blitter was dysfunctional on early prototypes */
+ if (IS_GEN6(dev) && pci_get_revid(dev->dev) < 8) {
+ DRM_INFO("BLT not supported on this pre-production hardware;"
+ " graphics performance will be degraded.\n");
+ return false;
+ }
+
+ return true;
+}
+
int
i915_gem_init_hw(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
int ret;
+#ifdef FREEBSD_WIP
+ if (INTEL_INFO(dev)->gen < 6 && !intel_enable_gtt())
+ return -EIO;
+#endif /* FREEBSD_WIP */
+
+ if (IS_HASWELL(dev) && (I915_READ(0x120010) == 1))
+ I915_WRITE(0x9008, I915_READ(0x9008) | 0xf0000);
+
+ i915_gem_l3_remap(dev);
+
i915_gem_init_swizzling(dev);
ret = intel_init_render_ring_buffer(dev);
@@ -3885,7 +4283,7 @@ i915_gem_init_hw(struct drm_device *dev)
goto cleanup_render_ring;
}
- if (HAS_BLT(dev)) {
+ if (intel_enable_blt(dev)) {
ret = intel_init_blt_ring_buffer(dev);
if (ret)
goto cleanup_bsd_ring;
@@ -3903,9 +4301,9 @@ i915_gem_init_hw(struct drm_device *dev)
return 0;
cleanup_bsd_ring:
- intel_cleanup_ring_buffer(&dev_priv->rings[VCS]);
+ intel_cleanup_ring_buffer(&dev_priv->ring[VCS]);
cleanup_render_ring:
- intel_cleanup_ring_buffer(&dev_priv->rings[RCS]);
+ intel_cleanup_ring_buffer(&dev_priv->ring[RCS]);
return ret;
}
@@ -3915,9 +4313,11 @@ intel_enable_ppgtt(struct drm_device *dev)
if (i915_enable_ppgtt >= 0)
return i915_enable_ppgtt;
+#ifdef CONFIG_INTEL_IOMMU
/* Disable ppgtt on SNB if VT-d is on. */
- if (INTEL_INFO(dev)->gen == 6 && intel_iommu_enabled)
+ if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
return false;
+#endif
return true;
}
@@ -3928,8 +4328,8 @@ int i915_gem_init(struct drm_device *dev)
unsigned long gtt_size, mappable_size;
int ret;
- gtt_size = dev_priv->mm.gtt.gtt_total_entries << PAGE_SHIFT;
- mappable_size = dev_priv->mm.gtt.gtt_mappable_entries << PAGE_SHIFT;
+ gtt_size = dev_priv->mm.gtt->gtt_total_entries << PAGE_SHIFT;
+ mappable_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
DRM_LOCK(dev);
if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
@@ -3993,9 +4393,9 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
if (drm_core_check_feature(dev, DRIVER_MODESET))
return 0;
- if (atomic_load_acq_int(&dev_priv->mm.wedged) != 0) {
+ if (atomic_read(&dev_priv->mm.wedged)) {
DRM_ERROR("Reenabling wedged hardware, good luck\n");
- atomic_store_rel_int(&dev_priv->mm.wedged, 0);
+ atomic_set(&dev_priv->mm.wedged, 0);
}
DRM_LOCK(dev);
@@ -4007,9 +4407,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
return ret;
}
- KASSERT(list_empty(&dev_priv->mm.active_list), ("active list"));
- KASSERT(list_empty(&dev_priv->mm.flushing_list), ("flushing list"));
- KASSERT(list_empty(&dev_priv->mm.inactive_list), ("inactive list"));
+ BUG_ON(!list_empty(&dev_priv->mm.active_list));
DRM_UNLOCK(dev);
ret = drm_irq_install(dev);
@@ -4056,7 +4454,6 @@ init_ring_lists(struct intel_ring_buffer *ring)
{
INIT_LIST_HEAD(&ring->active_list);
INIT_LIST_HEAD(&ring->request_list);
- INIT_LIST_HEAD(&ring->gpu_write_list);
}
void
@@ -4066,17 +4463,17 @@ i915_gem_load(struct drm_device *dev)
drm_i915_private_t *dev_priv = dev->dev_private;
INIT_LIST_HEAD(&dev_priv->mm.active_list);
- INIT_LIST_HEAD(&dev_priv->mm.flushing_list);
INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
+ INIT_LIST_HEAD(&dev_priv->mm.unbound_list);
+ INIT_LIST_HEAD(&dev_priv->mm.bound_list);
INIT_LIST_HEAD(&dev_priv->mm.fence_list);
- INIT_LIST_HEAD(&dev_priv->mm.gtt_list);
for (i = 0; i < I915_NUM_RINGS; i++)
- init_ring_lists(&dev_priv->rings[i]);
+ init_ring_lists(&dev_priv->ring[i]);
for (i = 0; i < I915_MAX_NUM_FENCES; i++)
INIT_LIST_HEAD(&dev_priv->fence_regs[i].lru_list);
- TIMEOUT_TASK_INIT(dev_priv->tq, &dev_priv->mm.retire_task, 0,
- i915_gem_retire_task_handler, dev_priv);
- dev_priv->error_completion = 0;
+ TIMEOUT_TASK_INIT(dev_priv->wq, &dev_priv->mm.retire_work, 0,
+ i915_gem_retire_work_handler, dev_priv);
+ init_completion(&dev_priv->error_completion);
/* On GEN3 we really need to make sure the ARB C3 LP bit is set */
if (IS_GEN3(dev)) {
@@ -4099,19 +4496,12 @@ i915_gem_load(struct drm_device *dev)
i915_gem_reset_fences(dev);
i915_gem_detect_bit_6_swizzle(dev);
- dev_priv->mm.interruptible = true;
+ DRM_INIT_WAITQUEUE(&dev_priv->pending_flip_queue);
- dev_priv->mm.i915_lowmem = EVENTHANDLER_REGISTER(vm_lowmem,
- i915_gem_lowmem, dev, EVENTHANDLER_PRI_ANY);
-}
-
-void
-i915_gem_unload(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv;
+ dev_priv->mm.interruptible = true;
- dev_priv = dev->dev_private;
- EVENTHANDLER_DEREGISTER(vm_lowmem, dev_priv->mm.i915_lowmem);
+ dev_priv->mm.inactive_shrinker = EVENTHANDLER_REGISTER(vm_lowmem,
+ i915_gem_inactive_shrink, dev, EVENTHANDLER_PRI_ANY);
}
/*
@@ -4130,6 +4520,8 @@ static int i915_gem_init_phys_object(struct drm_device *dev,
phys_obj = malloc(sizeof(struct drm_i915_gem_phys_object),
DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!phys_obj)
+ return -ENOMEM;
phys_obj->id = id;
@@ -4138,8 +4530,10 @@ static int i915_gem_init_phys_object(struct drm_device *dev,
ret = -ENOMEM;
goto kfree_obj;
}
+#ifdef CONFIG_X86
pmap_change_attr((vm_offset_t)phys_obj->handle->vaddr,
size / PAGE_SIZE, PAT_WRITE_COMBINING);
+#endif
dev_priv->mm.phys_objs[id - 1] = phys_obj;
@@ -4162,6 +4556,12 @@ static void i915_gem_free_phys_object(struct drm_device *dev, int id)
i915_gem_detach_phys_object(dev, phys_obj->cur_obj);
}
+#ifdef FREEBSD_WIP
+#ifdef CONFIG_X86
+ set_memory_wb((unsigned long)phys_obj->handle->vaddr, phys_obj->handle->size / PAGE_SIZE);
+#endif
+#endif /* FREEBSD_WIP */
+
drm_pci_free(dev, phys_obj->handle);
free(phys_obj, DRM_I915_GEM);
dev_priv->mm.phys_objs[id - 1] = NULL;
@@ -4178,10 +4578,11 @@ void i915_gem_free_all_phys_object(struct drm_device *dev)
void i915_gem_detach_phys_object(struct drm_device *dev,
struct drm_i915_gem_object *obj)
{
- vm_page_t page;
struct sf_buf *sf;
- char *vaddr, *dst;
- int i, page_count;
+ char *vaddr;
+ char *dst;
+ int i;
+ int page_count;
if (!obj->phys_obj)
return;
@@ -4190,7 +4591,7 @@ void i915_gem_detach_phys_object(struct drm_device *dev,
page_count = obj->base.size / PAGE_SIZE;
VM_OBJECT_WLOCK(obj->base.vm_obj);
for (i = 0; i < page_count; i++) {
- page = i915_gem_wire_page(obj->base.vm_obj, i, NULL);
+ vm_page_t page = i915_gem_wire_page(obj->base.vm_obj, i, NULL);
if (page == NULL)
continue; /* XXX */
@@ -4212,7 +4613,7 @@ void i915_gem_detach_phys_object(struct drm_device *dev,
atomic_add_long(&i915_gem_wired_pages_cnt, -1);
}
VM_OBJECT_WUNLOCK(obj->base.vm_obj);
- intel_gtt_chipset_flush();
+ i915_gem_chipset_flush(dev);
obj->phys_obj->cur_obj = NULL;
obj->phys_obj = NULL;
@@ -4225,7 +4626,6 @@ i915_gem_attach_phys_object(struct drm_device *dev,
int align)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- vm_page_t page;
struct sf_buf *sf;
char *dst, *src;
int ret = 0;
@@ -4260,7 +4660,7 @@ i915_gem_attach_phys_object(struct drm_device *dev,
VM_OBJECT_WLOCK(obj->base.vm_obj);
for (i = 0; i < page_count; i++) {
- page = i915_gem_wire_page(obj->base.vm_obj, i, NULL);
+ vm_page_t page = i915_gem_wire_page(obj->base.vm_obj, i, NULL);
if (page == NULL) {
ret = -EIO;
break;
@@ -4320,7 +4720,7 @@ void i915_gem_release(struct drm_device *dev, struct drm_file *file)
* later retire_requests won't dereference our soon-to-be-gone
* file_priv.
*/
- mtx_lock(&file_priv->mm.lck);
+ mtx_lock(&file_priv->mm.lock);
while (!list_empty(&file_priv->mm.request_list)) {
struct drm_i915_gem_request *request;
@@ -4330,7 +4730,29 @@ void i915_gem_release(struct drm_device *dev, struct drm_file *file)
list_del(&request->client_list);
request->file_priv = NULL;
}
- mtx_unlock(&file_priv->mm.lck);
+ mtx_unlock(&file_priv->mm.lock);
+}
+
+static void
+i915_gem_inactive_shrink(void *arg)
+{
+ struct drm_device *dev = arg;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pass1, pass2;
+
+ if (!sx_try_xlock(&dev->dev_struct_lock)) {
+ return;
+ }
+
+ CTR0(KTR_DRM, "gem_lowmem");
+
+ pass1 = i915_gem_purge(dev_priv, -1);
+ pass2 = __i915_gem_shrink(dev_priv, -1, false);
+
+ if (pass2 <= pass1 / 100)
+ i915_gem_shrink_all(dev_priv);
+
+ DRM_UNLOCK(dev);
}
static vm_page_t
@@ -4369,11 +4791,3 @@ i915_gem_wire_page(vm_object_t object, vm_pindex_t pindex, bool *fresh)
atomic_add_long(&i915_gem_wired_pages_cnt, 1);
return (page);
}
-
-#undef __user
-#undef __force
-#undef __iomem
-#undef __must_check
-#undef to_user_ptr
-#undef offset_in_page
-#undef page_to_phys
diff --git a/sys/dev/drm2/i915/i915_gem_context.c b/sys/dev/drm2/i915/i915_gem_context.c
index 39d09b0..5ab9af1 100644
--- a/sys/dev/drm2/i915/i915_gem_context.c
+++ b/sys/dev/drm2/i915/i915_gem_context.c
@@ -115,11 +115,9 @@ static int get_context_size(struct drm_device *dev)
break;
case 7:
reg = I915_READ(GEN7_CXT_SIZE);
-#ifdef FREEBSD_WIP
if (IS_HASWELL(dev))
ret = HSW_CXT_TOTAL_SIZE(reg) * 64;
else
-#endif
ret = GEN7_CXT_TOTAL_SIZE(reg) * 64;
break;
default:
@@ -140,7 +138,7 @@ static void do_destroy(struct i915_hw_context *ctx)
if (ctx->file_priv)
drm_gem_names_remove(&ctx->file_priv->context_idr, ctx->id);
else
- KASSERT(ctx == dev_priv->rings[RCS].default_context,
+ KASSERT(ctx == dev_priv->ring[RCS].default_context,
("i915_gem_context: ctx != default_context"));
drm_gem_object_unreference(&ctx->obj->base);
@@ -178,7 +176,7 @@ create_hw_context(struct drm_device *dev,
* object tracking code. We give an initial ring value simple to pass an
* assertion in the context switch code.
*/
- ctx->ring = &dev_priv->rings[RCS];
+ ctx->ring = &dev_priv->ring[RCS];
/* Default context will never have a file_priv */
if (file_priv == NULL) {
@@ -234,8 +232,8 @@ static int create_default_context(struct drm_i915_private *dev_priv)
* may not be available. To avoid this we always pin the
* default context.
*/
- dev_priv->rings[RCS].default_context = ctx;
- ret = i915_gem_object_pin(ctx->obj, CONTEXT_ALIGN, false);
+ dev_priv->ring[RCS].default_context = ctx;
+ ret = i915_gem_object_pin(ctx->obj, CONTEXT_ALIGN, false, false);
if (ret)
goto err_destroy;
@@ -265,12 +263,12 @@ void i915_gem_context_init(struct drm_device *dev)
/* If called from reset, or thaw... we've been here already */
if (dev_priv->hw_contexts_disabled ||
- dev_priv->rings[RCS].default_context)
+ dev_priv->ring[RCS].default_context)
return;
ctx_size = get_context_size(dev);
dev_priv->hw_context_size = get_context_size(dev);
- dev_priv->hw_context_size = roundup(dev_priv->hw_context_size, 4096);
+ dev_priv->hw_context_size = round_up(dev_priv->hw_context_size, 4096);
if (ctx_size <= 0 || ctx_size > (1<<20)) {
dev_priv->hw_contexts_disabled = true;
@@ -297,9 +295,9 @@ void i915_gem_context_fini(struct drm_device *dev)
* other code, leading to spurious errors. */
intel_gpu_reset(dev);
- i915_gem_object_unpin(dev_priv->rings[RCS].default_context->obj);
+ i915_gem_object_unpin(dev_priv->ring[RCS].default_context->obj);
- do_destroy(dev_priv->rings[RCS].default_context);
+ do_destroy(dev_priv->ring[RCS].default_context);
}
static int context_idr_cleanup(uint32_t id, void *p, void *data)
@@ -389,7 +387,7 @@ static int do_switch(struct i915_hw_context *to)
if (from_obj == to->obj)
return 0;
- ret = i915_gem_object_pin(to->obj, CONTEXT_ALIGN, false);
+ ret = i915_gem_object_pin(to->obj, CONTEXT_ALIGN, false, false);
if (ret)
return ret;
@@ -426,8 +424,7 @@ static int do_switch(struct i915_hw_context *to)
*/
if (from_obj != NULL) {
from_obj->base.read_domains = I915_GEM_DOMAIN_INSTRUCTION;
- i915_gem_object_move_to_active(from_obj, ring,
- i915_gem_next_request_seqno(ring));
+ i915_gem_object_move_to_active(from_obj, ring);
/* As long as MI_SET_CONTEXT is serializing, ie. it flushes the
* whole damn pipeline, we don't need to explicitly mark the
* object dirty. The only exception is that the context must be
@@ -472,7 +469,7 @@ int i915_switch_context(struct intel_ring_buffer *ring,
if (dev_priv->hw_contexts_disabled)
return 0;
- if (ring != &dev_priv->rings[RCS])
+ if (ring != &dev_priv->ring[RCS])
return 0;
if (to_id == DEFAULT_CONTEXT_ID) {
diff --git a/sys/dev/drm2/i915/i915_gem_evict.c b/sys/dev/drm2/i915/i915_gem_evict.c
index e800b8f..f68eeb6 100644
--- a/sys/dev/drm2/i915/i915_gem_evict.c
+++ b/sys/dev/drm2/i915/i915_gem_evict.c
@@ -30,9 +30,8 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/i915_drm.h>
static bool
mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
@@ -46,7 +45,8 @@ mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
int
i915_gem_evict_something(struct drm_device *dev, int min_size,
- unsigned alignment, bool mappable)
+ unsigned alignment, unsigned cache_level,
+ bool mappable, bool nonblocking)
{
drm_i915_private_t *dev_priv = dev->dev_private;
struct list_head eviction_list, unwind_list;
@@ -81,11 +81,12 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
INIT_LIST_HEAD(&unwind_list);
if (mappable)
- drm_mm_init_scan_with_range(&dev_priv->mm.gtt_space, min_size,
- alignment, 0, 0,
- dev_priv->mm.gtt_mappable_end);
+ drm_mm_init_scan_with_range(&dev_priv->mm.gtt_space,
+ min_size, alignment, cache_level,
+ 0, dev_priv->mm.gtt_mappable_end);
else
- drm_mm_init_scan(&dev_priv->mm.gtt_space, min_size, alignment, 0);
+ drm_mm_init_scan(&dev_priv->mm.gtt_space,
+ min_size, alignment, cache_level);
/* First see if there is a large enough contiguous idle region... */
list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
@@ -93,29 +94,16 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
goto found;
}
- /* Now merge in the soon-to-be-expired objects... */
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
- /* Does the object require an outstanding flush? */
- if (obj->base.write_domain)
- continue;
-
- if (mark_free(obj, &unwind_list))
- goto found;
- }
+ if (nonblocking)
+ goto none;
- /* Finally add anything with a pending flush (in order of retirement) */
- list_for_each_entry(obj, &dev_priv->mm.flushing_list, mm_list) {
- if (mark_free(obj, &unwind_list))
- goto found;
- }
+ /* Now merge in the soon-to-be-expired objects... */
list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
- if (!obj->base.write_domain)
- continue;
-
if (mark_free(obj, &unwind_list))
goto found;
}
+none:
/* Nothing found, clean up and bail out! */
while (!list_empty(&unwind_list)) {
obj = list_first_entry(&unwind_list,
@@ -123,7 +111,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
exec_list);
ret = drm_mm_scan_remove_block(obj->gtt_space);
- KASSERT(ret == 0, ("drm_mm_scan_remove_block failed %d", ret));
+ BUG_ON(ret);
list_del_init(&obj->exec_list);
}
@@ -166,7 +154,7 @@ found:
}
int
-i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
+i915_gem_evict_everything(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj, *next;
@@ -174,12 +162,11 @@ i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
int ret;
lists_empty = (list_empty(&dev_priv->mm.inactive_list) &&
- list_empty(&dev_priv->mm.flushing_list) &&
list_empty(&dev_priv->mm.active_list));
if (lists_empty)
return -ENOSPC;
- CTR2(KTR_DRM, "evict_everything %p %d", dev, purgeable_only);
+ CTR1(KTR_DRM, "evict_everything %p", dev);
/* The gpu_idle will flush everything in the write domain to the
* active list. Then we must move everything off the active list
@@ -191,17 +178,11 @@ i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
i915_gem_retire_requests(dev);
- KASSERT(list_empty(&dev_priv->mm.flushing_list),
- ("flush list not empty"));
-
/* Having flushed everything, unbind() should never raise an error */
list_for_each_entry_safe(obj, next,
- &dev_priv->mm.inactive_list, mm_list) {
- if (!purgeable_only || obj->madv != I915_MADV_WILLNEED) {
- if (obj->pin_count == 0)
- i915_gem_object_unbind(obj);
- }
- }
+ &dev_priv->mm.inactive_list, mm_list)
+ if (obj->pin_count == 0)
+ WARN_ON(i915_gem_object_unbind(obj));
return 0;
}
diff --git a/sys/dev/drm2/i915/i915_gem_execbuffer.c b/sys/dev/drm2/i915/i915_gem_execbuffer.c
index 6ed1bb9..be3a9c1 100644
--- a/sys/dev/drm2/i915/i915_gem_execbuffer.c
+++ b/sys/dev/drm2/i915/i915_gem_execbuffer.c
@@ -30,226 +30,59 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
+
#include <sys/limits.h>
#include <sys/sf_buf.h>
-struct change_domains {
- uint32_t invalidate_domains;
- uint32_t flush_domains;
- uint32_t flush_rings;
- uint32_t flips;
-};
-
-/*
- * Set the next domain for the specified object. This
- * may not actually perform the necessary flushing/invaliding though,
- * as that may want to be batched with other set_domain operations
- *
- * This is (we hope) the only really tricky part of gem. The goal
- * is fairly simple -- track which caches hold bits of the object
- * and make sure they remain coherent. A few concrete examples may
- * help to explain how it works. For shorthand, we use the notation
- * (read_domains, write_domain), e.g. (CPU, CPU) to indicate the
- * a pair of read and write domain masks.
- *
- * Case 1: the batch buffer
- *
- * 1. Allocated
- * 2. Written by CPU
- * 3. Mapped to GTT
- * 4. Read by GPU
- * 5. Unmapped from GTT
- * 6. Freed
- *
- * Let's take these a step at a time
- *
- * 1. Allocated
- * Pages allocated from the kernel may still have
- * cache contents, so we set them to (CPU, CPU) always.
- * 2. Written by CPU (using pwrite)
- * The pwrite function calls set_domain (CPU, CPU) and
- * this function does nothing (as nothing changes)
- * 3. Mapped by GTT
- * This function asserts that the object is not
- * currently in any GPU-based read or write domains
- * 4. Read by GPU
- * i915_gem_execbuffer calls set_domain (COMMAND, 0).
- * As write_domain is zero, this function adds in the
- * current read domains (CPU+COMMAND, 0).
- * flush_domains is set to CPU.
- * invalidate_domains is set to COMMAND
- * clflush is run to get data out of the CPU caches
- * then i915_dev_set_domain calls i915_gem_flush to
- * emit an MI_FLUSH and drm_agp_chipset_flush
- * 5. Unmapped from GTT
- * i915_gem_object_unbind calls set_domain (CPU, CPU)
- * flush_domains and invalidate_domains end up both zero
- * so no flushing/invalidating happens
- * 6. Freed
- * yay, done
- *
- * Case 2: The shared render buffer
- *
- * 1. Allocated
- * 2. Mapped to GTT
- * 3. Read/written by GPU
- * 4. set_domain to (CPU,CPU)
- * 5. Read/written by CPU
- * 6. Read/written by GPU
- *
- * 1. Allocated
- * Same as last example, (CPU, CPU)
- * 2. Mapped to GTT
- * Nothing changes (assertions find that it is not in the GPU)
- * 3. Read/written by GPU
- * execbuffer calls set_domain (RENDER, RENDER)
- * flush_domains gets CPU
- * invalidate_domains gets GPU
- * clflush (obj)
- * MI_FLUSH and drm_agp_chipset_flush
- * 4. set_domain (CPU, CPU)
- * flush_domains gets GPU
- * invalidate_domains gets CPU
- * wait_rendering (obj) to make sure all drawing is complete.
- * This will include an MI_FLUSH to get the data from GPU
- * to memory
- * clflush (obj) to invalidate the CPU cache
- * Another MI_FLUSH in i915_gem_flush (eliminate this somehow?)
- * 5. Read/written by CPU
- * cache lines are loaded and dirtied
- * 6. Read written by GPU
- * Same as last GPU access
- *
- * Case 3: The constant buffer
- *
- * 1. Allocated
- * 2. Written by CPU
- * 3. Read by GPU
- * 4. Updated (written) by CPU again
- * 5. Read by GPU
- *
- * 1. Allocated
- * (CPU, CPU)
- * 2. Written by CPU
- * (CPU, CPU)
- * 3. Read by GPU
- * (CPU+RENDER, 0)
- * flush_domains = CPU
- * invalidate_domains = RENDER
- * clflush (obj)
- * MI_FLUSH
- * drm_agp_chipset_flush
- * 4. Updated (written) by CPU again
- * (CPU, CPU)
- * flush_domains = 0 (no previous write domain)
- * invalidate_domains = 0 (no new read domains)
- * 5. Read by GPU
- * (CPU+RENDER, 0)
- * flush_domains = CPU
- * invalidate_domains = RENDER
- * clflush (obj)
- * MI_FLUSH
- * drm_agp_chipset_flush
- */
-static void
-i915_gem_object_set_to_gpu_domain(struct drm_i915_gem_object *obj,
- struct intel_ring_buffer *ring,
- struct change_domains *cd)
-{
- uint32_t invalidate_domains = 0, flush_domains = 0;
-
- /*
- * If the object isn't moving to a new write domain,
- * let the object stay in multiple read domains
- */
- if (obj->base.pending_write_domain == 0)
- obj->base.pending_read_domains |= obj->base.read_domains;
-
- /*
- * Flush the current write domain if
- * the new read domains don't match. Invalidate
- * any read domains which differ from the old
- * write domain
- */
- if (obj->base.write_domain &&
- (((obj->base.write_domain != obj->base.pending_read_domains ||
- obj->ring != ring)) ||
- (obj->fenced_gpu_access && !obj->pending_fenced_gpu_access))) {
- flush_domains |= obj->base.write_domain;
- invalidate_domains |=
- obj->base.pending_read_domains & ~obj->base.write_domain;
- }
- /*
- * Invalidate any read caches which may have
- * stale data. That is, any new read domains.
- */
- invalidate_domains |= obj->base.pending_read_domains & ~obj->base.read_domains;
- if ((flush_domains | invalidate_domains) & I915_GEM_DOMAIN_CPU)
- i915_gem_clflush_object(obj);
-
- if (obj->base.pending_write_domain)
- cd->flips |= atomic_load_acq_int(&obj->pending_flip);
-
- /* The actual obj->write_domain will be updated with
- * pending_write_domain after we emit the accumulated flush for all
- * of our domain changes in execbuffers (which clears objects'
- * write_domains). So if we have a current write domain that we
- * aren't changing, set pending_write_domain to that.
- */
- if (flush_domains == 0 && obj->base.pending_write_domain == 0)
- obj->base.pending_write_domain = obj->base.write_domain;
-
- cd->invalidate_domains |= invalidate_domains;
- cd->flush_domains |= flush_domains;
- if (flush_domains & I915_GEM_GPU_DOMAINS)
- cd->flush_rings |= intel_ring_flag(obj->ring);
- if (invalidate_domains & I915_GEM_GPU_DOMAINS)
- cd->flush_rings |= intel_ring_flag(ring);
-}
-
struct eb_objects {
- u_long hashmask;
- LIST_HEAD(, drm_i915_gem_object) *buckets;
+ int and;
+ struct hlist_head buckets[0];
};
static struct eb_objects *
eb_create(int size)
{
struct eb_objects *eb;
-
- eb = malloc(sizeof(*eb),
+ int count = PAGE_SIZE / sizeof(struct hlist_head) / 2;
+ BUILD_BUG_ON_NOT_POWER_OF_2(PAGE_SIZE / sizeof(struct hlist_head));
+ while (count > size)
+ count >>= 1;
+ eb = malloc(count*sizeof(struct hlist_head) +
+ sizeof(struct eb_objects),
DRM_I915_GEM, M_WAITOK | M_ZERO);
- eb->buckets = hashinit(size, DRM_I915_GEM, &eb->hashmask);
+ if (eb == NULL)
+ return eb;
+
+ eb->and = count - 1;
return eb;
}
static void
eb_reset(struct eb_objects *eb)
{
- int i;
-
- for (i = 0; i <= eb->hashmask; i++)
- LIST_INIT(&eb->buckets[i]);
+ memset(eb->buckets, 0, (eb->and+1)*sizeof(struct hlist_head));
}
static void
eb_add_object(struct eb_objects *eb, struct drm_i915_gem_object *obj)
{
-
- LIST_INSERT_HEAD(&eb->buckets[obj->exec_handle & eb->hashmask],
- obj, exec_node);
+ hlist_add_head(&obj->exec_node,
+ &eb->buckets[obj->exec_handle & eb->and]);
}
static struct drm_i915_gem_object *
eb_get_object(struct eb_objects *eb, unsigned long handle)
{
+ struct hlist_head *head;
+ struct hlist_node *node;
struct drm_i915_gem_object *obj;
- LIST_FOREACH(obj, &eb->buckets[handle & eb->hashmask], exec_node) {
+ head = &eb->buckets[handle & eb->and];
+ hlist_for_each(node, head) {
+ obj = hlist_entry(node, struct drm_i915_gem_object, exec_node);
if (obj->exec_handle == handle)
return obj;
}
@@ -260,14 +93,13 @@ eb_get_object(struct eb_objects *eb, unsigned long handle)
static void
eb_destroy(struct eb_objects *eb)
{
-
- free(eb->buckets, DRM_I915_GEM);
free(eb, DRM_I915_GEM);
}
static inline int use_cpu_reloc(struct drm_i915_gem_object *obj)
{
return (obj->base.write_domain == I915_GEM_DOMAIN_CPU ||
+ !obj->map_and_fenceable ||
obj->cache_level != I915_CACHE_NONE);
}
@@ -290,28 +122,14 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
target_i915_obj = to_intel_bo(target_obj);
target_offset = target_i915_obj->gtt_offset;
-#if WATCH_RELOC
- DRM_INFO("%s: obj %p offset %08x target %d "
- "read %08x write %08x gtt %08x "
- "presumed %08x delta %08x\n",
- __func__,
- obj,
- (int) reloc->offset,
- (int) reloc->target_handle,
- (int) reloc->read_domains,
- (int) reloc->write_domain,
- (int) target_offset,
- (int) reloc->presumed_offset,
- reloc->delta);
-#endif
-
- /* The target buffer should have appeared before us in the
- * exec_object list, so it should have a GTT space bound by now.
- */
- if (unlikely(target_offset == 0)) {
- DRM_DEBUG("No GTT space found for object %d\n",
- reloc->target_handle);
- return ret;
+ /* Sandybridge PPGTT errata: We need a global gtt mapping for MI and
+ * pipe_control writes because the gpu doesn't properly redirect them
+ * through the ppgtt for non_secure batchbuffers. */
+ if (unlikely(IS_GEN6(dev) &&
+ reloc->write_domain == I915_GEM_DOMAIN_INSTRUCTION &&
+ !target_i915_obj->has_global_gtt_mapping)) {
+ i915_gem_gtt_bind_object(target_i915_obj,
+ target_i915_obj->cache_level);
}
/* Validate that the target is in a valid r/w GPU domain */
@@ -396,8 +214,9 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
*(uint32_t *)(vaddr + page_offset) = reloc->delta;
sf_buf_free(sf);
} else {
- uint32_t *reloc_entry;
- char *reloc_page;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t __iomem *reloc_entry;
+ char __iomem *reloc_page;
ret = i915_gem_object_set_to_gtt_domain(obj, true);
if (ret)
@@ -409,24 +228,14 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
/* Map the page containing the relocation we're going to perform. */
reloc->offset += obj->gtt_offset;
- reloc_page = pmap_mapdev_attr(dev->agp->base + (reloc->offset &
+ reloc_page = pmap_mapdev_attr(dev_priv->mm.gtt_base_addr + (reloc->offset &
~PAGE_MASK), PAGE_SIZE, PAT_WRITE_COMBINING);
- reloc_entry = (uint32_t *)
+ reloc_entry = (uint32_t __iomem *)
(reloc_page + (reloc->offset & PAGE_MASK));
*(volatile uint32_t *)reloc_entry = reloc->delta;
pmap_unmapdev((vm_offset_t)reloc_page, PAGE_SIZE);
}
- /* Sandybridge PPGTT errata: We need a global gtt mapping for MI and
- * pipe_control writes because the gpu doesn't properly redirect them
- * through the ppgtt for non_secure batchbuffers. */
- if (unlikely(IS_GEN6(dev) &&
- reloc->write_domain == I915_GEM_DOMAIN_INSTRUCTION &&
- !target_i915_obj->has_global_gtt_mapping)) {
- i915_gem_gtt_bind_object(target_i915_obj,
- target_i915_obj->cache_level);
- }
-
/* and update the user's relocation entry */
reloc->presumed_offset = target_offset;
@@ -439,22 +248,22 @@ i915_gem_execbuffer_relocate_object(struct drm_i915_gem_object *obj,
{
#define N_RELOC(x) ((x) / sizeof(struct drm_i915_gem_relocation_entry))
struct drm_i915_gem_relocation_entry stack_reloc[N_RELOC(512)];
- struct drm_i915_gem_relocation_entry *user_relocs;
+ struct drm_i915_gem_relocation_entry __user *user_relocs;
struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
int remain, ret;
- user_relocs = (void *)(uintptr_t)entry->relocs_ptr;
+ user_relocs = (void __user *)(uintptr_t)entry->relocs_ptr;
+
remain = entry->relocation_count;
while (remain) {
struct drm_i915_gem_relocation_entry *r = stack_reloc;
int count = remain;
- if (count > DRM_ARRAY_SIZE(stack_reloc))
- count = DRM_ARRAY_SIZE(stack_reloc);
+ if (count > ARRAY_SIZE(stack_reloc))
+ count = ARRAY_SIZE(stack_reloc);
remain -= count;
- ret = -copyin_nofault(user_relocs, r, count*sizeof(r[0]));
- if (ret != 0)
- return (ret);
+ if (__copy_from_user_inatomic(r, user_relocs, count*sizeof(r[0])))
+ return -EFAULT;
do {
u64 offset = r->presumed_offset;
@@ -464,9 +273,9 @@ i915_gem_execbuffer_relocate_object(struct drm_i915_gem_object *obj,
return ret;
if (r->presumed_offset != offset &&
- copyout_nofault(&r->presumed_offset,
- &user_relocs->presumed_offset,
- sizeof(r->presumed_offset))) {
+ __copy_to_user_inatomic(&user_relocs->presumed_offset,
+ &r->presumed_offset,
+ sizeof(r->presumed_offset))) {
return -EFAULT;
}
@@ -504,17 +313,12 @@ i915_gem_execbuffer_relocate(struct drm_device *dev,
struct drm_i915_gem_object *obj;
int ret = 0, pflags;
- /* Try to move as many of the relocation targets off the active list
- * to avoid unnecessary fallbacks to the slow path, as we cannot wait
- * for the retirement with pagefaults disabled.
- */
- i915_gem_retire_requests(dev);
-
/* This is the fast path and we cannot handle a pagefault whilst
- * holding the device lock lest the user pass in the relocations
+ * holding the struct mutex lest the user pass in the relocations
* contained within a mmaped bo. For in such a case we, the page
* fault handler would call i915_gem_fault() and we would try to
- * acquire the device lock again. Obviously this is bad.
+ * acquire the struct mutex again. Obviously this is bad and so
+ * lockdep complains vehemently.
*/
pflags = vm_fault_disable_pagefaults();
list_for_each_entry(obj, objects, exec_list) {
@@ -527,7 +331,8 @@ i915_gem_execbuffer_relocate(struct drm_device *dev,
return ret;
}
-#define __EXEC_OBJECT_HAS_FENCE (1<<31)
+#define __EXEC_OBJECT_HAS_PIN (1<<31)
+#define __EXEC_OBJECT_HAS_FENCE (1<<30)
static int
need_reloc_mappable(struct drm_i915_gem_object *obj)
@@ -537,9 +342,10 @@ need_reloc_mappable(struct drm_i915_gem_object *obj)
}
static int
-pin_and_fence_object(struct drm_i915_gem_object *obj,
- struct intel_ring_buffer *ring)
+i915_gem_execbuffer_reserve_object(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring)
{
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
bool need_fence, need_mappable;
@@ -551,15 +357,17 @@ pin_and_fence_object(struct drm_i915_gem_object *obj,
obj->tiling_mode != I915_TILING_NONE;
need_mappable = need_fence || need_reloc_mappable(obj);
- ret = i915_gem_object_pin(obj, entry->alignment, need_mappable);
+ ret = i915_gem_object_pin(obj, entry->alignment, need_mappable, false);
if (ret)
return ret;
+ entry->flags |= __EXEC_OBJECT_HAS_PIN;
+
if (has_fenced_gpu_access) {
if (entry->flags & EXEC_OBJECT_NEEDS_FENCE) {
ret = i915_gem_object_get_fence(obj);
if (ret)
- goto err_unpin;
+ return ret;
if (i915_gem_object_pin_fence(obj))
entry->flags |= __EXEC_OBJECT_HAS_FENCE;
@@ -568,12 +376,35 @@ pin_and_fence_object(struct drm_i915_gem_object *obj,
}
}
+ /* Ensure ppgtt mapping exists if needed */
+ if (dev_priv->mm.aliasing_ppgtt && !obj->has_aliasing_ppgtt_mapping) {
+ i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
+ obj, obj->cache_level);
+
+ obj->has_aliasing_ppgtt_mapping = 1;
+ }
+
entry->offset = obj->gtt_offset;
return 0;
+}
-err_unpin:
- i915_gem_object_unpin(obj);
- return ret;
+static void
+i915_gem_execbuffer_unreserve_object(struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_gem_exec_object2 *entry;
+
+ if (!obj->gtt_space)
+ return;
+
+ entry = obj->exec_entry;
+
+ if (entry->flags & __EXEC_OBJECT_HAS_FENCE)
+ i915_gem_object_unpin_fence(obj);
+
+ if (entry->flags & __EXEC_OBJECT_HAS_PIN)
+ i915_gem_object_unpin(obj);
+
+ entry->flags &= ~(__EXEC_OBJECT_HAS_FENCE | __EXEC_OBJECT_HAS_PIN);
}
static int
@@ -581,14 +412,11 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
struct drm_file *file,
struct list_head *objects)
{
- drm_i915_private_t *dev_priv;
struct drm_i915_gem_object *obj;
struct list_head ordered_objects;
bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
int retry;
- int ret;
- dev_priv = ring->dev->dev_private;
INIT_LIST_HEAD(&ordered_objects);
while (!list_empty(objects)) {
struct drm_i915_gem_exec_object2 *entry;
@@ -612,6 +440,7 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
obj->base.pending_read_domains = 0;
obj->base.pending_write_domain = 0;
+ obj->pending_fenced_gpu_access = false;
}
list_splice(&ordered_objects, objects);
@@ -629,7 +458,7 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
*/
retry = 0;
do {
- ret = 0;
+ int ret = 0;
/* Unbind any ill-fitting objects or pin. */
list_for_each_entry(obj, objects, exec_list) {
@@ -649,7 +478,7 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
(need_mappable && !obj->map_and_fenceable))
ret = i915_gem_object_unbind(obj);
else
- ret = pin_and_fence_object(obj, ring);
+ ret = i915_gem_execbuffer_reserve_object(obj, ring);
if (ret)
goto err;
}
@@ -659,78 +488,22 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
if (obj->gtt_space)
continue;
- ret = pin_and_fence_object(obj, ring);
- if (ret) {
- int ret_ignore;
-
- /* This can potentially raise a harmless
- * -EINVAL if we failed to bind in the above
- * call. It cannot raise -EINTR since we know
- * that the bo is freshly bound and so will
- * not need to be flushed or waited upon.
- */
- ret_ignore = i915_gem_object_unbind(obj);
- (void)ret_ignore;
- if (obj->gtt_space != NULL)
- printf("%s: gtt_space\n", __func__);
- break;
- }
+ ret = i915_gem_execbuffer_reserve_object(obj, ring);
+ if (ret)
+ goto err;
}
- /* Decrement pin count for bound objects */
- list_for_each_entry(obj, objects, exec_list) {
- struct drm_i915_gem_exec_object2 *entry;
-
- if (!obj->gtt_space)
- continue;
-
- entry = obj->exec_entry;
- if (entry->flags & __EXEC_OBJECT_HAS_FENCE) {
- i915_gem_object_unpin_fence(obj);
- entry->flags &= ~__EXEC_OBJECT_HAS_FENCE;
- }
-
- i915_gem_object_unpin(obj);
-
- /* ... and ensure ppgtt mapping exist if needed. */
- if (dev_priv->mm.aliasing_ppgtt && !obj->has_aliasing_ppgtt_mapping) {
- i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
- obj, obj->cache_level);
-
- obj->has_aliasing_ppgtt_mapping = 1;
- }
- }
+err: /* Decrement pin count for bound objects */
+ list_for_each_entry(obj, objects, exec_list)
+ i915_gem_execbuffer_unreserve_object(obj);
- if (ret != -ENOSPC || retry > 1)
+ if (ret != -ENOSPC || retry++)
return ret;
- /* First attempt, just clear anything that is purgeable.
- * Second attempt, clear the entire GTT.
- */
- ret = i915_gem_evict_everything(ring->dev, retry == 0);
+ ret = i915_gem_evict_everything(ring->dev);
if (ret)
return ret;
-
- retry++;
} while (1);
-
-err:
- list_for_each_entry_continue_reverse(obj, objects, exec_list) {
- struct drm_i915_gem_exec_object2 *entry;
-
- if (!obj->gtt_space)
- continue;
-
- entry = obj->exec_entry;
- if (entry->flags & __EXEC_OBJECT_HAS_FENCE) {
- i915_gem_object_unpin_fence(obj);
- entry->flags &= ~__EXEC_OBJECT_HAS_FENCE;
- }
-
- i915_gem_object_unpin(obj);
- }
-
- return ret;
}
static int
@@ -762,22 +535,49 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
for (i = 0; i < count; i++)
total += exec[i].relocation_count;
- reloc_offset = malloc(count * sizeof(*reloc_offset), DRM_I915_GEM,
- M_WAITOK | M_ZERO);
- reloc = malloc(total * sizeof(*reloc), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ reloc_offset = drm_malloc_ab(count, sizeof(*reloc_offset));
+ reloc = drm_malloc_ab(total, sizeof(*reloc));
+ if (reloc == NULL || reloc_offset == NULL) {
+ drm_free_large(reloc);
+ drm_free_large(reloc_offset);
+ DRM_LOCK(dev);
+ return -ENOMEM;
+ }
total = 0;
for (i = 0; i < count; i++) {
- struct drm_i915_gem_relocation_entry *user_relocs;
+ struct drm_i915_gem_relocation_entry __user *user_relocs;
+ u64 invalid_offset = (u64)-1;
+ int j;
+
+ user_relocs = (void __user *)(uintptr_t)exec[i].relocs_ptr;
- user_relocs = (void *)(uintptr_t)exec[i].relocs_ptr;
- ret = -copyin(user_relocs, reloc + total,
- exec[i].relocation_count * sizeof(*reloc));
- if (ret != 0) {
+ if (copy_from_user(reloc+total, user_relocs,
+ exec[i].relocation_count * sizeof(*reloc))) {
+ ret = -EFAULT;
DRM_LOCK(dev);
goto err;
}
+ /* As we do not update the known relocation offsets after
+ * relocating (due to the complexities in lock handling),
+ * we need to mark them as invalid now so that we force the
+ * relocation processing next time. Just in case the target
+ * object is evicted and then rebound into its old
+ * presumed_offset before the next execbuffer - if that
+ * happened we would make the mistake of assuming that the
+ * relocations were valid.
+ */
+ for (j = 0; j < exec[i].relocation_count; j++) {
+ if (copy_to_user(&user_relocs[j].presumed_offset,
+ &invalid_offset,
+ sizeof(invalid_offset))) {
+ ret = -EFAULT;
+ DRM_LOCK(dev);
+ goto err;
+ }
+ }
+
reloc_offset[i] = total;
total += exec[i].relocation_count;
}
@@ -791,8 +591,6 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
/* reacquire the objects */
eb_reset(eb);
for (i = 0; i < count; i++) {
- struct drm_i915_gem_object *obj;
-
obj = to_intel_bo(drm_gem_object_lookup(dev, file,
exec[i].handle));
if (&obj->base == NULL) {
@@ -827,40 +625,12 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
*/
err:
- free(reloc, DRM_I915_GEM);
- free(reloc_offset, DRM_I915_GEM);
+ drm_free_large(reloc);
+ drm_free_large(reloc_offset);
return ret;
}
static int
-i915_gem_execbuffer_flush(struct drm_device *dev,
- uint32_t invalidate_domains,
- uint32_t flush_domains,
- uint32_t flush_rings)
-{
- drm_i915_private_t *dev_priv = dev->dev_private;
- int i, ret;
-
- if (flush_domains & I915_GEM_DOMAIN_CPU)
- intel_gtt_chipset_flush();
-
- if (flush_domains & I915_GEM_DOMAIN_GTT)
- wmb();
-
- if ((flush_domains | invalidate_domains) & I915_GEM_GPU_DOMAINS) {
- for (i = 0; i < I915_NUM_RINGS; i++)
- if (flush_rings & (1 << i)) {
- ret = i915_gem_flush_ring(&dev_priv->rings[i],
- invalidate_domains, flush_domains);
- if (ret)
- return ret;
- }
- }
-
- return 0;
-}
-
-static int
i915_gem_execbuffer_wait_for_flips(struct intel_ring_buffer *ring, u32 flips)
{
u32 plane, flip_mask;
@@ -897,41 +667,40 @@ i915_gem_execbuffer_move_to_gpu(struct intel_ring_buffer *ring,
struct list_head *objects)
{
struct drm_i915_gem_object *obj;
- struct change_domains cd;
+ uint32_t flush_domains = 0;
+ uint32_t flips = 0;
int ret;
- memset(&cd, 0, sizeof(cd));
- list_for_each_entry(obj, objects, exec_list)
- i915_gem_object_set_to_gpu_domain(obj, ring, &cd);
-
- if (cd.invalidate_domains | cd.flush_domains) {
-#if WATCH_EXEC
- DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n",
- __func__,
- cd.invalidate_domains,
- cd.flush_domains);
-#endif
- ret = i915_gem_execbuffer_flush(ring->dev,
- cd.invalidate_domains,
- cd.flush_domains,
- cd.flush_rings);
+ list_for_each_entry(obj, objects, exec_list) {
+ ret = i915_gem_object_sync(obj, ring);
if (ret)
return ret;
- }
- if (cd.flips) {
- ret = i915_gem_execbuffer_wait_for_flips(ring, cd.flips);
- if (ret)
- return ret;
+ if (obj->base.write_domain & I915_GEM_DOMAIN_CPU)
+ i915_gem_clflush_object(obj);
+
+ if (obj->base.pending_write_domain)
+ flips |= atomic_read(&obj->pending_flip);
+
+ flush_domains |= obj->base.write_domain;
}
- list_for_each_entry(obj, objects, exec_list) {
- ret = i915_gem_object_sync(obj, ring);
+ if (flips) {
+ ret = i915_gem_execbuffer_wait_for_flips(ring, flips);
if (ret)
return ret;
}
- return 0;
+ if (flush_domains & I915_GEM_DOMAIN_CPU)
+ i915_gem_chipset_flush(ring->dev);
+
+ if (flush_domains & I915_GEM_DOMAIN_GTT)
+ wmb();
+
+ /* Unconditionally invalidate gpu caches and ensure that we do flush
+ * any residual writes from the previous batch.
+ */
+ return intel_ring_invalidate_all_caches(ring);
}
static bool
@@ -941,11 +710,13 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
}
static int
-validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
- vm_page_t ***map, int **maplen)
+validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
+ int count, vm_page_t ***map, int **maplen)
{
+ int i;
+ int relocs_total = 0;
+ int relocs_max = INT_MAX / sizeof(struct drm_i915_gem_relocation_entry);
vm_page_t *ma;
- int i, length, page_count;
/* XXXKIB various limits checking is missing there */
*map = malloc(count * sizeof(*ma), DRM_I915_GEM, M_WAITOK | M_ZERO);
@@ -953,10 +724,16 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
M_ZERO);
for (i = 0; i < count; i++) {
- /* First check for malicious input causing overflow */
- if (exec[i].relocation_count >
- INT_MAX / sizeof(struct drm_i915_gem_relocation_entry))
+ char __user *ptr = (char __user *)(uintptr_t)exec[i].relocs_ptr;
+ int length; /* limited by fault_in_pages_readable() */
+
+ /* First check for malicious input causing overflow in
+ * the worst case where we need to allocate the entire
+ * relocation tree as a single array.
+ */
+ if (exec[i].relocation_count > relocs_max - relocs_total)
return -EINVAL;
+ relocs_total += exec[i].relocation_count;
length = exec[i].relocation_count *
sizeof(struct drm_i915_gem_relocation_entry);
@@ -971,11 +748,13 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
* conservative and request a page slot for each
* partial page. Thus +2.
*/
+ int page_count;
+
page_count = howmany(length, PAGE_SIZE) + 2;
ma = (*map)[i] = malloc(page_count * sizeof(vm_page_t),
DRM_I915_GEM, M_WAITOK | M_ZERO);
(*maplen)[i] = vm_fault_quick_hold_pages(
- &curproc->p_vmspace->vm_map, exec[i].relocs_ptr, length,
+ &curproc->p_vmspace->vm_map, (vm_offset_t)ptr, length,
VM_PROT_READ | VM_PROT_WRITE, ma, page_count);
if ((*maplen)[i] == -1) {
free(ma, DRM_I915_GEM);
@@ -989,108 +768,45 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
static void
i915_gem_execbuffer_move_to_active(struct list_head *objects,
- struct intel_ring_buffer *ring,
- u32 seqno)
+ struct intel_ring_buffer *ring)
{
struct drm_i915_gem_object *obj;
- uint32_t old_read, old_write;
list_for_each_entry(obj, objects, exec_list) {
- old_read = obj->base.read_domains;
- old_write = obj->base.write_domain;
+#if defined(KTR)
+ u32 old_read = obj->base.read_domains;
+ u32 old_write = obj->base.write_domain;
+#endif
obj->base.read_domains = obj->base.pending_read_domains;
obj->base.write_domain = obj->base.pending_write_domain;
obj->fenced_gpu_access = obj->pending_fenced_gpu_access;
- i915_gem_object_move_to_active(obj, ring, seqno);
+ i915_gem_object_move_to_active(obj, ring);
if (obj->base.write_domain) {
obj->dirty = 1;
- obj->pending_gpu_write = true;
- list_move_tail(&obj->gpu_write_list,
- &ring->gpu_write_list);
+ obj->last_write_seqno = intel_ring_get_seqno(ring);
if (obj->pin_count) /* check for potential scanout */
- intel_mark_busy(ring->dev, obj);
+ intel_mark_fb_busy(obj);
}
+
CTR3(KTR_DRM, "object_change_domain move_to_active %p %x %x",
obj, old_read, old_write);
}
-
- intel_mark_busy(ring->dev, NULL);
}
-int i915_gem_sync_exec_requests;
-
static void
i915_gem_execbuffer_retire_commands(struct drm_device *dev,
struct drm_file *file,
struct intel_ring_buffer *ring)
{
- struct drm_i915_gem_request *request;
- u32 invalidate;
-
- /*
- * Ensure that the commands in the batch buffer are
- * finished before the interrupt fires.
- *
- * The sampler always gets flushed on i965 (sigh).
- */
- invalidate = I915_GEM_DOMAIN_COMMAND;
- if (INTEL_INFO(dev)->gen >= 4)
- invalidate |= I915_GEM_DOMAIN_SAMPLER;
- if (ring->flush(ring, invalidate, 0)) {
- i915_gem_next_request_seqno(ring);
- return;
- }
+ /* Unconditionally force add_request to emit a full flush. */
+ ring->gpu_caches_dirty = true;
/* Add a breadcrumb for the completion of the batch buffer */
- request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
- if (request == NULL || i915_add_request(ring, file, request)) {
- i915_gem_next_request_seqno(ring);
- free(request, DRM_I915_GEM);
- } else if (i915_gem_sync_exec_requests) {
- i915_wait_request(ring, request->seqno);
- i915_gem_retire_requests(dev);
- }
-}
-
-static void
-i915_gem_fix_mi_batchbuffer_end(struct drm_i915_gem_object *batch_obj,
- uint32_t batch_start_offset, uint32_t batch_len)
-{
- char *mkva;
- uint64_t po_r, po_w;
- uint32_t cmd;
-
- po_r = batch_obj->base.dev->agp->base + batch_obj->gtt_offset +
- batch_start_offset + batch_len;
- if (batch_len > 0)
- po_r -= 4;
- mkva = pmap_mapdev_attr(trunc_page(po_r), 2 * PAGE_SIZE,
- PAT_WRITE_COMBINING);
- po_r &= PAGE_MASK;
- cmd = *(uint32_t *)(mkva + po_r);
-
- if (cmd != MI_BATCH_BUFFER_END) {
- /*
- * batch_len != 0 due to the check at the start of
- * i915_gem_do_execbuffer
- */
- if (batch_obj->base.size > batch_start_offset + batch_len) {
- po_w = po_r + 4;
-/* DRM_DEBUG("batchbuffer does not end by MI_BATCH_BUFFER_END !\n"); */
- } else {
- po_w = po_r;
-DRM_DEBUG("batchbuffer does not end by MI_BATCH_BUFFER_END, overwriting last bo cmd !\n");
- }
- *(uint32_t *)(mkva + po_w) = MI_BATCH_BUFFER_END;
- }
-
- pmap_unmapdev((vm_offset_t)mkva, 2 * PAGE_SIZE);
+ (void)i915_add_request(ring, file, NULL);
}
-int i915_fix_mi_batchbuffer_end = 0;
-
static int
i915_reset_gen7_sol_offsets(struct drm_device *dev,
struct intel_ring_buffer *ring)
@@ -1098,7 +814,7 @@ i915_reset_gen7_sol_offsets(struct drm_device *dev,
drm_i915_private_t *dev_priv = dev->dev_private;
int ret, i;
- if (!IS_GEN7(dev) || ring != &dev_priv->rings[RCS])
+ if (!IS_GEN7(dev) || ring != &dev_priv->ring[RCS])
return 0;
ret = intel_ring_begin(ring, 4 * 3);
@@ -1130,8 +846,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
struct intel_ring_buffer *ring;
u32 ctx_id = i915_execbuffer2_get_context_id(*args);
u32 exec_start, exec_len;
- u32 seqno;
u32 mask;
+ u32 flags;
int ret, mode, i;
vm_page_t **relocs_ma;
int *relocs_len;
@@ -1141,21 +857,30 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
return -EINVAL;
}
- if (args->batch_len == 0)
- return (0);
-
ret = validate_exec_list(exec, args->buffer_count,
&relocs_ma, &relocs_len);
if (ret)
goto pre_mutex_err;
+ flags = 0;
+ if (args->flags & I915_EXEC_SECURE) {
+ if (!file->is_master || !capable(CAP_SYS_ADMIN)) {
+ ret = -EPERM;
+ goto pre_mutex_err;
+ }
+
+ flags |= I915_DISPATCH_SECURE;
+ }
+ if (args->flags & I915_EXEC_IS_PINNED)
+ flags |= I915_DISPATCH_PINNED;
+
switch (args->flags & I915_EXEC_RING_MASK) {
case I915_EXEC_DEFAULT:
case I915_EXEC_RENDER:
- ring = &dev_priv->rings[RCS];
+ ring = &dev_priv->ring[RCS];
break;
case I915_EXEC_BSD:
- ring = &dev_priv->rings[VCS];
+ ring = &dev_priv->ring[VCS];
if (ctx_id != 0) {
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
@@ -1164,7 +889,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
}
break;
case I915_EXEC_BLT:
- ring = &dev_priv->rings[BCS];
+ ring = &dev_priv->ring[BCS];
if (ctx_id != 0) {
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
@@ -1191,7 +916,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
case I915_EXEC_CONSTANTS_REL_GENERAL:
case I915_EXEC_CONSTANTS_ABSOLUTE:
case I915_EXEC_CONSTANTS_REL_SURFACE:
- if (ring == &dev_priv->rings[RCS] &&
+ if (ring == &dev_priv->ring[RCS] &&
mode != dev_priv->relative_constants_mode) {
if (INTEL_INFO(dev)->gen < 4) {
ret = -EINVAL;
@@ -1222,7 +947,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
}
if (args->num_cliprects != 0) {
- if (ring != &dev_priv->rings[RCS]) {
+ if (ring != &dev_priv->ring[RCS]) {
DRM_DEBUG("clip rectangles are only valid with the render ring\n");
ret = -EINVAL;
goto pre_mutex_err;
@@ -1240,12 +965,21 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
ret = -EINVAL;
goto pre_mutex_err;
}
+
cliprects = malloc(args->num_cliprects * sizeof(*cliprects),
- DRM_I915_GEM, M_WAITOK | M_ZERO);
- ret = -copyin((void *)(uintptr_t)args->cliprects_ptr, cliprects,
- sizeof(*cliprects) * args->num_cliprects);
- if (ret != 0)
+ DRM_I915_GEM, M_WAITOK);
+ if (cliprects == NULL) {
+ ret = -ENOMEM;
goto pre_mutex_err;
+ }
+
+ if (copy_from_user(cliprects,
+ (struct drm_clip_rect __user *)(uintptr_t)
+ args->cliprects_ptr,
+ sizeof(*cliprects)*args->num_cliprects)) {
+ ret = -EFAULT;
+ goto pre_mutex_err;
+ }
}
ret = i915_mutex_lock_interruptible(dev);
@@ -1325,6 +1059,13 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
}
batch_obj->base.pending_read_domains |= I915_GEM_DOMAIN_COMMAND;
+ /* snb/ivb/vlv conflate the "batch in ppgtt" bit with the "non-secure
+ * batch" bit. Hence we need to pin secure batches into the global gtt.
+ * hsw should have this fixed, but let's be paranoid and do it
+ * unconditionally for now. */
+ if (flags & I915_DISPATCH_SECURE && !batch_obj->has_global_gtt_mapping)
+ i915_gem_gtt_bind_object(batch_obj, batch_obj->cache_level);
+
ret = i915_gem_execbuffer_move_to_gpu(ring, &objects);
if (ret)
goto err;
@@ -1333,23 +1074,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
if (ret)
goto err;
- seqno = i915_gem_next_request_seqno(ring);
- for (i = 0; i < I915_NUM_RINGS - 1; i++) {
- if (seqno < ring->sync_seqno[i]) {
- /* The GPU can not handle its semaphore value wrapping,
- * so every billion or so execbuffers, we need to stall
- * the GPU in order to reset the counters.
- */
- ret = i915_gpu_idle(dev);
- if (ret)
- goto err;
- i915_gem_retire_requests(dev);
-
- KASSERT(ring->sync_seqno[i] == 0, ("Non-zero sync_seqno"));
- }
- }
-
- if (ring == &dev_priv->rings[RCS] &&
+ if (ring == &dev_priv->ring[RCS] &&
mode != dev_priv->relative_constants_mode) {
ret = intel_ring_begin(ring, 4);
if (ret)
@@ -1372,12 +1097,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
exec_start = batch_obj->gtt_offset + args->batch_start_offset;
exec_len = args->batch_len;
-
- if (i915_fix_mi_batchbuffer_end) {
- i915_gem_fix_mi_batchbuffer_end(batch_obj,
- args->batch_start_offset, args->batch_len);
- }
-
if (cliprects) {
for (i = 0; i < args->num_cliprects; i++) {
ret = i915_emit_box(dev, &cliprects[i],
@@ -1386,21 +1105,23 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
goto err;
ret = ring->dispatch_execbuffer(ring,
- exec_start, exec_len);
+ exec_start, exec_len,
+ flags);
if (ret)
goto err;
}
} else {
ret = ring->dispatch_execbuffer(ring,
- exec_start, exec_len);
+ exec_start, exec_len,
+ flags);
if (ret)
goto err;
}
- CTR4(KTR_DRM, "ring_dispatch %s %d exec %x %x", ring->name, seqno,
- exec_start, exec_len);
+ CTR3(KTR_DRM, "ring_dispatch ring=%s seqno=%d flags=%u", ring->name,
+ intel_ring_get_seqno(ring), flags);
- i915_gem_execbuffer_move_to_active(&objects, ring, seqno);
+ i915_gem_execbuffer_move_to_active(&objects, ring);
i915_gem_execbuffer_retire_commands(dev, file, ring);
err:
@@ -1444,9 +1165,6 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
struct drm_i915_gem_exec_object2 *exec2_list = NULL;
int ret, i;
- DRM_DEBUG("buffers_ptr %d buffer_count %d len %08x\n",
- (int) args->buffers_ptr, args->buffer_count, args->batch_len);
-
if (args->buffer_count < 1) {
DRM_DEBUG("execbuf with %d buffers\n", args->buffer_count);
return -EINVAL;
@@ -1454,18 +1172,24 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
/* Copy in the exec list from userland */
/* XXXKIB user-controlled malloc size */
- exec_list = malloc(sizeof(*exec_list) * args->buffer_count,
- DRM_I915_GEM, M_WAITOK);
- exec2_list = malloc(sizeof(*exec2_list) * args->buffer_count,
- DRM_I915_GEM, M_WAITOK);
- ret = -copyin((void *)(uintptr_t)args->buffers_ptr, exec_list,
- sizeof(*exec_list) * args->buffer_count);
+ exec_list = drm_malloc_ab(sizeof(*exec_list), args->buffer_count);
+ exec2_list = drm_malloc_ab(sizeof(*exec2_list), args->buffer_count);
+ if (exec_list == NULL || exec2_list == NULL) {
+ DRM_DEBUG("Failed to allocate exec list for %d buffers\n",
+ args->buffer_count);
+ drm_free_large(exec_list);
+ drm_free_large(exec2_list);
+ return -ENOMEM;
+ }
+ ret = copy_from_user(exec_list,
+ (void __user *)(uintptr_t)args->buffers_ptr,
+ sizeof(*exec_list) * args->buffer_count);
if (ret != 0) {
DRM_DEBUG("copy %d exec entries failed %d\n",
args->buffer_count, ret);
- free(exec_list, DRM_I915_GEM);
- free(exec2_list, DRM_I915_GEM);
- return ret;
+ drm_free_large(exec_list);
+ drm_free_large(exec2_list);
+ return -EFAULT;
}
for (i = 0; i < args->buffer_count; i++) {
@@ -1497,17 +1221,19 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
for (i = 0; i < args->buffer_count; i++)
exec_list[i].offset = exec2_list[i].offset;
/* ... and back out to userspace */
- ret = -copyout(exec_list, (void *)(uintptr_t)args->buffers_ptr,
- sizeof(*exec_list) * args->buffer_count);
- if (ret != 0) {
+ ret = copy_to_user((void __user *)(uintptr_t)args->buffers_ptr,
+ exec_list,
+ sizeof(*exec_list) * args->buffer_count);
+ if (ret) {
+ ret = -EFAULT;
DRM_DEBUG("failed to copy %d exec entries "
"back to user (%d)\n",
args->buffer_count, ret);
}
}
- free(exec_list, DRM_I915_GEM);
- free(exec2_list, DRM_I915_GEM);
+ drm_free_large(exec_list);
+ drm_free_large(exec2_list);
return ret;
}
@@ -1519,9 +1245,6 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
struct drm_i915_gem_exec_object2 *exec2_list = NULL;
int ret;
- DRM_DEBUG("buffers_ptr %jx buffer_count %d len %08x\n",
- (uintmax_t)args->buffers_ptr, args->buffer_count, args->batch_len);
-
if (args->buffer_count < 1 ||
args->buffer_count > UINT_MAX / sizeof(*exec2_list)) {
DRM_DEBUG("execbuf2 with %d buffers\n", args->buffer_count);
@@ -1531,8 +1254,15 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
/* XXXKIB user-controllable malloc size */
exec2_list = malloc(sizeof(*exec2_list)*args->buffer_count,
DRM_I915_GEM, M_WAITOK);
- ret = -copyin((void *)(uintptr_t)args->buffers_ptr, exec2_list,
- sizeof(*exec2_list) * args->buffer_count);
+ if (exec2_list == NULL) {
+ DRM_DEBUG("Failed to allocate exec list for %d buffers\n",
+ args->buffer_count);
+ return -ENOMEM;
+ }
+ ret = copy_from_user(exec2_list,
+ (struct drm_i915_relocation_entry __user *)
+ (uintptr_t) args->buffers_ptr,
+ sizeof(*exec2_list) * args->buffer_count);
if (ret != 0) {
DRM_DEBUG("copy %d exec entries failed %d\n",
args->buffer_count, ret);
@@ -1543,9 +1273,11 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
ret = i915_gem_do_execbuffer(dev, data, file, args, exec2_list);
if (!ret) {
/* Copy the new buffer offsets back to the user's exec list. */
- ret = -copyout(exec2_list, (void *)(uintptr_t)args->buffers_ptr,
- sizeof(*exec2_list) * args->buffer_count);
+ ret = copy_to_user((void __user *)(uintptr_t)args->buffers_ptr,
+ exec2_list,
+ sizeof(*exec2_list) * args->buffer_count);
if (ret) {
+ ret = -EFAULT;
DRM_DEBUG("failed to copy %d exec entries "
"back to user (%d)\n",
args->buffer_count, ret);
diff --git a/sys/dev/drm2/i915/i915_gem_gtt.c b/sys/dev/drm2/i915/i915_gem_gtt.c
index 7942979..4b8163d 100644
--- a/sys/dev/drm2/i915/i915_gem_gtt.c
+++ b/sys/dev/drm2/i915/i915_gem_gtt.c
@@ -26,28 +26,75 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
#include <sys/sched.h>
#include <sys/sf_buf.h>
+#include <vm/vm_pageout.h>
+
+typedef uint32_t gtt_pte_t;
+
+/* PPGTT stuff */
+#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
+
+#define GEN6_PDE_VALID (1 << 0)
+/* gen6+ has bit 11-4 for physical addr bit 39-32 */
+#define GEN6_PDE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+#define GEN6_PTE_VALID (1 << 0)
+#define GEN6_PTE_UNCACHED (1 << 1)
+#define HSW_PTE_UNCACHED (0)
+#define GEN6_PTE_CACHE_LLC (2 << 1)
+#define GEN6_PTE_CACHE_LLC_MLC (3 << 1)
+#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+static inline gtt_pte_t pte_encode(struct drm_device *dev,
+ dma_addr_t addr,
+ enum i915_cache_level level)
+{
+ gtt_pte_t pte = GEN6_PTE_VALID;
+ pte |= GEN6_PTE_ADDR_ENCODE(addr);
+
+ switch (level) {
+ case I915_CACHE_LLC_MLC:
+ /* Haswell doesn't set L3 this way */
+ if (IS_HASWELL(dev))
+ pte |= GEN6_PTE_CACHE_LLC;
+ else
+ pte |= GEN6_PTE_CACHE_LLC_MLC;
+ break;
+ case I915_CACHE_LLC:
+ pte |= GEN6_PTE_CACHE_LLC;
+ break;
+ case I915_CACHE_NONE:
+ if (IS_HASWELL(dev))
+ pte |= HSW_PTE_UNCACHED;
+ else
+ pte |= GEN6_PTE_UNCACHED;
+ break;
+ default:
+ BUG();
+ }
+
+
+ return pte;
+}
/* PPGTT support for Sandybdrige/Gen6 and later */
static void i915_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
unsigned first_entry,
unsigned num_entries)
{
- uint32_t *pt_vaddr;
- uint32_t scratch_pte;
+ gtt_pte_t *pt_vaddr;
+ gtt_pte_t scratch_pte;
+ unsigned act_pd = first_entry / I915_PPGTT_PT_ENTRIES;
+ unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
+ unsigned last_pte, i;
struct sf_buf *sf;
- unsigned act_pd, first_pte, last_pte, i;
-
- act_pd = first_entry / I915_PPGTT_PT_ENTRIES;
- first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
- scratch_pte = GEN6_PTE_ADDR_ENCODE(ppgtt->scratch_page_dma_addr);
- scratch_pte |= GEN6_PTE_VALID | GEN6_PTE_CACHE_LLC;
+ scratch_pte = pte_encode(ppgtt->dev, ppgtt->scratch_page_dma_addr,
+ I915_CACHE_LLC);
while (num_entries) {
last_pte = first_pte + num_entries;
@@ -68,7 +115,6 @@ static void i915_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
first_pte = 0;
act_pd++;
}
-
}
int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
@@ -77,47 +123,125 @@ int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
struct i915_hw_ppgtt *ppgtt;
unsigned first_pd_entry_in_global_pt;
int i;
-
+ int ret = -ENOMEM;
/* ppgtt PDEs reside in the global gtt pagetable, which has 512*1024
* entries. For aliasing ppgtt support we just steal them at the end for
- * now. */
- first_pd_entry_in_global_pt = 512 * 1024 - I915_PPGTT_PD_ENTRIES;
+ * now. */
+ first_pd_entry_in_global_pt = dev_priv->mm.gtt->gtt_total_entries - I915_PPGTT_PD_ENTRIES;
ppgtt = malloc(sizeof(*ppgtt), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!ppgtt)
+ return ret;
+ ppgtt->dev = dev;
ppgtt->num_pd_entries = I915_PPGTT_PD_ENTRIES;
- ppgtt->pt_pages = malloc(sizeof(vm_page_t) * ppgtt->num_pd_entries,
- DRM_I915_GEM, M_WAITOK | M_ZERO);
+ ppgtt->pt_pages = malloc(sizeof(struct page *)*ppgtt->num_pd_entries,
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!ppgtt->pt_pages)
+ goto err_ppgtt;
for (i = 0; i < ppgtt->num_pd_entries; i++) {
ppgtt->pt_pages[i] = vm_page_alloc(NULL, 0,
VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED |
VM_ALLOC_ZERO);
- if (ppgtt->pt_pages[i] == NULL) {
- dev_priv->mm.aliasing_ppgtt = ppgtt;
- i915_gem_cleanup_aliasing_ppgtt(dev);
- return (-ENOMEM);
+ if (!ppgtt->pt_pages[i])
+ goto err_pt_alloc;
+ }
+
+ if (dev_priv->mm.gtt->needs_dmar) {
+ ppgtt->pt_dma_addr = malloc(sizeof(dma_addr_t)
+ *ppgtt->num_pd_entries,
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!ppgtt->pt_dma_addr)
+ goto err_pt_alloc;
+
+#ifdef CONFIG_INTEL_IOMMU /* <- Added as a marker on FreeBSD. */
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ dma_addr_t pt_addr;
+
+ pt_addr = pci_map_page(dev->pdev, ppgtt->pt_pages[i],
+ 0, 4096,
+ PCI_DMA_BIDIRECTIONAL);
+
+ if (pci_dma_mapping_error(dev->pdev,
+ pt_addr)) {
+ ret = -EIO;
+ goto err_pd_pin;
+
+ }
+ ppgtt->pt_dma_addr[i] = pt_addr;
}
+#endif
}
- ppgtt->scratch_page_dma_addr = dev_priv->mm.gtt.scratch_page_dma;
+ ppgtt->scratch_page_dma_addr = dev_priv->mm.gtt->scratch_page_dma;
+
+ i915_ppgtt_clear_range(ppgtt, 0,
+ ppgtt->num_pd_entries*I915_PPGTT_PT_ENTRIES);
+
+ ppgtt->pd_offset = (first_pd_entry_in_global_pt)*sizeof(gtt_pte_t);
- i915_ppgtt_clear_range(ppgtt, 0, ppgtt->num_pd_entries *
- I915_PPGTT_PT_ENTRIES);
- ppgtt->pd_offset = (first_pd_entry_in_global_pt) * sizeof(uint32_t);
dev_priv->mm.aliasing_ppgtt = ppgtt;
return 0;
+
+#ifdef CONFIG_INTEL_IOMMU /* <- Added as a marker on FreeBSD. */
+err_pd_pin:
+ if (ppgtt->pt_dma_addr) {
+ for (i--; i >= 0; i--)
+ pci_unmap_page(dev->pdev, ppgtt->pt_dma_addr[i],
+ 4096, PCI_DMA_BIDIRECTIONAL);
+ }
+#endif
+err_pt_alloc:
+ free(ppgtt->pt_dma_addr, DRM_I915_GEM);
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ if (ppgtt->pt_pages[i]) {
+ vm_page_unwire(ppgtt->pt_pages[i], PQ_INACTIVE);
+ vm_page_free(ppgtt->pt_pages[i]);
+ }
+ }
+ free(ppgtt->pt_pages, DRM_I915_GEM);
+err_ppgtt:
+ free(ppgtt, DRM_I915_GEM);
+
+ return ret;
+}
+
+void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
+ int i;
+
+ if (!ppgtt)
+ return;
+
+#ifdef CONFIG_INTEL_IOMMU /* <- Added as a marker on FreeBSD. */
+ if (ppgtt->pt_dma_addr) {
+ for (i = 0; i < ppgtt->num_pd_entries; i++)
+ pci_unmap_page(dev->pdev, ppgtt->pt_dma_addr[i],
+ 4096, PCI_DMA_BIDIRECTIONAL);
+ }
+#endif
+
+ free(ppgtt->pt_dma_addr, DRM_I915_GEM);
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ vm_page_unwire(ppgtt->pt_pages[i], PQ_INACTIVE);
+ vm_page_free(ppgtt->pt_pages[i]);
+ }
+ free(ppgtt->pt_pages, DRM_I915_GEM);
+ free(ppgtt, DRM_I915_GEM);
}
static void i915_ppgtt_insert_pages(struct i915_hw_ppgtt *ppgtt,
+ vm_page_t *pages,
unsigned first_entry,
unsigned num_entries,
- vm_page_t *pages,
- uint32_t pte_flags)
+ enum i915_cache_level cache_level)
{
- uint32_t *pt_vaddr, pte;
+ uint32_t *pt_vaddr;
unsigned act_pd = first_entry / I915_PPGTT_PT_ENTRIES;
unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
unsigned j, last_pte;
@@ -135,8 +259,8 @@ static void i915_ppgtt_insert_pages(struct i915_hw_ppgtt *ppgtt,
for (j = first_pte; j < last_pte; j++) {
page_addr = VM_PAGE_TO_PHYS(*pages);
- pte = GEN6_PTE_ADDR_ENCODE(page_addr);
- pt_vaddr[j] = pte | pte_flags;
+ pt_vaddr[j] = pte_encode(ppgtt->dev, page_addr,
+ cache_level);
pages++;
}
@@ -154,30 +278,11 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
struct drm_i915_gem_object *obj,
enum i915_cache_level cache_level)
{
- struct drm_device *dev;
- struct drm_i915_private *dev_priv;
- uint32_t pte_flags;
-
- dev = obj->base.dev;
- dev_priv = dev->dev_private;
- pte_flags = GEN6_PTE_VALID;
-
- switch (cache_level) {
- case I915_CACHE_LLC_MLC:
- pte_flags |= GEN6_PTE_CACHE_LLC_MLC;
- break;
- case I915_CACHE_LLC:
- pte_flags |= GEN6_PTE_CACHE_LLC;
- break;
- case I915_CACHE_NONE:
- pte_flags |= GEN6_PTE_UNCACHED;
- break;
- default:
- panic("cache mode");
- }
-
- i915_ppgtt_insert_pages(ppgtt, obj->gtt_space->start >> PAGE_SHIFT,
- obj->base.size >> PAGE_SHIFT, obj->pages, pte_flags);
+ i915_ppgtt_insert_pages(ppgtt,
+ obj->pages,
+ obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT,
+ cache_level);
}
void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
@@ -194,7 +299,7 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
uint32_t pd_offset;
struct intel_ring_buffer *ring;
struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
- u_int first_pd_entry_in_global_pt;
+ uint32_t __iomem *pd_addr;
uint32_t pd_entry;
int i;
@@ -202,17 +307,22 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
return;
- first_pd_entry_in_global_pt = 512 * 1024 - I915_PPGTT_PD_ENTRIES;
+ pd_addr = dev_priv->mm.gtt->gtt + ppgtt->pd_offset/sizeof(uint32_t);
for (i = 0; i < ppgtt->num_pd_entries; i++) {
vm_paddr_t pt_addr;
- pt_addr = VM_PAGE_TO_PHYS(ppgtt->pt_pages[i]);
+ if (dev_priv->mm.gtt->needs_dmar)
+ pt_addr = ppgtt->pt_dma_addr[i];
+ else
+ pt_addr = VM_PAGE_TO_PHYS(ppgtt->pt_pages[i]);
+
pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
pd_entry |= GEN6_PDE_VALID;
- intel_gtt_write(first_pd_entry_in_global_pt + i, pd_entry);
+ /* NOTE Linux<->FreeBSD: Arguments of writel() are reversed. */
+ writel(pd_addr + i, pd_entry);
}
- intel_gtt_read_pte(first_pd_entry_in_global_pt);
+ readl(pd_addr);
pd_offset = ppgtt->pd_offset;
pd_offset /= 64; /* in cachelines, */
@@ -250,12 +360,12 @@ static bool do_idling(struct drm_i915_private *dev_priv)
{
bool ret = dev_priv->mm.interruptible;
- if (dev_priv->mm.gtt.do_idle_maps) {
+ if (unlikely(dev_priv->mm.gtt->do_idle_maps)) {
dev_priv->mm.interruptible = false;
if (i915_gpu_idle(dev_priv->dev)) {
DRM_ERROR("Couldn't idle GPU\n");
/* Wait a bit, in hopes it avoids the hang */
- DELAY(10);
+ udelay(10);
}
}
@@ -264,57 +374,35 @@ static bool do_idling(struct drm_i915_private *dev_priv)
static void undo_idling(struct drm_i915_private *dev_priv, bool interruptible)
{
- if (dev_priv->mm.gtt.do_idle_maps)
+ if (unlikely(dev_priv->mm.gtt->do_idle_maps))
dev_priv->mm.interruptible = interruptible;
}
-void
-i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev)
+
+static void i915_ggtt_clear_range(struct drm_device *dev,
+ unsigned first_entry,
+ unsigned num_entries)
{
- struct drm_i915_private *dev_priv;
- struct i915_hw_ppgtt *ppgtt;
- vm_page_t m;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ gtt_pte_t scratch_pte;
+ gtt_pte_t __iomem *gtt_base = dev_priv->mm.gtt->gtt + first_entry;
+ const int max_entries = dev_priv->mm.gtt->gtt_total_entries - first_entry;
int i;
- dev_priv = dev->dev_private;
- ppgtt = dev_priv->mm.aliasing_ppgtt;
- if (ppgtt == NULL)
+ if (INTEL_INFO(dev)->gen < 6) {
+ intel_gtt_clear_range(first_entry, num_entries);
return;
- dev_priv->mm.aliasing_ppgtt = NULL;
-
- for (i = 0; i < ppgtt->num_pd_entries; i++) {
- m = ppgtt->pt_pages[i];
- if (m != NULL) {
- vm_page_unwire(m, PQ_INACTIVE);
- vm_page_free(m);
- }
}
- free(ppgtt->pt_pages, DRM_I915_GEM);
- free(ppgtt, DRM_I915_GEM);
-}
-
-
-static unsigned int
-cache_level_to_agp_type(struct drm_device *dev, enum i915_cache_level
- cache_level)
-{
- switch (cache_level) {
- case I915_CACHE_LLC_MLC:
- if (INTEL_INFO(dev)->gen >= 6)
- return (AGP_USER_CACHED_MEMORY_LLC_MLC);
- /*
- * Older chipsets do not have this extra level of CPU
- * cacheing, so fallthrough and request the PTE simply
- * as cached.
- */
- case I915_CACHE_LLC:
- return (AGP_USER_CACHED_MEMORY);
+ if (WARN(num_entries > max_entries,
+ "First entry = %d; Num entries = %d (max=%d)\n",
+ first_entry, num_entries, max_entries))
+ num_entries = max_entries;
- default:
- case I915_CACHE_NONE:
- return (AGP_USER_MEMORY);
- }
+ scratch_pte = pte_encode(dev, dev_priv->mm.gtt->scratch_page_dma, I915_CACHE_LLC);
+ for (i = 0; i < num_entries; i++)
+ iowrite32(scratch_pte, &gtt_base[i]);
+ readl(gtt_base);
}
void i915_gem_restore_gtt_mappings(struct drm_device *dev)
@@ -323,45 +411,99 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
struct drm_i915_gem_object *obj;
/* First fill our portion of the GTT with scratch pages */
- intel_gtt_clear_range(dev_priv->mm.gtt_start / PAGE_SIZE,
+ i915_ggtt_clear_range(dev, dev_priv->mm.gtt_start / PAGE_SIZE,
(dev_priv->mm.gtt_end - dev_priv->mm.gtt_start) / PAGE_SIZE);
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list) {
i915_gem_clflush_object(obj);
i915_gem_gtt_bind_object(obj, obj->cache_level);
}
- intel_gtt_chipset_flush();
+ i915_gem_chipset_flush(dev);
}
int i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj)
{
+ if (obj->has_dma_mapping)
+ return 0;
+
+#ifdef FREEBSD_WIP
+ if (!dma_map_sg(&obj->base.dev->pdev->dev,
+ obj->pages->sgl, obj->pages->nents,
+ PCI_DMA_BIDIRECTIONAL))
+ return -ENOSPC;
+#endif /* FREEBSD_WIP */
return 0;
}
-void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
- enum i915_cache_level cache_level)
+/*
+ * Binds an object into the global gtt with the specified cache level. The object
+ * will be accessible to the GPU via commands whose operands reference offsets
+ * within the global GTT as well as accessible by the GPU through the GMADR
+ * mapped BAR (dev_priv->mm.gtt->gtt).
+ */
+static void gen6_ggtt_bind_object(struct drm_i915_gem_object *obj,
+ enum i915_cache_level level)
{
- struct drm_device *dev;
- struct drm_i915_private *dev_priv;
- unsigned int agp_type;
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ const int first_entry = obj->gtt_space->start >> PAGE_SHIFT;
+#if defined(INVARIANTS)
+ const int max_entries = dev_priv->mm.gtt->gtt_total_entries - first_entry;
+#endif
+ gtt_pte_t __iomem *gtt_entries = dev_priv->mm.gtt->gtt + first_entry;
+ int i = 0;
+ vm_paddr_t addr;
+
+ for (i = 0; i < obj->base.size >> PAGE_SHIFT; ++i) {
+ addr = VM_PAGE_TO_PHYS(obj->pages[i]);
+ iowrite32(pte_encode(dev, addr, level), &gtt_entries[i]);
+ }
- dev = obj->base.dev;
- dev_priv = dev->dev_private;
- agp_type = cache_level_to_agp_type(dev, cache_level);
+ BUG_ON(i > max_entries);
+ BUG_ON(i != obj->base.size / PAGE_SIZE);
+
+ /* XXX: This serves as a posting read to make sure that the PTE has
+ * actually been updated. There is some concern that even though
+ * registers and PTEs are within the same BAR that they are potentially
+ * of NUMA access patterns. Therefore, even with the way we assume
+ * hardware should work, we must keep this posting read for paranoia.
+ */
+ if (i != 0)
+ WARN_ON(readl(&gtt_entries[i-1]) != pte_encode(dev, addr, level));
+
+ /* This next bit makes the above posting read even more important. We
+ * want to flush the TLBs only after we're certain all the PTE updates
+ * have finished.
+ */
+ I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
+ POSTING_READ(GFX_FLSH_CNTL_GEN6);
+}
- intel_gtt_insert_pages(obj->gtt_space->start >> PAGE_SHIFT,
- obj->base.size >> PAGE_SHIFT, obj->pages, agp_type);
+void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level)
+{
+ struct drm_device *dev = obj->base.dev;
+ if (INTEL_INFO(dev)->gen < 6) {
+ unsigned int flags = (cache_level == I915_CACHE_NONE) ?
+ AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY;
+ intel_gtt_insert_pages(obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT,
+ obj->pages,
+ flags);
+ } else {
+ gen6_ggtt_bind_object(obj, cache_level);
+ }
obj->has_global_gtt_mapping = 1;
}
void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj)
{
-
- intel_gtt_clear_range(obj->gtt_space->start >> PAGE_SHIFT,
- obj->base.size >> PAGE_SHIFT);
+ i915_ggtt_clear_range(obj->base.dev,
+ obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT);
obj->has_global_gtt_mapping = 0;
}
@@ -374,35 +516,244 @@ void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj)
interruptible = do_idling(dev_priv);
+#ifdef FREEBSD_WIP
+ if (!obj->has_dma_mapping)
+ dma_unmap_sg(&dev->pdev->dev,
+ obj->pages->sgl, obj->pages->nents,
+ PCI_DMA_BIDIRECTIONAL);
+#endif /* FREEBSD_WIP */
+
undo_idling(dev_priv, interruptible);
}
-int i915_gem_init_global_gtt(struct drm_device *dev,
+static void i915_gtt_color_adjust(struct drm_mm_node *node,
+ unsigned long color,
+ unsigned long *start,
+ unsigned long *end)
+{
+ if (node->color != color)
+ *start += 4096;
+
+ if (!list_empty(&node->node_list)) {
+ node = list_entry(node->node_list.next,
+ struct drm_mm_node,
+ node_list);
+ if (node->allocated && node->color != color)
+ *end -= 4096;
+ }
+}
+
+void i915_gem_init_global_gtt(struct drm_device *dev,
unsigned long start,
unsigned long mappable_end,
unsigned long end)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- unsigned long mappable;
- int error;
-
- mappable = min(end, mappable_end) - start;
/* Substract the guard page ... */
drm_mm_init(&dev_priv->mm.gtt_space, start, end - start - PAGE_SIZE);
+ if (!HAS_LLC(dev))
+ dev_priv->mm.gtt_space.color_adjust = i915_gtt_color_adjust;
dev_priv->mm.gtt_start = start;
dev_priv->mm.gtt_mappable_end = mappable_end;
dev_priv->mm.gtt_end = end;
dev_priv->mm.gtt_total = end - start;
- dev_priv->mm.mappable_gtt_total = mappable;
+ dev_priv->mm.mappable_gtt_total = min(end, mappable_end) - start;
/* ... but ensure that we clear the entire range. */
- intel_gtt_clear_range(start / PAGE_SIZE, (end-start) / PAGE_SIZE);
+ i915_ggtt_clear_range(dev, start / PAGE_SIZE, (end-start) / PAGE_SIZE);
+
device_printf(dev->dev,
"taking over the fictitious range 0x%lx-0x%lx\n",
- dev->agp->base + start, dev->agp->base + start + mappable);
- error = -vm_phys_fictitious_reg_range(dev->agp->base + start,
- dev->agp->base + start + mappable, VM_MEMATTR_WRITE_COMBINING);
- return (error);
+ dev_priv->mm.gtt_base_addr + start,
+ dev_priv->mm.gtt_base_addr + start + dev_priv->mm.mappable_gtt_total);
+ vm_phys_fictitious_reg_range(dev_priv->mm.gtt_base_addr + start,
+ dev_priv->mm.gtt_base_addr + start + dev_priv->mm.mappable_gtt_total,
+ VM_MEMATTR_WRITE_COMBINING);
+}
+
+static int setup_scratch_page(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ vm_page_t page;
+ dma_addr_t dma_addr;
+ int tries = 0;
+ int req = VM_ALLOC_ZERO | VM_ALLOC_NOOBJ;
+
+retry:
+ page = vm_page_alloc_contig(NULL, 0, req, 1, 0, 0xffffffff,
+ PAGE_SIZE, 0, VM_MEMATTR_UNCACHEABLE);
+ if (page == NULL) {
+ if (tries < 1) {
+ if (!vm_page_reclaim_contig(req, 1, 0, 0xffffffff,
+ PAGE_SIZE, 0))
+ VM_WAIT;
+ tries++;
+ goto retry;
+ }
+ return -ENOMEM;
+ }
+ if ((page->flags & PG_ZERO) == 0)
+ pmap_zero_page(page);
+
+#ifdef CONFIG_INTEL_IOMMU
+ dma_addr = pci_map_page(dev->pdev, page, 0, PAGE_SIZE,
+ PCI_DMA_BIDIRECTIONAL);
+ if (pci_dma_mapping_error(dev->pdev, dma_addr))
+ return -EINVAL;
+#else
+ dma_addr = VM_PAGE_TO_PHYS(page);
+#endif
+ dev_priv->mm.gtt->scratch_page = page;
+ dev_priv->mm.gtt->scratch_page_dma = dma_addr;
+
+ return 0;
+}
+
+static void teardown_scratch_page(struct drm_device *dev)
+{
+#ifdef CONFIG_INTEL_IOMMU /* <- Added as a marker on FreeBSD. */
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ pci_unmap_page(dev->pdev, dev_priv->mm.gtt->scratch_page_dma,
+ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+#endif
+}
+
+static inline unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl)
+{
+ snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT;
+ snb_gmch_ctl &= SNB_GMCH_GGMS_MASK;
+ return snb_gmch_ctl << 20;
+}
+
+static inline unsigned int gen6_get_stolen_size(u16 snb_gmch_ctl)
+{
+ snb_gmch_ctl >>= SNB_GMCH_GMS_SHIFT;
+ snb_gmch_ctl &= SNB_GMCH_GMS_MASK;
+ return snb_gmch_ctl << 25; /* 32 MB units */
+}
+
+static inline unsigned int gen7_get_stolen_size(u16 snb_gmch_ctl)
+{
+ static const int stolen_decoder[] = {
+ 0, 0, 0, 0, 0, 32, 48, 64, 128, 256, 96, 160, 224, 352};
+ snb_gmch_ctl >>= IVB_GMCH_GMS_SHIFT;
+ snb_gmch_ctl &= IVB_GMCH_GMS_MASK;
+ return stolen_decoder[snb_gmch_ctl] << 20;
+}
+
+int i915_gem_gtt_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ vm_paddr_t gtt_bus_addr;
+ u16 snb_gmch_ctl;
+ int ret;
+
+ /* On modern platforms we need not worry ourself with the legacy
+ * hostbridge query stuff. Skip it entirely
+ */
+ if (INTEL_INFO(dev)->gen < 6) {
+#ifdef FREEBSD_WIP
+ ret = intel_gmch_probe(dev_priv->bridge_dev, dev->pdev, NULL);
+ if (!ret) {
+ DRM_ERROR("failed to set up gmch\n");
+ return -EIO;
+ }
+#endif /* FREEBSD_WIP */
+
+ dev_priv->mm.gtt = intel_gtt_get();
+ if (!dev_priv->mm.gtt) {
+ DRM_ERROR("Failed to initialize GTT\n");
+#ifdef FREEBSD_WIP
+ intel_gmch_remove();
+#endif /* FREEBSD_WIP */
+ return -ENODEV;
+ }
+ return 0;
+ }
+
+ dev_priv->mm.gtt = malloc(sizeof(*dev_priv->mm.gtt), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!dev_priv->mm.gtt)
+ return -ENOMEM;
+
+#ifdef FREEBSD_WIP
+ if (!pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(40)))
+ pci_set_consistent_dma_mask(dev->pdev, DMA_BIT_MASK(40));
+#endif /* FREEBSD_WIP */
+
+#ifdef CONFIG_INTEL_IOMMU
+ dev_priv->mm.gtt->needs_dmar = 1;
+#endif
+
+ /* For GEN6+ the PTEs for the ggtt live at 2MB + BAR0 */
+ gtt_bus_addr = drm_get_resource_start(dev, 0) + (2<<20);
+ dev_priv->mm.gtt->gma_bus_addr = drm_get_resource_start(dev, 2);
+
+ /* i9xx_setup */
+ pci_read_config_word(dev->dev, SNB_GMCH_CTRL, &snb_gmch_ctl);
+ dev_priv->mm.gtt->gtt_total_entries =
+ gen6_get_total_gtt_size(snb_gmch_ctl) / sizeof(gtt_pte_t);
+ if (INTEL_INFO(dev)->gen < 7)
+ dev_priv->mm.gtt->stolen_size = gen6_get_stolen_size(snb_gmch_ctl);
+ else
+ dev_priv->mm.gtt->stolen_size = gen7_get_stolen_size(snb_gmch_ctl);
+
+ dev_priv->mm.gtt->gtt_mappable_entries = drm_get_resource_len(dev, 2) >> PAGE_SHIFT;
+ /* 64/512MB is the current min/max we actually know of, but this is just a
+ * coarse sanity check.
+ */
+ if ((dev_priv->mm.gtt->gtt_mappable_entries >> 8) < 64 ||
+ dev_priv->mm.gtt->gtt_mappable_entries > dev_priv->mm.gtt->gtt_total_entries) {
+ DRM_ERROR("Unknown GMADR entries (%d)\n",
+ dev_priv->mm.gtt->gtt_mappable_entries);
+ ret = -ENXIO;
+ goto err_out;
+ }
+
+ ret = setup_scratch_page(dev);
+ if (ret) {
+ DRM_ERROR("Scratch setup failed\n");
+ goto err_out;
+ }
+
+ dev_priv->mm.gtt->gtt = pmap_mapdev_attr(gtt_bus_addr,
+ /* The size is used later by pmap_unmapdev. */
+ dev_priv->mm.gtt->gtt_total_entries * sizeof(gtt_pte_t),
+ VM_MEMATTR_WRITE_COMBINING);
+ if (!dev_priv->mm.gtt->gtt) {
+ DRM_ERROR("Failed to map the gtt page table\n");
+ teardown_scratch_page(dev);
+ ret = -ENOMEM;
+ goto err_out;
+ }
+
+ /* GMADR is the PCI aperture used by SW to access tiled GFX surfaces in a linear fashion. */
+ DRM_INFO("Memory usable by graphics device = %dM\n", dev_priv->mm.gtt->gtt_total_entries >> 8);
+ DRM_DEBUG_DRIVER("GMADR size = %dM\n", dev_priv->mm.gtt->gtt_mappable_entries >> 8);
+ DRM_DEBUG_DRIVER("GTT stolen size = %dM\n", dev_priv->mm.gtt->stolen_size >> 20);
+
+ return 0;
+
+err_out:
+ free(dev_priv->mm.gtt, DRM_I915_GEM);
+#ifdef FREEBSD_WIP
+ if (INTEL_INFO(dev)->gen < 6)
+ intel_gmch_remove();
+#endif /* FREEBSD_WIP */
+ return ret;
+}
+
+void i915_gem_gtt_fini(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ pmap_unmapdev((vm_offset_t)dev_priv->mm.gtt->gtt,
+ dev_priv->mm.gtt->gtt_total_entries * sizeof(gtt_pte_t));
+ teardown_scratch_page(dev);
+#ifdef FREEBSD_WIP
+ if (INTEL_INFO(dev)->gen < 6)
+ intel_gmch_remove();
+#endif /* FREEBSD_WIP */
+ if (INTEL_INFO(dev)->gen >= 6)
+ free(dev_priv->mm.gtt, DRM_I915_GEM);
}
diff --git a/sys/dev/drm2/i915/i915_gem_stolen.c b/sys/dev/drm2/i915/i915_gem_stolen.c
index 1955a11..6d42e73 100644
--- a/sys/dev/drm2/i915/i915_gem_stolen.c
+++ b/sys/dev/drm2/i915/i915_gem_stolen.c
@@ -30,7 +30,6 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
@@ -46,56 +45,48 @@ __FBSDID("$FreeBSD$");
* for is a boon.
*/
-#define PTE_ADDRESS_MASK 0xfffff000
-#define PTE_ADDRESS_MASK_HIGH 0x000000f0 /* i915+ */
-#define PTE_MAPPING_TYPE_UNCACHED (0 << 1)
-#define PTE_MAPPING_TYPE_DCACHE (1 << 1) /* i830 only */
-#define PTE_MAPPING_TYPE_CACHED (3 << 1)
-#define PTE_MAPPING_TYPE_MASK (3 << 1)
-#define PTE_VALID (1 << 0)
-
-/**
- * i915_stolen_to_phys - take an offset into stolen memory and turn it into
- * a physical one
- * @dev: drm device
- * @offset: address to translate
- *
- * Some chip functions require allocations from stolen space and need the
- * physical address of the memory in question.
- */
-static unsigned long i915_stolen_to_phys(struct drm_device *dev, u32 offset)
+static unsigned long i915_stolen_to_physical(struct drm_device *dev)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
- device_t pdev = dev_priv->bridge_dev;
u32 base;
-#if 0
/* On the machines I have tested the Graphics Base of Stolen Memory
- * is unreliable, so compute the base by subtracting the stolen memory
- * from the Top of Low Usable DRAM which is where the BIOS places
- * the graphics stolen memory.
+ * is unreliable, so on those compute the base by subtracting the
+ * stolen memory from the Top of Low Usable DRAM which is where the
+ * BIOS places the graphics stolen memory.
+ *
+ * On gen2, the layout is slightly different with the Graphics Segment
+ * immediately following Top of Memory (or Top of Usable DRAM). Note
+ * it appears that TOUD is only reported by 865g, so we just use the
+ * top of memory as determined by the e820 probe.
+ *
+ * XXX gen2 requires an unavailable symbol and 945gm fails with
+ * its value of TOLUD.
*/
- if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) {
- /* top 32bits are reserved = 0 */
- pci_read_config_dword(pdev, 0xA4, &base);
- } else {
- /* XXX presume 8xx is the same as i915 */
- pci_bus_read_config_dword(pdev->bus, 2, 0x5C, &base);
- }
-#else
- if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) {
- u16 val;
- val = pci_read_config(pdev, 0xb0, 2);
- base = val >> 4 << 20;
- } else {
+ base = 0;
+ if (INTEL_INFO(dev)->gen >= 6) {
+ /* Read Base Data of Stolen Memory Register (BDSM) directly.
+ * Note that there is also a MCHBAR miror at 0x1080c0 or
+ * we could use device 2:0x5c instead.
+ */
+ pci_read_config_dword(dev->dev, 0xB0, &base);
+ base &= ~4095; /* lower bits used for locking register */
+ } else if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) {
+ /* Read Graphics Base of Stolen Memory directly */
+ pci_read_config_dword(dev->dev, 0xA4, &base);
+#if 0
+ } else if (IS_GEN3(dev)) {
u8 val;
- val = pci_read_config(pdev, 0x9c, 1);
+ /* Stolen is immediately below Top of Low Usable DRAM */
+ pci_read_config_byte(pdev, 0x9c, &val);
base = val >> 3 << 27;
- }
- base -= dev_priv->mm.gtt.stolen_size;
+ base -= dev_priv->mm.gtt->stolen_size;
+ } else {
+ /* Stolen is immediately above Top of Memory */
+ base = max_low_pfn_mapped << PAGE_SHIFT;
#endif
+ }
- return base + offset;
+ return base;
}
static void i915_warn_stolen(struct drm_device *dev)
@@ -107,7 +98,7 @@ static void i915_warn_stolen(struct drm_device *dev)
static void i915_setup_compression(struct drm_device *dev, int size)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_mm_node *compressed_fb, *compressed_llb;
+ struct drm_mm_node *compressed_fb, *uninitialized_var(compressed_llb);
unsigned long cfb_base;
unsigned long ll_base = 0;
@@ -120,7 +111,7 @@ static void i915_setup_compression(struct drm_device *dev, int size)
if (!compressed_fb)
goto err;
- cfb_base = i915_stolen_to_phys(dev, compressed_fb->start);
+ cfb_base = dev_priv->mm.stolen_base + compressed_fb->start;
if (!cfb_base)
goto err_fb;
@@ -133,7 +124,7 @@ static void i915_setup_compression(struct drm_device *dev, int size)
if (!compressed_llb)
goto err_fb;
- ll_base = i915_stolen_to_phys(dev, compressed_llb->start);
+ ll_base = dev_priv->mm.stolen_base + compressed_llb->start;
if (!ll_base)
goto err_llb;
}
@@ -152,7 +143,7 @@ static void i915_setup_compression(struct drm_device *dev, int size)
}
DRM_DEBUG_KMS("FBC base 0x%08lx, ll base 0x%08lx, size %dM\n",
- cfb_base, ll_base, size >> 20);
+ (long)cfb_base, (long)ll_base, size >> 20);
return;
err_llb:
@@ -182,7 +173,14 @@ void i915_gem_cleanup_stolen(struct drm_device *dev)
int i915_gem_init_stolen(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- unsigned long prealloc_size = dev_priv->mm.gtt.stolen_size;
+ unsigned long prealloc_size = dev_priv->mm.gtt->stolen_size;
+
+ dev_priv->mm.stolen_base = i915_stolen_to_physical(dev);
+ if (dev_priv->mm.stolen_base == 0)
+ return 0;
+
+ DRM_DEBUG_KMS("found %d bytes of stolen memory at %08lx\n",
+ dev_priv->mm.gtt->stolen_size, dev_priv->mm.stolen_base);
/* Basic memrange allocator for stolen space */
drm_mm_init(&dev_priv->mm.stolen, 0, prealloc_size);
diff --git a/sys/dev/drm2/i915/i915_gem_tiling.c b/sys/dev/drm2/i915/i915_gem_tiling.c
index 8e849a3..62c3c2d 100644
--- a/sys/dev/drm2/i915/i915_gem_tiling.c
+++ b/sys/dev/drm2/i915/i915_gem_tiling.c
@@ -29,7 +29,6 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
@@ -95,7 +94,10 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
- if (INTEL_INFO(dev)->gen >= 6) {
+ if (IS_VALLEYVIEW(dev)) {
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ } else if (INTEL_INFO(dev)->gen >= 6) {
uint32_t dimm_c0, dimm_c1;
dimm_c0 = I915_READ(MAD_DIMM_C0);
dimm_c1 = I915_READ(MAD_DIMM_C1);
@@ -313,12 +315,12 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
if (!i915_tiling_ok(dev,
args->stride, obj->base.size, args->tiling_mode)) {
- drm_gem_object_unreference(&obj->base);
+ drm_gem_object_unreference_unlocked(&obj->base);
return -EINVAL;
}
if (obj->pin_count) {
- drm_gem_object_unreference(&obj->base);
+ drm_gem_object_unreference_unlocked(&obj->base);
return -EBUSY;
}
@@ -483,7 +485,8 @@ i915_gem_object_do_bit_17_swizzle_page(struct drm_i915_gem_object *obj,
return;
new_bit_17 = VM_PAGE_TO_PHYS(m) >> 17;
- if ((new_bit_17 & 0x1) != (test_bit(m->pindex, obj->bit_17) != 0)) {
+ if ((new_bit_17 & 0x1) !=
+ (test_bit(m->pindex, obj->bit_17) != 0)) {
i915_gem_swizzle_page(m);
vm_page_dirty(m);
}
@@ -499,11 +502,12 @@ i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
return;
for (i = 0; i < page_count; i++) {
- char new_bit_17 = VM_PAGE_TO_PHYS(obj->pages[i]) >> 17;
+ vm_page_t page = obj->pages[i];
+ char new_bit_17 = VM_PAGE_TO_PHYS(page) >> 17;
if ((new_bit_17 & 0x1) !=
(test_bit(i, obj->bit_17) != 0)) {
- i915_gem_swizzle_page(obj->pages[i]);
- vm_page_dirty(obj->pages[i]);
+ i915_gem_swizzle_page(page);
+ vm_page_dirty(page);
}
}
}
@@ -516,14 +520,20 @@ i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
if (obj->bit_17 == NULL) {
obj->bit_17 = malloc(BITS_TO_LONGS(page_count) *
- sizeof(long), DRM_I915_GEM, M_WAITOK);
+ sizeof(long), DRM_I915_GEM, M_WAITOK);
+ if (obj->bit_17 == NULL) {
+ DRM_ERROR("Failed to allocate memory for bit 17 "
+ "record\n");
+ return;
+ }
}
/* XXXKIB: review locking, atomics might be not needed there */
for (i = 0; i < page_count; i++) {
- if (VM_PAGE_TO_PHYS(obj->pages[i]) & (1 << 17))
- set_bit(i, obj->bit_17);
+ vm_page_t page = obj->pages[i];
+ if (VM_PAGE_TO_PHYS(page) & (1 << 17))
+ __set_bit(i, obj->bit_17);
else
- clear_bit(i, obj->bit_17);
+ __clear_bit(i, obj->bit_17);
}
}
diff --git a/sys/dev/drm2/i915/i915_irq.c b/sys/dev/drm2/i915/i915_irq.c
index d452b69..a0ae879 100644
--- a/sys/dev/drm2/i915/i915_irq.c
+++ b/sys/dev/drm2/i915/i915_irq.c
@@ -29,8 +29,9 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
@@ -39,9 +40,6 @@ __FBSDID("$FreeBSD$");
#include <sys/sf_buf.h>
#include <sys/sleepqueue.h>
-static void i915_capture_error_state(struct drm_device *dev);
-static u32 ring_last_seqno(struct intel_ring_buffer *ring);
-
/* For display hotplug interrupt */
static void
ironlake_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask)
@@ -127,7 +125,10 @@ static int
i915_pipe_enabled(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- return I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
+
+ return I915_READ(PIPECONF(cpu_transcoder)) & PIPECONF_ENABLE;
}
/* Called from drm generic code, passed a 'crtc', which
@@ -187,6 +188,8 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
int vbl_start, vbl_end, htotal, vtotal;
bool in_vbl = true;
int ret = 0;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
if (!i915_pipe_enabled(dev, pipe)) {
DRM_DEBUG_DRIVER("trying to get scanoutpos for disabled "
@@ -195,7 +198,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
}
/* Get vtotal. */
- vtotal = 1 + ((I915_READ(VTOTAL(pipe)) >> 16) & 0x1fff);
+ vtotal = 1 + ((I915_READ(VTOTAL(cpu_transcoder)) >> 16) & 0x1fff);
if (INTEL_INFO(dev)->gen >= 4) {
/* No obvious pixelcount register. Only query vertical
@@ -215,13 +218,13 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
*/
position = (I915_READ(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
- htotal = 1 + ((I915_READ(HTOTAL(pipe)) >> 16) & 0x1fff);
+ htotal = 1 + ((I915_READ(HTOTAL(cpu_transcoder)) >> 16) & 0x1fff);
*vpos = position / htotal;
*hpos = position - (*vpos * htotal);
}
/* Query vblank area. */
- vbl = I915_READ(VBLANK(pipe));
+ vbl = I915_READ(VBLANK(cpu_transcoder));
/* Test position against vblank region. */
vbl_start = vbl & 0x1fff;
@@ -266,9 +269,7 @@ static int i915_get_vblank_timestamp(struct drm_device *dev, int pipe,
}
if (!crtc->enabled) {
-#if 0
DRM_DEBUG_KMS("crtc %d is disabled\n", pipe);
-#endif
return -EBUSY;
}
@@ -288,8 +289,6 @@ static void i915_hotplug_work_func(void *context, int pending)
struct drm_mode_config *mode_config = &dev->mode_config;
struct intel_encoder *encoder;
- DRM_DEBUG("running encoder hotplug functions\n");
-
sx_xlock(&mode_config->mutex);
DRM_DEBUG_KMS("running encoder hotplug functions\n");
@@ -300,16 +299,23 @@ static void i915_hotplug_work_func(void *context, int pending)
sx_xunlock(&mode_config->mutex);
/* Just fire off a uevent and let userspace tell us what to do */
-#if 0
drm_helper_hpd_irq_event(dev);
-#endif
}
-static void i915_handle_rps_change(struct drm_device *dev)
+/* defined intel_pm.c */
+extern struct mtx mchdev_lock;
+
+static void ironlake_handle_rps_change(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
u32 busy_up, busy_down, max_avg, min_avg;
- u8 new_delay = dev_priv->cur_delay;
+ u8 new_delay;
+
+ mtx_lock(&mchdev_lock);
+
+ I915_WRITE16(MEMINTRSTS, I915_READ(MEMINTRSTS));
+
+ new_delay = dev_priv->ips.cur_delay;
I915_WRITE16(MEMINTRSTS, MEMINT_EVAL_CHG);
busy_up = I915_READ(RCPREVBSYTUPAVG);
@@ -319,19 +325,21 @@ static void i915_handle_rps_change(struct drm_device *dev)
/* Handle RCS change request from hw */
if (busy_up > max_avg) {
- if (dev_priv->cur_delay != dev_priv->max_delay)
- new_delay = dev_priv->cur_delay - 1;
- if (new_delay < dev_priv->max_delay)
- new_delay = dev_priv->max_delay;
+ if (dev_priv->ips.cur_delay != dev_priv->ips.max_delay)
+ new_delay = dev_priv->ips.cur_delay - 1;
+ if (new_delay < dev_priv->ips.max_delay)
+ new_delay = dev_priv->ips.max_delay;
} else if (busy_down < min_avg) {
- if (dev_priv->cur_delay != dev_priv->min_delay)
- new_delay = dev_priv->cur_delay + 1;
- if (new_delay > dev_priv->min_delay)
- new_delay = dev_priv->min_delay;
+ if (dev_priv->ips.cur_delay != dev_priv->ips.min_delay)
+ new_delay = dev_priv->ips.cur_delay + 1;
+ if (new_delay > dev_priv->ips.min_delay)
+ new_delay = dev_priv->ips.min_delay;
}
if (ironlake_set_drps(dev, new_delay))
- dev_priv->cur_delay = new_delay;
+ dev_priv->ips.cur_delay = new_delay;
+
+ mtx_unlock(&mchdev_lock);
return;
}
@@ -344,11 +352,9 @@ static void notify_ring(struct drm_device *dev,
if (ring->obj == NULL)
return;
- CTR2(KTR_DRM, "request_complete %s %d", ring->name, ring->get_seqno(ring));
+ CTR2(KTR_DRM, "request_complete %s %d", ring->name, ring->get_seqno(ring, false));
- mtx_lock(&dev_priv->irq_lock);
- wakeup(ring);
- mtx_unlock(&dev_priv->irq_lock);
+ wake_up_all(&ring->irq_queue);
if (i915_enable_hangcheck) {
dev_priv->hangcheck_count = 0;
callout_schedule(&dev_priv->hangcheck_timer,
@@ -358,57 +364,119 @@ static void notify_ring(struct drm_device *dev,
static void gen6_pm_rps_work(void *context, int pending)
{
- struct drm_device *dev;
drm_i915_private_t *dev_priv = context;
u32 pm_iir, pm_imr;
u8 new_delay;
- dev = dev_priv->dev;
- new_delay = dev_priv->cur_delay;
-
- mtx_lock(&dev_priv->rps_lock);
- pm_iir = dev_priv->pm_iir;
- dev_priv->pm_iir = 0;
+ mtx_lock(&dev_priv->rps.lock);
+ pm_iir = dev_priv->rps.pm_iir;
+ dev_priv->rps.pm_iir = 0;
pm_imr = I915_READ(GEN6_PMIMR);
I915_WRITE(GEN6_PMIMR, 0);
- mtx_unlock(&dev_priv->rps_lock);
+ mtx_unlock(&dev_priv->rps.lock);
- if (!pm_iir)
+ if ((pm_iir & GEN6_PM_DEFERRED_EVENTS) == 0)
return;
- DRM_LOCK(dev);
- if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) {
- if (dev_priv->cur_delay != dev_priv->max_delay)
- new_delay = dev_priv->cur_delay + 1;
- if (new_delay > dev_priv->max_delay)
- new_delay = dev_priv->max_delay;
- } else if (pm_iir & (GEN6_PM_RP_DOWN_THRESHOLD | GEN6_PM_RP_DOWN_TIMEOUT)) {
- gen6_gt_force_wake_get(dev_priv);
- if (dev_priv->cur_delay != dev_priv->min_delay)
- new_delay = dev_priv->cur_delay - 1;
- if (new_delay < dev_priv->min_delay) {
- new_delay = dev_priv->min_delay;
- I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
- I915_READ(GEN6_RP_INTERRUPT_LIMITS) |
- ((new_delay << 16) & 0x3f0000));
- } else {
- /* Make sure we continue to get down interrupts
- * until we hit the minimum frequency */
- I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
- I915_READ(GEN6_RP_INTERRUPT_LIMITS) & ~0x3f0000);
- }
- gen6_gt_force_wake_put(dev_priv);
+ sx_xlock(&dev_priv->rps.hw_lock);
+
+ if (pm_iir & GEN6_PM_RP_UP_THRESHOLD)
+ new_delay = dev_priv->rps.cur_delay + 1;
+ else
+ new_delay = dev_priv->rps.cur_delay - 1;
+
+ /* sysfs frequency interfaces may have snuck in while servicing the
+ * interrupt
+ */
+ if (!(new_delay > dev_priv->rps.max_delay ||
+ new_delay < dev_priv->rps.min_delay)) {
+ gen6_set_rps(dev_priv->dev, new_delay);
}
- gen6_set_rps(dev, new_delay);
- dev_priv->cur_delay = new_delay;
+ sx_xunlock(&dev_priv->rps.hw_lock);
+}
- /*
- * rps_lock not held here because clearing is non-destructive. There is
- * an *extremely* unlikely race with gen6_rps_enable() that is prevented
- * by holding struct_mutex for the duration of the write.
+
+/**
+ * ivybridge_parity_work - Workqueue called when a parity error interrupt
+ * occurred.
+ * @work: workqueue struct
+ *
+ * Doesn't actually do anything except notify userspace. As a consequence of
+ * this event, userspace should try to remap the bad rows since statistically
+ * it is likely the same row is more likely to go bad again.
+ */
+static void ivybridge_parity_work(void *context, int pending)
+{
+ drm_i915_private_t *dev_priv = context;
+ u32 error_status, row, bank, subbank;
+#ifdef __linux__
+ char *parity_event[5];
+#endif
+ uint32_t misccpctl;
+
+ /* We must turn off DOP level clock gating to access the L3 registers.
+ * In order to prevent a get/put style interface, acquire struct mutex
+ * any time we access those registers.
*/
- DRM_UNLOCK(dev);
+ DRM_LOCK(dev_priv->dev);
+
+ misccpctl = I915_READ(GEN7_MISCCPCTL);
+ I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
+ POSTING_READ(GEN7_MISCCPCTL);
+
+ error_status = I915_READ(GEN7_L3CDERRST1);
+ row = GEN7_PARITY_ERROR_ROW(error_status);
+ bank = GEN7_PARITY_ERROR_BANK(error_status);
+ subbank = GEN7_PARITY_ERROR_SUBBANK(error_status);
+
+ I915_WRITE(GEN7_L3CDERRST1, GEN7_PARITY_ERROR_VALID |
+ GEN7_L3CDERRST1_ENABLE);
+ POSTING_READ(GEN7_L3CDERRST1);
+
+ I915_WRITE(GEN7_MISCCPCTL, misccpctl);
+
+ mtx_lock(&dev_priv->irq_lock);
+ dev_priv->gt_irq_mask &= ~GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+ mtx_unlock(&dev_priv->irq_lock);
+
+ DRM_UNLOCK(dev_priv->dev);
+
+#ifdef __linux__
+ parity_event[0] = "L3_PARITY_ERROR=1";
+ parity_event[1] = kasprintf(GFP_KERNEL, "ROW=%d", row);
+ parity_event[2] = kasprintf(GFP_KERNEL, "BANK=%d", bank);
+ parity_event[3] = kasprintf(GFP_KERNEL, "SUBBANK=%d", subbank);
+ parity_event[4] = NULL;
+
+ kobject_uevent_env(&dev_priv->dev->primary->kdev.kobj,
+ KOBJ_CHANGE, parity_event);
+#endif
+
+ DRM_DEBUG("Parity error: Row = %d, Bank = %d, Sub bank = %d.\n",
+ row, bank, subbank);
+
+#ifdef __linux__
+ kfree(parity_event[3]);
+ kfree(parity_event[2]);
+ kfree(parity_event[1]);
+#endif
+}
+
+static void ivybridge_handle_parity_error(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ if (!HAS_L3_GPU_CACHE(dev))
+ return;
+
+ mtx_lock(&dev_priv->irq_lock);
+ dev_priv->gt_irq_mask |= GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+ mtx_unlock(&dev_priv->irq_lock);
+
+ taskqueue_enqueue(dev_priv->wq, &dev_priv->l3_parity.error_work);
}
static void snb_gt_irq_handler(struct drm_device *dev,
@@ -418,11 +486,11 @@ static void snb_gt_irq_handler(struct drm_device *dev,
if (gt_iir & (GEN6_RENDER_USER_INTERRUPT |
GEN6_RENDER_PIPE_CONTROL_NOTIFY_INTERRUPT))
- notify_ring(dev, &dev_priv->rings[RCS]);
+ notify_ring(dev, &dev_priv->ring[RCS]);
if (gt_iir & GEN6_BSD_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[VCS]);
+ notify_ring(dev, &dev_priv->ring[VCS]);
if (gt_iir & GEN6_BLITTER_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[BCS]);
+ notify_ring(dev, &dev_priv->ring[BCS]);
if (gt_iir & (GT_GEN6_BLT_CS_ERROR_INTERRUPT |
GT_GEN6_BSD_CS_ERROR_INTERRUPT |
@@ -430,6 +498,9 @@ static void snb_gt_irq_handler(struct drm_device *dev,
DRM_ERROR("GT error interrupt 0x%08x\n", gt_iir);
i915_handle_error(dev, false);
}
+
+ if (gt_iir & GT_GEN7_L3_PARITY_ERROR_INTERRUPT)
+ ivybridge_handle_parity_error(dev);
}
static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
@@ -440,21 +511,19 @@ static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
* IIR bits should never already be set because IMR should
* prevent an interrupt from being shown in IIR. The warning
* displays a case where we've unsafely cleared
- * dev_priv->pm_iir. Although missing an interrupt of the same
+ * dev_priv->rps.pm_iir. Although missing an interrupt of the same
* type is not a problem, it displays a problem in the logic.
*
- * The mask bit in IMR is cleared by rps_work.
+ * The mask bit in IMR is cleared by dev_priv->rps.work.
*/
- mtx_lock(&dev_priv->rps_lock);
- if (dev_priv->pm_iir & pm_iir)
- printf("Missed a PM interrupt\n");
- dev_priv->pm_iir |= pm_iir;
- I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+ mtx_lock(&dev_priv->rps.lock);
+ dev_priv->rps.pm_iir |= pm_iir;
+ I915_WRITE(GEN6_PMIMR, dev_priv->rps.pm_iir);
POSTING_READ(GEN6_PMIMR);
- mtx_unlock(&dev_priv->rps_lock);
+ mtx_unlock(&dev_priv->rps.lock);
- taskqueue_enqueue(dev_priv->tq, &dev_priv->rps_task);
+ taskqueue_enqueue(dev_priv->wq, &dev_priv->rps.work);
}
static void valleyview_irq_handler(DRM_IRQ_ARGS)
@@ -464,15 +533,10 @@ static void valleyview_irq_handler(DRM_IRQ_ARGS)
u32 iir, gt_iir, pm_iir;
int pipe;
u32 pipe_stats[I915_MAX_PIPES];
- u32 vblank_status;
- int vblank = 0;
bool blc_event;
atomic_inc(&dev_priv->irq_received);
- vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS |
- PIPE_VBLANK_INTERRUPT_STATUS;
-
while (true) {
iir = I915_READ(VLV_IIR);
gt_iir = I915_READ(GTIIR);
@@ -500,6 +564,16 @@ static void valleyview_irq_handler(DRM_IRQ_ARGS)
}
mtx_unlock(&dev_priv->irq_lock);
+ for_each_pipe(pipe) {
+ if (pipe_stats[pipe] & PIPE_VBLANK_INTERRUPT_STATUS)
+ drm_handle_vblank(dev, pipe);
+
+ if (pipe_stats[pipe] & PLANE_FLIPDONE_INT_STATUS_VLV) {
+ intel_prepare_page_flip(dev, pipe);
+ intel_finish_page_flip(dev, pipe);
+ }
+ }
+
/* Consume port. Then clear IIR or we'll miss events */
if (iir & I915_DISPLAY_PORT_INTERRUPT) {
u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
@@ -507,26 +581,13 @@ static void valleyview_irq_handler(DRM_IRQ_ARGS)
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
- taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ taskqueue_enqueue(dev_priv->wq,
+ &dev_priv->hotplug_work);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
I915_READ(PORT_HOTPLUG_STAT);
}
-
- if (iir & I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT) {
- drm_handle_vblank(dev, 0);
- vblank++;
- intel_finish_page_flip(dev, 0);
- }
-
- if (iir & I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT) {
- drm_handle_vblank(dev, 1);
- vblank++;
- intel_finish_page_flip(dev, 0);
- }
-
if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
blc_event = true;
@@ -542,11 +603,14 @@ out:
return;
}
-static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
+static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
int pipe;
+ if (pch_iir & SDE_HOTPLUG_MASK)
+ taskqueue_enqueue(dev_priv->wq, &dev_priv->hotplug_work);
+
if (pch_iir & SDE_AUDIO_POWER_MASK)
DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
(pch_iir & SDE_AUDIO_POWER_MASK) >>
@@ -582,6 +646,38 @@ static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
DRM_DEBUG_DRIVER("PCH transcoder A underrun interrupt\n");
}
+static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ int pipe;
+
+ if (pch_iir & SDE_HOTPLUG_MASK_CPT)
+ taskqueue_enqueue(dev_priv->wq, &dev_priv->hotplug_work);
+
+ if (pch_iir & SDE_AUDIO_POWER_MASK_CPT)
+ DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
+ (pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>
+ SDE_AUDIO_POWER_SHIFT_CPT);
+
+ if (pch_iir & SDE_AUX_MASK_CPT)
+ DRM_DEBUG_DRIVER("AUX channel interrupt\n");
+
+ if (pch_iir & SDE_GMBUS_CPT)
+ DRM_DEBUG_DRIVER("PCH GMBUS interrupt\n");
+
+ if (pch_iir & SDE_AUDIO_CP_REQ_CPT)
+ DRM_DEBUG_DRIVER("Audio CP request interrupt\n");
+
+ if (pch_iir & SDE_AUDIO_CP_CHG_CPT)
+ DRM_DEBUG_DRIVER("Audio CP change interrupt\n");
+
+ if (pch_iir & SDE_FDI_MASK_CPT)
+ for_each_pipe(pipe)
+ DRM_DEBUG_DRIVER(" pipe %c FDI IIR: 0x%08x\n",
+ pipe_name(pipe),
+ I915_READ(FDI_RX_IIR(pipe)));
+}
+
static void ivybridge_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
@@ -594,7 +690,6 @@ static void ivybridge_irq_handler(DRM_IRQ_ARGS)
/* disable master interrupt before clearing iir */
de_ier = I915_READ(DEIER);
I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
- POSTING_READ(DEIER);
gt_iir = I915_READ(GTIIR);
if (gt_iir) {
@@ -608,22 +703,19 @@ static void ivybridge_irq_handler(DRM_IRQ_ARGS)
intel_opregion_gse_intr(dev);
for (i = 0; i < 3; i++) {
+ if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i)))
+ drm_handle_vblank(dev, i);
if (de_iir & (DE_PLANEA_FLIP_DONE_IVB << (5 * i))) {
intel_prepare_page_flip(dev, i);
intel_finish_page_flip_plane(dev, i);
}
- if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i)))
- drm_handle_vblank(dev, i);
}
/* check event from PCH */
if (de_iir & DE_PCH_EVENT_IVB) {
u32 pch_iir = I915_READ(SDEIIR);
- if (pch_iir & SDE_HOTPLUG_MASK_CPT)
- taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
- pch_irq_handler(dev, pch_iir);
+ cpt_irq_handler(dev, pch_iir);
/* clear PCH hotplug event before clear CPU irq */
I915_WRITE(SDEIIR, pch_iir);
@@ -651,9 +743,9 @@ static void ilk_gt_irq_handler(struct drm_device *dev,
u32 gt_iir)
{
if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY))
- notify_ring(dev, &dev_priv->rings[RCS]);
+ notify_ring(dev, &dev_priv->ring[RCS]);
if (gt_iir & GT_BSD_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[VCS]);
+ notify_ring(dev, &dev_priv->ring[VCS]);
}
static void ironlake_irq_handler(DRM_IRQ_ARGS)
@@ -661,7 +753,6 @@ static void ironlake_irq_handler(DRM_IRQ_ARGS)
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
u32 de_iir, gt_iir, de_ier, pch_iir, pm_iir;
- u32 hotplug_mask;
atomic_inc(&dev_priv->irq_received);
@@ -682,11 +773,6 @@ static void ironlake_irq_handler(DRM_IRQ_ARGS)
(!IS_GEN6(dev) || pm_iir == 0))
goto done;
- if (HAS_PCH_CPT(dev))
- hotplug_mask = SDE_HOTPLUG_MASK_CPT;
- else
- hotplug_mask = SDE_HOTPLUG_MASK;
-
if (IS_GEN5(dev))
ilk_gt_irq_handler(dev, dev_priv, gt_iir);
else
@@ -695,6 +781,12 @@ static void ironlake_irq_handler(DRM_IRQ_ARGS)
if (de_iir & DE_GSE)
intel_opregion_gse_intr(dev);
+ if (de_iir & DE_PIPEA_VBLANK)
+ drm_handle_vblank(dev, 0);
+
+ if (de_iir & DE_PIPEB_VBLANK)
+ drm_handle_vblank(dev, 1);
+
if (de_iir & DE_PLANEA_FLIP_DONE) {
intel_prepare_page_flip(dev, 0);
intel_finish_page_flip_plane(dev, 0);
@@ -705,24 +797,16 @@ static void ironlake_irq_handler(DRM_IRQ_ARGS)
intel_finish_page_flip_plane(dev, 1);
}
- if (de_iir & DE_PIPEA_VBLANK)
- drm_handle_vblank(dev, 0);
-
- if (de_iir & DE_PIPEB_VBLANK)
- drm_handle_vblank(dev, 1);
-
/* check event from PCH */
if (de_iir & DE_PCH_EVENT) {
- if (pch_iir & hotplug_mask)
- taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
- pch_irq_handler(dev, pch_iir);
+ if (HAS_PCH_CPT(dev))
+ cpt_irq_handler(dev, pch_iir);
+ else
+ ibx_irq_handler(dev, pch_iir);
}
- if (de_iir & DE_PCU_EVENT) {
- I915_WRITE16(MEMINTRSTS, I915_READ(MEMINTRSTS));
- i915_handle_rps_change(dev);
- }
+ if (IS_GEN5(dev) && de_iir & DE_PCU_EVENT)
+ ironlake_handle_rps_change(dev);
if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS)
gen6_queue_rps_work(dev_priv, pm_iir);
@@ -749,23 +833,59 @@ static void i915_error_work_func(void *context, int pending)
{
drm_i915_private_t *dev_priv = context;
struct drm_device *dev = dev_priv->dev;
+#ifdef __linux__
+ char *error_event[] = { "ERROR=1", NULL };
+ char *reset_event[] = { "RESET=1", NULL };
+ char *reset_done_event[] = { "ERROR=0", NULL };
- /* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event); */
+ kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
+#endif
- if (atomic_load_acq_int(&dev_priv->mm.wedged)) {
+ if (atomic_read(&dev_priv->mm.wedged)) {
DRM_DEBUG_DRIVER("resetting chip\n");
- /* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); */
+#ifdef __linux__
+ kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event);
+#endif
if (!i915_reset(dev)) {
- atomic_store_rel_int(&dev_priv->mm.wedged, 0);
- /* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event); */
+ atomic_set(&dev_priv->mm.wedged, 0);
+#ifdef __linux__
+ kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event);
+#endif
}
- mtx_lock(&dev_priv->error_completion_lock);
- dev_priv->error_completion++;
- wakeup(&dev_priv->error_completion);
- mtx_unlock(&dev_priv->error_completion_lock);
+ complete_all(&dev_priv->error_completion);
+ }
+}
+
+/* NB: please notice the memset */
+static void i915_get_extra_instdone(struct drm_device *dev,
+ uint32_t *instdone)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ memset(instdone, 0, sizeof(*instdone) * I915_NUM_INSTDONE_REG);
+
+ switch(INTEL_INFO(dev)->gen) {
+ case 2:
+ case 3:
+ instdone[0] = I915_READ(INSTDONE);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ instdone[0] = I915_READ(INSTDONE_I965);
+ instdone[1] = I915_READ(INSTDONE1);
+ break;
+ default:
+ WARN_ONCE(1, "Unsupported platform\n");
+ case 7:
+ instdone[0] = I915_READ(GEN7_INSTDONE_1);
+ instdone[1] = I915_READ(GEN7_SC_INSTDONE);
+ instdone[2] = I915_READ(GEN7_SAMPLER_INSTDONE);
+ instdone[3] = I915_READ(GEN7_ROW_INSTDONE);
+ break;
}
}
+//#ifdef CONFIG_DEBUG_FS
static struct drm_i915_error_object *
i915_error_object_create(struct drm_i915_private *dev_priv,
struct drm_i915_gem_object *src)
@@ -793,16 +913,17 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
if (reloc_offset < dev_priv->mm.gtt_mappable_end &&
src->has_global_gtt_mapping) {
- void *s;
+ void __iomem *s;
/* Simply ignore tiling or any overlapping fence.
* It's part of the error state, and this hopefully
* captures what the GPU read.
*/
- s = pmap_mapdev_attr(src->base.dev->agp->base +
+
+ s = pmap_mapdev_attr(dev_priv->mm.gtt_base_addr +
reloc_offset,
PAGE_SIZE, PAT_WRITE_COMBINING);
- memcpy(d, s, PAGE_SIZE);
+ memcpy_fromio(d, s, PAGE_SIZE);
pmap_unmapdev((vm_offset_t)s, PAGE_SIZE);
} else {
struct sf_buf *sf;
@@ -871,13 +992,13 @@ i915_error_state_free(struct drm_i915_error_state *error)
free(error->overlay, DRM_I915_GEM);
free(error, DRM_I915_GEM);
}
-
static void capture_bo(struct drm_i915_error_buffer *err,
struct drm_i915_gem_object *obj)
{
err->size = obj->base.size;
err->name = obj->base.name;
- err->seqno = obj->last_rendering_seqno;
+ err->rseqno = obj->last_read_seqno;
+ err->wseqno = obj->last_write_seqno;
err->gtt_offset = obj->gtt_offset;
err->read_domains = obj->base.read_domains;
err->write_domain = obj->base.write_domain;
@@ -967,12 +1088,24 @@ i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
if (!ring->get_seqno)
return NULL;
- seqno = ring->get_seqno(ring);
+ if (HAS_BROKEN_CS_TLB(dev_priv->dev)) {
+ u32 acthd = I915_READ(ACTHD);
+
+ if (WARN_ON(ring->id != RCS))
+ return NULL;
+
+ obj = ring->private;
+ if (acthd >= obj->gtt_offset &&
+ acthd < obj->gtt_offset + obj->base.size)
+ return i915_error_object_create(dev_priv, obj);
+ }
+
+ seqno = ring->get_seqno(ring, false);
list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
if (obj->ring != ring)
continue;
- if (i915_seqno_passed(seqno, obj->last_rendering_seqno))
+ if (i915_seqno_passed(seqno, obj->last_read_seqno))
continue;
if ((obj->base.read_domains & I915_GEM_DOMAIN_COMMAND) == 0)
@@ -994,11 +1127,14 @@ static void i915_record_ring_state(struct drm_device *dev,
struct drm_i915_private *dev_priv = dev->dev_private;
if (INTEL_INFO(dev)->gen >= 6) {
+ error->rc_psmi[ring->id] = I915_READ(ring->mmio_base + 0x50);
error->fault_reg[ring->id] = I915_READ(RING_FAULT_REG(ring));
error->semaphore_mboxes[ring->id][0]
= I915_READ(RING_SYNC_0(ring->mmio_base));
error->semaphore_mboxes[ring->id][1]
= I915_READ(RING_SYNC_1(ring->mmio_base));
+ error->semaphore_seqno[ring->id][0] = ring->sync_seqno[0];
+ error->semaphore_seqno[ring->id][1] = ring->sync_seqno[1];
}
if (INTEL_INFO(dev)->gen >= 4) {
@@ -1007,10 +1143,8 @@ static void i915_record_ring_state(struct drm_device *dev,
error->ipehr[ring->id] = I915_READ(RING_IPEHR(ring->mmio_base));
error->instdone[ring->id] = I915_READ(RING_INSTDONE(ring->mmio_base));
error->instps[ring->id] = I915_READ(RING_INSTPS(ring->mmio_base));
- if (ring->id == RCS) {
- error->instdone1 = I915_READ(INSTDONE1);
+ if (ring->id == RCS)
error->bbaddr = I915_READ64(BB_ADDR);
- }
} else {
error->faddr[ring->id] = I915_READ(DMA_FADD_I8XX);
error->ipeir[ring->id] = I915_READ(IPEIR);
@@ -1018,14 +1152,15 @@ static void i915_record_ring_state(struct drm_device *dev,
error->instdone[ring->id] = I915_READ(INSTDONE);
}
- sleepq_lock(ring);
- error->waiting[ring->id] = sleepq_sleepcnt(ring, 0) != 0;
- sleepq_release(ring);
+ sleepq_lock(&ring->irq_queue);
+ error->waiting[ring->id] = sleepq_sleepcnt(&ring->irq_queue, 0) != 0;
+ sleepq_release(&ring->irq_queue);
error->instpm[ring->id] = I915_READ(RING_INSTPM(ring->mmio_base));
- error->seqno[ring->id] = ring->get_seqno(ring);
+ error->seqno[ring->id] = ring->get_seqno(ring, false);
error->acthd[ring->id] = intel_ring_get_active_head(ring);
error->head[ring->id] = I915_READ_HEAD(ring);
error->tail[ring->id] = I915_READ_TAIL(ring);
+ error->ctl[ring->id] = I915_READ_CTL(ring);
error->cpu_ring_head[ring->id] = ring->head;
error->cpu_ring_tail[ring->id] = ring->tail;
@@ -1073,6 +1208,15 @@ static void i915_gem_record_rings(struct drm_device *dev,
}
}
+/**
+ * i915_capture_error_state - capture an error record for later analysis
+ * @dev: drm device
+ *
+ * Should be called when an error is detected (either a hang or an error
+ * interrupt) to capture error state from the time of the error. Fills
+ * out a structure which becomes available in debugfs for user level tools
+ * to pick up.
+ */
static void i915_capture_error_state(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1099,6 +1243,7 @@ static void i915_capture_error_state(struct drm_device *dev)
refcount_init(&error->ref, 1);
error->eir = I915_READ(EIR);
error->pgtbl_er = I915_READ(PGTBL_ER);
+ error->ccid = I915_READ(CCID);
if (HAS_PCH_SPLIT(dev))
error->ier = I915_READ(DEIER) | I915_READ(GTIER);
@@ -1109,6 +1254,16 @@ static void i915_capture_error_state(struct drm_device *dev)
else
error->ier = I915_READ(IER);
+ if (INTEL_INFO(dev)->gen >= 6)
+ error->derrmr = I915_READ(DERRMR);
+
+ if (IS_VALLEYVIEW(dev))
+ error->forcewake = I915_READ(FORCEWAKE_VLV);
+ else if (INTEL_INFO(dev)->gen >= 7)
+ error->forcewake = I915_READ(FORCEWAKE_MT);
+ else if (INTEL_INFO(dev)->gen == 6)
+ error->forcewake = I915_READ(FORCEWAKE);
+
for_each_pipe(pipe)
error->pipestat[pipe] = I915_READ(PIPESTAT(pipe));
@@ -1117,6 +1272,11 @@ static void i915_capture_error_state(struct drm_device *dev)
error->done_reg = I915_READ(DONE_REG);
}
+ if (INTEL_INFO(dev)->gen == 7)
+ error->err_int = I915_READ(GEN7_ERR_INT);
+
+ i915_get_extra_instdone(dev, error->extra_instdone);
+
i915_gem_record_fences(dev, error);
i915_gem_record_rings(dev, error);
@@ -1128,7 +1288,7 @@ static void i915_capture_error_state(struct drm_device *dev)
list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list)
i++;
error->active_bo_count = i;
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, mm_list)
+ list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list)
if (obj->pin_count)
i++;
error->pinned_bo_count = i - error->active_bo_count;
@@ -1153,7 +1313,7 @@ static void i915_capture_error_state(struct drm_device *dev)
error->pinned_bo_count =
capture_pinned_bo(error->pinned_bo,
error->pinned_bo_count,
- &dev_priv->mm.gtt_list);
+ &dev_priv->mm.bound_list);
microtime(&error->time);
@@ -1184,19 +1344,23 @@ void i915_destroy_error_state(struct drm_device *dev)
if (error && refcount_release(&error->ref))
i915_error_state_free(error);
}
-
-#define pr_err(...) printf(__VA_ARGS__)
+//#else
+//#define i915_capture_error_state(x)
+//#endif
static void i915_report_and_clear_eir(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t instdone[I915_NUM_INSTDONE_REG];
u32 eir = I915_READ(EIR);
- int pipe;
+ int pipe, i;
if (!eir)
return;
- printf("i915: render error detected, EIR: 0x%08x\n", eir);
+ pr_err("render error detected, EIR: 0x%08x\n", eir);
+
+ i915_get_extra_instdone(dev, instdone);
if (IS_G4X(dev)) {
if (eir & (GM45_ERROR_MEM_PRIV | GM45_ERROR_CP_PRIV)) {
@@ -1204,10 +1368,9 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
pr_err(" IPEIR: 0x%08x\n", I915_READ(IPEIR_I965));
pr_err(" IPEHR: 0x%08x\n", I915_READ(IPEHR_I965));
- pr_err(" INSTDONE: 0x%08x\n",
- I915_READ(INSTDONE_I965));
+ for (i = 0; i < ARRAY_SIZE(instdone); i++)
+ pr_err(" INSTDONE_%d: 0x%08x\n", i, instdone[i]);
pr_err(" INSTPS: 0x%08x\n", I915_READ(INSTPS));
- pr_err(" INSTDONE1: 0x%08x\n", I915_READ(INSTDONE1));
pr_err(" ACTHD: 0x%08x\n", I915_READ(ACTHD_I965));
I915_WRITE(IPEIR_I965, ipeir);
POSTING_READ(IPEIR_I965);
@@ -1241,12 +1404,13 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
if (eir & I915_ERROR_INSTRUCTION) {
pr_err("instruction error\n");
pr_err(" INSTPM: 0x%08x\n", I915_READ(INSTPM));
+ for (i = 0; i < ARRAY_SIZE(instdone); i++)
+ pr_err(" INSTDONE_%d: 0x%08x\n", i, instdone[i]);
if (INTEL_INFO(dev)->gen < 4) {
u32 ipeir = I915_READ(IPEIR);
pr_err(" IPEIR: 0x%08x\n", I915_READ(IPEIR));
pr_err(" IPEHR: 0x%08x\n", I915_READ(IPEHR));
- pr_err(" INSTDONE: 0x%08x\n", I915_READ(INSTDONE));
pr_err(" ACTHD: 0x%08x\n", I915_READ(ACTHD));
I915_WRITE(IPEIR, ipeir);
POSTING_READ(IPEIR);
@@ -1255,10 +1419,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
pr_err(" IPEIR: 0x%08x\n", I915_READ(IPEIR_I965));
pr_err(" IPEHR: 0x%08x\n", I915_READ(IPEHR_I965));
- pr_err(" INSTDONE: 0x%08x\n",
- I915_READ(INSTDONE_I965));
pr_err(" INSTPS: 0x%08x\n", I915_READ(INSTPS));
- pr_err(" INSTDONE1: 0x%08x\n", I915_READ(INSTDONE1));
pr_err(" ACTHD: 0x%08x\n", I915_READ(ACTHD_I965));
I915_WRITE(IPEIR_I965, ipeir);
POSTING_READ(IPEIR_I965);
@@ -1299,23 +1460,17 @@ void i915_handle_error(struct drm_device *dev, bool wedged)
i915_report_and_clear_eir(dev);
if (wedged) {
- mtx_lock(&dev_priv->error_completion_lock);
- dev_priv->error_completion = 0;
- dev_priv->mm.wedged = 1;
- /* unlock acts as rel barrier for store to wedged */
- mtx_unlock(&dev_priv->error_completion_lock);
+ INIT_COMPLETION(dev_priv->error_completion);
+ atomic_set(&dev_priv->mm.wedged, 1);
/*
* Wakeup waiting processes so they don't hang
*/
- for_each_ring(ring, dev_priv, i) {
- mtx_lock(&dev_priv->irq_lock);
- wakeup(ring);
- mtx_unlock(&dev_priv->irq_lock);
- }
+ for_each_ring(ring, dev_priv, i)
+ wake_up_all(&ring->irq_queue);
}
- taskqueue_enqueue(dev_priv->tq, &dev_priv->error_task);
+ taskqueue_enqueue(dev_priv->wq, &dev_priv->error_work);
}
static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
@@ -1335,7 +1490,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
work = intel_crtc->unpin_work;
if (work == NULL ||
- work->pending ||
+ atomic_read(&work->pending) >= INTEL_FLIP_COMPLETE ||
!work->enable_stall_check) {
/* Either the pending flip IRQ arrived, or we're too early. Don't check */
mtx_unlock(&dev->event_lock);
@@ -1425,23 +1580,20 @@ static int ivybridge_enable_vblank(struct drm_device *dev, int pipe)
static int valleyview_enable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u32 dpfl, imr;
+ u32 imr;
if (!i915_pipe_enabled(dev, pipe))
return -EINVAL;
mtx_lock(&dev_priv->irq_lock);
- dpfl = I915_READ(VLV_DPFLIPSTAT);
imr = I915_READ(VLV_IMR);
- if (pipe == 0) {
- dpfl |= PIPEA_VBLANK_INT_EN;
+ if (pipe == 0)
imr &= ~I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT;
- } else {
- dpfl |= PIPEA_VBLANK_INT_EN;
+ else
imr &= ~I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
- }
- I915_WRITE(VLV_DPFLIPSTAT, dpfl);
I915_WRITE(VLV_IMR, imr);
+ i915_enable_pipestat(dev_priv, pipe,
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
mtx_unlock(&dev_priv->irq_lock);
return 0;
@@ -1490,49 +1642,43 @@ static void ivybridge_disable_vblank(struct drm_device *dev, int pipe)
static void valleyview_disable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u32 dpfl, imr;
+ u32 imr;
mtx_lock(&dev_priv->irq_lock);
- dpfl = I915_READ(VLV_DPFLIPSTAT);
+ i915_disable_pipestat(dev_priv, pipe,
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
imr = I915_READ(VLV_IMR);
- if (pipe == 0) {
- dpfl &= ~PIPEA_VBLANK_INT_EN;
+ if (pipe == 0)
imr |= I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT;
- } else {
- dpfl &= ~PIPEB_VBLANK_INT_EN;
+ else
imr |= I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
- }
I915_WRITE(VLV_IMR, imr);
- I915_WRITE(VLV_DPFLIPSTAT, dpfl);
mtx_unlock(&dev_priv->irq_lock);
+ CTR2(KTR_DRM, "%s %d", __func__, pipe);
}
static u32
ring_last_seqno(struct intel_ring_buffer *ring)
{
-
- if (list_empty(&ring->request_list))
- return (0);
- else
- return (list_entry(ring->request_list.prev,
- struct drm_i915_gem_request, list)->seqno);
+ return list_entry(ring->request_list.prev,
+ struct drm_i915_gem_request, list)->seqno;
}
static bool i915_hangcheck_ring_idle(struct intel_ring_buffer *ring, bool *err)
{
if (list_empty(&ring->request_list) ||
- i915_seqno_passed(ring->get_seqno(ring),
+ i915_seqno_passed(ring->get_seqno(ring, false),
ring_last_seqno(ring))) {
/* Issue a wake-up to catch stuck h/w. */
- sleepq_lock(ring);
- if (sleepq_sleepcnt(ring, 0) != 0) {
- sleepq_release(ring);
+ sleepq_lock(&ring->irq_queue);
+ if (sleepq_sleepcnt(&ring->irq_queue, 0) != 0) {
+ sleepq_release(&ring->irq_queue);
DRM_ERROR("Hangcheck timer elapsed... %s idle\n",
ring->name);
- wakeup(ring);
+ wake_up_all(&ring->irq_queue);
*err = true;
} else
- sleepq_release(ring);
+ sleepq_release(&ring->irq_queue);
return true;
}
return false;
@@ -1591,7 +1737,7 @@ void i915_hangcheck_elapsed(void *data)
{
struct drm_device *dev = (struct drm_device *)data;
drm_i915_private_t *dev_priv = dev->dev_private;
- uint32_t acthd[I915_NUM_RINGS], instdone, instdone1;
+ uint32_t acthd[I915_NUM_RINGS], instdone[I915_NUM_INSTDONE_REG];
struct intel_ring_buffer *ring;
bool err = false, idle;
int i;
@@ -1619,24 +1765,16 @@ void i915_hangcheck_elapsed(void *data)
return;
}
- if (INTEL_INFO(dev)->gen < 4) {
- instdone = I915_READ(INSTDONE);
- instdone1 = 0;
- } else {
- instdone = I915_READ(INSTDONE_I965);
- instdone1 = I915_READ(INSTDONE1);
- }
+ i915_get_extra_instdone(dev, instdone);
if (memcmp(dev_priv->last_acthd, acthd, sizeof(acthd)) == 0 &&
- dev_priv->last_instdone == instdone &&
- dev_priv->last_instdone1 == instdone1) {
+ memcmp(dev_priv->prev_instdone, instdone, sizeof(instdone)) == 0) {
if (i915_hangcheck_hung(dev))
return;
} else {
dev_priv->hangcheck_count = 0;
memcpy(dev_priv->last_acthd, acthd, sizeof(acthd));
- dev_priv->last_instdone = instdone;
- dev_priv->last_instdone1 = instdone1;
+ memcpy(dev_priv->prev_instdone, instdone, sizeof(instdone));
}
repeat:
@@ -1814,13 +1952,13 @@ static int ivybridge_irq_postinstall(struct drm_device *dev)
DE_PIPEA_VBLANK_IVB);
POSTING_READ(DEIER);
- dev_priv->gt_irq_mask = ~0;
+ dev_priv->gt_irq_mask = ~GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
I915_WRITE(GTIIR, I915_READ(GTIIR));
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
render_irqs = GT_USER_INTERRUPT | GEN6_BSD_USER_INTERRUPT |
- GEN6_BLITTER_USER_INTERRUPT;
+ GEN6_BLITTER_USER_INTERRUPT | GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
I915_WRITE(GTIER, render_irqs);
POSTING_READ(GTIER);
@@ -1843,26 +1981,35 @@ static int ivybridge_irq_postinstall(struct drm_device *dev)
static int valleyview_irq_postinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u32 render_irqs;
u32 enable_mask;
u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
+ u32 pipestat_enable = PLANE_FLIP_DONE_INT_EN_VLV;
+ u32 render_irqs;
u16 msid;
enable_mask = I915_DISPLAY_PORT_INTERRUPT;
- enable_mask |= I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT |
+ enable_mask |= I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
+ I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT |
+ I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
- dev_priv->irq_mask = ~enable_mask;
+ /*
+ *Leave vblank interrupts masked initially. enable/disable will
+ * toggle them based on usage.
+ */
+ dev_priv->irq_mask = (~enable_mask) |
+ I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT |
+ I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
dev_priv->pipestat[0] = 0;
dev_priv->pipestat[1] = 0;
/* Hack for broken MSIs on VLV */
- pci_write_config(dev->dev, 0x94, 0xfee00000, 4);
- msid = pci_read_config(dev->dev, 0x98, 2);
+ pci_write_config_dword(dev->dev, 0x94, 0xfee00000);
+ pci_read_config_word(dev->dev, 0x98, &msid);
msid &= 0xff; /* mask out delivery bits */
msid |= (1<<14);
- pci_write_config(dev->dev, 0x98, msid, 2);
+ pci_write_config_word(dev->dev, 0x98, msid);
I915_WRITE(VLV_IMR, dev_priv->irq_mask);
I915_WRITE(VLV_IER, enable_mask);
@@ -1871,25 +2018,17 @@ static int valleyview_irq_postinstall(struct drm_device *dev)
I915_WRITE(PIPESTAT(1), 0xffff);
POSTING_READ(VLV_IER);
+ i915_enable_pipestat(dev_priv, 0, pipestat_enable);
+ i915_enable_pipestat(dev_priv, 1, pipestat_enable);
+
I915_WRITE(VLV_IIR, 0xffffffff);
I915_WRITE(VLV_IIR, 0xffffffff);
- render_irqs = GT_GEN6_BLT_FLUSHDW_NOTIFY_INTERRUPT |
- GT_GEN6_BLT_CS_ERROR_INTERRUPT |
- GT_GEN6_BLT_USER_INTERRUPT |
- GT_GEN6_BSD_USER_INTERRUPT |
- GT_GEN6_BSD_CS_ERROR_INTERRUPT |
- GT_GEN7_L3_PARITY_ERROR_INTERRUPT |
- GT_PIPE_NOTIFY |
- GT_RENDER_CS_ERROR_INTERRUPT |
- GT_SYNC_STATUS |
- GT_USER_INTERRUPT;
-
- dev_priv->gt_irq_mask = ~render_irqs;
-
- I915_WRITE(GTIIR, I915_READ(GTIIR));
I915_WRITE(GTIIR, I915_READ(GTIIR));
- I915_WRITE(GTIMR, 0);
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+
+ render_irqs = GT_USER_INTERRUPT | GEN6_BSD_USER_INTERRUPT |
+ GEN6_BLITTER_USER_INTERRUPT;
I915_WRITE(GTIER, render_irqs);
POSTING_READ(GTIER);
@@ -1900,7 +2039,6 @@ static int valleyview_irq_postinstall(struct drm_device *dev)
#endif
I915_WRITE(VLV_MASTER_IER, MASTER_INTERRUPT_ENABLE);
-#if 0 /* FIXME: check register definitions; some have moved */
/* Note HDMI and DP share bits */
if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
hotplug_en |= HDMIB_HOTPLUG_INT_EN;
@@ -1908,15 +2046,14 @@ static int valleyview_irq_postinstall(struct drm_device *dev)
hotplug_en |= HDMIC_HOTPLUG_INT_EN;
if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
hotplug_en |= HDMID_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS)
+ if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
hotplug_en |= SDVOC_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
+ if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
hotplug_en |= SDVOB_HOTPLUG_INT_EN;
if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
hotplug_en |= CRT_HOTPLUG_INT_EN;
hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
}
-#endif
I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
@@ -2061,7 +2198,7 @@ static void i8xx_irq_handler(DRM_IRQ_ARGS)
i915_update_dri1_breadcrumb(dev);
if (iir & I915_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[RCS]);
+ notify_ring(dev, &dev_priv->ring[RCS]);
if (pipe_stats[0] & PIPE_VBLANK_INTERRUPT_STATUS &&
drm_handle_vblank(dev, 0)) {
@@ -2166,9 +2303,9 @@ static int i915_irq_postinstall(struct drm_device *dev)
hotplug_en |= HDMIC_HOTPLUG_INT_EN;
if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
hotplug_en |= HDMID_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS)
+ if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
hotplug_en |= SDVOC_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
+ if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
hotplug_en |= SDVOB_HOTPLUG_INT_EN;
if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
hotplug_en |= CRT_HOTPLUG_INT_EN;
@@ -2241,8 +2378,8 @@ static irqreturn_t i915_irq_handler(DRM_IRQ_ARGS)
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
- taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ taskqueue_enqueue(dev_priv->wq,
+ &dev_priv->hotplug_work);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
POSTING_READ(PORT_HOTPLUG_STAT);
@@ -2252,7 +2389,7 @@ static irqreturn_t i915_irq_handler(DRM_IRQ_ARGS)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[RCS]);
+ notify_ring(dev, &dev_priv->ring[RCS]);
for_each_pipe(pipe) {
int plane = pipe;
@@ -2274,7 +2411,6 @@ static irqreturn_t i915_irq_handler(DRM_IRQ_ARGS)
if (blc_event || (iir & I915_ASLE_INTERRUPT))
intel_opregion_asle_intr(dev);
-
/* With MSI, interrupts are only generated when iir
* transitions from zero to nonzero. If another bit got
* set while we were handling the existing iir bits, then
@@ -2301,9 +2437,6 @@ static void i915_irq_uninstall(struct drm_device * dev)
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
int pipe;
- if (!dev_priv)
- return;
-
if (I915_HAS_HOTPLUG(dev)) {
I915_WRITE(PORT_HOTPLUG_EN, 0);
I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
@@ -2328,10 +2461,8 @@ static void i965_irq_preinstall(struct drm_device * dev)
atomic_set(&dev_priv->irq_received, 0);
- if (I915_HAS_HOTPLUG(dev)) {
- I915_WRITE(PORT_HOTPLUG_EN, 0);
- I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
- }
+ I915_WRITE(PORT_HOTPLUG_EN, 0);
+ I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
I915_WRITE(HWSTAM, 0xeffe);
for_each_pipe(pipe)
@@ -2344,11 +2475,13 @@ static void i965_irq_preinstall(struct drm_device * dev)
static int i965_irq_postinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ u32 hotplug_en;
u32 enable_mask;
u32 error_mask;
/* Unmask the interrupts that we always want on. */
dev_priv->irq_mask = ~(I915_ASLE_INTERRUPT |
+ I915_DISPLAY_PORT_INTERRUPT |
I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
@@ -2364,13 +2497,6 @@ static int i965_irq_postinstall(struct drm_device *dev)
dev_priv->pipestat[0] = 0;
dev_priv->pipestat[1] = 0;
- if (I915_HAS_HOTPLUG(dev)) {
- /* Enable in IER... */
- enable_mask |= I915_DISPLAY_PORT_INTERRUPT;
- /* and unmask in IMR */
- dev_priv->irq_mask &= ~I915_DISPLAY_PORT_INTERRUPT;
- }
-
/*
* Enable some error detection, note the instruction error mask
* bit is reserved, so we leave it masked.
@@ -2390,36 +2516,40 @@ static int i965_irq_postinstall(struct drm_device *dev)
I915_WRITE(IER, enable_mask);
POSTING_READ(IER);
- if (I915_HAS_HOTPLUG(dev)) {
- u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
-
- /* Note HDMI and DP share bits */
- if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
- hotplug_en |= HDMIB_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
- hotplug_en |= HDMIC_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
- hotplug_en |= HDMID_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS)
+ /* Note HDMI and DP share hotplug bits */
+ hotplug_en = 0;
+ if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMIB_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMIC_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMID_HOTPLUG_INT_EN;
+ if (IS_G4X(dev)) {
+ if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_G4X)
hotplug_en |= SDVOC_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
+ if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_G4X)
hotplug_en |= SDVOB_HOTPLUG_INT_EN;
- if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
- hotplug_en |= CRT_HOTPLUG_INT_EN;
+ } else {
+ if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I965)
+ hotplug_en |= SDVOC_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I965)
+ hotplug_en |= SDVOB_HOTPLUG_INT_EN;
+ }
+ if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
+ hotplug_en |= CRT_HOTPLUG_INT_EN;
- /* Programming the CRT detection parameters tends
- to generate a spurious hotplug event about three
- seconds later. So just do it once.
- */
- if (IS_G4X(dev))
- hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
- hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
- }
+ /* Programming the CRT detection parameters tends
+ to generate a spurious hotplug event about three
+ seconds later. So just do it once.
+ */
+ if (IS_G4X(dev))
+ hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
+ hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
+ }
- /* Ignore TV since it's buggy */
+ /* Ignore TV since it's buggy */
- I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
- }
+ I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
intel_opregion_enable_asle(dev);
@@ -2474,15 +2604,14 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
break;
/* Consume port. Then clear IIR or we'll miss events */
- if ((I915_HAS_HOTPLUG(dev)) &&
- (iir & I915_DISPLAY_PORT_INTERRUPT)) {
+ if (iir & I915_DISPLAY_PORT_INTERRUPT) {
u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
- taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ taskqueue_enqueue(dev_priv->wq,
+ &dev_priv->hotplug_work);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
I915_READ(PORT_HOTPLUG_STAT);
@@ -2492,9 +2621,9 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[RCS]);
+ notify_ring(dev, &dev_priv->ring[RCS]);
if (iir & I915_BSD_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->rings[VCS]);
+ notify_ring(dev, &dev_priv->ring[VCS]);
if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT)
intel_prepare_page_flip(dev, 0);
@@ -2543,10 +2672,11 @@ static void i965_irq_uninstall(struct drm_device * dev)
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
int pipe;
- if (I915_HAS_HOTPLUG(dev)) {
- I915_WRITE(PORT_HOTPLUG_EN, 0);
- I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
- }
+ if (!dev_priv)
+ return;
+
+ I915_WRITE(PORT_HOTPLUG_EN, 0);
+ I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
I915_WRITE(HWSTAM, 0xffffffff);
for_each_pipe(pipe)
@@ -2564,12 +2694,10 @@ void intel_irq_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- TASK_INIT(&dev_priv->hotplug_task, 0, i915_hotplug_work_func,
- dev->dev_private);
- TASK_INIT(&dev_priv->error_task, 0, i915_error_work_func,
- dev->dev_private);
- TASK_INIT(&dev_priv->rps_task, 0, gen6_pm_rps_work,
- dev->dev_private);
+ TASK_INIT(&dev_priv->hotplug_work, 0, i915_hotplug_work_func, dev->dev_private);
+ TASK_INIT(&dev_priv->error_work, 0, i915_error_work_func, dev->dev_private);
+ TASK_INIT(&dev_priv->rps.work, 0, gen6_pm_rps_work, dev->dev_private);
+ TASK_INIT(&dev_priv->l3_parity.error_work, 0, ivybridge_parity_work, dev->dev_private);
dev->driver->get_vblank_counter = i915_get_vblank_counter;
dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
@@ -2621,9 +2749,6 @@ void intel_irq_init(struct drm_device *dev)
dev->driver->irq_handler = i8xx_irq_handler;
dev->driver->irq_uninstall = i8xx_irq_uninstall;
} else if (INTEL_INFO(dev)->gen == 3) {
- /* IIR "flip pending" means done if this bit is set */
- I915_WRITE(ECOSKPD, _MASKED_BIT_DISABLE(ECO_FLIP_DONE));
-
dev->driver->irq_preinstall = i915_irq_preinstall;
dev->driver->irq_postinstall = i915_irq_postinstall;
dev->driver->irq_uninstall = i915_irq_uninstall;
diff --git a/sys/dev/drm2/i915/i915_reg.h b/sys/dev/drm2/i915/i915_reg.h
index 20c2aa7..80a7c7a 100644
--- a/sys/dev/drm2/i915/i915_reg.h
+++ b/sys/dev/drm2/i915/i915_reg.h
@@ -117,21 +117,6 @@ __FBSDID("$FreeBSD$");
#define GEN6_GRDOM_MEDIA (1 << 2)
#define GEN6_GRDOM_BLT (1 << 3)
-#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
-
-#define GEN6_PDE_VALID (1 << 0)
-#define GEN6_PDE_LARGE_PAGE (2 << 0) /* use 32kb pages */
-/* gen6+ has bit 11-4 for physical addr bit 39-32 */
-#define GEN6_PDE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
-
-#define GEN6_PTE_VALID (1 << 0)
-#define GEN6_PTE_UNCACHED (1 << 1)
-#define GEN6_PTE_CACHE_LLC (2 << 1)
-#define GEN6_PTE_CACHE_LLC_MLC (3 << 1)
-#define GEN6_PTE_CACHE_BITS (3 << 1)
-#define GEN6_PTE_GFDT (1 << 3)
-#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
-
#define RING_PP_DIR_BASE(ring) ((ring)->mmio_base+0x228)
#define RING_PP_DIR_BASE_READ(ring) ((ring)->mmio_base+0x518)
#define RING_PP_DIR_DCLV(ring) ((ring)->mmio_base+0x220)
@@ -740,10 +725,6 @@ __FBSDID("$FreeBSD$");
#define GEN6_BSD_SLEEP_FLUSH_DISABLE (1 << 2)
#define GEN6_BSD_SLEEP_INDICATOR (1 << 3)
#define GEN6_BSD_GO_INDICATOR (1 << 4)
-#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK (1 << 16)
-#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_DISABLE (1 << 0)
-#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE 0
-#define GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR (1 << 3)
#define GEN6_BSD_HWSTAM 0x12098
#define GEN6_BSD_IMR 0x120a8
@@ -1682,21 +1663,19 @@ __FBSDID("$FreeBSD$");
#define PORT_HOTPLUG_STAT 0x61114
/* HDMI/DP bits are gen4+ */
-#define HDMIB_HOTPLUG_INT_STATUS (1 << 29)
-#define DPB_HOTPLUG_INT_STATUS (1 << 29)
-#define HDMIC_HOTPLUG_INT_STATUS (1 << 28)
-#define DPC_HOTPLUG_INT_STATUS (1 << 28)
-#define HDMID_HOTPLUG_INT_STATUS (1 << 27)
-#define DPD_HOTPLUG_INT_STATUS (1 << 27)
+#define DPB_HOTPLUG_LIVE_STATUS (1 << 29)
+#define DPC_HOTPLUG_LIVE_STATUS (1 << 28)
+#define DPD_HOTPLUG_LIVE_STATUS (1 << 27)
+#define DPD_HOTPLUG_INT_STATUS (3 << 21)
+#define DPC_HOTPLUG_INT_STATUS (3 << 19)
+#define DPB_HOTPLUG_INT_STATUS (3 << 17)
/* HDMI bits are shared with the DP bits */
-/*
#define HDMIB_HOTPLUG_LIVE_STATUS (1 << 29)
#define HDMIC_HOTPLUG_LIVE_STATUS (1 << 28)
#define HDMID_HOTPLUG_LIVE_STATUS (1 << 27)
#define HDMID_HOTPLUG_INT_STATUS (3 << 21)
#define HDMIC_HOTPLUG_INT_STATUS (3 << 19)
#define HDMIB_HOTPLUG_INT_STATUS (3 << 17)
-*/
/* CRT/TV common between gen3+ */
#define CRT_HOTPLUG_INT_STATUS (1 << 11)
#define TV_HOTPLUG_INT_STATUS (1 << 10)
@@ -1704,8 +1683,6 @@ __FBSDID("$FreeBSD$");
#define CRT_HOTPLUG_MONITOR_COLOR (3 << 8)
#define CRT_HOTPLUG_MONITOR_MONO (2 << 8)
#define CRT_HOTPLUG_MONITOR_NONE (0 << 8)
-#define SDVOC_HOTPLUG_INT_STATUS (1 << 7)
-#define SDVOB_HOTPLUG_INT_STATUS (1 << 6)
/* SDVO is different across gen3/4 */
#define SDVOC_HOTPLUG_INT_STATUS_G4X (1 << 3)
#define SDVOB_HOTPLUG_INT_STATUS_G4X (1 << 2)
@@ -3307,12 +3284,6 @@ __FBSDID("$FreeBSD$");
#define DISPLAY_PORT_PLL_BIOS_1 0x46010
#define DISPLAY_PORT_PLL_BIOS_2 0x46014
-#define PCH_DSPCLK_GATE_D 0x42020
-# define DPFCUNIT_CLOCK_GATE_DISABLE (1 << 9)
-# define DPFCRUNIT_CLOCK_GATE_DISABLE (1 << 8)
-# define DPFDUNIT_CLOCK_GATE_DISABLE (1 << 7)
-# define DPARBUNIT_CLOCK_GATE_DISABLE (1 << 5)
-
#define PCH_3DCGDIS0 0x46020
# define MARIUNIT_CLOCK_GATE_DISABLE (1 << 18)
# define SVSMUNIT_CLOCK_GATE_DISABLE (1 << 1)
@@ -3486,15 +3457,6 @@ __FBSDID("$FreeBSD$");
#define ILK_HDCP_DISABLE (1<<25)
#define ILK_eDP_A_DISABLE (1<<24)
#define ILK_DESKTOP (1<<23)
-#define ILK_DSPCLK_GATE 0x42020
-#define IVB_VRHUNIT_CLK_GATE (1<<28)
-#define ILK_DPARB_CLK_GATE (1<<5)
-#define ILK_DPFD_CLK_GATE (1<<7)
-
-/* According to spec this bit 7/8/9 of 0x42020 should be set to enable FBC */
-#define ILK_CLK_FBC (1<<7)
-#define ILK_DPFC_DIS1 (1<<8)
-#define ILK_DPFC_DIS2 (1<<9)
#define ILK_DSPCLK_GATE_D 0x42020
#define ILK_VRHUNIT_CLOCK_GATE_DISABLE (1 << 28)
@@ -3763,7 +3725,7 @@ __FBSDID("$FreeBSD$");
#define TVIDEO_DIP_DATA(pipe) _PIPE(pipe, _VIDEO_DIP_DATA_A, _VIDEO_DIP_DATA_B)
#define TVIDEO_DIP_GCP(pipe) _PIPE(pipe, _VIDEO_DIP_GCP_A, _VIDEO_DIP_GCP_B)
-#define VLV_VIDEO_DIP_CTL_A 0x60220
+#define VLV_VIDEO_DIP_CTL_A 0x60200
#define VLV_VIDEO_DIP_DATA_A 0x60208
#define VLV_VIDEO_DIP_GDCP_PAYLOAD_A 0x60210
@@ -3879,7 +3841,6 @@ __FBSDID("$FreeBSD$");
#define _TRANSA_CHICKEN2 0xf0064
#define _TRANSB_CHICKEN2 0xf1064
#define TRANS_CHICKEN2(pipe) _PIPE(pipe, _TRANSA_CHICKEN2, _TRANSB_CHICKEN2)
-#define TRANS_AUTOTRAIN_GEN_STALL_DIS (1<<31)
#define TRANS_CHICKEN2_TIMING_OVERRIDE (1<<31)
#define TRANS_CHICKEN2_FDI_POLARITY_REVERSED (1<<29)
@@ -4030,33 +3991,7 @@ __FBSDID("$FreeBSD$");
#define FDI_PLL_CTL_1 0xfe000
#define FDI_PLL_CTL_2 0xfe004
-/* CRT */
-#define PCH_ADPA 0xe1100
-#define ADPA_TRANS_SELECT_MASK (1<<30)
-#define ADPA_TRANS_A_SELECT 0
-#define ADPA_TRANS_B_SELECT (1<<30)
-#define ADPA_CRT_HOTPLUG_MASK 0x03ff0000 /* bit 25-16 */
-#define ADPA_CRT_HOTPLUG_MONITOR_NONE (0<<24)
-#define ADPA_CRT_HOTPLUG_MONITOR_MASK (3<<24)
-#define ADPA_CRT_HOTPLUG_MONITOR_COLOR (3<<24)
-#define ADPA_CRT_HOTPLUG_MONITOR_MONO (2<<24)
-#define ADPA_CRT_HOTPLUG_ENABLE (1<<23)
-#define ADPA_CRT_HOTPLUG_PERIOD_64 (0<<22)
-#define ADPA_CRT_HOTPLUG_PERIOD_128 (1<<22)
-#define ADPA_CRT_HOTPLUG_WARMUP_5MS (0<<21)
-#define ADPA_CRT_HOTPLUG_WARMUP_10MS (1<<21)
-#define ADPA_CRT_HOTPLUG_SAMPLE_2S (0<<20)
-#define ADPA_CRT_HOTPLUG_SAMPLE_4S (1<<20)
-#define ADPA_CRT_HOTPLUG_VOLTAGE_40 (0<<18)
-#define ADPA_CRT_HOTPLUG_VOLTAGE_50 (1<<18)
-#define ADPA_CRT_HOTPLUG_VOLTAGE_60 (2<<18)
-#define ADPA_CRT_HOTPLUG_VOLTAGE_70 (3<<18)
-#define ADPA_CRT_HOTPLUG_VOLREF_325MV (0<<17)
-#define ADPA_CRT_HOTPLUG_VOLREF_475MV (1<<17)
-#define ADPA_CRT_HOTPLUG_FORCE_TRIGGER (1<<16)
-
/* or SDVOB */
-#define VLV_HDMIB 0x61140
#define HDMIB 0xe1140
#define PORT_ENABLE (1 << 31)
#define TRANSCODER(pipe) ((pipe) << 30)
@@ -4100,21 +4035,6 @@ __FBSDID("$FreeBSD$");
#define PIPEB_PP_OFF_DELAYS 0x6130c
#define PIPEB_PP_DIVISOR 0x61310
-#define BLC_PWM_CPU_CTL2 0x48250
-#define PWM_ENABLE (1 << 31)
-#define PWM_PIPE_A (0 << 29)
-#define PWM_PIPE_B (1 << 29)
-#define BLC_PWM_CPU_CTL 0x48254
-
-#define BLC_PWM_PCH_CTL1 0xc8250
-#define PWM_PCH_ENABLE (1 << 31)
-#define PWM_POLARITY_ACTIVE_LOW (1 << 29)
-#define PWM_POLARITY_ACTIVE_HIGH (0 << 29)
-#define PWM_POLARITY_ACTIVE_LOW2 (1 << 28)
-#define PWM_POLARITY_ACTIVE_HIGH2 (0 << 28)
-
-#define BLC_PWM_PCH_CTL2 0xc8254
-
#define PCH_PP_STATUS 0xc7200
#define PCH_PP_CONTROL 0xc7204
#define PANEL_UNLOCK_REGS (0xabcd << 16)
@@ -4701,15 +4621,6 @@ __FBSDID("$FreeBSD$");
#define TRANS_CLK_SEL_DISABLED (0x0<<29)
#define TRANS_CLK_SEL_PORT(x) ((x+1)<<29)
-/* Pipe clock selection */
-#define PIPE_CLK_SEL_A 0x46140
-#define PIPE_CLK_SEL_B 0x46144
-#define PIPE_CLK_SEL(pipe) _PIPE(pipe, \
- PIPE_CLK_SEL_A, \
- PIPE_CLK_SEL_B)
-/* For each pipe, we need to select the corresponding port clock */
-#define PIPE_CLK_SEL_DISABLED (0x0<<29)
-#define PIPE_CLK_SEL_PORT(x) ((x+1)<<29)
#define _TRANSA_MSA_MISC 0x60410
#define _TRANSB_MSA_MISC 0x61410
#define TRANS_MSA_MISC(tran) _TRANSCODER(tran, _TRANSA_MSA_MISC, \
diff --git a/sys/dev/drm2/i915/i915_suspend.c b/sys/dev/drm2/i915/i915_suspend.c
index 384a1d1..4ee9749 100644
--- a/sys/dev/drm2/i915/i915_suspend.c
+++ b/sys/dev/drm2/i915/i915_suspend.c
@@ -28,9 +28,9 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/i915_reg.h>
static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe)
{
@@ -63,9 +63,9 @@ static void i915_save_palette(struct drm_device *dev, enum pipe pipe)
reg = (pipe == PIPE_A) ? _LGC_PALETTE_A : _LGC_PALETTE_B;
if (pipe == PIPE_A)
- array = dev_priv->save_palette_a;
+ array = dev_priv->regfile.save_palette_a;
else
- array = dev_priv->save_palette_b;
+ array = dev_priv->regfile.save_palette_b;
for (i = 0; i < 256; i++)
array[i] = I915_READ(reg + (i << 2));
@@ -85,9 +85,9 @@ static void i915_restore_palette(struct drm_device *dev, enum pipe pipe)
reg = (pipe == PIPE_A) ? _LGC_PALETTE_A : _LGC_PALETTE_B;
if (pipe == PIPE_A)
- array = dev_priv->save_palette_a;
+ array = dev_priv->regfile.save_palette_a;
else
- array = dev_priv->save_palette_b;
+ array = dev_priv->regfile.save_palette_b;
for (i = 0; i < 256; i++)
I915_WRITE(reg + (i << 2), array[i]);
@@ -134,11 +134,11 @@ static void i915_save_vga(struct drm_device *dev)
u16 cr_index, cr_data, st01;
/* VGA color palette registers */
- dev_priv->saveDACMASK = I915_READ8(VGA_DACMASK);
+ dev_priv->regfile.saveDACMASK = I915_READ8(VGA_DACMASK);
/* MSR bits */
- dev_priv->saveMSR = I915_READ8(VGA_MSR_READ);
- if (dev_priv->saveMSR & VGA_MSR_CGA_MODE) {
+ dev_priv->regfile.saveMSR = I915_READ8(VGA_MSR_READ);
+ if (dev_priv->regfile.saveMSR & VGA_MSR_CGA_MODE) {
cr_index = VGA_CR_INDEX_CGA;
cr_data = VGA_CR_DATA_CGA;
st01 = VGA_ST01_CGA;
@@ -153,35 +153,35 @@ static void i915_save_vga(struct drm_device *dev)
i915_read_indexed(dev, cr_index, cr_data, 0x11) &
(~0x80));
for (i = 0; i <= 0x24; i++)
- dev_priv->saveCR[i] =
+ dev_priv->regfile.saveCR[i] =
i915_read_indexed(dev, cr_index, cr_data, i);
/* Make sure we don't turn off CR group 0 writes */
- dev_priv->saveCR[0x11] &= ~0x80;
+ dev_priv->regfile.saveCR[0x11] &= ~0x80;
/* Attribute controller registers */
I915_READ8(st01);
- dev_priv->saveAR_INDEX = I915_READ8(VGA_AR_INDEX);
+ dev_priv->regfile.saveAR_INDEX = I915_READ8(VGA_AR_INDEX);
for (i = 0; i <= 0x14; i++)
- dev_priv->saveAR[i] = i915_read_ar(dev, st01, i, 0);
+ dev_priv->regfile.saveAR[i] = i915_read_ar(dev, st01, i, 0);
I915_READ8(st01);
- I915_WRITE8(VGA_AR_INDEX, dev_priv->saveAR_INDEX);
+ I915_WRITE8(VGA_AR_INDEX, dev_priv->regfile.saveAR_INDEX);
I915_READ8(st01);
/* Graphics controller registers */
for (i = 0; i < 9; i++)
- dev_priv->saveGR[i] =
+ dev_priv->regfile.saveGR[i] =
i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, i);
- dev_priv->saveGR[0x10] =
+ dev_priv->regfile.saveGR[0x10] =
i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x10);
- dev_priv->saveGR[0x11] =
+ dev_priv->regfile.saveGR[0x11] =
i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x11);
- dev_priv->saveGR[0x18] =
+ dev_priv->regfile.saveGR[0x18] =
i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x18);
/* Sequencer registers */
for (i = 0; i < 8; i++)
- dev_priv->saveSR[i] =
+ dev_priv->regfile.saveSR[i] =
i915_read_indexed(dev, VGA_SR_INDEX, VGA_SR_DATA, i);
}
@@ -192,8 +192,8 @@ static void i915_restore_vga(struct drm_device *dev)
u16 cr_index, cr_data, st01;
/* MSR bits */
- I915_WRITE8(VGA_MSR_WRITE, dev_priv->saveMSR);
- if (dev_priv->saveMSR & VGA_MSR_CGA_MODE) {
+ I915_WRITE8(VGA_MSR_WRITE, dev_priv->regfile.saveMSR);
+ if (dev_priv->regfile.saveMSR & VGA_MSR_CGA_MODE) {
cr_index = VGA_CR_INDEX_CGA;
cr_data = VGA_CR_DATA_CGA;
st01 = VGA_ST01_CGA;
@@ -206,36 +206,36 @@ static void i915_restore_vga(struct drm_device *dev)
/* Sequencer registers, don't write SR07 */
for (i = 0; i < 7; i++)
i915_write_indexed(dev, VGA_SR_INDEX, VGA_SR_DATA, i,
- dev_priv->saveSR[i]);
+ dev_priv->regfile.saveSR[i]);
/* CRT controller regs */
/* Enable CR group 0 writes */
- i915_write_indexed(dev, cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]);
+ i915_write_indexed(dev, cr_index, cr_data, 0x11, dev_priv->regfile.saveCR[0x11]);
for (i = 0; i <= 0x24; i++)
- i915_write_indexed(dev, cr_index, cr_data, i, dev_priv->saveCR[i]);
+ i915_write_indexed(dev, cr_index, cr_data, i, dev_priv->regfile.saveCR[i]);
/* Graphics controller regs */
for (i = 0; i < 9; i++)
i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, i,
- dev_priv->saveGR[i]);
+ dev_priv->regfile.saveGR[i]);
i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x10,
- dev_priv->saveGR[0x10]);
+ dev_priv->regfile.saveGR[0x10]);
i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x11,
- dev_priv->saveGR[0x11]);
+ dev_priv->regfile.saveGR[0x11]);
i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x18,
- dev_priv->saveGR[0x18]);
+ dev_priv->regfile.saveGR[0x18]);
/* Attribute controller registers */
I915_READ8(st01); /* switch back to index mode */
for (i = 0; i <= 0x14; i++)
- i915_write_ar(dev, st01, i, dev_priv->saveAR[i], 0);
+ i915_write_ar(dev, st01, i, dev_priv->regfile.saveAR[i], 0);
I915_READ8(st01); /* switch back to index mode */
- I915_WRITE8(VGA_AR_INDEX, dev_priv->saveAR_INDEX | 0x20);
+ I915_WRITE8(VGA_AR_INDEX, dev_priv->regfile.saveAR_INDEX | 0x20);
I915_READ8(st01);
/* VGA color palette registers */
- I915_WRITE8(VGA_DACMASK, dev_priv->saveDACMASK);
+ I915_WRITE8(VGA_DACMASK, dev_priv->regfile.saveDACMASK);
}
static void i915_save_modeset_reg(struct drm_device *dev)
@@ -247,156 +247,162 @@ static void i915_save_modeset_reg(struct drm_device *dev)
return;
/* Cursor state */
- dev_priv->saveCURACNTR = I915_READ(_CURACNTR);
- dev_priv->saveCURAPOS = I915_READ(_CURAPOS);
- dev_priv->saveCURABASE = I915_READ(_CURABASE);
- dev_priv->saveCURBCNTR = I915_READ(_CURBCNTR);
- dev_priv->saveCURBPOS = I915_READ(_CURBPOS);
- dev_priv->saveCURBBASE = I915_READ(_CURBBASE);
+ dev_priv->regfile.saveCURACNTR = I915_READ(_CURACNTR);
+ dev_priv->regfile.saveCURAPOS = I915_READ(_CURAPOS);
+ dev_priv->regfile.saveCURABASE = I915_READ(_CURABASE);
+ dev_priv->regfile.saveCURBCNTR = I915_READ(_CURBCNTR);
+ dev_priv->regfile.saveCURBPOS = I915_READ(_CURBPOS);
+ dev_priv->regfile.saveCURBBASE = I915_READ(_CURBBASE);
if (IS_GEN2(dev))
- dev_priv->saveCURSIZE = I915_READ(CURSIZE);
+ dev_priv->regfile.saveCURSIZE = I915_READ(CURSIZE);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->savePCH_DREF_CONTROL = I915_READ(PCH_DREF_CONTROL);
- dev_priv->saveDISP_ARB_CTL = I915_READ(DISP_ARB_CTL);
+ dev_priv->regfile.savePCH_DREF_CONTROL = I915_READ(PCH_DREF_CONTROL);
+ dev_priv->regfile.saveDISP_ARB_CTL = I915_READ(DISP_ARB_CTL);
}
/* Pipe & plane A info */
- dev_priv->savePIPEACONF = I915_READ(_PIPEACONF);
- dev_priv->savePIPEASRC = I915_READ(_PIPEASRC);
+ dev_priv->regfile.savePIPEACONF = I915_READ(_PIPEACONF);
+ dev_priv->regfile.savePIPEASRC = I915_READ(_PIPEASRC);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->saveFPA0 = I915_READ(_PCH_FPA0);
- dev_priv->saveFPA1 = I915_READ(_PCH_FPA1);
- dev_priv->saveDPLL_A = I915_READ(_PCH_DPLL_A);
+ dev_priv->regfile.saveFPA0 = I915_READ(_PCH_FPA0);
+ dev_priv->regfile.saveFPA1 = I915_READ(_PCH_FPA1);
+ dev_priv->regfile.saveDPLL_A = I915_READ(_PCH_DPLL_A);
} else {
- dev_priv->saveFPA0 = I915_READ(_FPA0);
- dev_priv->saveFPA1 = I915_READ(_FPA1);
- dev_priv->saveDPLL_A = I915_READ(_DPLL_A);
+ dev_priv->regfile.saveFPA0 = I915_READ(_FPA0);
+ dev_priv->regfile.saveFPA1 = I915_READ(_FPA1);
+ dev_priv->regfile.saveDPLL_A = I915_READ(_DPLL_A);
}
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
- dev_priv->saveDPLL_A_MD = I915_READ(_DPLL_A_MD);
- dev_priv->saveHTOTAL_A = I915_READ(_HTOTAL_A);
- dev_priv->saveHBLANK_A = I915_READ(_HBLANK_A);
- dev_priv->saveHSYNC_A = I915_READ(_HSYNC_A);
- dev_priv->saveVTOTAL_A = I915_READ(_VTOTAL_A);
- dev_priv->saveVBLANK_A = I915_READ(_VBLANK_A);
- dev_priv->saveVSYNC_A = I915_READ(_VSYNC_A);
+ dev_priv->regfile.saveDPLL_A_MD = I915_READ(_DPLL_A_MD);
+ dev_priv->regfile.saveHTOTAL_A = I915_READ(_HTOTAL_A);
+ dev_priv->regfile.saveHBLANK_A = I915_READ(_HBLANK_A);
+ dev_priv->regfile.saveHSYNC_A = I915_READ(_HSYNC_A);
+ dev_priv->regfile.saveVTOTAL_A = I915_READ(_VTOTAL_A);
+ dev_priv->regfile.saveVBLANK_A = I915_READ(_VBLANK_A);
+ dev_priv->regfile.saveVSYNC_A = I915_READ(_VSYNC_A);
if (!HAS_PCH_SPLIT(dev))
- dev_priv->saveBCLRPAT_A = I915_READ(_BCLRPAT_A);
+ dev_priv->regfile.saveBCLRPAT_A = I915_READ(_BCLRPAT_A);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->savePIPEA_DATA_M1 = I915_READ(_PIPEA_DATA_M1);
- dev_priv->savePIPEA_DATA_N1 = I915_READ(_PIPEA_DATA_N1);
- dev_priv->savePIPEA_LINK_M1 = I915_READ(_PIPEA_LINK_M1);
- dev_priv->savePIPEA_LINK_N1 = I915_READ(_PIPEA_LINK_N1);
-
- dev_priv->saveFDI_TXA_CTL = I915_READ(_FDI_TXA_CTL);
- dev_priv->saveFDI_RXA_CTL = I915_READ(_FDI_RXA_CTL);
-
- dev_priv->savePFA_CTL_1 = I915_READ(_PFA_CTL_1);
- dev_priv->savePFA_WIN_SZ = I915_READ(_PFA_WIN_SZ);
- dev_priv->savePFA_WIN_POS = I915_READ(_PFA_WIN_POS);
-
- dev_priv->saveTRANSACONF = I915_READ(_TRANSACONF);
- dev_priv->saveTRANS_HTOTAL_A = I915_READ(_TRANS_HTOTAL_A);
- dev_priv->saveTRANS_HBLANK_A = I915_READ(_TRANS_HBLANK_A);
- dev_priv->saveTRANS_HSYNC_A = I915_READ(_TRANS_HSYNC_A);
- dev_priv->saveTRANS_VTOTAL_A = I915_READ(_TRANS_VTOTAL_A);
- dev_priv->saveTRANS_VBLANK_A = I915_READ(_TRANS_VBLANK_A);
- dev_priv->saveTRANS_VSYNC_A = I915_READ(_TRANS_VSYNC_A);
- }
-
- dev_priv->saveDSPACNTR = I915_READ(_DSPACNTR);
- dev_priv->saveDSPASTRIDE = I915_READ(_DSPASTRIDE);
- dev_priv->saveDSPASIZE = I915_READ(_DSPASIZE);
- dev_priv->saveDSPAPOS = I915_READ(_DSPAPOS);
- dev_priv->saveDSPAADDR = I915_READ(_DSPAADDR);
+ dev_priv->regfile.savePIPEA_DATA_M1 = I915_READ(_PIPEA_DATA_M1);
+ dev_priv->regfile.savePIPEA_DATA_N1 = I915_READ(_PIPEA_DATA_N1);
+ dev_priv->regfile.savePIPEA_LINK_M1 = I915_READ(_PIPEA_LINK_M1);
+ dev_priv->regfile.savePIPEA_LINK_N1 = I915_READ(_PIPEA_LINK_N1);
+
+ dev_priv->regfile.saveFDI_TXA_CTL = I915_READ(_FDI_TXA_CTL);
+ dev_priv->regfile.saveFDI_RXA_CTL = I915_READ(_FDI_RXA_CTL);
+
+ dev_priv->regfile.savePFA_CTL_1 = I915_READ(_PFA_CTL_1);
+ dev_priv->regfile.savePFA_WIN_SZ = I915_READ(_PFA_WIN_SZ);
+ dev_priv->regfile.savePFA_WIN_POS = I915_READ(_PFA_WIN_POS);
+
+ dev_priv->regfile.saveTRANSACONF = I915_READ(_TRANSACONF);
+ dev_priv->regfile.saveTRANS_HTOTAL_A = I915_READ(_TRANS_HTOTAL_A);
+ dev_priv->regfile.saveTRANS_HBLANK_A = I915_READ(_TRANS_HBLANK_A);
+ dev_priv->regfile.saveTRANS_HSYNC_A = I915_READ(_TRANS_HSYNC_A);
+ dev_priv->regfile.saveTRANS_VTOTAL_A = I915_READ(_TRANS_VTOTAL_A);
+ dev_priv->regfile.saveTRANS_VBLANK_A = I915_READ(_TRANS_VBLANK_A);
+ dev_priv->regfile.saveTRANS_VSYNC_A = I915_READ(_TRANS_VSYNC_A);
+ }
+
+ dev_priv->regfile.saveDSPACNTR = I915_READ(_DSPACNTR);
+ dev_priv->regfile.saveDSPASTRIDE = I915_READ(_DSPASTRIDE);
+ dev_priv->regfile.saveDSPASIZE = I915_READ(_DSPASIZE);
+ dev_priv->regfile.saveDSPAPOS = I915_READ(_DSPAPOS);
+ dev_priv->regfile.saveDSPAADDR = I915_READ(_DSPAADDR);
if (INTEL_INFO(dev)->gen >= 4) {
- dev_priv->saveDSPASURF = I915_READ(_DSPASURF);
- dev_priv->saveDSPATILEOFF = I915_READ(_DSPATILEOFF);
+ dev_priv->regfile.saveDSPASURF = I915_READ(_DSPASURF);
+ dev_priv->regfile.saveDSPATILEOFF = I915_READ(_DSPATILEOFF);
}
i915_save_palette(dev, PIPE_A);
- dev_priv->savePIPEASTAT = I915_READ(_PIPEASTAT);
+ dev_priv->regfile.savePIPEASTAT = I915_READ(_PIPEASTAT);
/* Pipe & plane B info */
- dev_priv->savePIPEBCONF = I915_READ(_PIPEBCONF);
- dev_priv->savePIPEBSRC = I915_READ(_PIPEBSRC);
+ dev_priv->regfile.savePIPEBCONF = I915_READ(_PIPEBCONF);
+ dev_priv->regfile.savePIPEBSRC = I915_READ(_PIPEBSRC);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->saveFPB0 = I915_READ(_PCH_FPB0);
- dev_priv->saveFPB1 = I915_READ(_PCH_FPB1);
- dev_priv->saveDPLL_B = I915_READ(_PCH_DPLL_B);
+ dev_priv->regfile.saveFPB0 = I915_READ(_PCH_FPB0);
+ dev_priv->regfile.saveFPB1 = I915_READ(_PCH_FPB1);
+ dev_priv->regfile.saveDPLL_B = I915_READ(_PCH_DPLL_B);
} else {
- dev_priv->saveFPB0 = I915_READ(_FPB0);
- dev_priv->saveFPB1 = I915_READ(_FPB1);
- dev_priv->saveDPLL_B = I915_READ(_DPLL_B);
+ dev_priv->regfile.saveFPB0 = I915_READ(_FPB0);
+ dev_priv->regfile.saveFPB1 = I915_READ(_FPB1);
+ dev_priv->regfile.saveDPLL_B = I915_READ(_DPLL_B);
}
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
- dev_priv->saveDPLL_B_MD = I915_READ(_DPLL_B_MD);
- dev_priv->saveHTOTAL_B = I915_READ(_HTOTAL_B);
- dev_priv->saveHBLANK_B = I915_READ(_HBLANK_B);
- dev_priv->saveHSYNC_B = I915_READ(_HSYNC_B);
- dev_priv->saveVTOTAL_B = I915_READ(_VTOTAL_B);
- dev_priv->saveVBLANK_B = I915_READ(_VBLANK_B);
- dev_priv->saveVSYNC_B = I915_READ(_VSYNC_B);
+ dev_priv->regfile.saveDPLL_B_MD = I915_READ(_DPLL_B_MD);
+ dev_priv->regfile.saveHTOTAL_B = I915_READ(_HTOTAL_B);
+ dev_priv->regfile.saveHBLANK_B = I915_READ(_HBLANK_B);
+ dev_priv->regfile.saveHSYNC_B = I915_READ(_HSYNC_B);
+ dev_priv->regfile.saveVTOTAL_B = I915_READ(_VTOTAL_B);
+ dev_priv->regfile.saveVBLANK_B = I915_READ(_VBLANK_B);
+ dev_priv->regfile.saveVSYNC_B = I915_READ(_VSYNC_B);
if (!HAS_PCH_SPLIT(dev))
- dev_priv->saveBCLRPAT_B = I915_READ(_BCLRPAT_B);
+ dev_priv->regfile.saveBCLRPAT_B = I915_READ(_BCLRPAT_B);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->savePIPEB_DATA_M1 = I915_READ(_PIPEB_DATA_M1);
- dev_priv->savePIPEB_DATA_N1 = I915_READ(_PIPEB_DATA_N1);
- dev_priv->savePIPEB_LINK_M1 = I915_READ(_PIPEB_LINK_M1);
- dev_priv->savePIPEB_LINK_N1 = I915_READ(_PIPEB_LINK_N1);
-
- dev_priv->saveFDI_TXB_CTL = I915_READ(_FDI_TXB_CTL);
- dev_priv->saveFDI_RXB_CTL = I915_READ(_FDI_RXB_CTL);
-
- dev_priv->savePFB_CTL_1 = I915_READ(_PFB_CTL_1);
- dev_priv->savePFB_WIN_SZ = I915_READ(_PFB_WIN_SZ);
- dev_priv->savePFB_WIN_POS = I915_READ(_PFB_WIN_POS);
-
- dev_priv->saveTRANSBCONF = I915_READ(_TRANSBCONF);
- dev_priv->saveTRANS_HTOTAL_B = I915_READ(_TRANS_HTOTAL_B);
- dev_priv->saveTRANS_HBLANK_B = I915_READ(_TRANS_HBLANK_B);
- dev_priv->saveTRANS_HSYNC_B = I915_READ(_TRANS_HSYNC_B);
- dev_priv->saveTRANS_VTOTAL_B = I915_READ(_TRANS_VTOTAL_B);
- dev_priv->saveTRANS_VBLANK_B = I915_READ(_TRANS_VBLANK_B);
- dev_priv->saveTRANS_VSYNC_B = I915_READ(_TRANS_VSYNC_B);
- }
-
- dev_priv->saveDSPBCNTR = I915_READ(_DSPBCNTR);
- dev_priv->saveDSPBSTRIDE = I915_READ(_DSPBSTRIDE);
- dev_priv->saveDSPBSIZE = I915_READ(_DSPBSIZE);
- dev_priv->saveDSPBPOS = I915_READ(_DSPBPOS);
- dev_priv->saveDSPBADDR = I915_READ(_DSPBADDR);
+ dev_priv->regfile.savePIPEB_DATA_M1 = I915_READ(_PIPEB_DATA_M1);
+ dev_priv->regfile.savePIPEB_DATA_N1 = I915_READ(_PIPEB_DATA_N1);
+ dev_priv->regfile.savePIPEB_LINK_M1 = I915_READ(_PIPEB_LINK_M1);
+ dev_priv->regfile.savePIPEB_LINK_N1 = I915_READ(_PIPEB_LINK_N1);
+
+ dev_priv->regfile.saveFDI_TXB_CTL = I915_READ(_FDI_TXB_CTL);
+ dev_priv->regfile.saveFDI_RXB_CTL = I915_READ(_FDI_RXB_CTL);
+
+ dev_priv->regfile.savePFB_CTL_1 = I915_READ(_PFB_CTL_1);
+ dev_priv->regfile.savePFB_WIN_SZ = I915_READ(_PFB_WIN_SZ);
+ dev_priv->regfile.savePFB_WIN_POS = I915_READ(_PFB_WIN_POS);
+
+ dev_priv->regfile.saveTRANSBCONF = I915_READ(_TRANSBCONF);
+ dev_priv->regfile.saveTRANS_HTOTAL_B = I915_READ(_TRANS_HTOTAL_B);
+ dev_priv->regfile.saveTRANS_HBLANK_B = I915_READ(_TRANS_HBLANK_B);
+ dev_priv->regfile.saveTRANS_HSYNC_B = I915_READ(_TRANS_HSYNC_B);
+ dev_priv->regfile.saveTRANS_VTOTAL_B = I915_READ(_TRANS_VTOTAL_B);
+ dev_priv->regfile.saveTRANS_VBLANK_B = I915_READ(_TRANS_VBLANK_B);
+ dev_priv->regfile.saveTRANS_VSYNC_B = I915_READ(_TRANS_VSYNC_B);
+ }
+
+ dev_priv->regfile.saveDSPBCNTR = I915_READ(_DSPBCNTR);
+ dev_priv->regfile.saveDSPBSTRIDE = I915_READ(_DSPBSTRIDE);
+ dev_priv->regfile.saveDSPBSIZE = I915_READ(_DSPBSIZE);
+ dev_priv->regfile.saveDSPBPOS = I915_READ(_DSPBPOS);
+ dev_priv->regfile.saveDSPBADDR = I915_READ(_DSPBADDR);
if (INTEL_INFO(dev)->gen >= 4) {
- dev_priv->saveDSPBSURF = I915_READ(_DSPBSURF);
- dev_priv->saveDSPBTILEOFF = I915_READ(_DSPBTILEOFF);
+ dev_priv->regfile.saveDSPBSURF = I915_READ(_DSPBSURF);
+ dev_priv->regfile.saveDSPBTILEOFF = I915_READ(_DSPBTILEOFF);
}
i915_save_palette(dev, PIPE_B);
- dev_priv->savePIPEBSTAT = I915_READ(_PIPEBSTAT);
+ dev_priv->regfile.savePIPEBSTAT = I915_READ(_PIPEBSTAT);
/* Fences */
switch (INTEL_INFO(dev)->gen) {
case 7:
case 6:
for (i = 0; i < 16; i++)
- dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
+ dev_priv->regfile.saveFENCE[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
break;
case 5:
case 4:
for (i = 0; i < 16; i++)
- dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_965_0 + (i * 8));
+ dev_priv->regfile.saveFENCE[i] = I915_READ64(FENCE_REG_965_0 + (i * 8));
break;
case 3:
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
for (i = 0; i < 8; i++)
- dev_priv->saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
+ dev_priv->regfile.saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
case 2:
for (i = 0; i < 8; i++)
- dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
+ dev_priv->regfile.saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
break;
}
+ /* CRT state */
+ if (HAS_PCH_SPLIT(dev))
+ dev_priv->regfile.saveADPA = I915_READ(PCH_ADPA);
+ else
+ dev_priv->regfile.saveADPA = I915_READ(ADPA);
+
return;
}
@@ -415,20 +421,20 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
case 7:
case 6:
for (i = 0; i < 16; i++)
- I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + (i * 8), dev_priv->saveFENCE[i]);
+ I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + (i * 8), dev_priv->regfile.saveFENCE[i]);
break;
case 5:
case 4:
for (i = 0; i < 16; i++)
- I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->saveFENCE[i]);
+ I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->regfile.saveFENCE[i]);
break;
case 3:
case 2:
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
for (i = 0; i < 8; i++)
- I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->saveFENCE[i+8]);
+ I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->regfile.saveFENCE[i+8]);
for (i = 0; i < 8; i++)
- I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]);
+ I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->regfile.saveFENCE[i]);
break;
}
@@ -450,158 +456,164 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
}
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(PCH_DREF_CONTROL, dev_priv->savePCH_DREF_CONTROL);
- I915_WRITE(DISP_ARB_CTL, dev_priv->saveDISP_ARB_CTL);
+ I915_WRITE(PCH_DREF_CONTROL, dev_priv->regfile.savePCH_DREF_CONTROL);
+ I915_WRITE(DISP_ARB_CTL, dev_priv->regfile.saveDISP_ARB_CTL);
}
/* Pipe & plane A info */
/* Prime the clock */
- if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) {
- I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A &
+ if (dev_priv->regfile.saveDPLL_A & DPLL_VCO_ENABLE) {
+ I915_WRITE(dpll_a_reg, dev_priv->regfile.saveDPLL_A &
~DPLL_VCO_ENABLE);
POSTING_READ(dpll_a_reg);
udelay(150);
}
- I915_WRITE(fpa0_reg, dev_priv->saveFPA0);
- I915_WRITE(fpa1_reg, dev_priv->saveFPA1);
+ I915_WRITE(fpa0_reg, dev_priv->regfile.saveFPA0);
+ I915_WRITE(fpa1_reg, dev_priv->regfile.saveFPA1);
/* Actually enable it */
- I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A);
+ I915_WRITE(dpll_a_reg, dev_priv->regfile.saveDPLL_A);
POSTING_READ(dpll_a_reg);
udelay(150);
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
- I915_WRITE(_DPLL_A_MD, dev_priv->saveDPLL_A_MD);
+ I915_WRITE(_DPLL_A_MD, dev_priv->regfile.saveDPLL_A_MD);
POSTING_READ(_DPLL_A_MD);
}
udelay(150);
/* Restore mode */
- I915_WRITE(_HTOTAL_A, dev_priv->saveHTOTAL_A);
- I915_WRITE(_HBLANK_A, dev_priv->saveHBLANK_A);
- I915_WRITE(_HSYNC_A, dev_priv->saveHSYNC_A);
- I915_WRITE(_VTOTAL_A, dev_priv->saveVTOTAL_A);
- I915_WRITE(_VBLANK_A, dev_priv->saveVBLANK_A);
- I915_WRITE(_VSYNC_A, dev_priv->saveVSYNC_A);
+ I915_WRITE(_HTOTAL_A, dev_priv->regfile.saveHTOTAL_A);
+ I915_WRITE(_HBLANK_A, dev_priv->regfile.saveHBLANK_A);
+ I915_WRITE(_HSYNC_A, dev_priv->regfile.saveHSYNC_A);
+ I915_WRITE(_VTOTAL_A, dev_priv->regfile.saveVTOTAL_A);
+ I915_WRITE(_VBLANK_A, dev_priv->regfile.saveVBLANK_A);
+ I915_WRITE(_VSYNC_A, dev_priv->regfile.saveVSYNC_A);
if (!HAS_PCH_SPLIT(dev))
- I915_WRITE(_BCLRPAT_A, dev_priv->saveBCLRPAT_A);
+ I915_WRITE(_BCLRPAT_A, dev_priv->regfile.saveBCLRPAT_A);
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(_PIPEA_DATA_M1, dev_priv->savePIPEA_DATA_M1);
- I915_WRITE(_PIPEA_DATA_N1, dev_priv->savePIPEA_DATA_N1);
- I915_WRITE(_PIPEA_LINK_M1, dev_priv->savePIPEA_LINK_M1);
- I915_WRITE(_PIPEA_LINK_N1, dev_priv->savePIPEA_LINK_N1);
+ I915_WRITE(_PIPEA_DATA_M1, dev_priv->regfile.savePIPEA_DATA_M1);
+ I915_WRITE(_PIPEA_DATA_N1, dev_priv->regfile.savePIPEA_DATA_N1);
+ I915_WRITE(_PIPEA_LINK_M1, dev_priv->regfile.savePIPEA_LINK_M1);
+ I915_WRITE(_PIPEA_LINK_N1, dev_priv->regfile.savePIPEA_LINK_N1);
- I915_WRITE(_FDI_RXA_CTL, dev_priv->saveFDI_RXA_CTL);
- I915_WRITE(_FDI_TXA_CTL, dev_priv->saveFDI_TXA_CTL);
+ I915_WRITE(_FDI_RXA_CTL, dev_priv->regfile.saveFDI_RXA_CTL);
+ I915_WRITE(_FDI_TXA_CTL, dev_priv->regfile.saveFDI_TXA_CTL);
- I915_WRITE(_PFA_CTL_1, dev_priv->savePFA_CTL_1);
- I915_WRITE(_PFA_WIN_SZ, dev_priv->savePFA_WIN_SZ);
- I915_WRITE(_PFA_WIN_POS, dev_priv->savePFA_WIN_POS);
+ I915_WRITE(_PFA_CTL_1, dev_priv->regfile.savePFA_CTL_1);
+ I915_WRITE(_PFA_WIN_SZ, dev_priv->regfile.savePFA_WIN_SZ);
+ I915_WRITE(_PFA_WIN_POS, dev_priv->regfile.savePFA_WIN_POS);
- I915_WRITE(_TRANSACONF, dev_priv->saveTRANSACONF);
- I915_WRITE(_TRANS_HTOTAL_A, dev_priv->saveTRANS_HTOTAL_A);
- I915_WRITE(_TRANS_HBLANK_A, dev_priv->saveTRANS_HBLANK_A);
- I915_WRITE(_TRANS_HSYNC_A, dev_priv->saveTRANS_HSYNC_A);
- I915_WRITE(_TRANS_VTOTAL_A, dev_priv->saveTRANS_VTOTAL_A);
- I915_WRITE(_TRANS_VBLANK_A, dev_priv->saveTRANS_VBLANK_A);
- I915_WRITE(_TRANS_VSYNC_A, dev_priv->saveTRANS_VSYNC_A);
+ I915_WRITE(_TRANSACONF, dev_priv->regfile.saveTRANSACONF);
+ I915_WRITE(_TRANS_HTOTAL_A, dev_priv->regfile.saveTRANS_HTOTAL_A);
+ I915_WRITE(_TRANS_HBLANK_A, dev_priv->regfile.saveTRANS_HBLANK_A);
+ I915_WRITE(_TRANS_HSYNC_A, dev_priv->regfile.saveTRANS_HSYNC_A);
+ I915_WRITE(_TRANS_VTOTAL_A, dev_priv->regfile.saveTRANS_VTOTAL_A);
+ I915_WRITE(_TRANS_VBLANK_A, dev_priv->regfile.saveTRANS_VBLANK_A);
+ I915_WRITE(_TRANS_VSYNC_A, dev_priv->regfile.saveTRANS_VSYNC_A);
}
/* Restore plane info */
- I915_WRITE(_DSPASIZE, dev_priv->saveDSPASIZE);
- I915_WRITE(_DSPAPOS, dev_priv->saveDSPAPOS);
- I915_WRITE(_PIPEASRC, dev_priv->savePIPEASRC);
- I915_WRITE(_DSPAADDR, dev_priv->saveDSPAADDR);
- I915_WRITE(_DSPASTRIDE, dev_priv->saveDSPASTRIDE);
+ I915_WRITE(_DSPASIZE, dev_priv->regfile.saveDSPASIZE);
+ I915_WRITE(_DSPAPOS, dev_priv->regfile.saveDSPAPOS);
+ I915_WRITE(_PIPEASRC, dev_priv->regfile.savePIPEASRC);
+ I915_WRITE(_DSPAADDR, dev_priv->regfile.saveDSPAADDR);
+ I915_WRITE(_DSPASTRIDE, dev_priv->regfile.saveDSPASTRIDE);
if (INTEL_INFO(dev)->gen >= 4) {
- I915_WRITE(_DSPASURF, dev_priv->saveDSPASURF);
- I915_WRITE(_DSPATILEOFF, dev_priv->saveDSPATILEOFF);
+ I915_WRITE(_DSPASURF, dev_priv->regfile.saveDSPASURF);
+ I915_WRITE(_DSPATILEOFF, dev_priv->regfile.saveDSPATILEOFF);
}
- I915_WRITE(_PIPEACONF, dev_priv->savePIPEACONF);
+ I915_WRITE(_PIPEACONF, dev_priv->regfile.savePIPEACONF);
i915_restore_palette(dev, PIPE_A);
/* Enable the plane */
- I915_WRITE(_DSPACNTR, dev_priv->saveDSPACNTR);
+ I915_WRITE(_DSPACNTR, dev_priv->regfile.saveDSPACNTR);
I915_WRITE(_DSPAADDR, I915_READ(_DSPAADDR));
/* Pipe & plane B info */
- if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) {
- I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B &
+ if (dev_priv->regfile.saveDPLL_B & DPLL_VCO_ENABLE) {
+ I915_WRITE(dpll_b_reg, dev_priv->regfile.saveDPLL_B &
~DPLL_VCO_ENABLE);
POSTING_READ(dpll_b_reg);
udelay(150);
}
- I915_WRITE(fpb0_reg, dev_priv->saveFPB0);
- I915_WRITE(fpb1_reg, dev_priv->saveFPB1);
+ I915_WRITE(fpb0_reg, dev_priv->regfile.saveFPB0);
+ I915_WRITE(fpb1_reg, dev_priv->regfile.saveFPB1);
/* Actually enable it */
- I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B);
+ I915_WRITE(dpll_b_reg, dev_priv->regfile.saveDPLL_B);
POSTING_READ(dpll_b_reg);
udelay(150);
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
- I915_WRITE(_DPLL_B_MD, dev_priv->saveDPLL_B_MD);
+ I915_WRITE(_DPLL_B_MD, dev_priv->regfile.saveDPLL_B_MD);
POSTING_READ(_DPLL_B_MD);
}
udelay(150);
/* Restore mode */
- I915_WRITE(_HTOTAL_B, dev_priv->saveHTOTAL_B);
- I915_WRITE(_HBLANK_B, dev_priv->saveHBLANK_B);
- I915_WRITE(_HSYNC_B, dev_priv->saveHSYNC_B);
- I915_WRITE(_VTOTAL_B, dev_priv->saveVTOTAL_B);
- I915_WRITE(_VBLANK_B, dev_priv->saveVBLANK_B);
- I915_WRITE(_VSYNC_B, dev_priv->saveVSYNC_B);
+ I915_WRITE(_HTOTAL_B, dev_priv->regfile.saveHTOTAL_B);
+ I915_WRITE(_HBLANK_B, dev_priv->regfile.saveHBLANK_B);
+ I915_WRITE(_HSYNC_B, dev_priv->regfile.saveHSYNC_B);
+ I915_WRITE(_VTOTAL_B, dev_priv->regfile.saveVTOTAL_B);
+ I915_WRITE(_VBLANK_B, dev_priv->regfile.saveVBLANK_B);
+ I915_WRITE(_VSYNC_B, dev_priv->regfile.saveVSYNC_B);
if (!HAS_PCH_SPLIT(dev))
- I915_WRITE(_BCLRPAT_B, dev_priv->saveBCLRPAT_B);
+ I915_WRITE(_BCLRPAT_B, dev_priv->regfile.saveBCLRPAT_B);
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(_PIPEB_DATA_M1, dev_priv->savePIPEB_DATA_M1);
- I915_WRITE(_PIPEB_DATA_N1, dev_priv->savePIPEB_DATA_N1);
- I915_WRITE(_PIPEB_LINK_M1, dev_priv->savePIPEB_LINK_M1);
- I915_WRITE(_PIPEB_LINK_N1, dev_priv->savePIPEB_LINK_N1);
+ I915_WRITE(_PIPEB_DATA_M1, dev_priv->regfile.savePIPEB_DATA_M1);
+ I915_WRITE(_PIPEB_DATA_N1, dev_priv->regfile.savePIPEB_DATA_N1);
+ I915_WRITE(_PIPEB_LINK_M1, dev_priv->regfile.savePIPEB_LINK_M1);
+ I915_WRITE(_PIPEB_LINK_N1, dev_priv->regfile.savePIPEB_LINK_N1);
- I915_WRITE(_FDI_RXB_CTL, dev_priv->saveFDI_RXB_CTL);
- I915_WRITE(_FDI_TXB_CTL, dev_priv->saveFDI_TXB_CTL);
+ I915_WRITE(_FDI_RXB_CTL, dev_priv->regfile.saveFDI_RXB_CTL);
+ I915_WRITE(_FDI_TXB_CTL, dev_priv->regfile.saveFDI_TXB_CTL);
- I915_WRITE(_PFB_CTL_1, dev_priv->savePFB_CTL_1);
- I915_WRITE(_PFB_WIN_SZ, dev_priv->savePFB_WIN_SZ);
- I915_WRITE(_PFB_WIN_POS, dev_priv->savePFB_WIN_POS);
+ I915_WRITE(_PFB_CTL_1, dev_priv->regfile.savePFB_CTL_1);
+ I915_WRITE(_PFB_WIN_SZ, dev_priv->regfile.savePFB_WIN_SZ);
+ I915_WRITE(_PFB_WIN_POS, dev_priv->regfile.savePFB_WIN_POS);
- I915_WRITE(_TRANSBCONF, dev_priv->saveTRANSBCONF);
- I915_WRITE(_TRANS_HTOTAL_B, dev_priv->saveTRANS_HTOTAL_B);
- I915_WRITE(_TRANS_HBLANK_B, dev_priv->saveTRANS_HBLANK_B);
- I915_WRITE(_TRANS_HSYNC_B, dev_priv->saveTRANS_HSYNC_B);
- I915_WRITE(_TRANS_VTOTAL_B, dev_priv->saveTRANS_VTOTAL_B);
- I915_WRITE(_TRANS_VBLANK_B, dev_priv->saveTRANS_VBLANK_B);
- I915_WRITE(_TRANS_VSYNC_B, dev_priv->saveTRANS_VSYNC_B);
+ I915_WRITE(_TRANSBCONF, dev_priv->regfile.saveTRANSBCONF);
+ I915_WRITE(_TRANS_HTOTAL_B, dev_priv->regfile.saveTRANS_HTOTAL_B);
+ I915_WRITE(_TRANS_HBLANK_B, dev_priv->regfile.saveTRANS_HBLANK_B);
+ I915_WRITE(_TRANS_HSYNC_B, dev_priv->regfile.saveTRANS_HSYNC_B);
+ I915_WRITE(_TRANS_VTOTAL_B, dev_priv->regfile.saveTRANS_VTOTAL_B);
+ I915_WRITE(_TRANS_VBLANK_B, dev_priv->regfile.saveTRANS_VBLANK_B);
+ I915_WRITE(_TRANS_VSYNC_B, dev_priv->regfile.saveTRANS_VSYNC_B);
}
/* Restore plane info */
- I915_WRITE(_DSPBSIZE, dev_priv->saveDSPBSIZE);
- I915_WRITE(_DSPBPOS, dev_priv->saveDSPBPOS);
- I915_WRITE(_PIPEBSRC, dev_priv->savePIPEBSRC);
- I915_WRITE(_DSPBADDR, dev_priv->saveDSPBADDR);
- I915_WRITE(_DSPBSTRIDE, dev_priv->saveDSPBSTRIDE);
+ I915_WRITE(_DSPBSIZE, dev_priv->regfile.saveDSPBSIZE);
+ I915_WRITE(_DSPBPOS, dev_priv->regfile.saveDSPBPOS);
+ I915_WRITE(_PIPEBSRC, dev_priv->regfile.savePIPEBSRC);
+ I915_WRITE(_DSPBADDR, dev_priv->regfile.saveDSPBADDR);
+ I915_WRITE(_DSPBSTRIDE, dev_priv->regfile.saveDSPBSTRIDE);
if (INTEL_INFO(dev)->gen >= 4) {
- I915_WRITE(_DSPBSURF, dev_priv->saveDSPBSURF);
- I915_WRITE(_DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
+ I915_WRITE(_DSPBSURF, dev_priv->regfile.saveDSPBSURF);
+ I915_WRITE(_DSPBTILEOFF, dev_priv->regfile.saveDSPBTILEOFF);
}
- I915_WRITE(_PIPEBCONF, dev_priv->savePIPEBCONF);
+ I915_WRITE(_PIPEBCONF, dev_priv->regfile.savePIPEBCONF);
i915_restore_palette(dev, PIPE_B);
/* Enable the plane */
- I915_WRITE(_DSPBCNTR, dev_priv->saveDSPBCNTR);
+ I915_WRITE(_DSPBCNTR, dev_priv->regfile.saveDSPBCNTR);
I915_WRITE(_DSPBADDR, I915_READ(_DSPBADDR));
/* Cursor state */
- I915_WRITE(_CURAPOS, dev_priv->saveCURAPOS);
- I915_WRITE(_CURACNTR, dev_priv->saveCURACNTR);
- I915_WRITE(_CURABASE, dev_priv->saveCURABASE);
- I915_WRITE(_CURBPOS, dev_priv->saveCURBPOS);
- I915_WRITE(_CURBCNTR, dev_priv->saveCURBCNTR);
- I915_WRITE(_CURBBASE, dev_priv->saveCURBBASE);
+ I915_WRITE(_CURAPOS, dev_priv->regfile.saveCURAPOS);
+ I915_WRITE(_CURACNTR, dev_priv->regfile.saveCURACNTR);
+ I915_WRITE(_CURABASE, dev_priv->regfile.saveCURABASE);
+ I915_WRITE(_CURBPOS, dev_priv->regfile.saveCURBPOS);
+ I915_WRITE(_CURBCNTR, dev_priv->regfile.saveCURBCNTR);
+ I915_WRITE(_CURBBASE, dev_priv->regfile.saveCURBBASE);
if (IS_GEN2(dev))
- I915_WRITE(CURSIZE, dev_priv->saveCURSIZE);
+ I915_WRITE(CURSIZE, dev_priv->regfile.saveCURSIZE);
+
+ /* CRT state */
+ if (HAS_PCH_SPLIT(dev))
+ I915_WRITE(PCH_ADPA, dev_priv->regfile.saveADPA);
+ else
+ I915_WRITE(ADPA, dev_priv->regfile.saveADPA);
return;
}
@@ -611,89 +623,84 @@ static void i915_save_display(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
/* Display arbitration control */
- dev_priv->saveDSPARB = I915_READ(DSPARB);
+ dev_priv->regfile.saveDSPARB = I915_READ(DSPARB);
/* This is only meaningful in non-KMS mode */
- /* Don't save them in KMS mode */
+ /* Don't regfile.save them in KMS mode */
i915_save_modeset_reg(dev);
- /* CRT state */
- if (HAS_PCH_SPLIT(dev)) {
- dev_priv->saveADPA = I915_READ(PCH_ADPA);
- } else {
- dev_priv->saveADPA = I915_READ(ADPA);
- }
-
/* LVDS state */
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
- dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_PCH_CTL1);
- dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_PCH_CTL2);
- dev_priv->saveBLC_CPU_PWM_CTL = I915_READ(BLC_PWM_CPU_CTL);
- dev_priv->saveBLC_CPU_PWM_CTL2 = I915_READ(BLC_PWM_CPU_CTL2);
- dev_priv->saveLVDS = I915_READ(PCH_LVDS);
+ dev_priv->regfile.savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
+ dev_priv->regfile.saveBLC_PWM_CTL = I915_READ(BLC_PWM_PCH_CTL1);
+ dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_PCH_CTL2);
+ dev_priv->regfile.saveBLC_CPU_PWM_CTL = I915_READ(BLC_PWM_CPU_CTL);
+ dev_priv->regfile.saveBLC_CPU_PWM_CTL2 = I915_READ(BLC_PWM_CPU_CTL2);
+ dev_priv->regfile.saveLVDS = I915_READ(PCH_LVDS);
} else {
- dev_priv->savePP_CONTROL = I915_READ(PP_CONTROL);
- dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
- dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL);
- dev_priv->saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL);
+ dev_priv->regfile.savePP_CONTROL = I915_READ(PP_CONTROL);
+ dev_priv->regfile.savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
+ dev_priv->regfile.saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL);
+ dev_priv->regfile.saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL);
if (INTEL_INFO(dev)->gen >= 4)
- dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
+ dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
if (IS_MOBILE(dev) && !IS_I830(dev))
- dev_priv->saveLVDS = I915_READ(LVDS);
+ dev_priv->regfile.saveLVDS = I915_READ(LVDS);
}
if (!IS_I830(dev) && !IS_845G(dev) && !HAS_PCH_SPLIT(dev))
- dev_priv->savePFIT_CONTROL = I915_READ(PFIT_CONTROL);
+ dev_priv->regfile.savePFIT_CONTROL = I915_READ(PFIT_CONTROL);
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
- dev_priv->savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
- dev_priv->savePP_DIVISOR = I915_READ(PCH_PP_DIVISOR);
+ dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
+ dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
+ dev_priv->regfile.savePP_DIVISOR = I915_READ(PCH_PP_DIVISOR);
} else {
- dev_priv->savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS);
- dev_priv->savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS);
- dev_priv->savePP_DIVISOR = I915_READ(PP_DIVISOR);
- }
-
- /* Display Port state */
- if (SUPPORTS_INTEGRATED_DP(dev)) {
- dev_priv->saveDP_B = I915_READ(DP_B);
- dev_priv->saveDP_C = I915_READ(DP_C);
- dev_priv->saveDP_D = I915_READ(DP_D);
- dev_priv->savePIPEA_GMCH_DATA_M = I915_READ(_PIPEA_GMCH_DATA_M);
- dev_priv->savePIPEB_GMCH_DATA_M = I915_READ(_PIPEB_GMCH_DATA_M);
- dev_priv->savePIPEA_GMCH_DATA_N = I915_READ(_PIPEA_GMCH_DATA_N);
- dev_priv->savePIPEB_GMCH_DATA_N = I915_READ(_PIPEB_GMCH_DATA_N);
- dev_priv->savePIPEA_DP_LINK_M = I915_READ(_PIPEA_DP_LINK_M);
- dev_priv->savePIPEB_DP_LINK_M = I915_READ(_PIPEB_DP_LINK_M);
- dev_priv->savePIPEA_DP_LINK_N = I915_READ(_PIPEA_DP_LINK_N);
- dev_priv->savePIPEB_DP_LINK_N = I915_READ(_PIPEB_DP_LINK_N);
- }
- /* FIXME: save TV & SDVO state */
-
- /* Only save FBC state on the platform that supports FBC */
+ dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS);
+ dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS);
+ dev_priv->regfile.savePP_DIVISOR = I915_READ(PP_DIVISOR);
+ }
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Display Port state */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ dev_priv->regfile.saveDP_B = I915_READ(DP_B);
+ dev_priv->regfile.saveDP_C = I915_READ(DP_C);
+ dev_priv->regfile.saveDP_D = I915_READ(DP_D);
+ dev_priv->regfile.savePIPEA_GMCH_DATA_M = I915_READ(_PIPEA_GMCH_DATA_M);
+ dev_priv->regfile.savePIPEB_GMCH_DATA_M = I915_READ(_PIPEB_GMCH_DATA_M);
+ dev_priv->regfile.savePIPEA_GMCH_DATA_N = I915_READ(_PIPEA_GMCH_DATA_N);
+ dev_priv->regfile.savePIPEB_GMCH_DATA_N = I915_READ(_PIPEB_GMCH_DATA_N);
+ dev_priv->regfile.savePIPEA_DP_LINK_M = I915_READ(_PIPEA_DP_LINK_M);
+ dev_priv->regfile.savePIPEB_DP_LINK_M = I915_READ(_PIPEB_DP_LINK_M);
+ dev_priv->regfile.savePIPEA_DP_LINK_N = I915_READ(_PIPEA_DP_LINK_N);
+ dev_priv->regfile.savePIPEB_DP_LINK_N = I915_READ(_PIPEB_DP_LINK_N);
+ }
+ /* FIXME: regfile.save TV & SDVO state */
+ }
+
+ /* Only regfile.save FBC state on the platform that supports FBC */
if (I915_HAS_FBC(dev)) {
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->saveDPFC_CB_BASE = I915_READ(ILK_DPFC_CB_BASE);
+ dev_priv->regfile.saveDPFC_CB_BASE = I915_READ(ILK_DPFC_CB_BASE);
} else if (IS_GM45(dev)) {
- dev_priv->saveDPFC_CB_BASE = I915_READ(DPFC_CB_BASE);
+ dev_priv->regfile.saveDPFC_CB_BASE = I915_READ(DPFC_CB_BASE);
} else {
- dev_priv->saveFBC_CFB_BASE = I915_READ(FBC_CFB_BASE);
- dev_priv->saveFBC_LL_BASE = I915_READ(FBC_LL_BASE);
- dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
- dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
+ dev_priv->regfile.saveFBC_CFB_BASE = I915_READ(FBC_CFB_BASE);
+ dev_priv->regfile.saveFBC_LL_BASE = I915_READ(FBC_LL_BASE);
+ dev_priv->regfile.saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
+ dev_priv->regfile.saveFBC_CONTROL = I915_READ(FBC_CONTROL);
}
}
/* VGA state */
- dev_priv->saveVGA0 = I915_READ(VGA0);
- dev_priv->saveVGA1 = I915_READ(VGA1);
- dev_priv->saveVGA_PD = I915_READ(VGA_PD);
+ dev_priv->regfile.saveVGA0 = I915_READ(VGA0);
+ dev_priv->regfile.saveVGA1 = I915_READ(VGA1);
+ dev_priv->regfile.saveVGA_PD = I915_READ(VGA_PD);
if (HAS_PCH_SPLIT(dev))
- dev_priv->saveVGACNTRL = I915_READ(CPU_VGACNTRL);
+ dev_priv->regfile.saveVGACNTRL = I915_READ(CPU_VGACNTRL);
else
- dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
+ dev_priv->regfile.saveVGACNTRL = I915_READ(VGACNTRL);
i915_save_vga(dev);
}
@@ -703,94 +710,95 @@ static void i915_restore_display(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
/* Display arbitration */
- I915_WRITE(DSPARB, dev_priv->saveDSPARB);
-
- /* Display port ratios (must be done before clock is set) */
- if (SUPPORTS_INTEGRATED_DP(dev)) {
- I915_WRITE(_PIPEA_GMCH_DATA_M, dev_priv->savePIPEA_GMCH_DATA_M);
- I915_WRITE(_PIPEB_GMCH_DATA_M, dev_priv->savePIPEB_GMCH_DATA_M);
- I915_WRITE(_PIPEA_GMCH_DATA_N, dev_priv->savePIPEA_GMCH_DATA_N);
- I915_WRITE(_PIPEB_GMCH_DATA_N, dev_priv->savePIPEB_GMCH_DATA_N);
- I915_WRITE(_PIPEA_DP_LINK_M, dev_priv->savePIPEA_DP_LINK_M);
- I915_WRITE(_PIPEB_DP_LINK_M, dev_priv->savePIPEB_DP_LINK_M);
- I915_WRITE(_PIPEA_DP_LINK_N, dev_priv->savePIPEA_DP_LINK_N);
- I915_WRITE(_PIPEB_DP_LINK_N, dev_priv->savePIPEB_DP_LINK_N);
+ I915_WRITE(DSPARB, dev_priv->regfile.saveDSPARB);
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Display port ratios (must be done before clock is set) */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ I915_WRITE(_PIPEA_GMCH_DATA_M, dev_priv->regfile.savePIPEA_GMCH_DATA_M);
+ I915_WRITE(_PIPEB_GMCH_DATA_M, dev_priv->regfile.savePIPEB_GMCH_DATA_M);
+ I915_WRITE(_PIPEA_GMCH_DATA_N, dev_priv->regfile.savePIPEA_GMCH_DATA_N);
+ I915_WRITE(_PIPEB_GMCH_DATA_N, dev_priv->regfile.savePIPEB_GMCH_DATA_N);
+ I915_WRITE(_PIPEA_DP_LINK_M, dev_priv->regfile.savePIPEA_DP_LINK_M);
+ I915_WRITE(_PIPEB_DP_LINK_M, dev_priv->regfile.savePIPEB_DP_LINK_M);
+ I915_WRITE(_PIPEA_DP_LINK_N, dev_priv->regfile.savePIPEA_DP_LINK_N);
+ I915_WRITE(_PIPEB_DP_LINK_N, dev_priv->regfile.savePIPEB_DP_LINK_N);
+ }
}
/* This is only meaningful in non-KMS mode */
/* Don't restore them in KMS mode */
i915_restore_modeset_reg(dev);
- /* CRT state */
- if (HAS_PCH_SPLIT(dev))
- I915_WRITE(PCH_ADPA, dev_priv->saveADPA);
- else
- I915_WRITE(ADPA, dev_priv->saveADPA);
-
/* LVDS state */
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
- I915_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2);
+ I915_WRITE(BLC_PWM_CTL2, dev_priv->regfile.saveBLC_PWM_CTL2);
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(PCH_LVDS, dev_priv->saveLVDS);
+ I915_WRITE(PCH_LVDS, dev_priv->regfile.saveLVDS);
} else if (IS_MOBILE(dev) && !IS_I830(dev))
- I915_WRITE(LVDS, dev_priv->saveLVDS);
+ I915_WRITE(LVDS, dev_priv->regfile.saveLVDS);
if (!IS_I830(dev) && !IS_845G(dev) && !HAS_PCH_SPLIT(dev))
- I915_WRITE(PFIT_CONTROL, dev_priv->savePFIT_CONTROL);
+ I915_WRITE(PFIT_CONTROL, dev_priv->regfile.savePFIT_CONTROL);
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->saveBLC_PWM_CTL);
- I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->saveBLC_PWM_CTL2);
- I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
- I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->saveBLC_CPU_PWM_CTL2);
- I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
- I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
- I915_WRITE(PCH_PP_DIVISOR, dev_priv->savePP_DIVISOR);
- I915_WRITE(PCH_PP_CONTROL, dev_priv->savePP_CONTROL);
+ I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->regfile.saveBLC_PWM_CTL);
+ I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->regfile.saveBLC_PWM_CTL2);
+ /* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2;
+ * otherwise we get blank eDP screen after S3 on some machines
+ */
+ I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->regfile.saveBLC_CPU_PWM_CTL2);
+ I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->regfile.saveBLC_CPU_PWM_CTL);
+ I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
+ I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
+ I915_WRITE(PCH_PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);
+ I915_WRITE(PCH_PP_CONTROL, dev_priv->regfile.savePP_CONTROL);
I915_WRITE(RSTDBYCTL,
- dev_priv->saveMCHBAR_RENDER_STANDBY);
+ dev_priv->regfile.saveMCHBAR_RENDER_STANDBY);
} else {
- I915_WRITE(PFIT_PGM_RATIOS, dev_priv->savePFIT_PGM_RATIOS);
- I915_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL);
- I915_WRITE(BLC_HIST_CTL, dev_priv->saveBLC_HIST_CTL);
- I915_WRITE(PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
- I915_WRITE(PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
- I915_WRITE(PP_DIVISOR, dev_priv->savePP_DIVISOR);
- I915_WRITE(PP_CONTROL, dev_priv->savePP_CONTROL);
- }
-
- /* Display Port state */
- if (SUPPORTS_INTEGRATED_DP(dev)) {
- I915_WRITE(DP_B, dev_priv->saveDP_B);
- I915_WRITE(DP_C, dev_priv->saveDP_C);
- I915_WRITE(DP_D, dev_priv->saveDP_D);
+ I915_WRITE(PFIT_PGM_RATIOS, dev_priv->regfile.savePFIT_PGM_RATIOS);
+ I915_WRITE(BLC_PWM_CTL, dev_priv->regfile.saveBLC_PWM_CTL);
+ I915_WRITE(BLC_HIST_CTL, dev_priv->regfile.saveBLC_HIST_CTL);
+ I915_WRITE(PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
+ I915_WRITE(PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
+ I915_WRITE(PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);
+ I915_WRITE(PP_CONTROL, dev_priv->regfile.savePP_CONTROL);
+ }
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Display Port state */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ I915_WRITE(DP_B, dev_priv->regfile.saveDP_B);
+ I915_WRITE(DP_C, dev_priv->regfile.saveDP_C);
+ I915_WRITE(DP_D, dev_priv->regfile.saveDP_D);
+ }
+ /* FIXME: restore TV & SDVO state */
}
- /* FIXME: restore TV & SDVO state */
/* only restore FBC info on the platform that supports FBC*/
intel_disable_fbc(dev);
if (I915_HAS_FBC(dev)) {
if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(ILK_DPFC_CB_BASE, dev_priv->saveDPFC_CB_BASE);
+ I915_WRITE(ILK_DPFC_CB_BASE, dev_priv->regfile.saveDPFC_CB_BASE);
} else if (IS_GM45(dev)) {
- I915_WRITE(DPFC_CB_BASE, dev_priv->saveDPFC_CB_BASE);
+ I915_WRITE(DPFC_CB_BASE, dev_priv->regfile.saveDPFC_CB_BASE);
} else {
- I915_WRITE(FBC_CFB_BASE, dev_priv->saveFBC_CFB_BASE);
- I915_WRITE(FBC_LL_BASE, dev_priv->saveFBC_LL_BASE);
- I915_WRITE(FBC_CONTROL2, dev_priv->saveFBC_CONTROL2);
- I915_WRITE(FBC_CONTROL, dev_priv->saveFBC_CONTROL);
+ I915_WRITE(FBC_CFB_BASE, dev_priv->regfile.saveFBC_CFB_BASE);
+ I915_WRITE(FBC_LL_BASE, dev_priv->regfile.saveFBC_LL_BASE);
+ I915_WRITE(FBC_CONTROL2, dev_priv->regfile.saveFBC_CONTROL2);
+ I915_WRITE(FBC_CONTROL, dev_priv->regfile.saveFBC_CONTROL);
}
}
/* VGA state */
if (HAS_PCH_SPLIT(dev))
- I915_WRITE(CPU_VGACNTRL, dev_priv->saveVGACNTRL);
+ I915_WRITE(CPU_VGACNTRL, dev_priv->regfile.saveVGACNTRL);
else
- I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL);
+ I915_WRITE(VGACNTRL, dev_priv->regfile.saveVGACNTRL);
- I915_WRITE(VGA0, dev_priv->saveVGA0);
- I915_WRITE(VGA1, dev_priv->saveVGA1);
- I915_WRITE(VGA_PD, dev_priv->saveVGA_PD);
+ I915_WRITE(VGA0, dev_priv->regfile.saveVGA0);
+ I915_WRITE(VGA1, dev_priv->regfile.saveVGA1);
+ I915_WRITE(VGA_PD, dev_priv->regfile.saveVGA_PD);
POSTING_READ(VGA_PD);
udelay(150);
@@ -802,49 +810,45 @@ int i915_save_state(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
int i;
- dev_priv->saveLBB = pci_read_config(dev->dev, LBB, 1);
-
- /* Hardware status page */
- dev_priv->saveHWS = I915_READ(HWS_PGA);
+ pci_read_config_byte(dev->dev, LBB, &dev_priv->regfile.saveLBB);
DRM_LOCK(dev);
i915_save_display(dev);
- /* Interrupt state */
- if (HAS_PCH_SPLIT(dev)) {
- dev_priv->saveDEIER = I915_READ(DEIER);
- dev_priv->saveDEIMR = I915_READ(DEIMR);
- dev_priv->saveGTIER = I915_READ(GTIER);
- dev_priv->saveGTIMR = I915_READ(GTIMR);
- dev_priv->saveFDI_RXA_IMR = I915_READ(_FDI_RXA_IMR);
- dev_priv->saveFDI_RXB_IMR = I915_READ(_FDI_RXB_IMR);
- dev_priv->saveMCHBAR_RENDER_STANDBY =
- I915_READ(RSTDBYCTL);
- dev_priv->savePCH_PORT_HOTPLUG = I915_READ(PCH_PORT_HOTPLUG);
- } else {
- dev_priv->saveIER = I915_READ(IER);
- dev_priv->saveIMR = I915_READ(IMR);
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Interrupt state */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->regfile.saveDEIER = I915_READ(DEIER);
+ dev_priv->regfile.saveDEIMR = I915_READ(DEIMR);
+ dev_priv->regfile.saveGTIER = I915_READ(GTIER);
+ dev_priv->regfile.saveGTIMR = I915_READ(GTIMR);
+ dev_priv->regfile.saveFDI_RXA_IMR = I915_READ(_FDI_RXA_IMR);
+ dev_priv->regfile.saveFDI_RXB_IMR = I915_READ(_FDI_RXB_IMR);
+ dev_priv->regfile.saveMCHBAR_RENDER_STANDBY =
+ I915_READ(RSTDBYCTL);
+ dev_priv->regfile.savePCH_PORT_HOTPLUG = I915_READ(PCH_PORT_HOTPLUG);
+ } else {
+ dev_priv->regfile.saveIER = I915_READ(IER);
+ dev_priv->regfile.saveIMR = I915_READ(IMR);
+ }
}
- if (IS_IRONLAKE_M(dev))
- ironlake_disable_drps(dev);
- if (INTEL_INFO(dev)->gen >= 6)
- gen6_disable_rps(dev);
+ intel_disable_gt_powersave(dev);
/* Cache mode state */
- dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
+ dev_priv->regfile.saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
/* Memory Arbitration state */
- dev_priv->saveMI_ARB_STATE = I915_READ(MI_ARB_STATE);
+ dev_priv->regfile.saveMI_ARB_STATE = I915_READ(MI_ARB_STATE);
/* Scratch space */
for (i = 0; i < 16; i++) {
- dev_priv->saveSWF0[i] = I915_READ(SWF00 + (i << 2));
- dev_priv->saveSWF1[i] = I915_READ(SWF10 + (i << 2));
+ dev_priv->regfile.saveSWF0[i] = I915_READ(SWF00 + (i << 2));
+ dev_priv->regfile.saveSWF1[i] = I915_READ(SWF10 + (i << 2));
}
for (i = 0; i < 3; i++)
- dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2));
+ dev_priv->regfile.saveSWF2[i] = I915_READ(SWF30 + (i << 2));
DRM_UNLOCK(dev);
@@ -856,45 +860,44 @@ int i915_restore_state(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
int i;
- pci_write_config(dev->dev, LBB, dev_priv->saveLBB, 1);
+ pci_write_config_byte(dev->dev, LBB, dev_priv->regfile.saveLBB);
DRM_LOCK(dev);
- /* Hardware status page */
- I915_WRITE(HWS_PGA, dev_priv->saveHWS);
-
i915_restore_display(dev);
- /* Interrupt state */
- if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(DEIER, dev_priv->saveDEIER);
- I915_WRITE(DEIMR, dev_priv->saveDEIMR);
- I915_WRITE(GTIER, dev_priv->saveGTIER);
- I915_WRITE(GTIMR, dev_priv->saveGTIMR);
- I915_WRITE(_FDI_RXA_IMR, dev_priv->saveFDI_RXA_IMR);
- I915_WRITE(_FDI_RXB_IMR, dev_priv->saveFDI_RXB_IMR);
- I915_WRITE(PCH_PORT_HOTPLUG, dev_priv->savePCH_PORT_HOTPLUG);
- } else {
- I915_WRITE(IER, dev_priv->saveIER);
- I915_WRITE(IMR, dev_priv->saveIMR);
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* Interrupt state */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(DEIER, dev_priv->regfile.saveDEIER);
+ I915_WRITE(DEIMR, dev_priv->regfile.saveDEIMR);
+ I915_WRITE(GTIER, dev_priv->regfile.saveGTIER);
+ I915_WRITE(GTIMR, dev_priv->regfile.saveGTIMR);
+ I915_WRITE(_FDI_RXA_IMR, dev_priv->regfile.saveFDI_RXA_IMR);
+ I915_WRITE(_FDI_RXB_IMR, dev_priv->regfile.saveFDI_RXB_IMR);
+ I915_WRITE(PCH_PORT_HOTPLUG, dev_priv->regfile.savePCH_PORT_HOTPLUG);
+ } else {
+ I915_WRITE(IER, dev_priv->regfile.saveIER);
+ I915_WRITE(IMR, dev_priv->regfile.saveIMR);
+ }
}
/* Cache mode state */
- I915_WRITE(CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
+ I915_WRITE(CACHE_MODE_0, dev_priv->regfile.saveCACHE_MODE_0 | 0xffff0000);
/* Memory arbitration state */
- I915_WRITE(MI_ARB_STATE, dev_priv->saveMI_ARB_STATE | 0xffff0000);
+ I915_WRITE(MI_ARB_STATE, dev_priv->regfile.saveMI_ARB_STATE | 0xffff0000);
for (i = 0; i < 16; i++) {
- I915_WRITE(SWF00 + (i << 2), dev_priv->saveSWF0[i]);
- I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i]);
+ I915_WRITE(SWF00 + (i << 2), dev_priv->regfile.saveSWF0[i]);
+ I915_WRITE(SWF10 + (i << 2), dev_priv->regfile.saveSWF1[i]);
}
for (i = 0; i < 3; i++)
- I915_WRITE(SWF30 + (i << 2), dev_priv->saveSWF2[i]);
+ I915_WRITE(SWF30 + (i << 2), dev_priv->regfile.saveSWF2[i]);
DRM_UNLOCK(dev);
- intel_iic_reset(dev);
+ intel_i2c_reset(dev);
return 0;
}
diff --git a/sys/dev/drm2/i915/intel_acpi.c b/sys/dev/drm2/i915/intel_acpi.c
new file mode 100644
index 0000000..19affc7
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_acpi.c
@@ -0,0 +1,256 @@
+/*
+ * Intel ACPI functions
+ *
+ * _DSM related code stolen from nouveau_acpi.c.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <contrib/dev/acpica/include/acpi.h>
+#include <contrib/dev/acpica/include/accommon.h>
+#include <dev/acpica/acpivar.h>
+
+#define INTEL_DSM_REVISION_ID 1 /* For Calpella anyway... */
+
+#define INTEL_DSM_FN_SUPPORTED_FUNCTIONS 0 /* No args */
+#define INTEL_DSM_FN_PLATFORM_MUX_INFO 1 /* No args */
+
+static struct intel_dsm_priv {
+ ACPI_HANDLE dhandle;
+} intel_dsm_priv;
+
+static const u8 intel_dsm_guid[] = {
+ 0xd3, 0x73, 0xd8, 0x7e,
+ 0xd0, 0xc2,
+ 0x4f, 0x4e,
+ 0xa8, 0x54,
+ 0x0f, 0x13, 0x17, 0xb0, 0x1c, 0x2c
+};
+
+static int intel_dsm(ACPI_HANDLE handle, int func, int arg)
+{
+ ACPI_BUFFER output = { ACPI_ALLOCATE_BUFFER, NULL };
+ ACPI_OBJECT_LIST input;
+ ACPI_OBJECT params[4];
+ ACPI_OBJECT *obj;
+ u32 result;
+ int ret = 0;
+
+ input.Count = 4;
+ input.Pointer = params;
+ params[0].Type = ACPI_TYPE_BUFFER;
+ params[0].Buffer.Length = sizeof(intel_dsm_guid);
+ params[0].Buffer.Pointer = __DECONST(char *, intel_dsm_guid);
+ params[1].Type = ACPI_TYPE_INTEGER;
+ params[1].Integer.Value = INTEL_DSM_REVISION_ID;
+ params[2].Type = ACPI_TYPE_INTEGER;
+ params[2].Integer.Value = func;
+ params[3].Type = ACPI_TYPE_INTEGER;
+ params[3].Integer.Value = arg;
+
+ ret = AcpiEvaluateObject(handle, "_DSM", &input, &output);
+ if (ret) {
+ DRM_DEBUG_DRIVER("failed to evaluate _DSM: %d\n", ret);
+ return ret;
+ }
+
+ obj = (ACPI_OBJECT *)output.Pointer;
+
+ result = 0;
+ switch (obj->Type) {
+ case ACPI_TYPE_INTEGER:
+ result = obj->Integer.Value;
+ break;
+
+ case ACPI_TYPE_BUFFER:
+ if (obj->Buffer.Length == 4) {
+ result = (obj->Buffer.Pointer[0] |
+ (obj->Buffer.Pointer[1] << 8) |
+ (obj->Buffer.Pointer[2] << 16) |
+ (obj->Buffer.Pointer[3] << 24));
+ break;
+ }
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ if (result == 0x80000002)
+ ret = -ENODEV;
+
+ AcpiOsFree(output.Pointer);
+ return ret;
+}
+
+static char *intel_dsm_port_name(u8 id)
+{
+ switch (id) {
+ case 0:
+ return "Reserved";
+ case 1:
+ return "Analog VGA";
+ case 2:
+ return "LVDS";
+ case 3:
+ return "Reserved";
+ case 4:
+ return "HDMI/DVI_B";
+ case 5:
+ return "HDMI/DVI_C";
+ case 6:
+ return "HDMI/DVI_D";
+ case 7:
+ return "DisplayPort_A";
+ case 8:
+ return "DisplayPort_B";
+ case 9:
+ return "DisplayPort_C";
+ case 0xa:
+ return "DisplayPort_D";
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ return "Reserved";
+ case 0xe:
+ return "WiDi";
+ default:
+ return "bad type";
+ }
+}
+
+static char *intel_dsm_mux_type(u8 type)
+{
+ switch (type) {
+ case 0:
+ return "unknown";
+ case 1:
+ return "No MUX, iGPU only";
+ case 2:
+ return "No MUX, dGPU only";
+ case 3:
+ return "MUXed between iGPU and dGPU";
+ default:
+ return "bad type";
+ }
+}
+
+static void intel_dsm_platform_mux_info(void)
+{
+ ACPI_BUFFER output = { ACPI_ALLOCATE_BUFFER, NULL };
+ ACPI_OBJECT_LIST input;
+ ACPI_OBJECT params[4];
+ ACPI_OBJECT *pkg;
+ int i, ret;
+
+ input.Count = 4;
+ input.Pointer = params;
+ params[0].Type = ACPI_TYPE_BUFFER;
+ params[0].Buffer.Length = sizeof(intel_dsm_guid);
+ params[0].Buffer.Pointer = __DECONST(char *, intel_dsm_guid);
+ params[1].Type = ACPI_TYPE_INTEGER;
+ params[1].Integer.Value = INTEL_DSM_REVISION_ID;
+ params[2].Type = ACPI_TYPE_INTEGER;
+ params[2].Integer.Value = INTEL_DSM_FN_PLATFORM_MUX_INFO;
+ params[3].Type = ACPI_TYPE_INTEGER;
+ params[3].Integer.Value = 0;
+
+ ret = AcpiEvaluateObject(intel_dsm_priv.dhandle, "_DSM", &input,
+ &output);
+ if (ret) {
+ DRM_DEBUG_DRIVER("failed to evaluate _DSM: %d\n", ret);
+ goto out;
+ }
+
+ pkg = (ACPI_OBJECT *)output.Pointer;
+
+ if (pkg->Type == ACPI_TYPE_PACKAGE) {
+ ACPI_OBJECT *connector_count = &pkg->Package.Elements[0];
+ DRM_DEBUG_DRIVER("MUX info connectors: %lld\n",
+ (unsigned long long)connector_count->Integer.Value);
+ for (i = 1; i < pkg->Package.Count; i++) {
+ ACPI_OBJECT *obj = &pkg->Package.Elements[i];
+ ACPI_OBJECT *connector_id =
+ &obj->Package.Elements[0];
+ ACPI_OBJECT *info = &obj->Package.Elements[1];
+ DRM_DEBUG_DRIVER("Connector id: 0x%016llx\n",
+ (unsigned long long)connector_id->Integer.Value);
+ DRM_DEBUG_DRIVER(" port id: %s\n",
+ intel_dsm_port_name(info->Buffer.Pointer[0]));
+ DRM_DEBUG_DRIVER(" display mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[1]));
+ DRM_DEBUG_DRIVER(" aux/dc mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[2]));
+ DRM_DEBUG_DRIVER(" hpd mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[3]));
+ }
+ }
+
+out:
+ AcpiOsFree(output.Pointer);
+}
+
+static bool intel_dsm_pci_probe(device_t dev)
+{
+ ACPI_HANDLE dhandle, intel_handle;
+ ACPI_STATUS status;
+ int ret;
+
+ dhandle = acpi_get_handle(dev);
+ if (!dhandle)
+ return false;
+
+ status = AcpiGetHandle(dhandle, "_DSM", &intel_handle);
+ if (ACPI_FAILURE(status)) {
+ DRM_DEBUG_KMS("no _DSM method for intel device\n");
+ return false;
+ }
+
+ ret = intel_dsm(dhandle, INTEL_DSM_FN_SUPPORTED_FUNCTIONS, 0);
+ if (ret < 0) {
+ DRM_DEBUG_KMS("failed to get supported _DSM functions\n");
+ return false;
+ }
+
+ intel_dsm_priv.dhandle = dhandle;
+
+ intel_dsm_platform_mux_info();
+ return true;
+}
+
+static bool intel_dsm_detect(void)
+{
+ char acpi_method_name[255] = { 0 };
+ ACPI_BUFFER buffer = {sizeof(acpi_method_name), acpi_method_name};
+ device_t dev = NULL;
+ bool has_dsm = false;
+ int vga_count = 0;
+
+#ifdef FREEBSD_WIP
+ while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
+#endif /* FREEBSD_WIP */
+ if ((dev = pci_find_class(PCIC_DISPLAY, PCIS_DISPLAY_VGA)) != NULL) {
+ vga_count++;
+ has_dsm |= intel_dsm_pci_probe(dev);
+ }
+
+ if (vga_count == 2 && has_dsm) {
+ AcpiGetName(intel_dsm_priv.dhandle, ACPI_FULL_PATHNAME, &buffer);
+ DRM_DEBUG_DRIVER("VGA switcheroo: detected DSM switching method %s handle\n",
+ acpi_method_name);
+ return true;
+ }
+
+ return false;
+}
+
+void intel_register_dsm_handler(void)
+{
+ if (!intel_dsm_detect())
+ return;
+}
+
+void intel_unregister_dsm_handler(void)
+{
+}
diff --git a/sys/dev/drm2/i915/intel_bios.c b/sys/dev/drm2/i915/intel_bios.c
index 0499794..f528766 100644
--- a/sys/dev/drm2/i915/intel_bios.c
+++ b/sys/dev/drm2/i915/intel_bios.c
@@ -23,10 +23,12 @@
* Authors:
* Eric Anholt <eric@anholt.net>
*
- * $FreeBSD$
*/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_dp_helper.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
@@ -169,8 +171,7 @@ get_lvds_dvo_timing(const struct bdb_lvds_lfp_data *lvds_lfp_data,
int dvo_timing_offset =
lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset -
lvds_lfp_data_ptrs->ptr[0].fp_timing_offset;
- const char *entry = (const char *)lvds_lfp_data->data +
- lfp_data_size * index;
+ const char *entry = (const char *)lvds_lfp_data->data + lfp_data_size * index;
return (const struct lvds_dvo_timing *)(entry + dvo_timing_offset);
}
@@ -188,7 +189,7 @@ get_lvds_fp_timing(const struct bdb_header *bdb,
u16 data_size = ((const u16 *)data)[-1]; /* stored in header */
size_t ofs;
- if (index >= DRM_ARRAY_SIZE(ptrs->ptr))
+ if (index >= ARRAY_SIZE(ptrs->ptr))
return NULL;
ofs = ptrs->ptr[index].fp_timing_offset;
if (ofs < data_ofs ||
@@ -234,8 +235,9 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
lvds_lfp_data_ptrs,
lvds_options->panel_type);
- panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!panel_fixed_mode)
+ return;
fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing);
@@ -263,9 +265,9 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
if (downclock < panel_dvo_timing->clock && i915_lvds_downclock) {
dev_priv->lvds_downclock_avail = 1;
dev_priv->lvds_downclock = downclock * 10;
- DRM_DEBUG("LVDS downclock is found in VBT. "
+ DRM_DEBUG_KMS("LVDS downclock is found in VBT. "
"Normal Clock %dKHz, downclock %dKHz\n",
- panel_fixed_mode->clock, 10 * downclock);
+ panel_fixed_mode->clock, 10*downclock);
}
fp_timing = get_lvds_fp_timing(bdb, lvds_lfp_data,
@@ -311,8 +313,9 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
if (!dvo_timing)
return;
- panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!panel_fixed_mode)
+ return;
fill_detail_timing_data(panel_fixed_mode, dvo_timing + index);
@@ -351,12 +354,14 @@ parse_general_features(struct drm_i915_private *dev_priv,
dev_priv->lvds_ssc_freq =
intel_bios_ssc_frequency(dev, general->ssc_freq);
dev_priv->display_clock_mode = general->display_clock_mode;
- DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d\n",
+ dev_priv->fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
+ DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d fdi_rx_polarity_inverted %d\n",
dev_priv->int_tv_support,
dev_priv->int_crt_support,
dev_priv->lvds_use_ssc,
dev_priv->lvds_ssc_freq,
- dev_priv->display_clock_mode);
+ dev_priv->display_clock_mode,
+ dev_priv->fdi_rx_polarity_inverted);
}
}
@@ -499,12 +504,8 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
edp = find_section(bdb, BDB_EDP);
if (!edp) {
- if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support) {
- DRM_DEBUG_KMS("No eDP BDB found but eDP panel "
- "supported, assume %dbpp panel color "
- "depth.\n",
- dev_priv->edp.bpp);
- }
+ if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support)
+ DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n");
return;
}
@@ -613,8 +614,11 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
DRM_DEBUG_KMS("no child dev is parsed from VBT\n");
return;
}
- dev_priv->child_dev = malloc(sizeof(*p_child) * count, DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ dev_priv->child_dev = malloc(count * sizeof(*p_child), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!dev_priv->child_dev) {
+ DRM_DEBUG_KMS("No memory space for child device\n");
+ return;
+ }
dev_priv->child_dev_num = count;
count = 0;
@@ -654,12 +658,9 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
dev_priv->lvds_use_ssc = 1;
dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1);
DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->lvds_ssc_freq);
-
- /* eDP data */
- dev_priv->edp.bpp = 18;
}
-static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
+static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
{
DRM_DEBUG_KMS("Falling back to manually reading VBT from "
"VBIOS ROM for %s\n",
@@ -688,12 +689,13 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
*
* Returns 0 on success, nonzero on failure.
*/
-bool
+int
intel_parse_bios(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ device_t vga_dev = device_get_parent(dev->dev);;
struct bdb_header *bdb = NULL;
- u8 *bios;
+ u8 __iomem *bios = NULL;
init_vbt_defaults(dev_priv);
@@ -707,20 +709,13 @@ intel_parse_bios(struct drm_device *dev)
} else
dev_priv->opregion.vbt = NULL;
}
- bios = NULL;
-#if 1
- if (bdb == NULL) {
- KIB_NOTYET();
- return (-1);
- }
-#else
if (bdb == NULL) {
struct vbt_header *vbt = NULL;
size_t size;
int i;
- bios = pci_map_rom(pdev, &size);
+ bios = vga_pci_map_bios(vga_dev, &size);
if (!bios)
return -1;
@@ -734,13 +729,12 @@ intel_parse_bios(struct drm_device *dev)
if (!vbt) {
DRM_DEBUG_DRIVER("VBT signature missing\n");
- pci_unmap_rom(pdev, bios);
+ vga_pci_unmap_bios(vga_dev, bios);
return -1;
}
bdb = (struct bdb_header *)(bios + i + vbt->bdb_offset);
}
-#endif
/* Grab useful general definitions */
parse_general_features(dev_priv, bdb);
@@ -752,14 +746,31 @@ intel_parse_bios(struct drm_device *dev)
parse_driver_features(dev_priv, bdb);
parse_edp(dev_priv, bdb);
-#if 0
if (bios)
- pci_unmap_rom(pdev, bios);
-#endif
+ vga_pci_unmap_bios(vga_dev, bios);
return 0;
}
+/*
+ * NOTE Linux<->FreeBSD:
+ * Apparently, Linux doesn't free those pointers.
+ * TODO: Report that upstream.
+ */
+void
+intel_free_parsed_bios_data(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ free(dev_priv->lfp_lvds_vbt_mode, DRM_MEM_KMS);
+ free(dev_priv->sdvo_lvds_vbt_mode, DRM_MEM_KMS);
+ free(dev_priv->child_dev, DRM_MEM_KMS);
+
+ dev_priv->lfp_lvds_vbt_mode = NULL;
+ dev_priv->sdvo_lvds_vbt_mode = NULL;
+ dev_priv->child_dev = NULL;
+}
+
/* Ensure that vital registers have been initialised, even if the BIOS
* is absent or just failing to do its job.
*/
@@ -768,7 +779,8 @@ void intel_setup_bios(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
/* Set the Panel Power On/Off timings if uninitialized. */
- if ((I915_READ(PP_ON_DELAYS) == 0) && (I915_READ(PP_OFF_DELAYS) == 0)) {
+ if (!HAS_PCH_SPLIT(dev) &&
+ I915_READ(PP_ON_DELAYS) == 0 && I915_READ(PP_OFF_DELAYS) == 0) {
/* Set T2 to 40ms and T5 to 200ms */
I915_WRITE(PP_ON_DELAYS, 0x019007d0);
diff --git a/sys/dev/drm2/i915/intel_bios.h b/sys/dev/drm2/i915/intel_bios.h
index 186409c..8da5e01 100644
--- a/sys/dev/drm2/i915/intel_bios.h
+++ b/sys/dev/drm2/i915/intel_bios.h
@@ -128,7 +128,9 @@ struct bdb_general_features {
/* bits 3 */
u8 disable_smooth_vision:1;
u8 single_dvi:1;
- u8 rsvd9:6; /* finish byte */
+ u8 rsvd9:1;
+ u8 fdi_rx_polarity_inverted:1;
+ u8 rsvd10:4; /* finish byte */
/* bits 4 */
u8 legacy_monitor_detect;
@@ -477,7 +479,8 @@ struct bdb_edp {
} __attribute__ ((packed));
void intel_setup_bios(struct drm_device *dev);
-bool intel_parse_bios(struct drm_device *dev);
+int intel_parse_bios(struct drm_device *dev);
+void intel_free_parsed_bios_data(struct drm_device *dev);
/*
* Driver<->VBIOS interaction occurs through scratch bits in
diff --git a/sys/dev/drm2/i915/intel_crt.c b/sys/dev/drm2/i915/intel_crt.c
index 6bad47f..e9ac349 100644
--- a/sys/dev/drm2/i915/intel_crt.c
+++ b/sys/dev/drm2/i915/intel_crt.c
@@ -28,13 +28,12 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_crtc_helper.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
/* Here's the desired hotplug mode */
#define ADPA_HOTPLUG_BITS (ADPA_CRT_HOTPLUG_PERIOD_128 | \
@@ -46,7 +45,11 @@ __FBSDID("$FreeBSD$");
struct intel_crt {
struct intel_encoder base;
+ /* DPMS state is stored in the connector, which we need in the
+ * encoder's enable/disable callbacks */
+ struct intel_connector *connector;
bool force_hotplug_required;
+ u32 adpa_reg;
};
static struct intel_crt *intel_attached_crt(struct drm_connector *connector)
@@ -55,36 +58,42 @@ static struct intel_crt *intel_attached_crt(struct drm_connector *connector)
struct intel_crt, base);
}
-static void pch_crt_dpms(struct drm_encoder *encoder, int mode)
+static struct intel_crt *intel_encoder_to_crt(struct intel_encoder *encoder)
{
- struct drm_device *dev = encoder->dev;
+ return container_of(encoder, struct intel_crt, base);
+}
+
+static bool intel_crt_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- u32 temp;
+ struct intel_crt *crt = intel_encoder_to_crt(encoder);
+ u32 tmp;
- temp = I915_READ(PCH_ADPA);
- temp &= ~ADPA_DAC_ENABLE;
+ tmp = I915_READ(crt->adpa_reg);
- switch (mode) {
- case DRM_MODE_DPMS_ON:
- temp |= ADPA_DAC_ENABLE;
- break;
- case DRM_MODE_DPMS_STANDBY:
- case DRM_MODE_DPMS_SUSPEND:
- case DRM_MODE_DPMS_OFF:
- /* Just leave port enable cleared */
- break;
- }
+ if (!(tmp & ADPA_DAC_ENABLE))
+ return false;
- I915_WRITE(PCH_ADPA, temp);
+ if (HAS_PCH_CPT(dev))
+ *pipe = PORT_TO_PIPE_CPT(tmp);
+ else
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
}
-static void gmch_crt_dpms(struct drm_encoder *encoder, int mode)
+/* Note: The caller is required to filter out dpms modes not supported by the
+ * platform. */
+static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode)
{
- struct drm_device *dev = encoder->dev;
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crt *crt = intel_encoder_to_crt(encoder);
u32 temp;
- temp = I915_READ(ADPA);
+ temp = I915_READ(crt->adpa_reg);
temp &= ~(ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE);
temp &= ~ADPA_DAC_ENABLE;
@@ -103,7 +112,64 @@ static void gmch_crt_dpms(struct drm_encoder *encoder, int mode)
break;
}
- I915_WRITE(ADPA, temp);
+ I915_WRITE(crt->adpa_reg, temp);
+}
+
+static void intel_disable_crt(struct intel_encoder *encoder)
+{
+ intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+static void intel_enable_crt(struct intel_encoder *encoder)
+{
+ struct intel_crt *crt = intel_encoder_to_crt(encoder);
+
+ intel_crt_set_dpms(encoder, crt->connector->base.dpms);
+}
+
+
+static void intel_crt_dpms(struct drm_connector *connector, int mode)
+{
+ struct drm_device *dev = connector->dev;
+ struct intel_encoder *encoder = intel_attached_encoder(connector);
+ struct drm_crtc *crtc;
+ int old_dpms;
+
+ /* PCH platforms and VLV only support on/off. */
+ if (INTEL_INFO(dev)->gen >= 5 && mode != DRM_MODE_DPMS_ON)
+ mode = DRM_MODE_DPMS_OFF;
+
+ if (mode == connector->dpms)
+ return;
+
+ old_dpms = connector->dpms;
+ connector->dpms = mode;
+
+ /* Only need to change hw state when actually enabled */
+ crtc = encoder->base.crtc;
+ if (!crtc) {
+ encoder->connectors_active = false;
+ return;
+ }
+
+ /* We need the pipe to run for anything but OFF. */
+ if (mode == DRM_MODE_DPMS_OFF)
+ encoder->connectors_active = false;
+ else
+ encoder->connectors_active = true;
+
+ if (mode < old_dpms) {
+ /* From off to on, enable the pipe first. */
+ intel_crtc_update_dpms(crtc);
+
+ intel_crt_set_dpms(encoder, mode);
+ } else {
+ intel_crt_set_dpms(encoder, mode);
+
+ intel_crtc_update_dpms(crtc);
+ }
+
+ intel_modeset_check_state(connector->dev);
}
static int intel_crt_mode_valid(struct drm_connector *connector,
@@ -125,6 +191,11 @@ static int intel_crt_mode_valid(struct drm_connector *connector,
if (mode->clock > max_clock)
return MODE_CLOCK_HIGH;
+ /* The FDI receiver on LPT only supports 8bpc and only has 2 lanes. */
+ if (HAS_PCH_LPT(dev) &&
+ (ironlake_get_lanes_required(mode->clock, 270000, 24) > 2))
+ return MODE_CLOCK_HIGH;
+
return MODE_OK;
}
@@ -142,37 +213,26 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
struct drm_device *dev = encoder->dev;
struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crt *crt =
+ intel_encoder_to_crt(to_intel_encoder(encoder));
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
struct drm_i915_private *dev_priv = dev->dev_private;
- int dpll_md_reg;
- u32 adpa, dpll_md;
- u32 adpa_reg;
-
- dpll_md_reg = DPLL_MD(intel_crtc->pipe);
+ u32 adpa;
if (HAS_PCH_SPLIT(dev))
- adpa_reg = PCH_ADPA;
+ adpa = ADPA_HOTPLUG_BITS;
else
- adpa_reg = ADPA;
-
- /*
- * Disable separate mode multiplier used when cloning SDVO to CRT
- * XXX this needs to be adjusted when we really are cloning
- */
- if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
- dpll_md = I915_READ(dpll_md_reg);
- I915_WRITE(dpll_md_reg,
- dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK);
- }
+ adpa = 0;
- adpa = ADPA_HOTPLUG_BITS;
if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
adpa |= ADPA_HSYNC_ACTIVE_HIGH;
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
adpa |= ADPA_VSYNC_ACTIVE_HIGH;
/* For CPT allow 3 pipe config, for others just use A or B */
- if (HAS_PCH_CPT(dev))
+ if (HAS_PCH_LPT(dev))
+ ; /* Those bits don't exist here */
+ else if (HAS_PCH_CPT(dev))
adpa |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
else if (intel_crtc->pipe == 0)
adpa |= ADPA_PIPE_A_SELECT;
@@ -182,7 +242,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
if (!HAS_PCH_SPLIT(dev))
I915_WRITE(BCLRPAT(intel_crtc->pipe), 0);
- I915_WRITE(adpa_reg, adpa);
+ I915_WRITE(crt->adpa_reg, adpa);
}
static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
@@ -209,10 +269,9 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
I915_WRITE(PCH_ADPA, adpa);
- if (_intel_wait_for(dev,
- (I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0,
- 1000, 1, "915crt"))
- DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER\n");
+ if (wait_for((I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0,
+ 1000))
+ DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER");
if (turn_off_dac) {
I915_WRITE(PCH_ADPA, save_adpa);
@@ -231,6 +290,42 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
return ret;
}
+static bool valleyview_crt_detect_hotplug(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 adpa;
+ bool ret;
+ u32 save_adpa;
+
+ save_adpa = adpa = I915_READ(ADPA);
+ DRM_DEBUG_KMS("trigger hotplug detect cycle: adpa=0x%x\n", adpa);
+
+ adpa |= ADPA_CRT_HOTPLUG_FORCE_TRIGGER;
+
+ I915_WRITE(ADPA, adpa);
+
+ if (wait_for((I915_READ(ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0,
+ 1000)) {
+ DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER");
+ I915_WRITE(ADPA, save_adpa);
+ }
+
+ /* Check the status to see if both blue and green are on now */
+ adpa = I915_READ(ADPA);
+ if ((adpa & ADPA_CRT_HOTPLUG_MONITOR_MASK) != 0)
+ ret = true;
+ else
+ ret = false;
+
+ DRM_DEBUG_KMS("valleyview hotplug adpa=0x%x, result %d\n", adpa, ret);
+
+ /* FIXME: debug force function and remove */
+ ret = true;
+
+ return ret;
+}
+
/**
* Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect CRT presence.
*
@@ -250,6 +345,9 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
if (HAS_PCH_SPLIT(dev))
return intel_ironlake_crt_detect_hotplug(connector);
+ if (IS_VALLEYVIEW(dev))
+ return valleyview_crt_detect_hotplug(connector);
+
/*
* On 4 series desktop, CRT detect sequence need to be done twice
* to get a reliable result.
@@ -266,9 +364,9 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
/* turn on the FORCE_DETECT */
I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
/* wait for FORCE_DETECT to go off */
- if (_intel_wait_for(dev,
- (I915_READ(PORT_HOTPLUG_EN) & CRT_HOTPLUG_FORCE_DETECT) == 0,
- 1000, 1, "915cr2"))
+ if (wait_for((I915_READ(PORT_HOTPLUG_EN) &
+ CRT_HOTPLUG_FORCE_DETECT) == 0,
+ 1000))
DRM_DEBUG_KMS("timed out waiting for FORCE_DETECT to go off");
}
@@ -285,42 +383,72 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
return ret;
}
+static struct edid *intel_crt_get_edid(struct drm_connector *connector,
+ device_t i2c)
+{
+ struct edid *edid;
+
+ edid = drm_get_edid(connector, i2c);
+
+ if (!edid && !intel_gmbus_is_forced_bit(i2c)) {
+ DRM_DEBUG_KMS("CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
+ intel_gmbus_force_bit(i2c, true);
+ edid = drm_get_edid(connector, i2c);
+ intel_gmbus_force_bit(i2c, false);
+ }
+
+ return edid;
+}
+
+/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
+static int intel_crt_ddc_get_modes(struct drm_connector *connector,
+ device_t adapter)
+{
+ struct edid *edid;
+ int ret;
+
+ edid = intel_crt_get_edid(connector, adapter);
+ if (!edid)
+ return 0;
+
+ ret = intel_connector_update_modes(connector, edid);
+ free(edid, DRM_MEM_KMS);
+
+ return ret;
+}
+
static bool intel_crt_detect_ddc(struct drm_connector *connector)
{
struct intel_crt *crt = intel_attached_crt(connector);
struct drm_i915_private *dev_priv = crt->base.base.dev->dev_private;
+ struct edid *edid;
+ device_t i2c;
- /* CRT should always be at 0, but check anyway */
- if (crt->base.type != INTEL_OUTPUT_ANALOG)
- return false;
+ BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
+
+ i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+ edid = intel_crt_get_edid(connector, i2c);
- if (intel_ddc_probe(&crt->base, dev_priv->crt_ddc_pin)) {
- struct edid *edid;
- bool is_digital = false;
- device_t iic;
+ if (edid) {
+ bool is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
- iic = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
- edid = drm_get_edid(connector, iic);
/*
* This may be a DVI-I connector with a shared DDC
* link between analog and digital outputs, so we
* have to check the EDID input spec of the attached device.
- *
- * On the other hand, what should we do if it is a broken EDID?
*/
- if (edid != NULL) {
- is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
- free(edid, DRM_MEM_KMS);
- }
-
if (!is_digital) {
DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n");
return true;
- } else {
- DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n");
}
+
+ DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n");
+ } else {
+ DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [no valid EDID found]\n");
}
+ free(edid, DRM_MEM_KMS);
+
return false;
}
@@ -453,30 +581,37 @@ intel_crt_detect(struct drm_connector *connector, bool force)
struct intel_load_detect_pipe tmp;
if (I915_HAS_HOTPLUG(dev)) {
+ /* We can not rely on the HPD pin always being correctly wired
+ * up, for example many KVM do not pass it through, and so
+ * only trust an assertion that the monitor is connected.
+ */
if (intel_crt_detect_hotplug(connector)) {
DRM_DEBUG_KMS("CRT detected via hotplug\n");
return connector_status_connected;
- } else {
+ } else
DRM_DEBUG_KMS("CRT not detected via hotplug\n");
- return connector_status_disconnected;
- }
}
if (intel_crt_detect_ddc(connector))
return connector_status_connected;
+ /* Load detection is broken on HPD capable machines. Whoever wants a
+ * broken monitor (without edid) to work behind a broken kvm (that fails
+ * to have the right resistors for HP detection) needs to fix this up.
+ * For now just bail out. */
+ if (I915_HAS_HOTPLUG(dev))
+ return connector_status_disconnected;
+
if (!force)
return connector->status;
/* for pre-945g platforms use load detect */
- if (intel_get_load_detect_pipe(&crt->base, connector, NULL,
- &tmp)) {
+ if (intel_get_load_detect_pipe(connector, NULL, &tmp)) {
if (intel_crt_detect_ddc(connector))
status = connector_status_connected;
else
status = intel_crt_load_detect(crt);
- intel_release_load_detect_pipe(&crt->base, connector,
- &tmp);
+ intel_release_load_detect_pipe(connector, &tmp);
} else
status = connector_status_unknown;
@@ -485,10 +620,6 @@ intel_crt_detect(struct drm_connector *connector, bool force)
static void intel_crt_destroy(struct drm_connector *connector)
{
-
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
free(connector, DRM_MEM_KMS);
}
@@ -501,13 +632,13 @@ static int intel_crt_get_modes(struct drm_connector *connector)
device_t i2c;
i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
- ret = intel_ddc_get_modes(connector, i2c);
+ ret = intel_crt_ddc_get_modes(connector, i2c);
if (ret || !IS_G4X(dev))
return ret;
/* Try to probe digital port for output in DVI-I -> VGA mode. */
i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
- return intel_ddc_get_modes(connector, i2c);
+ return intel_crt_ddc_get_modes(connector, i2c);
}
static int intel_crt_set_property(struct drm_connector *connector,
@@ -520,36 +651,37 @@ static int intel_crt_set_property(struct drm_connector *connector,
static void intel_crt_reset(struct drm_connector *connector)
{
struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crt *crt = intel_attached_crt(connector);
if (HAS_PCH_SPLIT(dev)) {
+ u32 adpa;
+
+ adpa = I915_READ(PCH_ADPA);
+ adpa &= ~ADPA_CRT_HOTPLUG_MASK;
+ adpa |= ADPA_HOTPLUG_BITS;
+ I915_WRITE(PCH_ADPA, adpa);
+ POSTING_READ(PCH_ADPA);
+
+ DRM_DEBUG_KMS("pch crt adpa set to 0x%x\n", adpa);
crt->force_hotplug_required = 1;
}
+
}
/*
* Routines for controlling stuff on the analog port
*/
-static const struct drm_encoder_helper_funcs pch_encoder_funcs = {
+static const struct drm_encoder_helper_funcs crt_encoder_funcs = {
.mode_fixup = intel_crt_mode_fixup,
- .prepare = intel_encoder_prepare,
- .commit = intel_encoder_commit,
.mode_set = intel_crt_mode_set,
- .dpms = pch_crt_dpms,
-};
-
-static const struct drm_encoder_helper_funcs gmch_encoder_funcs = {
- .mode_fixup = intel_crt_mode_fixup,
- .prepare = intel_encoder_prepare,
- .commit = intel_encoder_commit,
- .mode_set = intel_crt_mode_set,
- .dpms = gmch_crt_dpms,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_crt_connector_funcs = {
.reset = intel_crt_reset,
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_crt_dpms,
.detect = intel_crt_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.destroy = intel_crt_destroy,
@@ -566,7 +698,7 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {
.destroy = intel_encoder_destroy,
};
-static int intel_no_crt_dmi_callback(const struct dmi_system_id *id)
+static int __init intel_no_crt_dmi_callback(const struct dmi_system_id *id)
{
DRM_INFO("Skipping CRT initialization for %s\n", id->ident);
return 1;
@@ -590,17 +722,23 @@ void intel_crt_init(struct drm_device *dev)
struct intel_crt *crt;
struct intel_connector *intel_connector;
struct drm_i915_private *dev_priv = dev->dev_private;
- const struct drm_encoder_helper_funcs *encoder_helper_funcs;
/* Skip machines without VGA that falsely report hotplug events */
if (dmi_check_system(intel_no_crt))
return;
crt = malloc(sizeof(struct intel_crt), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!crt)
+ return;
intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_connector) {
+ free(crt, DRM_MEM_KMS);
+ return;
+ }
connector = &intel_connector->base;
+ crt->connector = intel_connector;
drm_connector_init(dev, &intel_connector->base,
&intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
@@ -610,13 +748,11 @@ void intel_crt_init(struct drm_device *dev)
intel_connector_attach_encoder(intel_connector, &crt->base);
crt->base.type = INTEL_OUTPUT_ANALOG;
- crt->base.clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT |
- 1 << INTEL_ANALOG_CLONE_BIT |
- 1 << INTEL_SDVO_LVDS_CLONE_BIT);
- if (IS_HASWELL(dev))
+ crt->base.cloneable = true;
+ if (IS_I830(dev))
crt->base.crtc_mask = (1 << 0);
else
- crt->base.crtc_mask = (1 << 0) | (1 << 1);
+ crt->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
if (IS_GEN2(dev))
connector->interlace_allowed = 0;
@@ -625,16 +761,22 @@ void intel_crt_init(struct drm_device *dev)
connector->doublescan_allowed = 0;
if (HAS_PCH_SPLIT(dev))
- encoder_helper_funcs = &pch_encoder_funcs;
+ crt->adpa_reg = PCH_ADPA;
+ else if (IS_VALLEYVIEW(dev))
+ crt->adpa_reg = VLV_ADPA;
else
- encoder_helper_funcs = &gmch_encoder_funcs;
+ crt->adpa_reg = ADPA;
- drm_encoder_helper_add(&crt->base.base, encoder_helper_funcs);
- drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
+ crt->base.disable = intel_disable_crt;
+ crt->base.enable = intel_enable_crt;
+ if (IS_HASWELL(dev))
+ crt->base.get_hw_state = intel_ddi_get_hw_state;
+ else
+ crt->base.get_hw_state = intel_crt_get_hw_state;
+ intel_connector->get_hw_state = intel_connector_get_hw_state;
-#if 0
- drm_sysfs_connector_add(connector);
-#endif
+ drm_encoder_helper_add(&crt->base.base, &crt_encoder_funcs);
+ drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
if (I915_HAS_HOTPLUG(dev))
connector->polled = DRM_CONNECTOR_POLL_HPD;
@@ -645,18 +787,18 @@ void intel_crt_init(struct drm_device *dev)
* Configure the automatic hotplug detection stuff
*/
crt->force_hotplug_required = 0;
- if (HAS_PCH_SPLIT(dev)) {
- u32 adpa;
- adpa = I915_READ(PCH_ADPA);
- adpa &= ~ADPA_CRT_HOTPLUG_MASK;
- adpa |= ADPA_HOTPLUG_BITS;
- I915_WRITE(PCH_ADPA, adpa);
- POSTING_READ(PCH_ADPA);
+ dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
- DRM_DEBUG_KMS("pch crt adpa set to 0x%x\n", adpa);
- crt->force_hotplug_required = 1;
- }
+ /*
+ * TODO: find a proper way to discover whether we need to set the the
+ * polarity and link reversal bits or not, instead of relying on the
+ * BIOS.
+ */
+ if (HAS_PCH_LPT(dev)) {
+ u32 fdi_config = FDI_RX_POLARITY_REVERSED_LPT |
+ FDI_RX_LINK_REVERSAL_OVERRIDE;
- dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
+ dev_priv->fdi_rx_config = I915_READ(_FDI_RXA_CTL) & fdi_config;
+ }
}
diff --git a/sys/dev/drm2/i915/intel_ddi.c b/sys/dev/drm2/i915/intel_ddi.c
index 52bcc1e..1dd4a35 100644
--- a/sys/dev/drm2/i915/intel_ddi.c
+++ b/sys/dev/drm2/i915/intel_ddi.c
@@ -29,8 +29,6 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
@@ -64,6 +62,26 @@ static const u32 hsw_ddi_translations_fdi[] = {
0x00FFFFFF, 0x00040006 /* HDMI parameters */
};
+static enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ int type = intel_encoder->type;
+
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP ||
+ type == INTEL_OUTPUT_HDMI || type == INTEL_OUTPUT_UNKNOWN) {
+ struct intel_digital_port *intel_dig_port =
+ enc_to_dig_port(encoder);
+ return intel_dig_port->port;
+
+ } else if (type == INTEL_OUTPUT_ANALOG) {
+ return PORT_E;
+
+ } else {
+ DRM_ERROR("Invalid DDI encoder type %d\n", type);
+ BUG();
+ }
+}
+
/* On Haswell, DDI port buffers must be programmed with correct values
* in advance. The buffer values are different for FDI and DP modes,
* but the HDMI/DVI fields are shared among those. So we program the DDI
@@ -83,11 +101,11 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port, bo
port_name(port),
use_fdi_mode ? "FDI" : "DP");
- if (use_fdi_mode && (port != PORT_E))
- DRM_DEBUG_KMS("Programming port %c in FDI mode, this probably will not work.\n",
+ WARN((use_fdi_mode && (port != PORT_E)),
+ "Programming port %c in FDI mode, this probably will not work.\n",
port_name(port));
- for (i=0, reg=DDI_BUF_TRANS(port); i < DRM_ARRAY_SIZE(hsw_ddi_translations_fdi); i++) {
+ for (i=0, reg=DDI_BUF_TRANS(port); i < ARRAY_SIZE(hsw_ddi_translations_fdi); i++) {
I915_WRITE(reg, ddi_translations[i]);
reg += 4;
}
@@ -124,6 +142,19 @@ static const long hsw_ddi_buf_ctl_values[] = {
DDI_BUF_EMP_800MV_3_5DB_HSW
};
+static void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
+ enum port port)
+{
+ uint32_t reg = DDI_BUF_CTL(port);
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ udelay(1);
+ if (I915_READ(reg) & DDI_BUF_IS_IDLE)
+ return;
+ }
+ DRM_ERROR("Timeout waiting for DDI BUF %c idle bit\n", port_name(port));
+}
/* Starting with Haswell, different DDI ports can work in FDI mode for
* connection to the PCH-located connectors. For this, it is necessary to train
@@ -139,25 +170,34 @@ void hsw_fdi_link_train(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- int pipe = intel_crtc->pipe;
- u32 reg, temp, i;
+ u32 temp, i, rx_ctl_val;
+
+ /* Set the FDI_RX_MISC pwrdn lanes and the 2 workarounds listed at the
+ * mode set "sequence for CRT port" document:
+ * - TP1 to TP2 time with the default value
+ * - FDI delay to 90h
+ */
+ I915_WRITE(_FDI_RXA_MISC, FDI_RX_PWRDN_LANE1_VAL(2) |
+ FDI_RX_PWRDN_LANE0_VAL(2) |
+ FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
- /* Configure CPU PLL, wait for warmup */
- I915_WRITE(SPLL_CTL,
- SPLL_PLL_ENABLE |
- SPLL_PLL_FREQ_1350MHz |
- SPLL_PLL_SSC);
+ /* Enable the PCH Receiver FDI PLL */
+ rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE |
+ FDI_RX_PLL_ENABLE | ((intel_crtc->fdi_lanes - 1) << 19);
+ I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
+ POSTING_READ(_FDI_RXA_CTL);
+ udelay(220);
- /* Use SPLL to drive the output when in FDI mode */
- I915_WRITE(PORT_CLK_SEL(PORT_E),
- PORT_CLK_SEL_SPLL);
- I915_WRITE(PIPE_CLK_SEL(pipe),
- PIPE_CLK_SEL_PORT(PORT_E));
+ /* Switch from Rawclk to PCDclk */
+ rx_ctl_val |= FDI_PCDCLK;
+ I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
- DELAY(20);
+ /* Configure Port Clock Select */
+ I915_WRITE(PORT_CLK_SEL(PORT_E), intel_crtc->ddi_pll_sel);
- /* Start the training iterating through available voltages and emphasis */
- for (i=0; i < DRM_ARRAY_SIZE(hsw_ddi_buf_ctl_values); i++) {
+ /* Start the training iterating through available voltages and emphasis,
+ * testing each value twice. */
+ for (i = 0; i < ARRAY_SIZE(hsw_ddi_buf_ctl_values) * 2; i++) {
/* Configure DP_TP_CTL with auto-training */
I915_WRITE(DP_TP_CTL(PORT_E),
DP_TP_CTL_FDI_AUTOTRAIN |
@@ -165,95 +205,79 @@ void hsw_fdi_link_train(struct drm_crtc *crtc)
DP_TP_CTL_LINK_TRAIN_PAT1 |
DP_TP_CTL_ENABLE);
- /* Configure and enable DDI_BUF_CTL for DDI E with next voltage */
- temp = I915_READ(DDI_BUF_CTL(PORT_E));
- temp = (temp & ~DDI_BUF_EMP_MASK);
+ /* Configure and enable DDI_BUF_CTL for DDI E with next voltage.
+ * DDI E does not support port reversal, the functionality is
+ * achieved on the PCH side in FDI_RX_CTL, so no need to set the
+ * port reversal bit */
I915_WRITE(DDI_BUF_CTL(PORT_E),
- temp |
- DDI_BUF_CTL_ENABLE |
- DDI_PORT_WIDTH_X2 |
- hsw_ddi_buf_ctl_values[i]);
-
- DELAY(600);
-
- /* Enable CPU FDI Receiver with auto-training */
- reg = FDI_RX_CTL(pipe);
- I915_WRITE(reg,
- I915_READ(reg) |
- FDI_LINK_TRAIN_AUTO |
- FDI_RX_ENABLE |
- FDI_LINK_TRAIN_PATTERN_1_CPT |
- FDI_RX_ENHANCE_FRAME_ENABLE |
- FDI_PORT_WIDTH_2X_LPT |
- FDI_RX_PLL_ENABLE);
- POSTING_READ(reg);
- DELAY(100);
+ DDI_BUF_CTL_ENABLE |
+ ((intel_crtc->fdi_lanes - 1) << 1) |
+ hsw_ddi_buf_ctl_values[i / 2]);
+ POSTING_READ(DDI_BUF_CTL(PORT_E));
+
+ udelay(600);
+
+ /* Program PCH FDI Receiver TU */
+ I915_WRITE(_FDI_RXA_TUSIZE1, TU_SIZE(64));
+
+ /* Enable PCH FDI Receiver with auto-training */
+ rx_ctl_val |= FDI_RX_ENABLE | FDI_LINK_TRAIN_AUTO;
+ I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
+ POSTING_READ(_FDI_RXA_CTL);
+
+ /* Wait for FDI receiver lane calibration */
+ udelay(30);
+
+ /* Unset FDI_RX_MISC pwrdn lanes */
+ temp = I915_READ(_FDI_RXA_MISC);
+ temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
+ I915_WRITE(_FDI_RXA_MISC, temp);
+ POSTING_READ(_FDI_RXA_MISC);
+
+ /* Wait for FDI auto training time */
+ udelay(5);
temp = I915_READ(DP_TP_STATUS(PORT_E));
if (temp & DP_TP_STATUS_AUTOTRAIN_DONE) {
- DRM_DEBUG_DRIVER("BUF_CTL training done on %d step\n", i);
+ DRM_DEBUG_KMS("FDI link training done on step %d\n", i);
/* Enable normal pixel sending for FDI */
I915_WRITE(DP_TP_CTL(PORT_E),
- DP_TP_CTL_FDI_AUTOTRAIN |
- DP_TP_CTL_LINK_TRAIN_NORMAL |
- DP_TP_CTL_ENHANCED_FRAME_ENABLE |
- DP_TP_CTL_ENABLE);
-
- /* Enable PIPE_TRANS_DDI_FUNC_CTL for the pipe to work in FDI mode */
- temp = I915_READ(TRANS_DDI_FUNC_CTL(pipe));
- temp &= ~TRANS_DDI_PORT_MASK;
- temp |= TRANS_DDI_SELECT_PORT(PORT_E) |
- TRANS_DDI_MODE_SELECT_FDI |
- TRANS_DDI_FUNC_ENABLE |
- TRANS_DDI_PORT_WIDTH_X2;
- I915_WRITE(TRANS_DDI_FUNC_CTL(pipe),
- temp);
- break;
- } else {
- DRM_ERROR("Error training BUF_CTL %d\n", i);
+ DP_TP_CTL_FDI_AUTOTRAIN |
+ DP_TP_CTL_LINK_TRAIN_NORMAL |
+ DP_TP_CTL_ENHANCED_FRAME_ENABLE |
+ DP_TP_CTL_ENABLE);
- /* Disable DP_TP_CTL and FDI_RX_CTL) and retry */
- I915_WRITE(DP_TP_CTL(PORT_E),
- I915_READ(DP_TP_CTL(PORT_E)) &
- ~DP_TP_CTL_ENABLE);
- I915_WRITE(FDI_RX_CTL(pipe),
- I915_READ(FDI_RX_CTL(pipe)) &
- ~FDI_RX_PLL_ENABLE);
- continue;
+ return;
}
- }
- DRM_DEBUG_KMS("FDI train done.\n");
-}
+ temp = I915_READ(DDI_BUF_CTL(PORT_E));
+ temp &= ~DDI_BUF_CTL_ENABLE;
+ I915_WRITE(DDI_BUF_CTL(PORT_E), temp);
+ POSTING_READ(DDI_BUF_CTL(PORT_E));
-/* For DDI connections, it is possible to support different outputs over the
- * same DDI port, such as HDMI or DP or even VGA via FDI. So we don't know by
- * the time the output is detected what exactly is on the other end of it. This
- * function aims at providing support for this detection and proper output
- * configuration.
- */
-void intel_ddi_init(struct drm_device *dev, enum port port)
-{
- /* For now, we don't do any proper output detection and assume that we
- * handle HDMI only */
+ /* Disable DP_TP_CTL and FDI_RX_CTL and retry */
+ temp = I915_READ(DP_TP_CTL(PORT_E));
+ temp &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
+ temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
+ I915_WRITE(DP_TP_CTL(PORT_E), temp);
+ POSTING_READ(DP_TP_CTL(PORT_E));
- switch(port){
- case PORT_A:
- /* We don't handle eDP and DP yet */
- DRM_DEBUG_DRIVER("Found digital output on DDI port A\n");
- break;
- /* Assume that the ports B, C and D are working in HDMI mode for now */
- case PORT_B:
- case PORT_C:
- case PORT_D:
- intel_hdmi_init(dev, DDI_BUF_CTL(port));
- break;
- default:
- DRM_DEBUG_DRIVER("No handlers defined for port %d, skipping DDI initialization\n",
- port);
- break;
+ intel_wait_ddi_buf_idle(dev_priv, PORT_E);
+
+ rx_ctl_val &= ~FDI_RX_ENABLE;
+ I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
+ POSTING_READ(_FDI_RXA_CTL);
+
+ /* Reset FDI_RX_MISC pwrdn lanes */
+ temp = I915_READ(_FDI_RXA_MISC);
+ temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
+ temp |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
+ I915_WRITE(_FDI_RXA_MISC, temp);
+ POSTING_READ(_FDI_RXA_MISC);
}
+
+ DRM_ERROR("FDI link training failed!\n");
}
/* WRPLL clock dividers */
@@ -264,7 +288,8 @@ struct wrpll_tmds_clock {
u16 r2; /* Reference divider */
};
-/* Table of matching values for WRPLL clocks programming for each frequency */
+/* Table of matching values for WRPLL clocks programming for each frequency.
+ * The code assumes this table is sorted. */
static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
{19750, 38, 25, 18},
{20000, 48, 32, 18},
@@ -274,7 +299,6 @@ static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
{23000, 36, 23, 15},
{23500, 40, 40, 23},
{23750, 26, 16, 14},
- {23750, 26, 16, 14},
{24000, 36, 24, 15},
{25000, 36, 25, 15},
{25175, 26, 40, 33},
@@ -434,7 +458,6 @@ static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
{108000, 8, 24, 15},
{108108, 8, 173, 108},
{109000, 6, 23, 19},
- {109000, 6, 23, 19},
{110000, 6, 22, 18},
{110013, 6, 22, 18},
{110250, 8, 49, 30},
@@ -611,7 +634,6 @@ static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
{218250, 4, 42, 26},
{218750, 4, 34, 21},
{219000, 4, 47, 29},
- {219000, 4, 47, 29},
{220000, 4, 44, 27},
{220640, 4, 49, 30},
{220750, 4, 36, 22},
@@ -644,118 +666,864 @@ static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
{298000, 2, 21, 19},
};
-void intel_ddi_mode_set(struct drm_encoder *encoder,
- struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode)
+static void intel_ddi_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
{
- struct drm_device *dev = encoder->dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc = encoder->crtc;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
- int port = intel_hdmi->ddi_port;
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+ int port = intel_ddi_get_encoder_port(intel_encoder);
int pipe = intel_crtc->pipe;
- int p, n2, r2, valid=0;
- u32 temp, i;
+ int type = intel_encoder->type;
- /* On Haswell, we need to enable the clocks and prepare DDI function to
- * work in HDMI mode for this pipe.
- */
- DRM_DEBUG_KMS("Preparing HDMI DDI mode for Haswell on port %c, pipe %c\n", port_name(port), pipe_name(pipe));
+ DRM_DEBUG_KMS("Preparing DDI mode for Haswell on port %c, pipe %c\n",
+ port_name(port), pipe_name(pipe));
- for (i=0; i < DRM_ARRAY_SIZE(wrpll_tmds_clock_table); i++) {
- if (crtc->mode.clock == wrpll_tmds_clock_table[i].clock) {
- p = wrpll_tmds_clock_table[i].p;
- n2 = wrpll_tmds_clock_table[i].n2;
- r2 = wrpll_tmds_clock_table[i].r2;
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct intel_digital_port *intel_dig_port =
+ enc_to_dig_port(encoder);
- DRM_DEBUG_KMS("WR PLL clock: found settings for %dKHz refresh rate: p=%d, n2=%d, r2=%d\n",
- crtc->mode.clock,
- p, n2, r2);
+ intel_dp->DP = intel_dig_port->port_reversal |
+ DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
+ switch (intel_dp->lane_count) {
+ case 1:
+ intel_dp->DP |= DDI_PORT_WIDTH_X1;
+ break;
+ case 2:
+ intel_dp->DP |= DDI_PORT_WIDTH_X2;
+ break;
+ case 4:
+ intel_dp->DP |= DDI_PORT_WIDTH_X4;
+ break;
+ default:
+ intel_dp->DP |= DDI_PORT_WIDTH_X4;
+ WARN(1, "Unexpected DP lane count %d\n",
+ intel_dp->lane_count);
+ break;
+ }
- valid = 1;
+ if (intel_dp->has_audio) {
+ DRM_DEBUG_DRIVER("DP audio on pipe %c on DDI\n",
+ pipe_name(intel_crtc->pipe));
+
+ /* write eld */
+ DRM_DEBUG_DRIVER("DP audio: write eld information\n");
+ intel_write_eld(encoder, adjusted_mode);
+ }
+
+ intel_dp_init_link_config(intel_dp);
+
+ } else if (type == INTEL_OUTPUT_HDMI) {
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+
+ if (intel_hdmi->has_audio) {
+ /* Proper support for digital audio needs a new logic
+ * and a new set of registers, so we leave it for future
+ * patch bombing.
+ */
+ DRM_DEBUG_DRIVER("HDMI audio on pipe %c on DDI\n",
+ pipe_name(intel_crtc->pipe));
+
+ /* write eld */
+ DRM_DEBUG_DRIVER("HDMI audio: write eld information\n");
+ intel_write_eld(encoder, adjusted_mode);
+ }
+
+ intel_hdmi->set_infoframes(encoder, adjusted_mode);
+ }
+}
+
+static struct intel_encoder *
+intel_ddi_get_crtc_encoder(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *intel_encoder, *ret = NULL;
+ int num_encoders = 0;
+
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ ret = intel_encoder;
+ num_encoders++;
+ }
+
+ if (num_encoders != 1)
+ WARN(1, "%d encoders on crtc for pipe %d\n", num_encoders,
+ intel_crtc->pipe);
+
+ BUG_ON(ret == NULL);
+ return ret;
+}
+
+void intel_ddi_put_crtc_pll(struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ uint32_t val;
+
+ switch (intel_crtc->ddi_pll_sel) {
+ case PORT_CLK_SEL_SPLL:
+ plls->spll_refcount--;
+ if (plls->spll_refcount == 0) {
+ DRM_DEBUG_KMS("Disabling SPLL\n");
+ val = I915_READ(SPLL_CTL);
+ WARN_ON(!(val & SPLL_PLL_ENABLE));
+ I915_WRITE(SPLL_CTL, val & ~SPLL_PLL_ENABLE);
+ POSTING_READ(SPLL_CTL);
+ }
+ break;
+ case PORT_CLK_SEL_WRPLL1:
+ plls->wrpll1_refcount--;
+ if (plls->wrpll1_refcount == 0) {
+ DRM_DEBUG_KMS("Disabling WRPLL 1\n");
+ val = I915_READ(WRPLL_CTL1);
+ WARN_ON(!(val & WRPLL_PLL_ENABLE));
+ I915_WRITE(WRPLL_CTL1, val & ~WRPLL_PLL_ENABLE);
+ POSTING_READ(WRPLL_CTL1);
+ }
+ break;
+ case PORT_CLK_SEL_WRPLL2:
+ plls->wrpll2_refcount--;
+ if (plls->wrpll2_refcount == 0) {
+ DRM_DEBUG_KMS("Disabling WRPLL 2\n");
+ val = I915_READ(WRPLL_CTL2);
+ WARN_ON(!(val & WRPLL_PLL_ENABLE));
+ I915_WRITE(WRPLL_CTL2, val & ~WRPLL_PLL_ENABLE);
+ POSTING_READ(WRPLL_CTL2);
+ }
+ break;
+ }
+
+ WARN(plls->spll_refcount < 0, "Invalid SPLL refcount\n");
+ WARN(plls->wrpll1_refcount < 0, "Invalid WRPLL1 refcount\n");
+ WARN(plls->wrpll2_refcount < 0, "Invalid WRPLL2 refcount\n");
+
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_NONE;
+}
+
+static void intel_ddi_calculate_wrpll(int clock, int *p, int *n2, int *r2)
+{
+ u32 i;
+
+ for (i = 0; i < ARRAY_SIZE(wrpll_tmds_clock_table); i++)
+ if (clock <= wrpll_tmds_clock_table[i].clock)
+ break;
+
+ if (i == ARRAY_SIZE(wrpll_tmds_clock_table))
+ i--;
+
+ *p = wrpll_tmds_clock_table[i].p;
+ *n2 = wrpll_tmds_clock_table[i].n2;
+ *r2 = wrpll_tmds_clock_table[i].r2;
+
+ if (wrpll_tmds_clock_table[i].clock != clock)
+ DRM_INFO("WRPLL: using settings for %dKHz on %dKHz mode\n",
+ wrpll_tmds_clock_table[i].clock, clock);
+
+ DRM_DEBUG_KMS("WRPLL: %dKHz refresh rate with p=%d, n2=%d r2=%d\n",
+ clock, *p, *n2, *r2);
+}
+
+bool intel_ddi_pll_mode_set(struct drm_crtc *crtc, int clock)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
+ int type = intel_encoder->type;
+ enum pipe pipe = intel_crtc->pipe;
+ uint32_t reg, val;
+
+ /* TODO: reuse PLLs when possible (compare values) */
+
+ intel_ddi_put_crtc_pll(crtc);
+
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ switch (intel_dp->link_bw) {
+ case DP_LINK_BW_1_62:
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_810;
+ break;
+ case DP_LINK_BW_2_7:
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_1350;
+ break;
+ case DP_LINK_BW_5_4:
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_2700;
break;
+ default:
+ DRM_ERROR("Link bandwidth %d unsupported\n",
+ intel_dp->link_bw);
+ return false;
}
+
+ /* We don't need to turn any PLL on because we'll use LCPLL. */
+ return true;
+
+ } else if (type == INTEL_OUTPUT_HDMI) {
+ int p, n2, r2;
+
+ if (plls->wrpll1_refcount == 0) {
+ DRM_DEBUG_KMS("Using WRPLL 1 on pipe %c\n",
+ pipe_name(pipe));
+ plls->wrpll1_refcount++;
+ reg = WRPLL_CTL1;
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_WRPLL1;
+ } else if (plls->wrpll2_refcount == 0) {
+ DRM_DEBUG_KMS("Using WRPLL 2 on pipe %c\n",
+ pipe_name(pipe));
+ plls->wrpll2_refcount++;
+ reg = WRPLL_CTL2;
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_WRPLL2;
+ } else {
+ DRM_ERROR("No WRPLLs available!\n");
+ return false;
+ }
+
+ WARN(I915_READ(reg) & WRPLL_PLL_ENABLE,
+ "WRPLL already enabled\n");
+
+ intel_ddi_calculate_wrpll(clock, &p, &n2, &r2);
+
+ val = WRPLL_PLL_ENABLE | WRPLL_PLL_SELECT_LCPLL_2700 |
+ WRPLL_DIVIDER_REFERENCE(r2) | WRPLL_DIVIDER_FEEDBACK(n2) |
+ WRPLL_DIVIDER_POST(p);
+
+ } else if (type == INTEL_OUTPUT_ANALOG) {
+ if (plls->spll_refcount == 0) {
+ DRM_DEBUG_KMS("Using SPLL on pipe %c\n",
+ pipe_name(pipe));
+ plls->spll_refcount++;
+ intel_crtc->ddi_pll_sel = PORT_CLK_SEL_SPLL;
+ }
+ reg = SPLL_CTL;
+
+ WARN(I915_READ(reg) & SPLL_PLL_ENABLE,
+ "SPLL already enabled\n");
+
+ val = SPLL_PLL_ENABLE | SPLL_PLL_FREQ_1350MHz | SPLL_PLL_SSC;
+
+ } else {
+ WARN(1, "Invalid DDI encoder type %d\n", type);
+ return false;
}
- if (!valid) {
- DRM_ERROR("Unable to find WR PLL clock settings for %dKHz refresh rate\n",
- crtc->mode.clock);
- return;
+ I915_WRITE(reg, val);
+ udelay(20);
+
+ return true;
+}
+
+void intel_ddi_set_pipe_settings(struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ int type = intel_encoder->type;
+ uint32_t temp;
+
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
+
+ temp = TRANS_MSA_SYNC_CLK;
+ switch (intel_crtc->bpp) {
+ case 18:
+ temp |= TRANS_MSA_6_BPC;
+ break;
+ case 24:
+ temp |= TRANS_MSA_8_BPC;
+ break;
+ case 30:
+ temp |= TRANS_MSA_10_BPC;
+ break;
+ case 36:
+ temp |= TRANS_MSA_12_BPC;
+ break;
+ default:
+ temp |= TRANS_MSA_8_BPC;
+ WARN(1, "%d bpp unsupported by DDI function\n",
+ intel_crtc->bpp);
+ }
+ I915_WRITE(TRANS_MSA_MISC(cpu_transcoder), temp);
}
+}
- /* Enable LCPLL if disabled */
- temp = I915_READ(LCPLL_CTL);
- if (temp & LCPLL_PLL_DISABLE)
- I915_WRITE(LCPLL_CTL,
- temp & ~LCPLL_PLL_DISABLE);
-
- /* Configure WR PLL 1, program the correct divider values for
- * the desired frequency and wait for warmup */
- I915_WRITE(WRPLL_CTL1,
- WRPLL_PLL_ENABLE |
- WRPLL_PLL_SELECT_LCPLL_2700 |
- WRPLL_DIVIDER_REFERENCE(r2) |
- WRPLL_DIVIDER_FEEDBACK(n2) |
- WRPLL_DIVIDER_POST(p));
-
- DELAY(20);
-
- /* Use WRPLL1 clock to drive the output to the port, and tell the pipe to use
- * this port for connection.
- */
- I915_WRITE(PORT_CLK_SEL(port),
- PORT_CLK_SEL_WRPLL1);
- I915_WRITE(PIPE_CLK_SEL(pipe),
- PIPE_CLK_SEL_PORT(port));
+void intel_ddi_enable_pipe_func(struct drm_crtc *crtc)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ enum pipe pipe = intel_crtc->pipe;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ int type = intel_encoder->type;
+ uint32_t temp;
- DELAY(20);
+ /* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
+ temp = TRANS_DDI_FUNC_ENABLE;
+ temp |= TRANS_DDI_SELECT_PORT(port);
- if (intel_hdmi->has_audio) {
- /* Proper support for digital audio needs a new logic and a new set
- * of registers, so we leave it for future patch bombing.
- */
- DRM_DEBUG_DRIVER("HDMI audio on pipe %c not yet supported on DDI\n",
- pipe_name(intel_crtc->pipe));
+ switch (intel_crtc->bpp) {
+ case 18:
+ temp |= TRANS_DDI_BPC_6;
+ break;
+ case 24:
+ temp |= TRANS_DDI_BPC_8;
+ break;
+ case 30:
+ temp |= TRANS_DDI_BPC_10;
+ break;
+ case 36:
+ temp |= TRANS_DDI_BPC_12;
+ break;
+ default:
+ WARN(1, "%d bpp unsupported by transcoder DDI function\n",
+ intel_crtc->bpp);
+ }
+
+ if (crtc->mode.flags & DRM_MODE_FLAG_PVSYNC)
+ temp |= TRANS_DDI_PVSYNC;
+ if (crtc->mode.flags & DRM_MODE_FLAG_PHSYNC)
+ temp |= TRANS_DDI_PHSYNC;
+
+ if (cpu_transcoder == TRANSCODER_EDP) {
+ switch (pipe) {
+ case PIPE_A:
+ temp |= TRANS_DDI_EDP_INPUT_A_ONOFF;
+ break;
+ case PIPE_B:
+ temp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
+ break;
+ case PIPE_C:
+ temp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
+ break;
+ default:
+ BUG();
+ break;
+ }
+ }
+
+ if (type == INTEL_OUTPUT_HDMI) {
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+
+ if (intel_hdmi->has_hdmi_sink)
+ temp |= TRANS_DDI_MODE_SELECT_HDMI;
+ else
+ temp |= TRANS_DDI_MODE_SELECT_DVI;
+
+ } else if (type == INTEL_OUTPUT_ANALOG) {
+ temp |= TRANS_DDI_MODE_SELECT_FDI;
+ temp |= (intel_crtc->fdi_lanes - 1) << 1;
+
+ } else if (type == INTEL_OUTPUT_DISPLAYPORT ||
+ type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ temp |= TRANS_DDI_MODE_SELECT_DP_SST;
+
+ switch (intel_dp->lane_count) {
+ case 1:
+ temp |= TRANS_DDI_PORT_WIDTH_X1;
+ break;
+ case 2:
+ temp |= TRANS_DDI_PORT_WIDTH_X2;
+ break;
+ case 4:
+ temp |= TRANS_DDI_PORT_WIDTH_X4;
+ break;
+ default:
+ temp |= TRANS_DDI_PORT_WIDTH_X4;
+ WARN(1, "Unsupported lane count %d\n",
+ intel_dp->lane_count);
+ }
+
+ } else {
+ WARN(1, "Invalid encoder type %d for pipe %d\n",
+ intel_encoder->type, pipe);
}
- /* Enable PIPE_TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
- temp = I915_READ(TRANS_DDI_FUNC_CTL(pipe));
- temp &= ~TRANS_DDI_PORT_MASK;
- temp &= ~TRANS_DDI_BPC_12;
- temp |= TRANS_DDI_SELECT_PORT(port) |
- TRANS_DDI_MODE_SELECT_HDMI |
- ((intel_crtc->bpp > 24) ?
- TRANS_DDI_BPC_12 :
- TRANS_DDI_BPC_8) |
- TRANS_DDI_FUNC_ENABLE;
-
- I915_WRITE(TRANS_DDI_FUNC_CTL(pipe), temp);
-
- intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
- intel_hdmi_set_spd_infoframe(encoder);
+ I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
}
-void intel_ddi_dpms(struct drm_encoder *encoder, int mode)
+void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,
+ enum transcoder cpu_transcoder)
{
- struct drm_device *dev = encoder->dev;
+ uint32_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
+ uint32_t val = I915_READ(reg);
+
+ val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK);
+ val |= TRANS_DDI_PORT_NONE;
+ I915_WRITE(reg, val);
+}
+
+bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
+{
+ struct drm_device *dev = intel_connector->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
- int port = intel_hdmi->ddi_port;
- u32 temp;
+ struct intel_encoder *intel_encoder = intel_connector->encoder;
+ int type = intel_connector->base.connector_type;
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ enum pipe pipe = 0;
+ enum transcoder cpu_transcoder;
+ uint32_t tmp;
- temp = I915_READ(DDI_BUF_CTL(port));
+ if (!intel_encoder->get_hw_state(intel_encoder, &pipe))
+ return false;
- if (mode != DRM_MODE_DPMS_ON) {
- temp &= ~DDI_BUF_CTL_ENABLE;
+ if (port == PORT_A)
+ cpu_transcoder = TRANSCODER_EDP;
+ else
+ cpu_transcoder = (enum transcoder)pipe;
+
+ tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
+
+ switch (tmp & TRANS_DDI_MODE_SELECT_MASK) {
+ case TRANS_DDI_MODE_SELECT_HDMI:
+ case TRANS_DDI_MODE_SELECT_DVI:
+ return (type == DRM_MODE_CONNECTOR_HDMIA);
+
+ case TRANS_DDI_MODE_SELECT_DP_SST:
+ if (type == DRM_MODE_CONNECTOR_eDP)
+ return true;
+ case TRANS_DDI_MODE_SELECT_DP_MST:
+ return (type == DRM_MODE_CONNECTOR_DisplayPort);
+
+ case TRANS_DDI_MODE_SELECT_FDI:
+ return (type == DRM_MODE_CONNECTOR_VGA);
+
+ default:
+ return false;
+ }
+}
+
+bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ enum port port = intel_ddi_get_encoder_port(encoder);
+ u32 tmp;
+ int i;
+
+ tmp = I915_READ(DDI_BUF_CTL(port));
+
+ if (!(tmp & DDI_BUF_CTL_ENABLE))
+ return false;
+
+ if (port == PORT_A) {
+ tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
+
+ switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
+ case TRANS_DDI_EDP_INPUT_A_ON:
+ case TRANS_DDI_EDP_INPUT_A_ONOFF:
+ *pipe = PIPE_A;
+ break;
+ case TRANS_DDI_EDP_INPUT_B_ONOFF:
+ *pipe = PIPE_B;
+ break;
+ case TRANS_DDI_EDP_INPUT_C_ONOFF:
+ *pipe = PIPE_C;
+ break;
+ }
+
+ return true;
+ } else {
+ for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) {
+ tmp = I915_READ(TRANS_DDI_FUNC_CTL(i));
+
+ if ((tmp & TRANS_DDI_PORT_MASK)
+ == TRANS_DDI_SELECT_PORT(port)) {
+ *pipe = i;
+ return true;
+ }
+ }
+ }
+
+ DRM_DEBUG_KMS("No pipe for ddi port %i found\n", port);
+
+ return true;
+}
+
+static uint32_t intel_ddi_get_crtc_pll(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ uint32_t temp, ret;
+ enum port port;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
+ int i;
+
+ if (cpu_transcoder == TRANSCODER_EDP) {
+ port = PORT_A;
} else {
- temp |= DDI_BUF_CTL_ENABLE;
+ temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
+ temp &= TRANS_DDI_PORT_MASK;
+
+ for (i = PORT_B; i <= PORT_E; i++)
+ if (temp == TRANS_DDI_SELECT_PORT(i))
+ port = i;
+ }
+
+ ret = I915_READ(PORT_CLK_SEL(port));
+
+ DRM_DEBUG_KMS("Pipe %c connected to port %c using clock 0x%08x\n",
+ pipe_name(pipe), port_name(port), ret);
+
+ return ret;
+}
+
+void intel_ddi_setup_hw_pll_state(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ enum pipe pipe;
+ struct intel_crtc *intel_crtc;
+
+ for_each_pipe(pipe) {
+ intel_crtc =
+ to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
+
+ if (!intel_crtc->active)
+ continue;
+
+ intel_crtc->ddi_pll_sel = intel_ddi_get_crtc_pll(dev_priv,
+ pipe);
+
+ switch (intel_crtc->ddi_pll_sel) {
+ case PORT_CLK_SEL_SPLL:
+ dev_priv->ddi_plls.spll_refcount++;
+ break;
+ case PORT_CLK_SEL_WRPLL1:
+ dev_priv->ddi_plls.wrpll1_refcount++;
+ break;
+ case PORT_CLK_SEL_WRPLL2:
+ dev_priv->ddi_plls.wrpll2_refcount++;
+ break;
+ }
+ }
+}
+
+void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc)
+{
+ struct drm_crtc *crtc = &intel_crtc->base;
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+
+ if (cpu_transcoder != TRANSCODER_EDP)
+ I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+ TRANS_CLK_SEL_PORT(port));
+}
+
+void intel_ddi_disable_pipe_clock(struct intel_crtc *intel_crtc)
+{
+ struct drm_i915_private *dev_priv = intel_crtc->base.dev->dev_private;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+
+ if (cpu_transcoder != TRANSCODER_EDP)
+ I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+ TRANS_CLK_SEL_DISABLED);
+}
+
+static void intel_ddi_pre_enable(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ int type = intel_encoder->type;
+
+ if (type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ ironlake_edp_panel_vdd_on(intel_dp);
+ ironlake_edp_panel_on(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, true);
+ }
+
+ WARN_ON(intel_crtc->ddi_pll_sel == PORT_CLK_SEL_NONE);
+ I915_WRITE(PORT_CLK_SEL(port), intel_crtc->ddi_pll_sel);
+
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
+ intel_dp_start_link_train(intel_dp);
+ intel_dp_complete_link_train(intel_dp);
+ }
+}
+
+static void intel_ddi_post_disable(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ int type = intel_encoder->type;
+ uint32_t val;
+ bool wait = false;
+
+ val = I915_READ(DDI_BUF_CTL(port));
+ if (val & DDI_BUF_CTL_ENABLE) {
+ val &= ~DDI_BUF_CTL_ENABLE;
+ I915_WRITE(DDI_BUF_CTL(port), val);
+ wait = true;
+ }
+
+ val = I915_READ(DP_TP_CTL(port));
+ val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
+ val |= DP_TP_CTL_LINK_TRAIN_PAT1;
+ I915_WRITE(DP_TP_CTL(port), val);
+
+ if (wait)
+ intel_wait_ddi_buf_idle(dev_priv, port);
+
+ if (type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ ironlake_edp_panel_vdd_on(intel_dp);
+ ironlake_edp_panel_off(intel_dp);
}
- /* Enable DDI_BUF_CTL. In HDMI/DVI mode, the port width,
- * and swing/emphasis values are ignored so nothing special needs
- * to be done besides enabling the port.
+ I915_WRITE(PORT_CLK_SEL(port), PORT_CLK_SEL_NONE);
+}
+
+static void intel_enable_ddi(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ enum port port = intel_ddi_get_encoder_port(intel_encoder);
+ int type = intel_encoder->type;
+
+ if (type == INTEL_OUTPUT_HDMI) {
+ struct intel_digital_port *intel_dig_port =
+ enc_to_dig_port(encoder);
+
+ /* In HDMI/DVI mode, the port width, and swing/emphasis values
+ * are ignored so nothing special needs to be done besides
+ * enabling the port.
+ */
+ I915_WRITE(DDI_BUF_CTL(port),
+ intel_dig_port->port_reversal | DDI_BUF_CTL_ENABLE);
+ } else if (type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ ironlake_edp_backlight_on(intel_dp);
+ }
+}
+
+static void intel_disable_ddi(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ int type = intel_encoder->type;
+
+ if (type == INTEL_OUTPUT_EDP) {
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ ironlake_edp_backlight_off(intel_dp);
+ }
+}
+
+int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv)
+{
+ if (I915_READ(HSW_FUSE_STRAP) & HSW_CDCLK_LIMIT)
+ return 450;
+ else if ((I915_READ(LCPLL_CTL) & LCPLL_CLK_FREQ_MASK) ==
+ LCPLL_CLK_FREQ_450)
+ return 450;
+ else if (IS_ULT(dev_priv->dev))
+ return 338;
+ else
+ return 540;
+}
+
+void intel_ddi_pll_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t val = I915_READ(LCPLL_CTL);
+
+ /* The LCPLL register should be turned on by the BIOS. For now let's
+ * just check its state and print errors in case something is wrong.
+ * Don't even try to turn it on.
*/
- I915_WRITE(DDI_BUF_CTL(port),
- temp);
+
+ DRM_DEBUG_KMS("CDCLK running at %dMHz\n",
+ intel_ddi_get_cdclk_freq(dev_priv));
+
+ if (val & LCPLL_CD_SOURCE_FCLK)
+ DRM_ERROR("CDCLK source is not LCPLL\n");
+
+ if (val & LCPLL_PLL_DISABLE)
+ DRM_ERROR("LCPLL is disabled\n");
+}
+
+void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
+{
+ struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+ struct intel_dp *intel_dp = &intel_dig_port->dp;
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ enum port port = intel_dig_port->port;
+ bool wait = false;
+ uint32_t val;
+
+ if (I915_READ(DP_TP_CTL(port)) & DP_TP_CTL_ENABLE) {
+ val = I915_READ(DDI_BUF_CTL(port));
+ if (val & DDI_BUF_CTL_ENABLE) {
+ val &= ~DDI_BUF_CTL_ENABLE;
+ I915_WRITE(DDI_BUF_CTL(port), val);
+ wait = true;
+ }
+
+ val = I915_READ(DP_TP_CTL(port));
+ val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
+ val |= DP_TP_CTL_LINK_TRAIN_PAT1;
+ I915_WRITE(DP_TP_CTL(port), val);
+ POSTING_READ(DP_TP_CTL(port));
+
+ if (wait)
+ intel_wait_ddi_buf_idle(dev_priv, port);
+ }
+
+ val = DP_TP_CTL_ENABLE | DP_TP_CTL_MODE_SST |
+ DP_TP_CTL_LINK_TRAIN_PAT1 | DP_TP_CTL_SCRAMBLE_DISABLE;
+ if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
+ val |= DP_TP_CTL_ENHANCED_FRAME_ENABLE;
+ I915_WRITE(DP_TP_CTL(port), val);
+ POSTING_READ(DP_TP_CTL(port));
+
+ intel_dp->DP |= DDI_BUF_CTL_ENABLE;
+ I915_WRITE(DDI_BUF_CTL(port), intel_dp->DP);
+ POSTING_READ(DDI_BUF_CTL(port));
+
+ udelay(600);
+}
+
+void intel_ddi_fdi_disable(struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
+ uint32_t val;
+
+ intel_ddi_post_disable(intel_encoder);
+
+ val = I915_READ(_FDI_RXA_CTL);
+ val &= ~FDI_RX_ENABLE;
+ I915_WRITE(_FDI_RXA_CTL, val);
+
+ val = I915_READ(_FDI_RXA_MISC);
+ val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
+ val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
+ I915_WRITE(_FDI_RXA_MISC, val);
+
+ val = I915_READ(_FDI_RXA_CTL);
+ val &= ~FDI_PCDCLK;
+ I915_WRITE(_FDI_RXA_CTL, val);
+
+ val = I915_READ(_FDI_RXA_CTL);
+ val &= ~FDI_RX_PLL_ENABLE;
+ I915_WRITE(_FDI_RXA_CTL, val);
+}
+
+static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
+ int type = intel_encoder->type;
+
+ if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP)
+ intel_dp_check_link_status(intel_dp);
+}
+
+static void intel_ddi_destroy(struct drm_encoder *encoder)
+{
+ /* HDMI has nothing special to destroy, so we can go with this. */
+ intel_dp_encoder_destroy(encoder);
+}
+
+static bool intel_ddi_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+ int type = intel_encoder->type;
+
+ WARN(type == INTEL_OUTPUT_UNKNOWN, "mode_fixup() on unknown output!\n");
+
+ if (type == INTEL_OUTPUT_HDMI)
+ return intel_hdmi_mode_fixup(encoder, mode, adjusted_mode);
+ else
+ return intel_dp_mode_fixup(encoder, mode, adjusted_mode);
+}
+
+static const struct drm_encoder_funcs intel_ddi_funcs = {
+ .destroy = intel_ddi_destroy,
+};
+
+static const struct drm_encoder_helper_funcs intel_ddi_helper_funcs = {
+ .mode_fixup = intel_ddi_mode_fixup,
+ .mode_set = intel_ddi_mode_set,
+ .disable = intel_encoder_noop,
+};
+
+void intel_ddi_init(struct drm_device *dev, enum port port)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_digital_port *intel_dig_port;
+ struct intel_encoder *intel_encoder;
+ struct drm_encoder *encoder;
+ struct intel_connector *hdmi_connector = NULL;
+ struct intel_connector *dp_connector = NULL;
+
+ intel_dig_port = malloc(sizeof(struct intel_digital_port), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_dig_port)
+ return;
+
+ dp_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!dp_connector) {
+ free(intel_dig_port, DRM_MEM_KMS);
+ return;
+ }
+
+ if (port != PORT_A) {
+ hdmi_connector = malloc(sizeof(struct intel_connector),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!hdmi_connector) {
+ free(dp_connector, DRM_MEM_KMS);
+ free(intel_dig_port, DRM_MEM_KMS);
+ return;
+ }
+ }
+
+ intel_encoder = &intel_dig_port->base;
+ encoder = &intel_encoder->base;
+
+ drm_encoder_init(dev, encoder, &intel_ddi_funcs,
+ DRM_MODE_ENCODER_TMDS);
+ drm_encoder_helper_add(encoder, &intel_ddi_helper_funcs);
+
+ intel_encoder->enable = intel_enable_ddi;
+ intel_encoder->pre_enable = intel_ddi_pre_enable;
+ intel_encoder->disable = intel_disable_ddi;
+ intel_encoder->post_disable = intel_ddi_post_disable;
+ intel_encoder->get_hw_state = intel_ddi_get_hw_state;
+
+ intel_dig_port->port = port;
+ intel_dig_port->port_reversal = I915_READ(DDI_BUF_CTL(port)) &
+ DDI_BUF_PORT_REVERSAL;
+ if (hdmi_connector)
+ intel_dig_port->hdmi.sdvox_reg = DDI_BUF_CTL(port);
+ else
+ intel_dig_port->hdmi.sdvox_reg = 0;
+ intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
+
+ intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ intel_encoder->cloneable = false;
+ intel_encoder->hot_plug = intel_ddi_hot_plug;
+
+ if (hdmi_connector)
+ intel_hdmi_init_connector(intel_dig_port, hdmi_connector);
+ intel_dp_init_connector(intel_dig_port, dp_connector);
}
diff --git a/sys/dev/drm2/i915/intel_display.c b/sys/dev/drm2/i915/intel_display.c
index 5af8c05..363cbf2 100644
--- a/sys/dev/drm2/i915/intel_display.c
+++ b/sys/dev/drm2/i915/intel_display.c
@@ -28,16 +28,12 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/drm_edid.h>
#include <dev/drm2/drm_dp_helper.h>
#include <dev/drm2/drm_crtc_helper.h>
-#include <sys/limits.h>
-
-#define HAS_eDP (intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))
bool intel_pipe_has_type(struct drm_crtc *crtc, int type);
static void intel_increase_pllclock(struct drm_crtc *crtc);
@@ -76,6 +72,16 @@ struct intel_limit {
/* FDI */
#define IRONLAKE_FDI_FREQ 2700000 /* in kHz for mode->clock */
+int
+intel_pch_rawclk(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ WARN_ON(!HAS_PCH_SPLIT(dev));
+
+ return I915_READ(PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK;
+}
+
static bool
intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
int target, int refclk, intel_clock_t *match_clock,
@@ -94,6 +100,11 @@ intel_find_pll_ironlake_dp(const intel_limit_t *, struct drm_crtc *crtc,
int target, int refclk, intel_clock_t *match_clock,
intel_clock_t *best_clock);
+static bool
+intel_vlv_find_best_pll(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock);
+
static inline u32 /* units of 100MHz */
intel_fdi_link_freq(struct drm_device *dev)
{
@@ -137,8 +148,8 @@ static const intel_limit_t intel_limits_i9xx_sdvo = {
.vco = { .min = 1400000, .max = 2800000 },
.n = { .min = 1, .max = 6 },
.m = { .min = 70, .max = 120 },
- .m1 = { .min = 10, .max = 22 },
- .m2 = { .min = 5, .max = 9 },
+ .m1 = { .min = 8, .max = 18 },
+ .m2 = { .min = 3, .max = 7 },
.p = { .min = 5, .max = 80 },
.p1 = { .min = 1, .max = 8 },
.p2 = { .dot_limit = 200000,
@@ -355,11 +366,53 @@ static const intel_limit_t intel_limits_ironlake_display_port = {
.find_pll = intel_find_pll_ironlake_dp,
};
+static const intel_limit_t intel_limits_vlv_dac = {
+ .dot = { .min = 25000, .max = 270000 },
+ .vco = { .min = 4000000, .max = 6000000 },
+ .n = { .min = 1, .max = 7 },
+ .m = { .min = 22, .max = 450 }, /* guess */
+ .m1 = { .min = 2, .max = 3 },
+ .m2 = { .min = 11, .max = 156 },
+ .p = { .min = 10, .max = 30 },
+ .p1 = { .min = 2, .max = 3 },
+ .p2 = { .dot_limit = 270000,
+ .p2_slow = 2, .p2_fast = 20 },
+ .find_pll = intel_vlv_find_best_pll,
+};
+
+static const intel_limit_t intel_limits_vlv_hdmi = {
+ .dot = { .min = 20000, .max = 165000 },
+ .vco = { .min = 4000000, .max = 5994000},
+ .n = { .min = 1, .max = 7 },
+ .m = { .min = 60, .max = 300 }, /* guess */
+ .m1 = { .min = 2, .max = 3 },
+ .m2 = { .min = 11, .max = 156 },
+ .p = { .min = 10, .max = 30 },
+ .p1 = { .min = 2, .max = 3 },
+ .p2 = { .dot_limit = 270000,
+ .p2_slow = 2, .p2_fast = 20 },
+ .find_pll = intel_vlv_find_best_pll,
+};
+
+static const intel_limit_t intel_limits_vlv_dp = {
+ .dot = { .min = 25000, .max = 270000 },
+ .vco = { .min = 4000000, .max = 6000000 },
+ .n = { .min = 1, .max = 7 },
+ .m = { .min = 22, .max = 450 },
+ .m1 = { .min = 2, .max = 3 },
+ .m2 = { .min = 11, .max = 156 },
+ .p = { .min = 10, .max = 30 },
+ .p1 = { .min = 2, .max = 3 },
+ .p2 = { .dot_limit = 270000,
+ .p2_slow = 2, .p2_fast = 20 },
+ .find_pll = intel_vlv_find_best_pll,
+};
+
u32 intel_dpio_read(struct drm_i915_private *dev_priv, int reg)
{
u32 val = 0;
- mtx_lock(&dev_priv->dpio_lock);
+ sx_xlock(&dev_priv->dpio_lock);
if (wait_for_atomic_us((I915_READ(DPIO_PKT) & DPIO_BUSY) == 0, 100)) {
DRM_ERROR("DPIO idle wait timed out\n");
goto out_unlock;
@@ -375,16 +428,15 @@ u32 intel_dpio_read(struct drm_i915_private *dev_priv, int reg)
val = I915_READ(DPIO_DATA);
out_unlock:
- mtx_unlock(&dev_priv->dpio_lock);
+ sx_xunlock(&dev_priv->dpio_lock);
return val;
}
-#if 0
static void intel_dpio_write(struct drm_i915_private *dev_priv, int reg,
u32 val)
{
- mtx_lock(&dev_priv->dpio_lock);
+ sx_xlock(&dev_priv->dpio_lock);
if (wait_for_atomic_us((I915_READ(DPIO_PKT) & DPIO_BUSY) == 0, 100)) {
DRM_ERROR("DPIO idle wait timed out\n");
goto out_unlock;
@@ -398,9 +450,8 @@ static void intel_dpio_write(struct drm_i915_private *dev_priv, int reg,
DRM_ERROR("DPIO write wait timed out\n");
out_unlock:
- mtx_unlock(&dev_priv->dpio_lock);
+ sx_xunlock(&dev_priv->dpio_lock);
}
-#endif
static void vlv_init_dpio(struct drm_device *dev)
{
@@ -452,7 +503,7 @@ static bool is_dual_link_lvds(struct drm_i915_private *dev_priv,
* register is uninitialized.
*/
val = I915_READ(reg);
- if (!(val & ~LVDS_DETECTED))
+ if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
val = dev_priv->bios_lvds_val;
dev_priv->lvds_val = val;
}
@@ -480,7 +531,7 @@ static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
limit = &intel_limits_ironlake_single_lvds;
}
} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
- HAS_eDP)
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))
limit = &intel_limits_ironlake_display_port;
else
limit = &intel_limits_ironlake_dac;
@@ -528,6 +579,13 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc, int refclk)
limit = &intel_limits_pineview_lvds;
else
limit = &intel_limits_pineview_sdvo;
+ } else if (IS_VALLEYVIEW(dev)) {
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_ANALOG))
+ limit = &intel_limits_vlv_dac;
+ else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI))
+ limit = &intel_limits_vlv_hdmi;
+ else
+ limit = &intel_limits_vlv_dp;
} else if (!IS_GEN2(dev)) {
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
limit = &intel_limits_i9xx_lvds;
@@ -569,11 +627,10 @@ static void intel_clock(struct drm_device *dev, int refclk, intel_clock_t *clock
bool intel_pipe_has_type(struct drm_crtc *crtc, int type)
{
struct drm_device *dev = crtc->dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
struct intel_encoder *encoder;
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
- if (encoder->base.crtc == crtc && encoder->type == type)
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ if (encoder->type == type)
return true;
return false;
@@ -801,6 +858,83 @@ intel_find_pll_g4x_dp(const intel_limit_t *limit, struct drm_crtc *crtc,
memcpy(best_clock, &clock, sizeof(intel_clock_t));
return true;
}
+static bool
+intel_vlv_find_best_pll(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock)
+{
+ u32 p1, p2, m1, m2, vco, bestn, bestm1, bestm2, bestp1, bestp2;
+ u32 m, n, fastclk;
+ u32 updrate, minupdate, fracbits, p;
+ unsigned long bestppm, ppm, absppm;
+ int dotclk, flag;
+
+ flag = 0;
+ dotclk = target * 1000;
+ bestppm = 1000000;
+ ppm = absppm = 0;
+ fastclk = dotclk / (2*100);
+ updrate = 0;
+ minupdate = 19200;
+ fracbits = 1;
+ n = p = p1 = p2 = m = m1 = m2 = vco = bestn = 0;
+ bestm1 = bestm2 = bestp1 = bestp2 = 0;
+
+ /* based on hardware requirement, prefer smaller n to precision */
+ for (n = limit->n.min; n <= ((refclk) / minupdate); n++) {
+ updrate = refclk / n;
+ for (p1 = limit->p1.max; p1 > limit->p1.min; p1--) {
+ for (p2 = limit->p2.p2_fast+1; p2 > 0; p2--) {
+ if (p2 > 10)
+ p2 = p2 - 1;
+ p = p1 * p2;
+ /* based on hardware requirement, prefer bigger m1,m2 values */
+ for (m1 = limit->m1.min; m1 <= limit->m1.max; m1++) {
+ m2 = (((2*(fastclk * p * n / m1 )) +
+ refclk) / (2*refclk));
+ m = m1 * m2;
+ vco = updrate * m;
+ if (vco >= limit->vco.min && vco < limit->vco.max) {
+ ppm = 1000000 * ((vco / p) - fastclk) / fastclk;
+ absppm = (ppm > 0) ? ppm : (-ppm);
+ if (absppm < 100 && ((p1 * p2) > (bestp1 * bestp2))) {
+ bestppm = 0;
+ flag = 1;
+ }
+ if (absppm < bestppm - 10) {
+ bestppm = absppm;
+ flag = 1;
+ }
+ if (flag) {
+ bestn = n;
+ bestm1 = m1;
+ bestm2 = m2;
+ bestp1 = p1;
+ bestp2 = p2;
+ flag = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ best_clock->n = bestn;
+ best_clock->m1 = bestm1;
+ best_clock->m2 = bestm2;
+ best_clock->p1 = bestp1;
+ best_clock->p2 = bestp2;
+
+ return true;
+}
+
+enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ return intel_crtc->cpu_transcoder;
+}
static void ironlake_wait_for_vblank(struct drm_device *dev, int pipe)
{
@@ -848,9 +982,9 @@ void intel_wait_for_vblank(struct drm_device *dev, int pipe)
I915_READ(pipestat_reg) | PIPE_VBLANK_INTERRUPT_STATUS);
/* Wait for vblank interrupt bit to set */
- if (_intel_wait_for(dev,
- I915_READ(pipestat_reg) & PIPE_VBLANK_INTERRUPT_STATUS,
- 50, 1, "915vbl"))
+ if (wait_for(I915_READ(pipestat_reg) &
+ PIPE_VBLANK_INTERRUPT_STATUS,
+ 50))
DRM_DEBUG_KMS("vblank wait timed out\n");
}
@@ -874,15 +1008,16 @@ void intel_wait_for_vblank(struct drm_device *dev, int pipe)
void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
if (INTEL_INFO(dev)->gen >= 4) {
- int reg = PIPECONF(pipe);
+ int reg = PIPECONF(cpu_transcoder);
/* Wait for the Pipe State to go off */
- if (_intel_wait_for(dev,
- (I915_READ(reg) & I965_PIPECONF_ACTIVE) == 0, 100,
- 1, "915pip"))
- DRM_DEBUG_KMS("pipe_off wait timed out\n");
+ if (wait_for((I915_READ(reg) & I965_PIPECONF_ACTIVE) == 0,
+ 100))
+ WARN(1, "pipe_off wait timed out\n");
} else {
u32 last_line, line_mask;
int reg = PIPEDSL(pipe);
@@ -896,11 +1031,11 @@ void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
/* Wait for the display line to settle */
do {
last_line = I915_READ(reg) & line_mask;
- DELAY(5000);
+ mdelay(5);
} while (((I915_READ(reg) & line_mask) != last_line) &&
time_after(timeout, jiffies));
if (time_after(jiffies, timeout))
- DRM_DEBUG_KMS("pipe_off wait timed out\n");
+ WARN(1, "pipe_off wait timed out\n");
}
}
@@ -920,19 +1055,19 @@ static void assert_pll(struct drm_i915_private *dev_priv,
reg = DPLL(pipe);
val = I915_READ(reg);
cur_state = !!(val & DPLL_VCO_ENABLE);
- if (cur_state != state)
- printf("PLL state assertion failure (expected %s, current %s)\n",
- state_string(state), state_string(cur_state));
+ WARN(cur_state != state,
+ "PLL state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
}
#define assert_pll_enabled(d, p) assert_pll(d, p, true)
#define assert_pll_disabled(d, p) assert_pll(d, p, false)
/* For ILK+ */
static void assert_pch_pll(struct drm_i915_private *dev_priv,
- struct intel_crtc *intel_crtc,
+ struct intel_pch_pll *pll,
+ struct intel_crtc *crtc,
bool state)
{
- int reg;
u32 val;
bool cur_state;
@@ -941,30 +1076,37 @@ static void assert_pch_pll(struct drm_i915_private *dev_priv,
return;
}
- if (!intel_crtc->pch_pll) {
- printf("asserting PCH PLL enabled with no PLL\n");
+ if (WARN (!pll,
+ "asserting PCH PLL %s with no PLL\n", state_string(state)))
return;
- }
- if (HAS_PCH_CPT(dev_priv->dev)) {
+ val = I915_READ(pll->pll_reg);
+ cur_state = !!(val & DPLL_VCO_ENABLE);
+ WARN(cur_state != state,
+ "PCH PLL state for reg %x assertion failure (expected %s, current %s), val=%08x\n",
+ pll->pll_reg, state_string(state), state_string(cur_state), val);
+
+ /* Make sure the selected PLL is correctly attached to the transcoder */
+ if (crtc && HAS_PCH_CPT(dev_priv->dev)) {
u32 pch_dpll;
pch_dpll = I915_READ(PCH_DPLL_SEL);
-
- /* Make sure the selected PLL is enabled to the transcoder */
- KASSERT(((pch_dpll >> (4 * intel_crtc->pipe)) & 8) != 0,
- ("transcoder %d PLL not enabled\n", intel_crtc->pipe));
+ cur_state = pll->pll_reg == _PCH_DPLL_B;
+ if (!WARN(((pch_dpll >> (4 * crtc->pipe)) & 1) != cur_state,
+ "PLL[%d] not attached to this transcoder %d: %08x\n",
+ cur_state, crtc->pipe, pch_dpll)) {
+ cur_state = !!(val >> (4*crtc->pipe + 3));
+ WARN(cur_state != state,
+ "PLL[%d] not %s on this transcoder %d: %08x\n",
+ pll->pll_reg == _PCH_DPLL_B,
+ state_string(state),
+ crtc->pipe,
+ val);
+ }
}
-
- reg = intel_crtc->pch_pll->pll_reg;
- val = I915_READ(reg);
- cur_state = !!(val & DPLL_VCO_ENABLE);
- if (cur_state != state)
- printf("PCH PLL state assertion failure (expected %s, current %s)\n",
- state_string(state), state_string(cur_state));
}
-#define assert_pch_pll_enabled(d, p) assert_pch_pll(d, p, true)
-#define assert_pch_pll_disabled(d, p) assert_pch_pll(d, p, false)
+#define assert_pch_pll_enabled(d, p, c) assert_pch_pll(d, p, c, true)
+#define assert_pch_pll_disabled(d, p, c) assert_pch_pll(d, p, c, false)
static void assert_fdi_tx(struct drm_i915_private *dev_priv,
enum pipe pipe, bool state)
@@ -972,10 +1114,12 @@ static void assert_fdi_tx(struct drm_i915_private *dev_priv,
int reg;
u32 val;
bool cur_state;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
if (IS_HASWELL(dev_priv->dev)) {
/* On Haswell, DDI is used instead of FDI_TX_CTL */
- reg = TRANS_DDI_FUNC_CTL(pipe);
+ reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
val = I915_READ(reg);
cur_state = !!(val & TRANS_DDI_FUNC_ENABLE);
} else {
@@ -983,9 +1127,9 @@ static void assert_fdi_tx(struct drm_i915_private *dev_priv,
val = I915_READ(reg);
cur_state = !!(val & FDI_TX_ENABLE);
}
- if (cur_state != state)
- printf("FDI TX state assertion failure (expected %s, current %s)\n",
- state_string(state), state_string(cur_state));
+ WARN(cur_state != state,
+ "FDI TX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
}
#define assert_fdi_tx_enabled(d, p) assert_fdi_tx(d, p, true)
#define assert_fdi_tx_disabled(d, p) assert_fdi_tx(d, p, false)
@@ -997,17 +1141,12 @@ static void assert_fdi_rx(struct drm_i915_private *dev_priv,
u32 val;
bool cur_state;
- if (IS_HASWELL(dev_priv->dev) && pipe > 0) {
- DRM_ERROR("Attempting to enable FDI_RX on Haswell pipe > 0\n");
- return;
- } else {
- reg = FDI_RX_CTL(pipe);
- val = I915_READ(reg);
- cur_state = !!(val & FDI_RX_ENABLE);
- }
- if (cur_state != state)
- printf("FDI RX state assertion failure (expected %s, current %s)\n",
- state_string(state), state_string(cur_state));
+ reg = FDI_RX_CTL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_RX_ENABLE);
+ WARN(cur_state != state,
+ "FDI RX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
}
#define assert_fdi_rx_enabled(d, p) assert_fdi_rx(d, p, true)
#define assert_fdi_rx_disabled(d, p) assert_fdi_rx(d, p, false)
@@ -1028,8 +1167,7 @@ static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
reg = FDI_TX_CTL(pipe);
val = I915_READ(reg);
- if (!(val & FDI_TX_PLL_ENABLE))
- printf("FDI TX PLL assertion failure, should be active but is disabled\n");
+ WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
}
static void assert_fdi_rx_pll_enabled(struct drm_i915_private *dev_priv,
@@ -1038,14 +1176,9 @@ static void assert_fdi_rx_pll_enabled(struct drm_i915_private *dev_priv,
int reg;
u32 val;
- if (IS_HASWELL(dev_priv->dev) && pipe > 0) {
- DRM_ERROR("Attempting to enable FDI on Haswell with pipe > 0\n");
- return;
- }
reg = FDI_RX_CTL(pipe);
val = I915_READ(reg);
- if (!(val & FDI_RX_PLL_ENABLE))
- printf("FDI RX PLL assertion failure, should be active but is disabled\n");
+ WARN(!(val & FDI_RX_PLL_ENABLE), "FDI RX PLL assertion failure, should be active but is disabled\n");
}
static void assert_panel_unlocked(struct drm_i915_private *dev_priv,
@@ -1072,8 +1205,8 @@ static void assert_panel_unlocked(struct drm_i915_private *dev_priv,
if (I915_READ(lvds_reg) & LVDS_PIPEB_SELECT)
panel_pipe = PIPE_B;
- if (panel_pipe == pipe && locked)
- printf("panel assertion failure, pipe %c regs locked\n",
+ WARN(panel_pipe == pipe && locked,
+ "panel assertion failure, pipe %c regs locked\n",
pipe_name(pipe));
}
@@ -1083,17 +1216,19 @@ void assert_pipe(struct drm_i915_private *dev_priv,
int reg;
u32 val;
bool cur_state;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
/* if we need the pipe A quirk it must be always on */
if (pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE)
state = true;
- reg = PIPECONF(pipe);
+ reg = PIPECONF(cpu_transcoder);
val = I915_READ(reg);
cur_state = !!(val & PIPECONF_ENABLE);
- if (cur_state != state)
- printf("pipe %c assertion failure (expected %s, current %s)\n",
- pipe_name(pipe), state_string(state), state_string(cur_state));
+ WARN(cur_state != state,
+ "pipe %c assertion failure (expected %s, current %s)\n",
+ pipe_name(pipe), state_string(state), state_string(cur_state));
}
static void assert_plane(struct drm_i915_private *dev_priv,
@@ -1106,9 +1241,9 @@ static void assert_plane(struct drm_i915_private *dev_priv,
reg = DSPCNTR(plane);
val = I915_READ(reg);
cur_state = !!(val & DISPLAY_PLANE_ENABLE);
- if (cur_state != state)
- printf("plane %c assertion failure, (expected %s, current %s)\n",
- plane_name(plane), state_string(state), state_string(cur_state));
+ WARN(cur_state != state,
+ "plane %c assertion failure (expected %s, current %s)\n",
+ plane_name(plane), state_string(state), state_string(cur_state));
}
#define assert_plane_enabled(d, p) assert_plane(d, p, true)
@@ -1125,9 +1260,9 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
if (HAS_PCH_SPLIT(dev_priv->dev)) {
reg = DSPCNTR(pipe);
val = I915_READ(reg);
- if ((val & DISPLAY_PLANE_ENABLE) != 0)
- printf("plane %c assertion failure, should be disabled but not\n",
- plane_name(pipe));
+ WARN((val & DISPLAY_PLANE_ENABLE),
+ "plane %c assertion failure, should be disabled but not\n",
+ plane_name(pipe));
return;
}
@@ -1137,8 +1272,8 @@ static void assert_planes_disabled(struct drm_i915_private *dev_priv,
val = I915_READ(reg);
cur_pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
DISPPLANE_SEL_PIPE_SHIFT;
- if ((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe)
- printf("plane %c assertion failure, should be off on pipe %c but is still active\n",
+ WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
+ "plane %c assertion failure, should be off on pipe %c but is still active\n",
plane_name(i), pipe_name(pipe));
}
}
@@ -1156,8 +1291,7 @@ static void assert_pch_refclk_enabled(struct drm_i915_private *dev_priv)
val = I915_READ(PCH_DREF_CONTROL);
enabled = !!(val & (DREF_SSC_SOURCE_MASK | DREF_NONSPREAD_SOURCE_MASK |
DREF_SUPERSPREAD_SOURCE_MASK));
- if (!enabled)
- printf("PCH refclk assertion failure, should be active but is disabled\n");
+ WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
}
static void assert_transcoder_disabled(struct drm_i915_private *dev_priv,
@@ -1170,8 +1304,8 @@ static void assert_transcoder_disabled(struct drm_i915_private *dev_priv,
reg = TRANSCONF(pipe);
val = I915_READ(reg);
enabled = !!(val & TRANS_ENABLE);
- if (enabled)
- printf("transcoder assertion failed, should be off on pipe %c but is still active\n",
+ WARN(enabled,
+ "transcoder assertion failed, should be off on pipe %c but is still active\n",
pipe_name(pipe));
}
@@ -1244,18 +1378,26 @@ static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
enum pipe pipe, int reg, u32 port_sel)
{
u32 val = I915_READ(reg);
- if (dp_pipe_enabled(dev_priv, pipe, port_sel, val))
- printf("PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
+ WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
+ "PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
reg, pipe_name(pipe));
+
+ WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
+ && (val & DP_PIPEB_SELECT),
+ "IBX PCH dp port still using transcoder B\n");
}
static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
enum pipe pipe, int reg)
{
u32 val = I915_READ(reg);
- if (hdmi_pipe_enabled(dev_priv, val, pipe))
- printf("PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
+ WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
+ "PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
reg, pipe_name(pipe));
+
+ WARN(HAS_PCH_IBX(dev_priv->dev) && (val & PORT_ENABLE) == 0
+ && (val & SDVO_PIPE_B_SELECT),
+ "IBX PCH hdmi port still using transcoder B\n");
}
static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
@@ -1270,14 +1412,14 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
reg = PCH_ADPA;
val = I915_READ(reg);
- if (adpa_pipe_enabled(dev_priv, val, pipe))
- printf("PCH VGA enabled on transcoder %c, should be disabled\n",
+ WARN(adpa_pipe_enabled(dev_priv, pipe, val),
+ "PCH VGA enabled on transcoder %c, should be disabled\n",
pipe_name(pipe));
reg = PCH_LVDS;
val = I915_READ(reg);
- if (lvds_pipe_enabled(dev_priv, val, pipe))
- printf("PCH LVDS enabled on transcoder %c, should be disabled\n",
+ WARN(lvds_pipe_enabled(dev_priv, pipe, val),
+ "PCH LVDS enabled on transcoder %c, should be disabled\n",
pipe_name(pipe));
assert_pch_hdmi_disabled(dev_priv, pipe, HDMIB);
@@ -1295,6 +1437,8 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
* protect mechanism may be enabled.
*
* Note! This is for pre-ILK only.
+ *
+ * Unfortunately needed by dvo_ns2501 since the dvo depends on it running.
*/
static void intel_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
{
@@ -1302,7 +1446,7 @@ static void intel_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
u32 val;
/* No really, not for ILK+ */
- KASSERT(dev_priv->info->gen < 5, ("Wrong device gen"));
+ BUG_ON(!IS_VALLEYVIEW(dev_priv->dev) && dev_priv->info->gen >= 5);
/* PLL is protected by panel, make sure we can write it */
if (IS_MOBILE(dev_priv->dev) && !IS_I830(dev_priv->dev))
@@ -1315,13 +1459,13 @@ static void intel_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
/* We do this three times for luck */
I915_WRITE(reg, val);
POSTING_READ(reg);
- DELAY(150); /* wait for warmup */
+ udelay(150); /* wait for warmup */
I915_WRITE(reg, val);
POSTING_READ(reg);
- DELAY(150); /* wait for warmup */
+ udelay(150); /* wait for warmup */
I915_WRITE(reg, val);
POSTING_READ(reg);
- DELAY(150); /* wait for warmup */
+ udelay(150); /* wait for warmup */
}
/**
@@ -1354,48 +1498,57 @@ static void intel_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
/* SBI access */
static void
-intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value)
+intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value,
+ enum intel_sbi_destination destination)
{
+ u32 tmp;
- mtx_lock(&dev_priv->dpio_lock);
- if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0, 100)) {
+ sx_xlock(&dev_priv->dpio_lock);
+ if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, 100)) {
DRM_ERROR("timeout waiting for SBI to become ready\n");
goto out_unlock;
}
I915_WRITE(SBI_ADDR, (reg << 16));
I915_WRITE(SBI_DATA, value);
- I915_WRITE(SBI_CTL_STAT,
- SBI_BUSY |
- SBI_CTL_OP_CRWR);
- if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_READY | SBI_RESPONSE_SUCCESS)) == 0,
+ if (destination == SBI_ICLK)
+ tmp = SBI_CTL_DEST_ICLK | SBI_CTL_OP_CRWR;
+ else
+ tmp = SBI_CTL_DEST_MPHY | SBI_CTL_OP_IOWR;
+ I915_WRITE(SBI_CTL_STAT, SBI_BUSY | tmp);
+
+ if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_BUSY | SBI_RESPONSE_FAIL)) == 0,
100)) {
DRM_ERROR("timeout waiting for SBI to complete write transaction\n");
goto out_unlock;
}
out_unlock:
- mtx_unlock(&dev_priv->dpio_lock);
+ sx_xunlock(&dev_priv->dpio_lock);
}
static u32
-intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg)
+intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg,
+ enum intel_sbi_destination destination)
{
u32 value = 0;
- mtx_lock(&dev_priv->dpio_lock);
- if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0, 100)) {
+ sx_xlock(&dev_priv->dpio_lock);
+ if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, 100)) {
DRM_ERROR("timeout waiting for SBI to become ready\n");
goto out_unlock;
}
I915_WRITE(SBI_ADDR, (reg << 16));
- I915_WRITE(SBI_CTL_STAT,
- SBI_BUSY |
- SBI_CTL_OP_CRRD);
- if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_READY | SBI_RESPONSE_SUCCESS)) == 0,
+ if (destination == SBI_ICLK)
+ value = SBI_CTL_DEST_ICLK | SBI_CTL_OP_CRRD;
+ else
+ value = SBI_CTL_DEST_MPHY | SBI_CTL_OP_IORD;
+ I915_WRITE(SBI_CTL_STAT, value | SBI_BUSY);
+
+ if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_BUSY | SBI_RESPONSE_FAIL)) == 0,
100)) {
DRM_ERROR("timeout waiting for SBI to complete read transaction\n");
goto out_unlock;
@@ -1404,19 +1557,19 @@ intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg)
value = I915_READ(SBI_DATA);
out_unlock:
- mtx_unlock(&dev_priv->dpio_lock);
+ sx_xunlock(&dev_priv->dpio_lock);
return value;
}
/**
- * intel_enable_pch_pll - enable PCH PLL
+ * ironlake_enable_pch_pll - enable PCH PLL
* @dev_priv: i915 private structure
* @pipe: pipe PLL to enable
*
* The PCH PLL needs to be enabled before the PCH transcoder, since it
* drives the transcoder clock.
*/
-static void intel_enable_pch_pll(struct intel_crtc *intel_crtc)
+static void ironlake_enable_pch_pll(struct intel_crtc *intel_crtc)
{
struct drm_i915_private *dev_priv = intel_crtc->base.dev->dev_private;
struct intel_pch_pll *pll;
@@ -1424,15 +1577,13 @@ static void intel_enable_pch_pll(struct intel_crtc *intel_crtc)
u32 val;
/* PCH PLLs only available on ILK, SNB and IVB */
- KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+ BUG_ON(dev_priv->info->gen < 5);
pll = intel_crtc->pch_pll;
if (pll == NULL)
return;
- if (pll->refcount == 0) {
- DRM_DEBUG_KMS("pll->refcount == 0\n");
+ if (WARN_ON(pll->refcount == 0))
return;
- }
DRM_DEBUG_KMS("enable PCH PLL %x (active %d, on? %d)for crtc %d\n",
pll->pll_reg, pll->active, pll->on,
@@ -1442,7 +1593,7 @@ static void intel_enable_pch_pll(struct intel_crtc *intel_crtc)
assert_pch_refclk_enabled(dev_priv);
if (pll->active++ && pll->on) {
- assert_pch_pll_enabled(dev_priv, intel_crtc);
+ assert_pch_pll_enabled(dev_priv, pll, NULL);
return;
}
@@ -1453,7 +1604,7 @@ static void intel_enable_pch_pll(struct intel_crtc *intel_crtc)
val |= DPLL_VCO_ENABLE;
I915_WRITE(reg, val);
POSTING_READ(reg);
- DELAY(200);
+ udelay(200);
pll->on = true;
}
@@ -1466,27 +1617,24 @@ static void intel_disable_pch_pll(struct intel_crtc *intel_crtc)
u32 val;
/* PCH only available on ILK+ */
- KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+ BUG_ON(dev_priv->info->gen < 5);
if (pll == NULL)
- return;
+ return;
- if (pll->refcount == 0) {
- DRM_DEBUG_KMS("pll->refcount == 0\n");
+ if (WARN_ON(pll->refcount == 0))
return;
- }
DRM_DEBUG_KMS("disable PCH PLL %x (active %d, on? %d) for crtc %d\n",
pll->pll_reg, pll->active, pll->on,
intel_crtc->base.base.id);
- if (pll->active == 0) {
- DRM_DEBUG_KMS("pll->active == 0\n");
- assert_pch_pll_disabled(dev_priv, intel_crtc);
+ if (WARN_ON(pll->active == 0)) {
+ assert_pch_pll_disabled(dev_priv, pll, NULL);
return;
}
if (--pll->active) {
- assert_pch_pll_enabled(dev_priv, intel_crtc);
+ assert_pch_pll_enabled(dev_priv, pll, NULL);
return;
}
@@ -1500,32 +1648,37 @@ static void intel_disable_pch_pll(struct intel_crtc *intel_crtc)
val &= ~DPLL_VCO_ENABLE;
I915_WRITE(reg, val);
POSTING_READ(reg);
- DELAY(200);
+ udelay(200);
pll->on = false;
}
-static void intel_enable_transcoder(struct drm_i915_private *dev_priv,
+static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
enum pipe pipe)
{
- int reg;
- u32 val, pipeconf_val;
+ struct drm_device *dev = dev_priv->dev;
struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
+ uint32_t reg, val, pipeconf_val;
/* PCH only available on ILK+ */
- KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+ BUG_ON(dev_priv->info->gen < 5);
/* Make sure PCH DPLL is enabled */
assert_pch_pll_enabled(dev_priv,
+ to_intel_crtc(crtc)->pch_pll,
to_intel_crtc(crtc));
/* FDI must be feeding us bits for PCH ports */
assert_fdi_tx_enabled(dev_priv, pipe);
assert_fdi_rx_enabled(dev_priv, pipe);
- if (IS_HASWELL(dev_priv->dev) && pipe > 0) {
- DRM_ERROR("Attempting to enable transcoder on Haswell with pipe > 0\n");
- return;
+ if (HAS_PCH_CPT(dev)) {
+ /* Workaround: Set the timing override bit before enabling the
+ * pch transcoder. */
+ reg = TRANS_CHICKEN2(pipe);
+ val = I915_READ(reg);
+ val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
+ I915_WRITE(reg, val);
}
reg = TRANSCONF(pipe);
@@ -1552,16 +1705,46 @@ static void intel_enable_transcoder(struct drm_i915_private *dev_priv,
val |= TRANS_PROGRESSIVE;
I915_WRITE(reg, val | TRANS_ENABLE);
- if (_intel_wait_for(dev_priv->dev, I915_READ(reg) & TRANS_STATE_ENABLE,
- 100, 1, "915trc"))
+ if (wait_for(I915_READ(reg) & TRANS_STATE_ENABLE, 100))
DRM_ERROR("failed to enable transcoder %d\n", pipe);
}
-static void intel_disable_transcoder(struct drm_i915_private *dev_priv,
- enum pipe pipe)
+static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
+ enum transcoder cpu_transcoder)
{
- int reg;
- u32 val;
+ u32 val, pipeconf_val;
+
+ /* PCH only available on ILK+ */
+ BUG_ON(dev_priv->info->gen < 5);
+
+ /* FDI must be feeding us bits for PCH ports */
+ assert_fdi_tx_enabled(dev_priv, (enum pipe)cpu_transcoder);
+ assert_fdi_rx_enabled(dev_priv, (enum pipe)TRANSCODER_A);
+
+ /* Workaround: set timing override bit. */
+ val = I915_READ(_TRANSA_CHICKEN2);
+ val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
+ I915_WRITE(_TRANSA_CHICKEN2, val);
+
+ val = TRANS_ENABLE;
+ pipeconf_val = I915_READ(PIPECONF(cpu_transcoder));
+
+ if ((pipeconf_val & PIPECONF_INTERLACE_MASK_HSW) ==
+ PIPECONF_INTERLACED_ILK)
+ val |= TRANS_INTERLACED;
+ else
+ val |= TRANS_PROGRESSIVE;
+
+ I915_WRITE(TRANSCONF(TRANSCODER_A), val);
+ if (wait_for(I915_READ(_TRANSACONF) & TRANS_STATE_ENABLE, 100))
+ DRM_ERROR("Failed to enable PCH transcoder\n");
+}
+
+static void ironlake_disable_pch_transcoder(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ struct drm_device *dev = dev_priv->dev;
+ uint32_t reg, val;
/* FDI relies on the transcoder */
assert_fdi_tx_disabled(dev_priv, pipe);
@@ -1575,10 +1758,33 @@ static void intel_disable_transcoder(struct drm_i915_private *dev_priv,
val &= ~TRANS_ENABLE;
I915_WRITE(reg, val);
/* wait for PCH transcoder off, transcoder state */
- if (_intel_wait_for(dev_priv->dev,
- (I915_READ(reg) & TRANS_STATE_ENABLE) == 0, 50,
- 1, "915trd"))
+ if (wait_for((I915_READ(reg) & TRANS_STATE_ENABLE) == 0, 50))
DRM_ERROR("failed to disable transcoder %d\n", pipe);
+
+ if (!HAS_PCH_IBX(dev)) {
+ /* Workaround: Clear the timing override chicken bit again. */
+ reg = TRANS_CHICKEN2(pipe);
+ val = I915_READ(reg);
+ val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
+ I915_WRITE(reg, val);
+ }
+}
+
+static void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv)
+{
+ u32 val;
+
+ val = I915_READ(_TRANSACONF);
+ val &= ~TRANS_ENABLE;
+ I915_WRITE(_TRANSACONF, val);
+ /* wait for PCH transcoder off, transcoder state */
+ if (wait_for((I915_READ(_TRANSACONF) & TRANS_STATE_ENABLE) == 0, 50))
+ DRM_ERROR("Failed to disable PCH transcoder\n");
+
+ /* Workaround: clear timing override bit. */
+ val = I915_READ(_TRANSA_CHICKEN2);
+ val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
+ I915_WRITE(_TRANSA_CHICKEN2, val);
}
/**
@@ -1598,9 +1804,17 @@ static void intel_disable_transcoder(struct drm_i915_private *dev_priv,
static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe,
bool pch_port)
{
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
+ enum transcoder pch_transcoder;
int reg;
u32 val;
+ if (IS_HASWELL(dev_priv->dev))
+ pch_transcoder = TRANSCODER_A;
+ else
+ pch_transcoder = (enum transcoder)pipe;
+
/*
* A pipe without a PLL won't actually be able to drive bits from
* a plane. On ILK+ the pipe PLLs are integrated, so we don't
@@ -1611,13 +1825,13 @@ static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe,
else {
if (pch_port) {
/* if driving the PCH, we need FDI enabled */
- assert_fdi_rx_pll_enabled(dev_priv, pipe);
- assert_fdi_tx_pll_enabled(dev_priv, pipe);
+ assert_fdi_rx_pll_enabled(dev_priv, (enum pipe)pch_transcoder);
+ assert_fdi_tx_pll_enabled(dev_priv, (enum pipe)cpu_transcoder);
}
/* FIXME: assert CPU port conditions for SNB+ */
}
- reg = PIPECONF(pipe);
+ reg = PIPECONF(cpu_transcoder);
val = I915_READ(reg);
if (val & PIPECONF_ENABLE)
return;
@@ -1641,6 +1855,8 @@ static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe,
static void intel_disable_pipe(struct drm_i915_private *dev_priv,
enum pipe pipe)
{
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
int reg;
u32 val;
@@ -1654,7 +1870,7 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv,
if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
return;
- reg = PIPECONF(pipe);
+ reg = PIPECONF(cpu_transcoder);
val = I915_READ(reg);
if ((val & PIPECONF_ENABLE) == 0)
return;
@@ -1670,8 +1886,10 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv,
void intel_flush_display_plane(struct drm_i915_private *dev_priv,
enum plane plane)
{
- I915_WRITE(DSPADDR(plane), I915_READ(DSPADDR(plane)));
- I915_WRITE(DSPSURF(plane), I915_READ(DSPSURF(plane)));
+ if (dev_priv->info->gen >= 4)
+ I915_WRITE(DSPSURF(plane), I915_READ(DSPSURF(plane)));
+ else
+ I915_WRITE(DSPADDR(plane), I915_READ(DSPADDR(plane)));
}
/**
@@ -1725,59 +1943,6 @@ static void intel_disable_plane(struct drm_i915_private *dev_priv,
intel_wait_for_vblank(dev_priv->dev, pipe);
}
-static void disable_pch_dp(struct drm_i915_private *dev_priv,
- enum pipe pipe, int reg, u32 port_sel)
-{
- u32 val = I915_READ(reg);
- if (dp_pipe_enabled(dev_priv, pipe, port_sel, val)) {
- DRM_DEBUG_KMS("Disabling pch dp %x on pipe %d\n", reg, pipe);
- I915_WRITE(reg, val & ~DP_PORT_EN);
- }
-}
-
-static void disable_pch_hdmi(struct drm_i915_private *dev_priv,
- enum pipe pipe, int reg)
-{
- u32 val = I915_READ(reg);
- if (hdmi_pipe_enabled(dev_priv, val, pipe)) {
- DRM_DEBUG_KMS("Disabling pch HDMI %x on pipe %d\n",
- reg, pipe);
- I915_WRITE(reg, val & ~PORT_ENABLE);
- }
-}
-
-/* Disable any ports connected to this transcoder */
-static void intel_disable_pch_ports(struct drm_i915_private *dev_priv,
- enum pipe pipe)
-{
- u32 reg, val;
-
- val = I915_READ(PCH_PP_CONTROL);
- I915_WRITE(PCH_PP_CONTROL, val | PANEL_UNLOCK_REGS);
-
- disable_pch_dp(dev_priv, pipe, PCH_DP_B, TRANS_DP_PORT_SEL_B);
- disable_pch_dp(dev_priv, pipe, PCH_DP_C, TRANS_DP_PORT_SEL_C);
- disable_pch_dp(dev_priv, pipe, PCH_DP_D, TRANS_DP_PORT_SEL_D);
-
- reg = PCH_ADPA;
- val = I915_READ(reg);
- if (adpa_pipe_enabled(dev_priv, val, pipe))
- I915_WRITE(reg, val & ~ADPA_DAC_ENABLE);
-
- reg = PCH_LVDS;
- val = I915_READ(reg);
- if (lvds_pipe_enabled(dev_priv, val, pipe)) {
- DRM_DEBUG_KMS("disable lvds on pipe %d val 0x%08x\n", pipe, val);
- I915_WRITE(reg, val & ~LVDS_PORT_EN);
- POSTING_READ(reg);
- DELAY(100);
- }
-
- disable_pch_hdmi(dev_priv, pipe, HDMIB);
- disable_pch_hdmi(dev_priv, pipe, HDMIC);
- disable_pch_hdmi(dev_priv, pipe, HDMID);
-}
-
int
intel_pin_and_fence_fb_obj(struct drm_device *dev,
struct drm_i915_gem_object *obj,
@@ -1787,7 +1952,6 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
u32 alignment;
int ret;
- alignment = 0; /* shut gcc */
switch (obj->tiling_mode) {
case I915_TILING_NONE:
if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
@@ -1806,7 +1970,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
DRM_ERROR("Y tiled not allowed for scan out buffers\n");
return -EINVAL;
default:
- KASSERT(0, ("Wrong tiling for fb obj"));
+ BUG();
}
dev_priv->mm.interruptible = false;
@@ -1829,7 +1993,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
return 0;
err_unpin:
- i915_gem_object_unpin_from_display_plane(obj);
+ i915_gem_object_unpin(obj);
err_interruptible:
dev_priv->mm.interruptible = true;
return ret;
@@ -1838,7 +2002,34 @@ err_interruptible:
void intel_unpin_fb_obj(struct drm_i915_gem_object *obj)
{
i915_gem_object_unpin_fence(obj);
- i915_gem_object_unpin_from_display_plane(obj);
+ i915_gem_object_unpin(obj);
+}
+
+/* Computes the linear offset to the base tile and adjusts x, y. bytes per pixel
+ * is assumed to be a power-of-two. */
+unsigned long intel_gen4_compute_page_offset(int *x, int *y,
+ unsigned int tiling_mode,
+ unsigned int cpp,
+ unsigned int pitch)
+{
+ if (tiling_mode != I915_TILING_NONE) {
+ unsigned int tile_rows, tiles;
+
+ tile_rows = *y / 8;
+ *y %= 8;
+
+ tiles = *x / (512/cpp);
+ *x %= 512/cpp;
+
+ return tile_rows * pitch * 8 + tiles * 4096;
+ } else {
+ unsigned int offset;
+
+ offset = *y * pitch + *x * cpp;
+ *y = 0;
+ *x = (offset & 4095) / cpp;
+ return offset & -4096;
+ }
}
static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
@@ -1850,7 +2041,7 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
struct intel_framebuffer *intel_fb;
struct drm_i915_gem_object *obj;
int plane = intel_crtc->plane;
- unsigned long Start, Offset;
+ unsigned long linear_offset;
u32 dspcntr;
u32 reg;
@@ -1870,22 +2061,35 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
dspcntr = I915_READ(reg);
/* Mask out pixel format bits in case we change it */
dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
- switch (fb->bits_per_pixel) {
- case 8:
+ switch (fb->pixel_format) {
+ case DRM_FORMAT_C8:
dspcntr |= DISPPLANE_8BPP;
break;
- case 16:
- if (fb->depth == 15)
- dspcntr |= DISPPLANE_BGRX555;
- else
- dspcntr |= DISPPLANE_BGRX565;
+ case DRM_FORMAT_XRGB1555:
+ case DRM_FORMAT_ARGB1555:
+ dspcntr |= DISPPLANE_BGRX555;
break;
- case 24:
- case 32:
+ case DRM_FORMAT_RGB565:
+ dspcntr |= DISPPLANE_BGRX565;
+ break;
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_ARGB8888:
dspcntr |= DISPPLANE_BGRX888;
break;
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_ABGR8888:
+ dspcntr |= DISPPLANE_RGBX888;
+ break;
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_ARGB2101010:
+ dspcntr |= DISPPLANE_BGRX101010;
+ break;
+ case DRM_FORMAT_XBGR2101010:
+ case DRM_FORMAT_ABGR2101010:
+ dspcntr |= DISPPLANE_RGBX101010;
+ break;
default:
- DRM_ERROR("Unknown color depth %d\n", fb->bits_per_pixel);
+ DRM_ERROR("Unknown pixel format 0x%08x\n", fb->pixel_format);
return -EINVAL;
}
@@ -1898,18 +2102,28 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
I915_WRITE(reg, dspcntr);
- Start = obj->gtt_offset;
- Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+ linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ intel_crtc->dspaddr_offset =
+ intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
+ fb->bits_per_pixel / 8,
+ fb->pitches[0]);
+ linear_offset -= intel_crtc->dspaddr_offset;
+ } else {
+ intel_crtc->dspaddr_offset = linear_offset;
+ }
- DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
- Start, Offset, x, y, fb->pitches[0]);
+ DRM_DEBUG_KMS("Writing base %08X %08lX %d %d %d\n",
+ obj->gtt_offset, linear_offset, x, y, fb->pitches[0]);
I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
if (INTEL_INFO(dev)->gen >= 4) {
- I915_MODIFY_DISPBASE(DSPSURF(plane), Start);
+ I915_MODIFY_DISPBASE(DSPSURF(plane),
+ obj->gtt_offset + intel_crtc->dspaddr_offset);
I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
- I915_WRITE(DSPADDR(plane), Offset);
+ I915_WRITE(DSPLINOFF(plane), linear_offset);
} else
- I915_WRITE(DSPADDR(plane), Start + Offset);
+ I915_WRITE(DSPADDR(plane), obj->gtt_offset + linear_offset);
POSTING_READ(reg);
return 0;
@@ -1924,7 +2138,7 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
struct intel_framebuffer *intel_fb;
struct drm_i915_gem_object *obj;
int plane = intel_crtc->plane;
- unsigned long Start, Offset;
+ unsigned long linear_offset;
u32 dspcntr;
u32 reg;
@@ -1945,32 +2159,31 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
dspcntr = I915_READ(reg);
/* Mask out pixel format bits in case we change it */
dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
- switch (fb->bits_per_pixel) {
- case 8:
+ switch (fb->pixel_format) {
+ case DRM_FORMAT_C8:
dspcntr |= DISPPLANE_8BPP;
break;
- case 16:
- if (fb->depth != 16) {
- DRM_ERROR("bpp 16, depth %d\n", fb->depth);
- return -EINVAL;
- }
-
+ case DRM_FORMAT_RGB565:
dspcntr |= DISPPLANE_BGRX565;
break;
- case 24:
- case 32:
- if (fb->depth == 24)
- dspcntr |= DISPPLANE_BGRX888;
- else if (fb->depth == 30)
- dspcntr |= DISPPLANE_BGRX101010;
- else {
- DRM_ERROR("bpp %d depth %d\n", fb->bits_per_pixel,
- fb->depth);
- return -EINVAL;
- }
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_ARGB8888:
+ dspcntr |= DISPPLANE_BGRX888;
+ break;
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_ABGR8888:
+ dspcntr |= DISPPLANE_RGBX888;
+ break;
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_ARGB2101010:
+ dspcntr |= DISPPLANE_BGRX101010;
+ break;
+ case DRM_FORMAT_XBGR2101010:
+ case DRM_FORMAT_ABGR2101010:
+ dspcntr |= DISPPLANE_RGBX101010;
break;
default:
- DRM_ERROR("Unknown color depth %d\n", fb->bits_per_pixel);
+ DRM_ERROR("Unknown pixel format 0x%08x\n", fb->pixel_format);
return -EINVAL;
}
@@ -1984,15 +2197,24 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
I915_WRITE(reg, dspcntr);
- Start = obj->gtt_offset;
- Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+ linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+ intel_crtc->dspaddr_offset =
+ intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
+ fb->bits_per_pixel / 8,
+ fb->pitches[0]);
+ linear_offset -= intel_crtc->dspaddr_offset;
- DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
- Start, Offset, x, y, fb->pitches[0]);
+ DRM_DEBUG_KMS("Writing base %08X %08lX %d %d %d\n",
+ obj->gtt_offset, linear_offset, x, y, fb->pitches[0]);
I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
- I915_MODIFY_DISPBASE(DSPSURF(plane), Start);
- I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
- I915_WRITE(DSPADDR(plane), Offset);
+ I915_MODIFY_DISPBASE(DSPSURF(plane),
+ obj->gtt_offset + intel_crtc->dspaddr_offset);
+ if (IS_HASWELL(dev)) {
+ I915_WRITE(DSPOFFSET(plane), (y << 16) | x);
+ } else {
+ I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
+ I915_WRITE(DSPLINOFF(plane), linear_offset);
+ }
POSTING_READ(reg);
return 0;
@@ -2018,14 +2240,14 @@ intel_finish_fb(struct drm_framebuffer *old_fb)
{
struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
struct drm_device *dev = obj->base.dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
bool was_interruptible = dev_priv->mm.interruptible;
int ret;
mtx_lock(&dev->event_lock);
- while (!atomic_load_acq_int(&dev_priv->mm.wedged) &&
- atomic_load_acq_int(&obj->pending_flip) != 0) {
- msleep(&obj->pending_flip, &dev->event_lock,
+ while (!(atomic_read(&dev_priv->mm.wedged) ||
+ atomic_read(&obj->pending_flip) == 0)) {
+ msleep(&dev_priv->pending_flip_queue, &dev->event_lock,
0, "915flp", 0);
}
mtx_unlock(&dev->event_lock);
@@ -2045,18 +2267,45 @@ intel_finish_fb(struct drm_framebuffer *old_fb)
return ret;
}
+static void intel_crtc_update_sarea_pos(struct drm_crtc *crtc, int x, int y)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_master_private *master_priv;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ if (!dev->primary->master)
+ return;
+
+ master_priv = dev->primary->master->driver_priv;
+ if (!master_priv->sarea_priv)
+ return;
+
+ switch (intel_crtc->pipe) {
+ case 0:
+ master_priv->sarea_priv->pipeA_x = x;
+ master_priv->sarea_priv->pipeA_y = y;
+ break;
+ case 1:
+ master_priv->sarea_priv->pipeB_x = x;
+ master_priv->sarea_priv->pipeB_y = y;
+ break;
+ default:
+ break;
+ }
+}
+
static int
intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
- struct drm_framebuffer *old_fb)
+ struct drm_framebuffer *fb)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_i915_master_private *master_priv;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_framebuffer *old_fb;
int ret;
/* no fb bound */
- if (!crtc->fb) {
+ if (!fb) {
DRM_ERROR("No FB bound\n");
return 0;
}
@@ -2070,7 +2319,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
DRM_LOCK(dev);
ret = intel_pin_and_fence_fb_obj(dev,
- to_intel_framebuffer(crtc->fb)->obj,
+ to_intel_framebuffer(fb)->obj,
NULL);
if (ret != 0) {
DRM_UNLOCK(dev);
@@ -2078,17 +2327,22 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
return ret;
}
- if (old_fb)
- intel_finish_fb(old_fb);
+ if (crtc->fb)
+ intel_finish_fb(crtc->fb);
- ret = dev_priv->display.update_plane(crtc, crtc->fb, x, y);
+ ret = dev_priv->display.update_plane(crtc, fb, x, y);
if (ret) {
- intel_unpin_fb_obj(to_intel_framebuffer(crtc->fb)->obj);
+ intel_unpin_fb_obj(to_intel_framebuffer(fb)->obj);
DRM_UNLOCK(dev);
DRM_ERROR("failed to update base address\n");
return ret;
}
+ old_fb = crtc->fb;
+ crtc->fb = fb;
+ crtc->x = x;
+ crtc->y = y;
+
if (old_fb) {
intel_wait_for_vblank(dev, intel_crtc->pipe);
intel_unpin_fb_obj(to_intel_framebuffer(old_fb)->obj);
@@ -2097,20 +2351,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
intel_update_fbc(dev);
DRM_UNLOCK(dev);
- if (!dev->primary->master)
- return 0;
-
- master_priv = dev->primary->master->driver_priv;
- if (!master_priv->sarea_priv)
- return 0;
-
- if (intel_crtc->pipe) {
- master_priv->sarea_priv->pipeB_x = x;
- master_priv->sarea_priv->pipeB_y = y;
- } else {
- master_priv->sarea_priv->pipeA_x = x;
- master_priv->sarea_priv->pipeA_y = y;
- }
+ intel_crtc_update_sarea_pos(crtc, x, y);
return 0;
}
@@ -2149,7 +2390,7 @@ static void ironlake_set_pll_edp(struct drm_crtc *crtc, int clock)
I915_WRITE(DP_A, dpa_ctl);
POSTING_READ(DP_A);
- DELAY(500);
+ udelay(500);
}
static void intel_fdi_normal_train(struct drm_crtc *crtc)
@@ -2185,7 +2426,7 @@ static void intel_fdi_normal_train(struct drm_crtc *crtc)
/* wait one idle pattern time */
POSTING_READ(reg);
- DELAY(1000);
+ udelay(1000);
/* IVB wants error correction enabled */
if (IS_IVYBRIDGE(dev))
@@ -2193,16 +2434,27 @@ static void intel_fdi_normal_train(struct drm_crtc *crtc)
FDI_FE_ERRC_ENABLE);
}
-static void cpt_phase_pointer_enable(struct drm_device *dev, int pipe)
+static void ivb_modeset_global_resources(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- u32 flags = I915_READ(SOUTH_CHICKEN1);
+ struct intel_crtc *pipe_B_crtc =
+ to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_B]);
+ struct intel_crtc *pipe_C_crtc =
+ to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_C]);
+ uint32_t temp;
- flags |= FDI_PHASE_SYNC_OVR(pipe);
- I915_WRITE(SOUTH_CHICKEN1, flags); /* once to unlock... */
- flags |= FDI_PHASE_SYNC_EN(pipe);
- I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to enable */
- POSTING_READ(SOUTH_CHICKEN1);
+ /* When everything is off disable fdi C so that we could enable fdi B
+ * with all lanes. XXX: This misses the case where a pipe is not using
+ * any pch resources and so doesn't need any fdi lanes. */
+ if (!pipe_B_crtc->base.enabled && !pipe_C_crtc->base.enabled) {
+ WARN_ON(I915_READ(FDI_RX_CTL(PIPE_B)) & FDI_RX_ENABLE);
+ WARN_ON(I915_READ(FDI_RX_CTL(PIPE_C)) & FDI_RX_ENABLE);
+
+ temp = I915_READ(SOUTH_CHICKEN1);
+ temp &= ~FDI_BC_BIFURCATION_SELECT;
+ DRM_DEBUG_KMS("disabling fdi C rx\n");
+ I915_WRITE(SOUTH_CHICKEN1, temp);
+ }
}
/* The FDI link training functions for ILK/Ibexpeak. */
@@ -2227,7 +2479,7 @@ static void ironlake_fdi_link_train(struct drm_crtc *crtc)
temp &= ~FDI_RX_BIT_LOCK;
I915_WRITE(reg, temp);
I915_READ(reg);
- DELAY(150);
+ udelay(150);
/* enable CPU FDI TX and PCH FDI RX */
reg = FDI_TX_CTL(pipe);
@@ -2245,14 +2497,12 @@ static void ironlake_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp | FDI_RX_ENABLE);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
/* Ironlake workaround, enable clock pointer after FDI enable*/
- if (HAS_PCH_IBX(dev)) {
- I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
- I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR |
- FDI_RX_PHASE_SYNC_POINTER_EN);
- }
+ I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
+ I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR |
+ FDI_RX_PHASE_SYNC_POINTER_EN);
reg = FDI_RX_IIR(pipe);
for (tries = 0; tries < 5; tries++) {
@@ -2282,7 +2532,7 @@ static void ironlake_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
reg = FDI_RX_IIR(pipe);
for (tries = 0; tries < 5; tries++) {
@@ -2327,7 +2577,7 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
/* enable CPU FDI TX and PCH FDI RX */
reg = FDI_TX_CTL(pipe);
@@ -2341,6 +2591,9 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
I915_WRITE(reg, temp | FDI_TX_ENABLE);
+ I915_WRITE(FDI_RX_MISC(pipe),
+ FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
+
reg = FDI_RX_CTL(pipe);
temp = I915_READ(reg);
if (HAS_PCH_CPT(dev)) {
@@ -2353,10 +2606,7 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp | FDI_RX_ENABLE);
POSTING_READ(reg);
- DELAY(150);
-
- if (HAS_PCH_CPT(dev))
- cpt_phase_pointer_enable(dev, pipe);
+ udelay(150);
for (i = 0; i < 4; i++) {
reg = FDI_TX_CTL(pipe);
@@ -2366,19 +2616,18 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(500);
+ udelay(500);
for (retry = 0; retry < 5; retry++) {
reg = FDI_RX_IIR(pipe);
temp = I915_READ(reg);
DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
-
if (temp & FDI_RX_BIT_LOCK) {
I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
DRM_DEBUG_KMS("FDI train 1 done.\n");
break;
}
- DELAY(50);
+ udelay(50);
}
if (retry < 5)
break;
@@ -2410,7 +2659,7 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
for (i = 0; i < 4; i++) {
reg = FDI_TX_CTL(pipe);
@@ -2420,19 +2669,18 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(500);
+ udelay(500);
for (retry = 0; retry < 5; retry++) {
reg = FDI_RX_IIR(pipe);
temp = I915_READ(reg);
DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
-
if (temp & FDI_RX_SYMBOL_LOCK) {
I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
DRM_DEBUG_KMS("FDI train 2 done.\n");
break;
}
- DELAY(50);
+ udelay(50);
}
if (retry < 5)
break;
@@ -2461,7 +2709,10 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
+
+ DRM_DEBUG_KMS("FDI_RX_IIR before link train 0x%x\n",
+ I915_READ(FDI_RX_IIR(pipe)));
/* enable CPU FDI TX and PCH FDI RX */
reg = FDI_TX_CTL(pipe);
@@ -2475,6 +2726,9 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
temp |= FDI_COMPOSITE_SYNC;
I915_WRITE(reg, temp | FDI_TX_ENABLE);
+ I915_WRITE(FDI_RX_MISC(pipe),
+ FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
+
reg = FDI_RX_CTL(pipe);
temp = I915_READ(reg);
temp &= ~FDI_LINK_TRAIN_AUTO;
@@ -2484,7 +2738,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp | FDI_RX_ENABLE);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
for (i = 0; i < 4; i++) {
reg = FDI_TX_CTL(pipe);
@@ -2494,7 +2748,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(500);
+ udelay(500);
reg = FDI_RX_IIR(pipe);
temp = I915_READ(reg);
@@ -2503,7 +2757,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
if (temp & FDI_RX_BIT_LOCK ||
(I915_READ(reg) & FDI_RX_BIT_LOCK)) {
I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
- DRM_DEBUG_KMS("FDI train 1 done.\n");
+ DRM_DEBUG_KMS("FDI train 1 done, level %i.\n", i);
break;
}
}
@@ -2526,7 +2780,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(150);
+ udelay(150);
for (i = 0; i < 4; i++) {
reg = FDI_TX_CTL(pipe);
@@ -2536,7 +2790,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(500);
+ udelay(500);
reg = FDI_RX_IIR(pipe);
temp = I915_READ(reg);
@@ -2544,7 +2798,7 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
if (temp & FDI_RX_SYMBOL_LOCK) {
I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
- DRM_DEBUG_KMS("FDI train 2 done.\n");
+ DRM_DEBUG_KMS("FDI train 2 done, level %i.\n", i);
break;
}
}
@@ -2554,17 +2808,13 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
DRM_DEBUG_KMS("FDI train done.\n");
}
-static void ironlake_fdi_pll_enable(struct drm_crtc *crtc)
+static void ironlake_fdi_pll_enable(struct intel_crtc *intel_crtc)
{
- struct drm_device *dev = crtc->dev;
+ struct drm_device *dev = intel_crtc->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe;
u32 reg, temp;
- /* Write the TU size bits so error detection works */
- I915_WRITE(FDI_RX_TUSIZE1(pipe),
- I915_READ(PIPE_DATA_M1(pipe)) & TU_SIZE_MASK);
/* enable PCH FDI RX PLL, wait warmup plus DMI latency */
reg = FDI_RX_CTL(pipe);
@@ -2575,14 +2825,14 @@ static void ironlake_fdi_pll_enable(struct drm_crtc *crtc)
I915_WRITE(reg, temp | FDI_RX_PLL_ENABLE);
POSTING_READ(reg);
- DELAY(200);
+ udelay(200);
/* Switch from Rawclk to PCDclk */
temp = I915_READ(reg);
I915_WRITE(reg, temp | FDI_PCDCLK);
POSTING_READ(reg);
- DELAY(200);
+ udelay(200);
/* On Haswell, the PLL configuration for ports and pipes is handled
* separately, as part of DDI setup */
@@ -2594,21 +2844,38 @@ static void ironlake_fdi_pll_enable(struct drm_crtc *crtc)
I915_WRITE(reg, temp | FDI_TX_PLL_ENABLE);
POSTING_READ(reg);
- DELAY(100);
+ udelay(100);
}
- }
+ }
}
-static void cpt_phase_pointer_disable(struct drm_device *dev, int pipe)
+static void ironlake_fdi_pll_disable(struct intel_crtc *intel_crtc)
{
+ struct drm_device *dev = intel_crtc->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- u32 flags = I915_READ(SOUTH_CHICKEN1);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp;
- flags &= ~(FDI_PHASE_SYNC_EN(pipe));
- I915_WRITE(SOUTH_CHICKEN1, flags); /* once to disable... */
- flags &= ~(FDI_PHASE_SYNC_OVR(pipe));
- I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to lock */
- POSTING_READ(SOUTH_CHICKEN1);
+ /* Switch from PCDclk to Rawclk */
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_PCDCLK);
+
+ /* Disable CPU FDI TX PLL */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_TX_PLL_ENABLE);
+
+ POSTING_READ(reg);
+ udelay(100);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_RX_PLL_ENABLE);
+
+ /* Wait for the clocks to turn off. */
+ POSTING_READ(reg);
+ udelay(100);
}
static void ironlake_fdi_disable(struct drm_crtc *crtc)
@@ -2632,16 +2899,11 @@ static void ironlake_fdi_disable(struct drm_crtc *crtc)
I915_WRITE(reg, temp & ~FDI_RX_ENABLE);
POSTING_READ(reg);
- DELAY(100);
+ udelay(100);
/* Ironlake workaround, disable clock pointer after downing FDI */
if (HAS_PCH_IBX(dev)) {
I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
- I915_WRITE(FDI_RX_CHICKEN(pipe),
- I915_READ(FDI_RX_CHICKEN(pipe) &
- ~FDI_RX_PHASE_SYNC_POINTER_EN));
- } else if (HAS_PCH_CPT(dev)) {
- cpt_phase_pointer_disable(dev, pipe);
}
/* still set train pattern 1 */
@@ -2666,55 +2928,60 @@ static void ironlake_fdi_disable(struct drm_crtc *crtc)
I915_WRITE(reg, temp);
POSTING_READ(reg);
- DELAY(100);
+ udelay(100);
+}
+
+static bool intel_crtc_has_pending_flip(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool pending;
+
+ if (atomic_read(&dev_priv->mm.wedged))
+ return false;
+
+ /*
+ * NOTE Linux<->FreeBSD dev->event_lock is already locked in
+ * intel_crtc_wait_for_pending_flips().
+ */
+ pending = to_intel_crtc(crtc)->unpin_work != NULL;
+
+ return pending;
}
static void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
if (crtc->fb == NULL)
return;
+ mtx_lock(&dev->event_lock);
+ while (intel_crtc_has_pending_flip(crtc)) {
+ msleep(&dev_priv->pending_flip_queue, &dev->event_lock,
+ 0, "915flp", 0);
+ }
+ mtx_unlock(&dev->event_lock);
+
DRM_LOCK(dev);
intel_finish_fb(crtc->fb);
DRM_UNLOCK(dev);
}
-static bool intel_crtc_driving_pch(struct drm_crtc *crtc)
+static bool ironlake_crtc_driving_pch(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct intel_encoder *encoder;
+ struct intel_encoder *intel_encoder;
/*
* If there's a non-PCH eDP on this crtc, it must be DP_A, and that
* must be driven by its own crtc; no sharing is possible.
*/
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
- if (encoder->base.crtc != crtc)
- continue;
-
- /* On Haswell, LPT PCH handles the VGA connection via FDI, and Haswell
- * CPU handles all others */
- if (IS_HASWELL(dev)) {
- /* It is still unclear how this will work on PPT, so throw up a warning */
- if (!HAS_PCH_LPT(dev))
- DRM_DEBUG_KMS("Haswell: PPT\n");
-
- if (encoder->type == DRM_MODE_ENCODER_DAC) {
- DRM_DEBUG_KMS("Haswell detected DAC encoder, assuming is PCH\n");
- return true;
- } else {
- DRM_DEBUG_KMS("Haswell detected encoder %d, assuming is CPU\n",
- encoder->type);
- return false;
- }
- }
-
- switch (encoder->type) {
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ switch (intel_encoder->type) {
case INTEL_OUTPUT_EDP:
- if (!intel_encoder_is_pch_edp(&encoder->base))
+ if (!intel_encoder_is_pch_edp(&intel_encoder->base))
return false;
continue;
}
@@ -2723,6 +2990,11 @@ static bool intel_crtc_driving_pch(struct drm_crtc *crtc)
return true;
}
+static bool haswell_crtc_driving_pch(struct drm_crtc *crtc)
+{
+ return intel_pipe_has_type(crtc, INTEL_OUTPUT_ANALOG);
+}
+
/* Program iCLKIP clock to the desired frequency */
static void lpt_program_iclkip(struct drm_crtc *crtc)
{
@@ -2738,8 +3010,9 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
/* Disable SSCCTL */
intel_sbi_write(dev_priv, SBI_SSCCTL6,
- intel_sbi_read(dev_priv, SBI_SSCCTL6) |
- SBI_SSCCTL_DISABLE);
+ intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK) |
+ SBI_SSCCTL_DISABLE,
+ SBI_ICLK);
/* 20MHz is a corner case which is out of range for the 7-bit divisor */
if (crtc->mode.clock == 20000) {
@@ -2767,12 +3040,10 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
}
/* This should not happen with any sane values */
- if ((SBI_SSCDIVINTPHASE_DIVSEL(divsel) &
- ~SBI_SSCDIVINTPHASE_DIVSEL_MASK))
- DRM_DEBUG_KMS("DIVSEL_MASK");
- if ((SBI_SSCDIVINTPHASE_DIR(phasedir) &
- ~SBI_SSCDIVINTPHASE_INCVAL_MASK))
- DRM_DEBUG_KMS("INCVAL_MASK");
+ WARN_ON(SBI_SSCDIVINTPHASE_DIVSEL(divsel) &
+ ~SBI_SSCDIVINTPHASE_DIVSEL_MASK);
+ WARN_ON(SBI_SSCDIVINTPHASE_DIR(phasedir) &
+ ~SBI_SSCDIVINTPHASE_INCVAL_MASK);
DRM_DEBUG_KMS("iCLKIP clock: found settings for %dKHz refresh rate: auxdiv=%x, divsel=%x, phasedir=%x, phaseinc=%x\n",
crtc->mode.clock,
@@ -2782,29 +3053,28 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
phaseinc);
/* Program SSCDIVINTPHASE6 */
- temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6);
+ temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK);
temp &= ~SBI_SSCDIVINTPHASE_DIVSEL_MASK;
temp |= SBI_SSCDIVINTPHASE_DIVSEL(divsel);
temp &= ~SBI_SSCDIVINTPHASE_INCVAL_MASK;
temp |= SBI_SSCDIVINTPHASE_INCVAL(phaseinc);
temp |= SBI_SSCDIVINTPHASE_DIR(phasedir);
temp |= SBI_SSCDIVINTPHASE_PROPAGATE;
-
- intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp);
+ intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp, SBI_ICLK);
/* Program SSCAUXDIV */
- temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6);
+ temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK);
temp &= ~SBI_SSCAUXDIV_FINALDIV2SEL(1);
temp |= SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv);
- intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp);
+ intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp, SBI_ICLK);
/* Enable modulator and associated divider */
- temp = intel_sbi_read(dev_priv, SBI_SSCCTL6);
+ temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK);
temp &= ~SBI_SSCCTL_DISABLE;
- intel_sbi_write(dev_priv, SBI_SSCCTL6, temp);
+ intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK);
/* Wait for initialization time */
- DELAY(24);
+ udelay(24);
I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_UNGATE);
}
@@ -2827,15 +3097,24 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
assert_transcoder_disabled(dev_priv, pipe);
+ /* Write the TU size bits before fdi link training, so that error
+ * detection works. */
+ I915_WRITE(FDI_RX_TUSIZE1(pipe),
+ I915_READ(PIPE_DATA_M1(pipe)) & TU_SIZE_MASK);
+
/* For PCH output, training FDI link */
dev_priv->display.fdi_link_train(crtc);
- intel_enable_pch_pll(intel_crtc);
+ /* XXX: pch pll's can be enabled any time before we enable the PCH
+ * transcoder, and we actually should do this to not upset any PCH
+ * transcoder that already use the clock when we share it.
+ *
+ * Note that enable_pch_pll tries to do the right thing, but get_pch_pll
+ * unconditionally resets the pll - we need that to have the right LVDS
+ * enable sequence. */
+ ironlake_enable_pch_pll(intel_crtc);
- if (HAS_PCH_LPT(dev)) {
- DRM_DEBUG_KMS("LPT detected: programming iCLKIP\n");
- lpt_program_iclkip(crtc);
- } else if (HAS_PCH_CPT(dev)) {
+ if (HAS_PCH_CPT(dev)) {
u32 sel;
temp = I915_READ(PCH_DPLL_SEL);
@@ -2872,8 +3151,7 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
I915_WRITE(TRANS_VSYNC(pipe), I915_READ(VSYNC(pipe)));
I915_WRITE(TRANS_VSYNCSHIFT(pipe), I915_READ(VSYNCSHIFT(pipe)));
- if (!IS_HASWELL(dev))
- intel_fdi_normal_train(crtc);
+ intel_fdi_normal_train(crtc);
/* For PCH DP, enable TRANS_DP_CTL */
if (HAS_PCH_CPT(dev) &&
@@ -2905,15 +3183,37 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
temp |= TRANS_DP_PORT_SEL_D;
break;
default:
- DRM_DEBUG_KMS("Wrong PCH DP port return. Guess port B\n");
- temp |= TRANS_DP_PORT_SEL_B;
- break;
+ BUG();
}
I915_WRITE(reg, temp);
}
- intel_enable_transcoder(dev_priv, pipe);
+ ironlake_enable_pch_transcoder(dev_priv, pipe);
+}
+
+static void lpt_pch_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+
+ assert_transcoder_disabled(dev_priv, (enum pipe)TRANSCODER_A);
+
+ lpt_program_iclkip(crtc);
+
+ /* Set transcoder timing. */
+ I915_WRITE(_TRANS_HTOTAL_A, I915_READ(HTOTAL(cpu_transcoder)));
+ I915_WRITE(_TRANS_HBLANK_A, I915_READ(HBLANK(cpu_transcoder)));
+ I915_WRITE(_TRANS_HSYNC_A, I915_READ(HSYNC(cpu_transcoder)));
+
+ I915_WRITE(_TRANS_VTOTAL_A, I915_READ(VTOTAL(cpu_transcoder)));
+ I915_WRITE(_TRANS_VBLANK_A, I915_READ(VBLANK(cpu_transcoder)));
+ I915_WRITE(_TRANS_VSYNC_A, I915_READ(VSYNC(cpu_transcoder)));
+ I915_WRITE(_TRANS_VSYNCSHIFT_A, I915_READ(VSYNCSHIFT(cpu_transcoder)));
+
+ lpt_enable_pch_transcoder(dev_priv, cpu_transcoder);
}
static void intel_put_pch_pll(struct intel_crtc *intel_crtc)
@@ -2924,7 +3224,7 @@ static void intel_put_pch_pll(struct intel_crtc *intel_crtc)
return;
if (pll->refcount == 0) {
- printf("bad PCH PLL refcount\n");
+ WARN(1, "bad PCH PLL refcount\n");
return;
}
@@ -2974,7 +3274,7 @@ static struct intel_pch_pll *intel_get_pch_pll(struct intel_crtc *intel_crtc, u3
}
/* Ok no matching timings, maybe there's a free one? */
- for (i = 0; i < dev_priv->num_pch_pll; i++) { /* XXXKIB: HACK */
+ for (i = 0; i < dev_priv->num_pch_pll; i++) {
pll = &dev_priv->pch_plls[i];
if (pll->refcount == 0) {
DRM_DEBUG_KMS("CRTC:%d allocated PCH PLL %x\n",
@@ -2995,7 +3295,7 @@ prepare: /* separate function? */
/* Wait for the clocks to stabilize before rewriting the regs */
I915_WRITE(pll->pll_reg, dpll & ~DPLL_VCO_ENABLE);
POSTING_READ(pll->pll_reg);
- DELAY(150);
+ udelay(150);
I915_WRITE(pll->fp0_reg, fp);
I915_WRITE(pll->pll_reg, dpll & ~DPLL_VCO_ENABLE);
@@ -3006,18 +3306,13 @@ prepare: /* separate function? */
void intel_cpt_verify_modeset(struct drm_device *dev, int pipe)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- int dslreg = PIPEDSL(pipe), tc2reg = TRANS_CHICKEN2(pipe);
+ int dslreg = PIPEDSL(pipe);
u32 temp;
temp = I915_READ(dslreg);
- DELAY(500);
- if (_intel_wait_for(dev, I915_READ(dslreg) != temp, 5, 1, "915cp1")) {
- /* Without this, mode sets may fail silently on FDI */
- I915_WRITE(tc2reg, TRANS_AUTOTRAIN_GEN_STALL_DIS);
- DELAY(250);
- I915_WRITE(tc2reg, 0);
- if (_intel_wait_for(dev, I915_READ(dslreg) != temp, 5, 1,
- "915cp2"))
+ udelay(500);
+ if (wait_for(I915_READ(dslreg) != temp, 5)) {
+ if (wait_for(I915_READ(dslreg) != temp, 5))
DRM_ERROR("mode set failed: pipe %d stuck\n", pipe);
}
}
@@ -3027,11 +3322,14 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
u32 temp;
bool is_pch_port;
+ WARN_ON(!crtc->enabled);
+
if (intel_crtc->active)
return;
@@ -3044,39 +3342,149 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
I915_WRITE(PCH_LVDS, temp | LVDS_PORT_EN);
}
- is_pch_port = intel_crtc_driving_pch(crtc);
+ is_pch_port = ironlake_crtc_driving_pch(crtc);
if (is_pch_port) {
- ironlake_fdi_pll_enable(crtc);
+ /* Note: FDI PLL enabling _must_ be done before we enable the
+ * cpu pipes, hence this is separate from all the other fdi/pch
+ * enabling. */
+ ironlake_fdi_pll_enable(intel_crtc);
} else {
- ironlake_fdi_disable(crtc);
+ assert_fdi_tx_disabled(dev_priv, pipe);
+ assert_fdi_rx_disabled(dev_priv, pipe);
}
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ if (encoder->pre_enable)
+ encoder->pre_enable(encoder);
+
/* Enable panel fitting for LVDS */
if (dev_priv->pch_pf_size &&
- (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) || HAS_eDP)) {
+ (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) ||
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))) {
/* Force use of hard-coded filter coefficients
* as some pre-programmed values are broken,
* e.g. x201.
*/
- I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
+ if (IS_IVYBRIDGE(dev))
+ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 |
+ PF_PIPE_SEL_IVB(pipe));
+ else
+ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
I915_WRITE(PF_WIN_POS(pipe), dev_priv->pch_pf_pos);
I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size);
}
+ /*
+ * On ILK+ LUT must be loaded before the pipe is running but with
+ * clocks enabled
+ */
+ intel_crtc_load_lut(crtc);
+
intel_enable_pipe(dev_priv, pipe, is_pch_port);
intel_enable_plane(dev_priv, plane, pipe);
if (is_pch_port)
ironlake_pch_enable(crtc);
+ DRM_LOCK(dev);
+ intel_update_fbc(dev);
+ DRM_UNLOCK(dev);
+
+ intel_crtc_update_cursor(crtc, true);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->enable(encoder);
+
+ if (HAS_PCH_CPT(dev))
+ intel_cpt_verify_modeset(dev, intel_crtc->pipe);
+
+ /*
+ * There seems to be a race in PCH platform hw (at least on some
+ * outputs) where an enabled pipe still completes any pageflip right
+ * away (as if the pipe is off) instead of waiting for vblank. As soon
+ * as the first vblank happend, everything works as expected. Hence just
+ * wait for one vblank before returning to avoid strange things
+ * happening.
+ */
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+}
+
+static void haswell_crtc_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ bool is_pch_port;
+
+ WARN_ON(!crtc->enabled);
+
+ if (intel_crtc->active)
+ return;
+
+ intel_crtc->active = true;
+ intel_update_watermarks(dev);
+
+ is_pch_port = haswell_crtc_driving_pch(crtc);
+
+ if (is_pch_port)
+ dev_priv->display.fdi_link_train(crtc);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ if (encoder->pre_enable)
+ encoder->pre_enable(encoder);
+
+ intel_ddi_enable_pipe_clock(intel_crtc);
+
+ /* Enable panel fitting for eDP */
+ if (dev_priv->pch_pf_size &&
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP)) {
+ /* Force use of hard-coded filter coefficients
+ * as some pre-programmed values are broken,
+ * e.g. x201.
+ */
+ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 |
+ PF_PIPE_SEL_IVB(pipe));
+ I915_WRITE(PF_WIN_POS(pipe), dev_priv->pch_pf_pos);
+ I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size);
+ }
+
+ /*
+ * On ILK+ LUT must be loaded before the pipe is running but with
+ * clocks enabled
+ */
intel_crtc_load_lut(crtc);
+ intel_ddi_set_pipe_settings(crtc);
+ intel_ddi_enable_pipe_func(crtc);
+
+ intel_enable_pipe(dev_priv, pipe, is_pch_port);
+ intel_enable_plane(dev_priv, plane, pipe);
+
+ if (is_pch_port)
+ lpt_pch_enable(crtc);
+
DRM_LOCK(dev);
intel_update_fbc(dev);
DRM_UNLOCK(dev);
intel_crtc_update_cursor(crtc, true);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->enable(encoder);
+
+ /*
+ * There seems to be a race in PCH platform hw (at least on some
+ * outputs) where an enabled pipe still completes any pageflip right
+ * away (as if the pipe is off) instead of waiting for vblank. As soon
+ * as the first vblank happend, everything works as expected. Hence just
+ * wait for one vblank before returning to avoid strange things
+ * happening.
+ */
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
}
static void ironlake_crtc_disable(struct drm_crtc *crtc)
@@ -3084,13 +3492,18 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
u32 reg, temp;
+
if (!intel_crtc->active)
return;
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->disable(encoder);
+
intel_crtc_wait_for_pending_flips(crtc);
drm_vblank_off(dev, pipe);
intel_crtc_update_cursor(crtc, false);
@@ -3106,16 +3519,13 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
I915_WRITE(PF_CTL(pipe), 0);
I915_WRITE(PF_WIN_SZ(pipe), 0);
- ironlake_fdi_disable(crtc);
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ if (encoder->post_disable)
+ encoder->post_disable(encoder);
- /* This is a horrible layering violation; we should be doing this in
- * the connector/encoder ->prepare instead, but we don't always have
- * enough information there about the config to know whether it will
- * actually be necessary or just cause undesired flicker.
- */
- intel_disable_pch_ports(dev_priv, pipe);
+ ironlake_fdi_disable(crtc);
- intel_disable_transcoder(dev_priv, pipe);
+ ironlake_disable_pch_transcoder(dev_priv, pipe);
if (HAS_PCH_CPT(dev)) {
/* disable TRANS_DP_CTL */
@@ -3139,7 +3549,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
temp &= ~(TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL);
break;
default:
- KASSERT(1, ("Wrong pipe %d", pipe)); /* wtf */
+ BUG(); /* wtf */
}
I915_WRITE(PCH_DPLL_SEL, temp);
}
@@ -3147,26 +3557,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
/* disable PCH DPLL */
intel_disable_pch_pll(intel_crtc);
- /* Switch from PCDclk to Rawclk */
- reg = FDI_RX_CTL(pipe);
- temp = I915_READ(reg);
- I915_WRITE(reg, temp & ~FDI_PCDCLK);
-
- /* Disable CPU FDI TX PLL */
- reg = FDI_TX_CTL(pipe);
- temp = I915_READ(reg);
- I915_WRITE(reg, temp & ~FDI_TX_PLL_ENABLE);
-
- POSTING_READ(reg);
- DELAY(100);
-
- reg = FDI_RX_CTL(pipe);
- temp = I915_READ(reg);
- I915_WRITE(reg, temp & ~FDI_RX_PLL_ENABLE);
-
- /* Wait for the clocks to turn off. */
- POSTING_READ(reg);
- DELAY(100);
+ ironlake_fdi_pll_disable(intel_crtc);
intel_crtc->active = false;
intel_update_watermarks(dev);
@@ -3176,28 +3567,59 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
DRM_UNLOCK(dev);
}
-static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode)
+static void haswell_crtc_disable(struct drm_crtc *crtc)
{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ bool is_pch_port;
- /* XXX: When our outputs are all unaware of DPMS modes other than off
- * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC.
- */
- switch (mode) {
- case DRM_MODE_DPMS_ON:
- case DRM_MODE_DPMS_STANDBY:
- case DRM_MODE_DPMS_SUSPEND:
- DRM_DEBUG_KMS("crtc %d/%d dpms on\n", pipe, plane);
- ironlake_crtc_enable(crtc);
- break;
+ if (!intel_crtc->active)
+ return;
- case DRM_MODE_DPMS_OFF:
- DRM_DEBUG_KMS("crtc %d/%d dpms off\n", pipe, plane);
- ironlake_crtc_disable(crtc);
- break;
+ is_pch_port = haswell_crtc_driving_pch(crtc);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->disable(encoder);
+
+ intel_crtc_wait_for_pending_flips(crtc);
+ drm_vblank_off(dev, pipe);
+ intel_crtc_update_cursor(crtc, false);
+
+ intel_disable_plane(dev_priv, plane, pipe);
+
+ if (dev_priv->cfb_plane == plane)
+ intel_disable_fbc(dev);
+
+ intel_disable_pipe(dev_priv, pipe);
+
+ intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder);
+
+ /* Disable PF */
+ I915_WRITE(PF_CTL(pipe), 0);
+ I915_WRITE(PF_WIN_SZ(pipe), 0);
+
+ intel_ddi_disable_pipe_clock(intel_crtc);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ if (encoder->post_disable)
+ encoder->post_disable(encoder);
+
+ if (is_pch_port) {
+ lpt_disable_pch_transcoder(dev_priv);
+ intel_ddi_fdi_disable(crtc);
}
+
+ intel_crtc->active = false;
+ intel_update_watermarks(dev);
+
+ DRM_LOCK(dev);
+ intel_update_fbc(dev);
+ DRM_UNLOCK(dev);
}
static void ironlake_crtc_off(struct drm_crtc *crtc)
@@ -3206,6 +3628,17 @@ static void ironlake_crtc_off(struct drm_crtc *crtc)
intel_put_pch_pll(intel_crtc);
}
+static void haswell_crtc_off(struct drm_crtc *crtc)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ /* Stop saying we're using TRANSCODER_EDP because some other CRTC might
+ * start using it. */
+ intel_crtc->cpu_transcoder = (enum transcoder)intel_crtc->pipe;
+
+ intel_ddi_put_crtc_pll(crtc);
+}
+
static void intel_crtc_dpms_overlay(struct intel_crtc *intel_crtc, bool enable)
{
if (!enable && intel_crtc->overlay) {
@@ -3229,9 +3662,12 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
+ WARN_ON(!crtc->enabled);
+
if (intel_crtc->active)
return;
@@ -3248,6 +3684,9 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
/* Give the overlay scaler a chance to enable if it's on this pipe */
intel_crtc_dpms_overlay(intel_crtc, true);
intel_crtc_update_cursor(crtc, true);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->enable(encoder);
}
static void i9xx_crtc_disable(struct drm_crtc *crtc)
@@ -3255,12 +3694,18 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
+ u32 pctl;
+
if (!intel_crtc->active)
return;
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->disable(encoder);
+
/* Give the overlay scaler a chance to disable if it's on this pipe */
intel_crtc_wait_for_pending_flips(crtc);
drm_vblank_off(dev, pipe);
@@ -3272,6 +3717,13 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
intel_disable_plane(dev_priv, plane, pipe);
intel_disable_pipe(dev_priv, pipe);
+
+ /* Disable pannel fitter if it is on this pipe. */
+ pctl = I915_READ(PFIT_CONTROL);
+ if ((pctl & PFIT_ENABLE) &&
+ ((pctl & PFIT_PIPE_MASK) >> PFIT_PIPE_SHIFT) == pipe)
+ I915_WRITE(PFIT_CONTROL, 0);
+
intel_disable_pll(dev_priv, pipe);
intel_crtc->active = false;
@@ -3279,45 +3731,17 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
intel_update_watermarks(dev);
}
-static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode)
-{
- /* XXX: When our outputs are all unaware of DPMS modes other than off
- * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC.
- */
- switch (mode) {
- case DRM_MODE_DPMS_ON:
- case DRM_MODE_DPMS_STANDBY:
- case DRM_MODE_DPMS_SUSPEND:
- i9xx_crtc_enable(crtc);
- break;
- case DRM_MODE_DPMS_OFF:
- i9xx_crtc_disable(crtc);
- break;
- }
-}
-
static void i9xx_crtc_off(struct drm_crtc *crtc)
{
}
-/**
- * Sets the power management mode of the pipe and plane.
- */
-static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
+static void intel_crtc_update_sarea(struct drm_crtc *crtc,
+ bool enabled)
{
struct drm_device *dev = crtc->dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_master_private *master_priv;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe;
- bool enabled;
-
- if (intel_crtc->dpms_mode == mode)
- return;
-
- intel_crtc->dpms_mode = mode;
-
- dev_priv->display.dpms(crtc, mode);
if (!dev->primary->master)
return;
@@ -3326,8 +3750,6 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
if (!master_priv->sarea_priv)
return;
- enabled = crtc->enabled && mode != DRM_MODE_DPMS_OFF;
-
switch (pipe) {
case 0:
master_priv->sarea_priv->pipeA_w = enabled ? crtc->mode.hdisplay : 0;
@@ -3343,13 +3765,42 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
}
}
+/**
+ * Sets the power management mode of the pipe and plane.
+ */
+void intel_crtc_update_dpms(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ bool enable = false;
+
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder)
+ enable |= intel_encoder->connectors_active;
+
+ if (enable)
+ dev_priv->display.crtc_enable(crtc);
+ else
+ dev_priv->display.crtc_disable(crtc);
+
+ intel_crtc_update_sarea(crtc, enable);
+}
+
+static void intel_crtc_noop(struct drm_crtc *crtc)
+{
+}
+
static void intel_crtc_disable(struct drm_crtc *crtc)
{
- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
struct drm_device *dev = crtc->dev;
+ struct drm_connector *connector;
struct drm_i915_private *dev_priv = dev->dev_private;
- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+ /* crtc should still be enabled when we disable it. */
+ WARN_ON(!crtc->enabled);
+
+ dev_priv->display.crtc_disable(crtc);
+ intel_crtc_update_sarea(crtc, false);
dev_priv->display.off(crtc);
assert_plane_disabled(dev->dev_private, to_intel_crtc(crtc)->plane);
@@ -3359,63 +3810,128 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
DRM_LOCK(dev);
intel_unpin_fb_obj(to_intel_framebuffer(crtc->fb)->obj);
DRM_UNLOCK(dev);
+ crtc->fb = NULL;
+ }
+
+ /* Update computed state. */
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder || !connector->encoder->crtc)
+ continue;
+
+ if (connector->encoder->crtc != crtc)
+ continue;
+
+ connector->dpms = DRM_MODE_DPMS_OFF;
+ to_intel_encoder(connector->encoder)->connectors_active = false;
}
}
-/* Prepare for a mode set.
- *
- * Note we could be a lot smarter here. We need to figure out which outputs
- * will be enabled, which disabled (in short, how the config will changes)
- * and perform the minimum necessary steps to accomplish that, e.g. updating
- * watermarks, FBC configuration, making sure PLLs are programmed correctly,
- * panel fitting is in the proper state, etc.
- */
-static void i9xx_crtc_prepare(struct drm_crtc *crtc)
+void intel_modeset_disable(struct drm_device *dev)
{
- i9xx_crtc_disable(crtc);
+ struct drm_crtc *crtc;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ if (crtc->enabled)
+ intel_crtc_disable(crtc);
+ }
}
-static void i9xx_crtc_commit(struct drm_crtc *crtc)
+void intel_encoder_noop(struct drm_encoder *encoder)
{
- i9xx_crtc_enable(crtc);
}
-static void ironlake_crtc_prepare(struct drm_crtc *crtc)
+void intel_encoder_destroy(struct drm_encoder *encoder)
{
- ironlake_crtc_disable(crtc);
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+
+ drm_encoder_cleanup(encoder);
+ free(intel_encoder, DRM_MEM_KMS);
}
-static void ironlake_crtc_commit(struct drm_crtc *crtc)
+/* Simple dpms helper for encodres with just one connector, no cloning and only
+ * one kind of off state. It clamps all !ON modes to fully OFF and changes the
+ * state of the entire output pipe. */
+void intel_encoder_dpms(struct intel_encoder *encoder, int mode)
{
- ironlake_crtc_enable(crtc);
+ if (mode == DRM_MODE_DPMS_ON) {
+ encoder->connectors_active = true;
+
+ intel_crtc_update_dpms(encoder->base.crtc);
+ } else {
+ encoder->connectors_active = false;
+
+ intel_crtc_update_dpms(encoder->base.crtc);
+ }
}
-void intel_encoder_prepare(struct drm_encoder *encoder)
+/* Cross check the actual hw state with our own modeset state tracking (and it's
+ * internal consistency). */
+static void intel_connector_check_state(struct intel_connector *connector)
{
- struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
- /* lvds has its own version of prepare see intel_lvds_prepare */
- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
+ if (connector->get_hw_state(connector)) {
+ struct intel_encoder *encoder = connector->encoder;
+ struct drm_crtc *crtc;
+ bool encoder_enabled;
+ enum pipe pipe;
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.base.id,
+ drm_get_connector_name(&connector->base));
+
+ WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
+ "wrong connector dpms state\n");
+ WARN(connector->base.encoder != &encoder->base,
+ "active connector not linked to encoder\n");
+ WARN(!encoder->connectors_active,
+ "encoder->connectors_active not set\n");
+
+ encoder_enabled = encoder->get_hw_state(encoder, &pipe);
+ WARN(!encoder_enabled, "encoder not enabled\n");
+ if (WARN_ON(!encoder->base.crtc))
+ return;
+
+ crtc = encoder->base.crtc;
+
+ WARN(!crtc->enabled, "crtc not enabled\n");
+ WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
+ WARN(pipe != to_intel_crtc(crtc)->pipe,
+ "encoder active on the wrong pipe\n");
+ }
}
-void intel_encoder_commit(struct drm_encoder *encoder)
+/* Even simpler default implementation, if there's really no special case to
+ * consider. */
+void intel_connector_dpms(struct drm_connector *connector, int mode)
{
- struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
- struct drm_device *dev = encoder->dev;
- struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_encoder *encoder = intel_attached_encoder(connector);
- /* lvds has its own version of commit see intel_lvds_commit */
- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+ /* All the simple cases only support two dpms states. */
+ if (mode != DRM_MODE_DPMS_ON)
+ mode = DRM_MODE_DPMS_OFF;
- if (HAS_PCH_CPT(dev))
- intel_cpt_verify_modeset(dev, intel_crtc->pipe);
+ if (mode == connector->dpms)
+ return;
+
+ connector->dpms = mode;
+
+ /* Only need to change hw state when actually enabled */
+ if (encoder->base.crtc)
+ intel_encoder_dpms(encoder, mode);
+ else
+ WARN_ON(encoder->connectors_active != false);
+
+ intel_modeset_check_state(connector->dev);
}
-void intel_encoder_destroy(struct drm_encoder *encoder)
+/* Simple connector->get_hw_state implementation for encoders that support only
+ * one connector and no cloning and hence the encoder state determines the state
+ * of the connector. */
+bool intel_connector_get_hw_state(struct intel_connector *connector)
{
- struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+ enum pipe pipe = 0;
+ struct intel_encoder *encoder = connector->encoder;
- drm_encoder_cleanup(encoder);
- free(intel_encoder, DRM_MEM_KMS);
+ return encoder->get_hw_state(encoder, &pipe);
}
static bool intel_crtc_mode_fixup(struct drm_crtc *crtc,
@@ -3436,6 +3952,13 @@ static bool intel_crtc_mode_fixup(struct drm_crtc *crtc,
if (!(adjusted_mode->private_flags & INTEL_MODE_CRTC_TIMINGS_SET))
drm_mode_set_crtcinfo(adjusted_mode, 0);
+ /* WaPruneModeWithIncorrectHsyncOffset: Cantiga+ cannot handle modes
+ * with a hsync front porch of 0.
+ */
+ if ((INTEL_INFO(dev)->gen > 4 || IS_G4X(dev)) &&
+ adjusted_mode->hsync_start == adjusted_mode->hdisplay)
+ return false;
+
return true;
}
@@ -3463,7 +3986,7 @@ static int i915gm_get_display_clock_speed(struct drm_device *dev)
{
u16 gcfgc = 0;
- gcfgc = pci_read_config(dev->dev, GCFGC, 2);
+ pci_read_config_word(dev->dev, GCFGC, &gcfgc);
if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
return 133000;
@@ -3571,21 +4094,18 @@ static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
* true if they don't match).
*/
static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
unsigned int *pipe_bpp,
struct drm_display_mode *mode)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_encoder *encoder;
struct drm_connector *connector;
+ struct intel_encoder *intel_encoder;
unsigned int display_bpc = UINT_MAX, bpc;
/* Walk the encoders & connectors on this crtc, get min bpc */
- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
- struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
-
- if (encoder->crtc != crtc)
- continue;
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
if (intel_encoder->type == INTEL_OUTPUT_LVDS) {
unsigned int lvds_bpc;
@@ -3603,21 +4123,10 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
continue;
}
- if (intel_encoder->type == INTEL_OUTPUT_EDP) {
- /* Use VBT settings if we have an eDP panel */
- unsigned int edp_bpc = dev_priv->edp.bpp / 3;
-
- if (edp_bpc < display_bpc) {
- DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
- display_bpc = edp_bpc;
- }
- continue;
- }
-
/* Not one of the known troublemakers, check the EDID */
list_for_each_entry(connector, &dev->mode_config.connector_list,
head) {
- if (connector->encoder != encoder)
+ if (connector->encoder != &intel_encoder->base)
continue;
/* Don't use an invalid EDID bpc value */
@@ -3628,6 +4137,17 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
}
}
+ if (intel_encoder->type == INTEL_OUTPUT_EDP) {
+ /* Use VBT settings if we have an eDP panel */
+ unsigned int edp_bpc = dev_priv->edp.bpp / 3;
+
+ if (edp_bpc && edp_bpc < display_bpc) {
+ DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
+ display_bpc = edp_bpc;
+ }
+ continue;
+ }
+
/*
* HDMI is either 12 or 8, so if the display lets 10bpc sneak
* through, clamp it down. (Note: >12bpc will be caught below.)
@@ -3655,7 +4175,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
* also stays within the max display bpc discovered above.
*/
- switch (crtc->fb->depth) {
+ switch (fb->depth) {
case 8:
bpc = 8; /* since we go through a colormap */
break;
@@ -3688,13 +4208,37 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
return display_bpc != bpc;
}
+static int vlv_get_refclk(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int refclk = 27000; /* for DP & HDMI */
+
+ return 100000; /* only one validated so far */
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_ANALOG)) {
+ refclk = 96000;
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+ if (intel_panel_use_ssc(dev_priv))
+ refclk = 100000;
+ else
+ refclk = 96000;
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP)) {
+ refclk = 100000;
+ }
+
+ return refclk;
+}
+
static int i9xx_get_refclk(struct drm_crtc *crtc, int num_connectors)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
int refclk;
- if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
+ if (IS_VALLEYVIEW(dev)) {
+ refclk = vlv_get_refclk(crtc);
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
refclk = dev_priv->lvds_ssc_freq * 1000;
DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
@@ -3809,6 +4353,106 @@ static void intel_update_lvds(struct drm_crtc *crtc, intel_clock_t *clock,
I915_WRITE(LVDS, temp);
}
+static void vlv_update_pll(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ intel_clock_t *clock, intel_clock_t *reduced_clock,
+ int num_connectors)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 dpll, mdiv, pdiv;
+ u32 bestn, bestm1, bestm2, bestp1, bestp2;
+ bool is_sdvo;
+ u32 temp;
+
+ is_sdvo = intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ||
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI);
+
+ dpll = DPLL_VGA_MODE_DIS;
+ dpll |= DPLL_EXT_BUFFER_ENABLE_VLV;
+ dpll |= DPLL_REFA_CLK_ENABLE_VLV;
+ dpll |= DPLL_INTEGRATED_CLOCK_VLV;
+
+ I915_WRITE(DPLL(pipe), dpll);
+ POSTING_READ(DPLL(pipe));
+
+ bestn = clock->n;
+ bestm1 = clock->m1;
+ bestm2 = clock->m2;
+ bestp1 = clock->p1;
+ bestp2 = clock->p2;
+
+ /*
+ * In Valleyview PLL and program lane counter registers are exposed
+ * through DPIO interface
+ */
+ mdiv = ((bestm1 << DPIO_M1DIV_SHIFT) | (bestm2 & DPIO_M2DIV_MASK));
+ mdiv |= ((bestp1 << DPIO_P1_SHIFT) | (bestp2 << DPIO_P2_SHIFT));
+ mdiv |= ((bestn << DPIO_N_SHIFT));
+ mdiv |= (1 << DPIO_POST_DIV_SHIFT);
+ mdiv |= (1 << DPIO_K_SHIFT);
+ mdiv |= DPIO_ENABLE_CALIBRATION;
+ intel_dpio_write(dev_priv, DPIO_DIV(pipe), mdiv);
+
+ intel_dpio_write(dev_priv, DPIO_CORE_CLK(pipe), 0x01000000);
+
+ pdiv = (1 << DPIO_REFSEL_OVERRIDE) | (5 << DPIO_PLL_MODESEL_SHIFT) |
+ (3 << DPIO_BIAS_CURRENT_CTL_SHIFT) | (1<<20) |
+ (7 << DPIO_PLL_REFCLK_SEL_SHIFT) | (8 << DPIO_DRIVER_CTL_SHIFT) |
+ (5 << DPIO_CLK_BIAS_CTL_SHIFT);
+ intel_dpio_write(dev_priv, DPIO_REFSFR(pipe), pdiv);
+
+ intel_dpio_write(dev_priv, DPIO_LFP_COEFF(pipe), 0x005f003b);
+
+ dpll |= DPLL_VCO_ENABLE;
+ I915_WRITE(DPLL(pipe), dpll);
+ POSTING_READ(DPLL(pipe));
+ if (wait_for(((I915_READ(DPLL(pipe)) & DPLL_LOCK_VLV) == DPLL_LOCK_VLV), 1))
+ DRM_ERROR("DPLL %d failed to lock\n", pipe);
+
+ intel_dpio_write(dev_priv, DPIO_FASTCLK_DISABLE, 0x620);
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT))
+ intel_dp_set_m_n(crtc, mode, adjusted_mode);
+
+ I915_WRITE(DPLL(pipe), dpll);
+
+ /* Wait for the clocks to stabilize. */
+ POSTING_READ(DPLL(pipe));
+ udelay(150);
+
+ temp = 0;
+ if (is_sdvo) {
+ temp = intel_mode_get_pixel_multiplier(adjusted_mode);
+ if (temp > 1)
+ temp = (temp - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
+ else
+ temp = 0;
+ }
+ I915_WRITE(DPLL_MD(pipe), temp);
+ POSTING_READ(DPLL_MD(pipe));
+
+ /* Now program lane control registers */
+ if(intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)
+ || intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI))
+ {
+ temp = 0x1000C4;
+ if(pipe == 1)
+ temp |= (1 << 21);
+ intel_dpio_write(dev_priv, DPIO_DATA_CHANNEL1, temp);
+ }
+ if(intel_pipe_has_type(crtc,INTEL_OUTPUT_EDP))
+ {
+ temp = 0x1000C4;
+ if(pipe == 1)
+ temp |= (1 << 21);
+ intel_dpio_write(dev_priv, DPIO_DATA_CHANNEL2, temp);
+ }
+}
+
static void i9xx_update_pll(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode,
@@ -3822,6 +4466,8 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
u32 dpll;
bool is_sdvo;
+ i9xx_update_pll_dividers(crtc, clock, reduced_clock);
+
is_sdvo = intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ||
intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI);
@@ -3882,7 +4528,7 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
dpll |= DPLL_VCO_ENABLE;
I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
POSTING_READ(DPLL(pipe));
- DELAY(150);
+ udelay(150);
/* The LVDS pin pair needs to be on before the DPLLs are enabled.
* This is an exception to the general rule that mode_set doesn't turn
@@ -3898,7 +4544,7 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
/* Wait for the clocks to stabilize. */
POSTING_READ(DPLL(pipe));
- DELAY(150);
+ udelay(150);
if (INTEL_INFO(dev)->gen >= 4) {
u32 temp = 0;
@@ -3922,7 +4568,7 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
static void i8xx_update_pll(struct drm_crtc *crtc,
struct drm_display_mode *adjusted_mode,
- intel_clock_t *clock,
+ intel_clock_t *clock, intel_clock_t *reduced_clock,
int num_connectors)
{
struct drm_device *dev = crtc->dev;
@@ -3931,6 +4577,8 @@ static void i8xx_update_pll(struct drm_crtc *crtc,
int pipe = intel_crtc->pipe;
u32 dpll;
+ i9xx_update_pll_dividers(crtc, clock, reduced_clock);
+
dpll = DPLL_VGA_MODE_DIS;
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
@@ -3957,13 +4605,7 @@ static void i8xx_update_pll(struct drm_crtc *crtc,
dpll |= DPLL_VCO_ENABLE;
I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
POSTING_READ(DPLL(pipe));
- DELAY(150);
-
- I915_WRITE(DPLL(pipe), dpll);
-
- /* Wait for the clocks to stabilize. */
- POSTING_READ(DPLL(pipe));
- DELAY(150);
+ udelay(150);
/* The LVDS pin pair needs to be on before the DPLLs are enabled.
* This is an exception to the general rule that mode_set doesn't turn
@@ -3972,6 +4614,12 @@ static void i8xx_update_pll(struct drm_crtc *crtc,
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
intel_update_lvds(crtc, clock, adjusted_mode);
+ I915_WRITE(DPLL(pipe), dpll);
+
+ /* Wait for the clocks to stabilize. */
+ POSTING_READ(DPLL(pipe));
+ udelay(150);
+
/* The pixel multiplier can only be updated once the
* DPLL is enabled and the clocks are stable.
*
@@ -3980,11 +4628,69 @@ static void i8xx_update_pll(struct drm_crtc *crtc,
I915_WRITE(DPLL(pipe), dpll);
}
+static void intel_set_pipe_timings(struct intel_crtc *intel_crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = intel_crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ enum pipe pipe = intel_crtc->pipe;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ uint32_t vsyncshift;
+
+ if (!IS_GEN2(dev) && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
+ /* the chip adds 2 halflines automatically */
+ adjusted_mode->crtc_vtotal -= 1;
+ adjusted_mode->crtc_vblank_end -= 1;
+ vsyncshift = adjusted_mode->crtc_hsync_start
+ - adjusted_mode->crtc_htotal / 2;
+ } else {
+ vsyncshift = 0;
+ }
+
+ if (INTEL_INFO(dev)->gen > 3)
+ I915_WRITE(VSYNCSHIFT(cpu_transcoder), vsyncshift);
+
+ I915_WRITE(HTOTAL(cpu_transcoder),
+ (adjusted_mode->crtc_hdisplay - 1) |
+ ((adjusted_mode->crtc_htotal - 1) << 16));
+ I915_WRITE(HBLANK(cpu_transcoder),
+ (adjusted_mode->crtc_hblank_start - 1) |
+ ((adjusted_mode->crtc_hblank_end - 1) << 16));
+ I915_WRITE(HSYNC(cpu_transcoder),
+ (adjusted_mode->crtc_hsync_start - 1) |
+ ((adjusted_mode->crtc_hsync_end - 1) << 16));
+
+ I915_WRITE(VTOTAL(cpu_transcoder),
+ (adjusted_mode->crtc_vdisplay - 1) |
+ ((adjusted_mode->crtc_vtotal - 1) << 16));
+ I915_WRITE(VBLANK(cpu_transcoder),
+ (adjusted_mode->crtc_vblank_start - 1) |
+ ((adjusted_mode->crtc_vblank_end - 1) << 16));
+ I915_WRITE(VSYNC(cpu_transcoder),
+ (adjusted_mode->crtc_vsync_start - 1) |
+ ((adjusted_mode->crtc_vsync_end - 1) << 16));
+
+ /* Workaround: when the EDP input selection is B, the VTOTAL_B must be
+ * programmed with the VTOTAL_EDP value. Same for VTOTAL_C. This is
+ * documented on the DDI_FUNC_CTL register description, EDP Input Select
+ * bits. */
+ if (IS_HASWELL(dev) && cpu_transcoder == TRANSCODER_EDP &&
+ (pipe == PIPE_B || pipe == PIPE_C))
+ I915_WRITE(VTOTAL(pipe), I915_READ(VTOTAL(cpu_transcoder)));
+
+ /* pipesrc controls the size that is scaled from, which should
+ * always be the user's requested size.
+ */
+ I915_WRITE(PIPESRC(pipe),
+ ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
+}
+
static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode,
int x, int y,
- struct drm_framebuffer *old_fb)
+ struct drm_framebuffer *fb)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -3993,18 +4699,14 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
int plane = intel_crtc->plane;
int refclk, num_connectors = 0;
intel_clock_t clock, reduced_clock;
- u32 dspcntr, pipeconf, vsyncshift;
+ u32 dspcntr, pipeconf;
bool ok, has_reduced_clock = false, is_sdvo = false;
bool is_lvds = false, is_tv = false, is_dp = false;
- struct drm_mode_config *mode_config = &dev->mode_config;
struct intel_encoder *encoder;
const intel_limit_t *limit;
int ret;
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
- if (encoder->base.crtc != crtc)
- continue;
-
+ for_each_encoder_on_crtc(dev, crtc, encoder) {
switch (encoder->type) {
case INTEL_OUTPUT_LVDS:
is_lvds = true;
@@ -4030,7 +4732,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
/*
* Returns a set of divisors for the desired target clock with the given
- * refclk, or false. The returned values represent the clock equation:
+ * refclk, or FALSE. The returned values represent the clock equation:
* reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
*/
limit = intel_limit(crtc, refclk);
@@ -4061,11 +4763,14 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
if (is_sdvo && is_tv)
i9xx_adjust_sdvo_tv_clock(adjusted_mode, &clock);
- i9xx_update_pll_dividers(crtc, &clock, has_reduced_clock ?
- &reduced_clock : NULL);
-
if (IS_GEN2(dev))
- i8xx_update_pll(crtc, adjusted_mode, &clock, num_connectors);
+ i8xx_update_pll(crtc, adjusted_mode, &clock,
+ has_reduced_clock ? &reduced_clock : NULL,
+ num_connectors);
+ else if (IS_VALLEYVIEW(dev))
+ vlv_update_pll(crtc, mode, adjusted_mode, &clock,
+ has_reduced_clock ? &reduced_clock : NULL,
+ num_connectors);
else
i9xx_update_pll(crtc, mode, adjusted_mode, &clock,
has_reduced_clock ? &reduced_clock : NULL,
@@ -4099,13 +4804,21 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
/* default to 8bpc */
pipeconf &= ~(PIPECONF_BPP_MASK | PIPECONF_DITHER_EN);
if (is_dp) {
- if (mode->private_flags & INTEL_MODE_DP_FORCE_6BPC) {
+ if (adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC) {
pipeconf |= PIPECONF_BPP_6 |
PIPECONF_DITHER_EN |
PIPECONF_DITHER_TYPE_SP;
}
}
+ if (IS_VALLEYVIEW(dev) && intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP)) {
+ if (adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC) {
+ pipeconf |= PIPECONF_BPP_6 |
+ PIPECONF_ENABLE |
+ I965_PIPECONF_ACTIVE;
+ }
+ }
+
DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B');
drm_mode_debug_printmodeline(mode);
@@ -4121,40 +4834,12 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
pipeconf &= ~PIPECONF_INTERLACE_MASK;
if (!IS_GEN2(dev) &&
- adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
+ adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
- /* the chip adds 2 halflines automatically */
- adjusted_mode->crtc_vtotal -= 1;
- adjusted_mode->crtc_vblank_end -= 1;
- vsyncshift = adjusted_mode->crtc_hsync_start
- - adjusted_mode->crtc_htotal/2;
- } else {
+ else
pipeconf |= PIPECONF_PROGRESSIVE;
- vsyncshift = 0;
- }
-
- if (!IS_GEN3(dev))
- I915_WRITE(VSYNCSHIFT(pipe), vsyncshift);
- I915_WRITE(HTOTAL(pipe),
- (adjusted_mode->crtc_hdisplay - 1) |
- ((adjusted_mode->crtc_htotal - 1) << 16));
- I915_WRITE(HBLANK(pipe),
- (adjusted_mode->crtc_hblank_start - 1) |
- ((adjusted_mode->crtc_hblank_end - 1) << 16));
- I915_WRITE(HSYNC(pipe),
- (adjusted_mode->crtc_hsync_start - 1) |
- ((adjusted_mode->crtc_hsync_end - 1) << 16));
-
- I915_WRITE(VTOTAL(pipe),
- (adjusted_mode->crtc_vdisplay - 1) |
- ((adjusted_mode->crtc_vtotal - 1) << 16));
- I915_WRITE(VBLANK(pipe),
- (adjusted_mode->crtc_vblank_start - 1) |
- ((adjusted_mode->crtc_vblank_end - 1) << 16));
- I915_WRITE(VSYNC(pipe),
- (adjusted_mode->crtc_vsync_start - 1) |
- ((adjusted_mode->crtc_vsync_end - 1) << 16));
+ intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
/* pipesrc and dspsize control the size that is scaled from,
* which should always be the user's requested size.
@@ -4163,8 +4848,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
((mode->vdisplay - 1) << 16) |
(mode->hdisplay - 1));
I915_WRITE(DSPPOS(plane), 0);
- I915_WRITE(PIPESRC(pipe),
- ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
I915_WRITE(PIPECONF(pipe), pipeconf);
POSTING_READ(PIPECONF(pipe));
@@ -4175,17 +4858,14 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
I915_WRITE(DSPCNTR(plane), dspcntr);
POSTING_READ(DSPCNTR(plane));
- ret = intel_pipe_set_base(crtc, x, y, old_fb);
+ ret = intel_pipe_set_base(crtc, x, y, fb);
intel_update_watermarks(dev);
return ret;
}
-/*
- * Initialize reference clocks when the driver loads
- */
-void ironlake_init_pch_refclk(struct drm_device *dev)
+static void ironlake_init_pch_refclk(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_mode_config *mode_config = &dev->mode_config;
@@ -4256,7 +4936,7 @@ void ironlake_init_pch_refclk(struct drm_device *dev)
/* Get SSC going before enabling the outputs */
I915_WRITE(PCH_DREF_CONTROL, temp);
POSTING_READ(PCH_DREF_CONTROL);
- DELAY(200);
+ udelay(200);
temp &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
@@ -4273,7 +4953,7 @@ void ironlake_init_pch_refclk(struct drm_device *dev)
I915_WRITE(PCH_DREF_CONTROL, temp);
POSTING_READ(PCH_DREF_CONTROL);
- DELAY(200);
+ udelay(200);
} else {
DRM_DEBUG_KMS("Disabling SSC entirely\n");
@@ -4284,7 +4964,7 @@ void ironlake_init_pch_refclk(struct drm_device *dev)
I915_WRITE(PCH_DREF_CONTROL, temp);
POSTING_READ(PCH_DREF_CONTROL);
- DELAY(200);
+ udelay(200);
/* Turn off the SSC source */
temp &= ~DREF_SSC_SOURCE_MASK;
@@ -4295,8 +4975,184 @@ void ironlake_init_pch_refclk(struct drm_device *dev)
I915_WRITE(PCH_DREF_CONTROL, temp);
POSTING_READ(PCH_DREF_CONTROL);
- DELAY(200);
+ udelay(200);
+ }
+}
+
+/* Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O. */
+static void lpt_init_pch_refclk(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+ bool has_vga = false;
+ bool is_sdv = false;
+ u32 tmp;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ switch (encoder->type) {
+ case INTEL_OUTPUT_ANALOG:
+ has_vga = true;
+ break;
+ }
}
+
+ if (!has_vga)
+ return;
+
+ /* XXX: Rip out SDV support once Haswell ships for real. */
+ if (IS_HASWELL(dev) && (dev->pci_device & 0xFF00) == 0x0C00)
+ is_sdv = true;
+
+ tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
+ tmp &= ~SBI_SSCCTL_DISABLE;
+ tmp |= SBI_SSCCTL_PATHALT;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+
+ udelay(24);
+
+ tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
+ tmp &= ~SBI_SSCCTL_PATHALT;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+
+ if (!is_sdv) {
+ tmp = I915_READ(SOUTH_CHICKEN2);
+ tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
+ I915_WRITE(SOUTH_CHICKEN2, tmp);
+
+ if (wait_for_atomic_us(I915_READ(SOUTH_CHICKEN2) &
+ FDI_MPHY_IOSFSB_RESET_STATUS, 100))
+ DRM_ERROR("FDI mPHY reset assert timeout\n");
+
+ tmp = I915_READ(SOUTH_CHICKEN2);
+ tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
+ I915_WRITE(SOUTH_CHICKEN2, tmp);
+
+ if (wait_for_atomic_us((I915_READ(SOUTH_CHICKEN2) &
+ FDI_MPHY_IOSFSB_RESET_STATUS) == 0,
+ 100))
+ DRM_ERROR("FDI mPHY reset de-assert timeout\n");
+ }
+
+ tmp = intel_sbi_read(dev_priv, 0x8008, SBI_MPHY);
+ tmp &= ~(0xFF << 24);
+ tmp |= (0x12 << 24);
+ intel_sbi_write(dev_priv, 0x8008, tmp, SBI_MPHY);
+
+ if (!is_sdv) {
+ tmp = intel_sbi_read(dev_priv, 0x808C, SBI_MPHY);
+ tmp &= ~(0x3 << 6);
+ tmp |= (1 << 6) | (1 << 0);
+ intel_sbi_write(dev_priv, 0x808C, tmp, SBI_MPHY);
+ }
+
+ if (is_sdv) {
+ tmp = intel_sbi_read(dev_priv, 0x800C, SBI_MPHY);
+ tmp |= 0x7FFF;
+ intel_sbi_write(dev_priv, 0x800C, tmp, SBI_MPHY);
+ }
+
+ tmp = intel_sbi_read(dev_priv, 0x2008, SBI_MPHY);
+ tmp |= (1 << 11);
+ intel_sbi_write(dev_priv, 0x2008, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x2108, SBI_MPHY);
+ tmp |= (1 << 11);
+ intel_sbi_write(dev_priv, 0x2108, tmp, SBI_MPHY);
+
+ if (is_sdv) {
+ tmp = intel_sbi_read(dev_priv, 0x2038, SBI_MPHY);
+ tmp |= (0x3F << 24) | (0xF << 20) | (0xF << 16);
+ intel_sbi_write(dev_priv, 0x2038, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x2138, SBI_MPHY);
+ tmp |= (0x3F << 24) | (0xF << 20) | (0xF << 16);
+ intel_sbi_write(dev_priv, 0x2138, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x203C, SBI_MPHY);
+ tmp |= (0x3F << 8);
+ intel_sbi_write(dev_priv, 0x203C, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x213C, SBI_MPHY);
+ tmp |= (0x3F << 8);
+ intel_sbi_write(dev_priv, 0x213C, tmp, SBI_MPHY);
+ }
+
+ tmp = intel_sbi_read(dev_priv, 0x206C, SBI_MPHY);
+ tmp |= (1 << 24) | (1 << 21) | (1 << 18);
+ intel_sbi_write(dev_priv, 0x206C, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x216C, SBI_MPHY);
+ tmp |= (1 << 24) | (1 << 21) | (1 << 18);
+ intel_sbi_write(dev_priv, 0x216C, tmp, SBI_MPHY);
+
+ if (!is_sdv) {
+ tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY);
+ tmp &= ~(7 << 13);
+ tmp |= (5 << 13);
+ intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY);
+ tmp &= ~(7 << 13);
+ tmp |= (5 << 13);
+ intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY);
+ }
+
+ tmp = intel_sbi_read(dev_priv, 0x208C, SBI_MPHY);
+ tmp &= ~0xFF;
+ tmp |= 0x1C;
+ intel_sbi_write(dev_priv, 0x208C, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x218C, SBI_MPHY);
+ tmp &= ~0xFF;
+ tmp |= 0x1C;
+ intel_sbi_write(dev_priv, 0x218C, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x2098, SBI_MPHY);
+ tmp &= ~(0xFF << 16);
+ tmp |= (0x1C << 16);
+ intel_sbi_write(dev_priv, 0x2098, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x2198, SBI_MPHY);
+ tmp &= ~(0xFF << 16);
+ tmp |= (0x1C << 16);
+ intel_sbi_write(dev_priv, 0x2198, tmp, SBI_MPHY);
+
+ if (!is_sdv) {
+ tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY);
+ tmp |= (1 << 27);
+ intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY);
+ tmp |= (1 << 27);
+ intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY);
+ tmp &= ~(0xF << 28);
+ tmp |= (4 << 28);
+ intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY);
+ tmp &= ~(0xF << 28);
+ tmp |= (4 << 28);
+ intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY);
+ }
+
+ /* ULT uses SBI_GEN0, but ULT doesn't have VGA, so we don't care. */
+ tmp = intel_sbi_read(dev_priv, SBI_DBUFF0, SBI_ICLK);
+ tmp |= SBI_DBUFF0_ENABLE;
+ intel_sbi_write(dev_priv, SBI_DBUFF0, tmp, SBI_ICLK);
+}
+
+/*
+ * Initialize reference clocks when the driver loads
+ */
+void intel_init_pch_refclk(struct drm_device *dev)
+{
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
+ ironlake_init_pch_refclk(dev);
+ else if (HAS_PCH_LPT(dev))
+ lpt_init_pch_refclk(dev);
}
static int ironlake_get_refclk(struct drm_crtc *crtc)
@@ -4304,15 +5160,11 @@ static int ironlake_get_refclk(struct drm_crtc *crtc)
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_encoder *encoder;
- struct drm_mode_config *mode_config = &dev->mode_config;
struct intel_encoder *edp_encoder = NULL;
int num_connectors = 0;
bool is_lvds = false;
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
- if (encoder->base.crtc != crtc)
- continue;
-
+ for_each_encoder_on_crtc(dev, crtc, encoder) {
switch (encoder->type) {
case INTEL_OUTPUT_LVDS:
is_lvds = true;
@@ -4333,86 +5185,117 @@ static int ironlake_get_refclk(struct drm_crtc *crtc)
return 120000;
}
-static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
- struct drm_display_mode *mode,
+static void ironlake_set_pipeconf(struct drm_crtc *crtc,
struct drm_display_mode *adjusted_mode,
- int x, int y,
- struct drm_framebuffer *old_fb)
+ bool dither)
{
- struct drm_device *dev = crtc->dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe;
- int plane = intel_crtc->plane;
- int refclk, num_connectors = 0;
- intel_clock_t clock, reduced_clock;
- u32 dpll, fp = 0, fp2 = 0, dspcntr, pipeconf;
- bool ok, has_reduced_clock = false, is_sdvo = false;
- bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct intel_encoder *encoder, *edp_encoder = NULL;
- const intel_limit_t *limit;
- int ret;
- struct fdi_m_n m_n = {0};
- u32 temp;
- int target_clock, pixel_multiplier, lane, link_bw, factor;
- unsigned int pipe_bpp;
- bool dither;
- bool is_cpu_edp = false, is_pch_edp = false;
+ uint32_t val;
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
- if (encoder->base.crtc != crtc)
- continue;
+ val = I915_READ(PIPECONF(pipe));
- switch (encoder->type) {
+ val &= ~PIPE_BPC_MASK;
+ switch (intel_crtc->bpp) {
+ case 18:
+ val |= PIPE_6BPC;
+ break;
+ case 24:
+ val |= PIPE_8BPC;
+ break;
+ case 30:
+ val |= PIPE_10BPC;
+ break;
+ case 36:
+ val |= PIPE_12BPC;
+ break;
+ default:
+ /* Case prevented by intel_choose_pipe_bpp_dither. */
+ BUG();
+ }
+
+ val &= ~(PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_MASK);
+ if (dither)
+ val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
+
+ val &= ~PIPECONF_INTERLACE_MASK;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
+ val |= PIPECONF_INTERLACED_ILK;
+ else
+ val |= PIPECONF_PROGRESSIVE;
+
+ I915_WRITE(PIPECONF(pipe), val);
+ POSTING_READ(PIPECONF(pipe));
+}
+
+static void haswell_set_pipeconf(struct drm_crtc *crtc,
+ struct drm_display_mode *adjusted_mode,
+ bool dither)
+{
+ struct drm_i915_private *dev_priv = crtc->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ uint32_t val;
+
+ val = I915_READ(PIPECONF(cpu_transcoder));
+
+ val &= ~(PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_MASK);
+ if (dither)
+ val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
+
+ val &= ~PIPECONF_INTERLACE_MASK_HSW;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
+ val |= PIPECONF_INTERLACED_ILK;
+ else
+ val |= PIPECONF_PROGRESSIVE;
+
+ I915_WRITE(PIPECONF(cpu_transcoder), val);
+ POSTING_READ(PIPECONF(cpu_transcoder));
+}
+
+static bool ironlake_compute_clocks(struct drm_crtc *crtc,
+ struct drm_display_mode *adjusted_mode,
+ intel_clock_t *clock,
+ bool *has_reduced_clock,
+ intel_clock_t *reduced_clock)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ int refclk;
+ const intel_limit_t *limit;
+ bool ret, is_sdvo = false, is_tv = false, is_lvds = false;
+
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ switch (intel_encoder->type) {
case INTEL_OUTPUT_LVDS:
is_lvds = true;
break;
case INTEL_OUTPUT_SDVO:
case INTEL_OUTPUT_HDMI:
is_sdvo = true;
- if (encoder->needs_tv_clock)
+ if (intel_encoder->needs_tv_clock)
is_tv = true;
break;
case INTEL_OUTPUT_TVOUT:
is_tv = true;
break;
- case INTEL_OUTPUT_ANALOG:
- is_crt = true;
- break;
- case INTEL_OUTPUT_DISPLAYPORT:
- is_dp = true;
- break;
- case INTEL_OUTPUT_EDP:
- is_dp = true;
- if (intel_encoder_is_pch_edp(&encoder->base))
- is_pch_edp = true;
- else
- is_cpu_edp = true;
- edp_encoder = encoder;
- break;
}
-
- num_connectors++;
}
refclk = ironlake_get_refclk(crtc);
/*
* Returns a set of divisors for the desired target clock with the given
- * refclk, or false. The returned values represent the clock equation:
+ * refclk, or FALSE. The returned values represent the clock equation:
* reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
*/
limit = intel_limit(crtc, refclk);
- ok = limit->find_pll(limit, crtc, adjusted_mode->clock, refclk, NULL,
- &clock);
- if (!ok) {
- DRM_ERROR("Couldn't find PLL settings for mode!\n");
- return -EINVAL;
- }
-
- /* Ensure that the cursor is valid for the new mode before changing... */
- intel_crtc_update_cursor(crtc, true);
+ ret = limit->find_pll(limit, crtc, adjusted_mode->clock, refclk, NULL,
+ clock);
+ if (!ret)
+ return false;
if (is_lvds && dev_priv->lvds_downclock_avail) {
/*
@@ -4421,29 +5304,136 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
* by using the FP0/FP1. In such case we will disable the LVDS
* downclock feature.
*/
- has_reduced_clock = limit->find_pll(limit, crtc,
- dev_priv->lvds_downclock,
- refclk,
- &clock,
- &reduced_clock);
+ *has_reduced_clock = limit->find_pll(limit, crtc,
+ dev_priv->lvds_downclock,
+ refclk,
+ clock,
+ reduced_clock);
}
- /* SDVO TV has fixed PLL values depend on its clock range,
- this mirrors vbios setting. */
- if (is_sdvo && is_tv) {
- if (adjusted_mode->clock >= 100000
- && adjusted_mode->clock < 140500) {
- clock.p1 = 2;
- clock.p2 = 10;
- clock.n = 3;
- clock.m1 = 16;
- clock.m2 = 8;
- } else if (adjusted_mode->clock >= 140500
- && adjusted_mode->clock <= 200000) {
- clock.p1 = 1;
- clock.p2 = 10;
- clock.n = 6;
- clock.m1 = 12;
- clock.m2 = 8;
+
+ if (is_sdvo && is_tv)
+ i9xx_adjust_sdvo_tv_clock(adjusted_mode, clock);
+
+ return true;
+}
+
+static void cpt_enable_fdi_bc_bifurcation(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t temp;
+
+ temp = I915_READ(SOUTH_CHICKEN1);
+ if (temp & FDI_BC_BIFURCATION_SELECT)
+ return;
+
+ WARN_ON(I915_READ(FDI_RX_CTL(PIPE_B)) & FDI_RX_ENABLE);
+ WARN_ON(I915_READ(FDI_RX_CTL(PIPE_C)) & FDI_RX_ENABLE);
+
+ temp |= FDI_BC_BIFURCATION_SELECT;
+ DRM_DEBUG_KMS("enabling fdi C rx\n");
+ I915_WRITE(SOUTH_CHICKEN1, temp);
+ POSTING_READ(SOUTH_CHICKEN1);
+}
+
+static bool ironlake_check_fdi_lanes(struct intel_crtc *intel_crtc)
+{
+ struct drm_device *dev = intel_crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *pipe_B_crtc =
+ to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_B]);
+
+ DRM_DEBUG_KMS("checking fdi config on pipe %i, lanes %i\n",
+ intel_crtc->pipe, intel_crtc->fdi_lanes);
+ if (intel_crtc->fdi_lanes > 4) {
+ DRM_DEBUG_KMS("invalid fdi lane config on pipe %i: %i lanes\n",
+ intel_crtc->pipe, intel_crtc->fdi_lanes);
+ /* Clamp lanes to avoid programming the hw with bogus values. */
+ intel_crtc->fdi_lanes = 4;
+
+ return false;
+ }
+
+ if (dev_priv->num_pipe == 2)
+ return true;
+
+ switch (intel_crtc->pipe) {
+ case PIPE_A:
+ return true;
+ case PIPE_B:
+ if (dev_priv->pipe_to_crtc_mapping[PIPE_C]->enabled &&
+ intel_crtc->fdi_lanes > 2) {
+ DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %i: %i lanes\n",
+ intel_crtc->pipe, intel_crtc->fdi_lanes);
+ /* Clamp lanes to avoid programming the hw with bogus values. */
+ intel_crtc->fdi_lanes = 2;
+
+ return false;
+ }
+
+ if (intel_crtc->fdi_lanes > 2)
+ WARN_ON(I915_READ(SOUTH_CHICKEN1) & FDI_BC_BIFURCATION_SELECT);
+ else
+ cpt_enable_fdi_bc_bifurcation(dev);
+
+ return true;
+ case PIPE_C:
+ if (!pipe_B_crtc->base.enabled || pipe_B_crtc->fdi_lanes <= 2) {
+ if (intel_crtc->fdi_lanes > 2) {
+ DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %i: %i lanes\n",
+ intel_crtc->pipe, intel_crtc->fdi_lanes);
+ /* Clamp lanes to avoid programming the hw with bogus values. */
+ intel_crtc->fdi_lanes = 2;
+
+ return false;
+ }
+ } else {
+ DRM_DEBUG_KMS("fdi link B uses too many lanes to enable link C\n");
+ return false;
+ }
+
+ cpt_enable_fdi_bc_bifurcation(dev);
+
+ return true;
+ default:
+ BUG();
+ }
+}
+
+int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp)
+{
+ /*
+ * Account for spread spectrum to avoid
+ * oversubscribing the link. Max center spread
+ * is 2.5%; use 5% for safety's sake.
+ */
+ u32 bps = target_clock * bpp * 21 / 20;
+ return bps / (link_bw * 8) + 1;
+}
+
+static void ironlake_set_m_n(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ struct intel_encoder *intel_encoder, *edp_encoder = NULL;
+ struct fdi_m_n m_n = {0};
+ int target_clock, pixel_multiplier, lane, link_bw;
+ bool is_dp = false, is_cpu_edp = false;
+
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ switch (intel_encoder->type) {
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ is_dp = true;
+ if (!intel_encoder_is_pch_edp(&intel_encoder->base))
+ is_cpu_edp = true;
+ edp_encoder = intel_encoder;
+ break;
}
}
@@ -4453,16 +5443,8 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
/* CPU eDP doesn't require FDI link, so just set DP M/N
according to current link config */
if (is_cpu_edp) {
- target_clock = mode->clock;
intel_edp_link_config(edp_encoder, &lane, &link_bw);
} else {
- /* [e]DP over FDI requires target mode clock
- instead of link clock */
- if (is_dp)
- target_clock = mode->clock;
- else
- target_clock = adjusted_mode->clock;
-
/* FDI is a binary signal running at ~2.7GHz, encoding
* each output octet as 10 bits. The actual frequency
* is stored as a divider into a 100MHz clock, and the
@@ -4473,43 +5455,17 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10;
}
- /* determine panel color depth */
- temp = I915_READ(PIPECONF(pipe));
- temp &= ~PIPE_BPC_MASK;
- dither = intel_choose_pipe_bpp_dither(crtc, &pipe_bpp, mode);
- switch (pipe_bpp) {
- case 18:
- temp |= PIPE_6BPC;
- break;
- case 24:
- temp |= PIPE_8BPC;
- break;
- case 30:
- temp |= PIPE_10BPC;
- break;
- case 36:
- temp |= PIPE_12BPC;
- break;
- default:
- printf("intel_choose_pipe_bpp returned invalid value %d\n",
- pipe_bpp);
- temp |= PIPE_8BPC;
- pipe_bpp = 24;
- break;
- }
-
- intel_crtc->bpp = pipe_bpp;
- I915_WRITE(PIPECONF(pipe), temp);
+ /* [e]DP over FDI requires target mode clock instead of link clock. */
+ if (edp_encoder)
+ target_clock = intel_edp_target_clock(edp_encoder, mode);
+ else if (is_dp)
+ target_clock = mode->clock;
+ else
+ target_clock = adjusted_mode->clock;
- if (!lane) {
- /*
- * Account for spread spectrum to avoid
- * oversubscribing the link. Max center spread
- * is 2.5%; use 5% for safety's sake.
- */
- u32 bps = target_clock * intel_crtc->bpp * 21 / 20;
- lane = bps / (link_bw * 8) + 1;
- }
+ if (!lane)
+ lane = ironlake_get_lanes_required(target_clock, link_bw,
+ intel_crtc->bpp);
intel_crtc->fdi_lanes = lane;
@@ -4518,10 +5474,51 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
ironlake_compute_m_n(intel_crtc->bpp, lane, target_clock, link_bw,
&m_n);
- fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
- if (has_reduced_clock)
- fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
- reduced_clock.m2;
+ I915_WRITE(PIPE_DATA_M1(cpu_transcoder), TU_SIZE(m_n.tu) | m_n.gmch_m);
+ I915_WRITE(PIPE_DATA_N1(cpu_transcoder), m_n.gmch_n);
+ I915_WRITE(PIPE_LINK_M1(cpu_transcoder), m_n.link_m);
+ I915_WRITE(PIPE_LINK_N1(cpu_transcoder), m_n.link_n);
+}
+
+static uint32_t ironlake_compute_dpll(struct intel_crtc *intel_crtc,
+ struct drm_display_mode *adjusted_mode,
+ intel_clock_t *clock, u32 fp)
+{
+ struct drm_crtc *crtc = &intel_crtc->base;
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ uint32_t dpll;
+ int factor, pixel_multiplier, num_connectors = 0;
+ bool is_lvds = false, is_sdvo = false, is_tv = false;
+ bool is_dp = false, is_cpu_edp = false;
+
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ switch (intel_encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_SDVO:
+ case INTEL_OUTPUT_HDMI:
+ is_sdvo = true;
+ if (intel_encoder->needs_tv_clock)
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_TVOUT:
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ is_dp = true;
+ if (!intel_encoder_is_pch_edp(&intel_encoder->base))
+ is_cpu_edp = true;
+ break;
+ }
+
+ num_connectors++;
+ }
/* Enable autotuning of the PLL clock (if permissible) */
factor = 21;
@@ -4533,7 +5530,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
} else if (is_sdvo && is_tv)
factor = 20;
- if (clock.m < factor * clock.n)
+ if (clock->m < factor * clock->n)
fp |= FP_CB_TUNE;
dpll = 0;
@@ -4543,7 +5540,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
else
dpll |= DPLLB_MODE_DAC_SERIAL;
if (is_sdvo) {
- int pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
+ pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
if (pixel_multiplier > 1) {
dpll |= (pixel_multiplier - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
}
@@ -4553,11 +5550,11 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
dpll |= DPLL_DVO_HIGH_SPEED;
/* compute bitmask from p1 value */
- dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
+ dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
/* also FPA1 */
- dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
+ dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
- switch (clock.p2) {
+ switch (clock->p2) {
case 5:
dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
break;
@@ -4583,20 +5580,79 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
else
dpll |= PLL_REF_INPUT_DREFCLK;
- /* setup pipeconf */
- pipeconf = I915_READ(PIPECONF(pipe));
+ return dpll;
+}
+
+static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ int num_connectors = 0;
+ intel_clock_t clock, reduced_clock;
+ u32 dpll, fp = 0, fp2 = 0;
+ bool ok, has_reduced_clock = false;
+ bool is_lvds = false, is_dp = false, is_cpu_edp = false;
+ struct intel_encoder *encoder;
+ u32 temp;
+ int ret;
+ bool dither, fdi_config_ok;
+
+ for_each_encoder_on_crtc(dev, crtc, encoder) {
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ is_dp = true;
+ if (!intel_encoder_is_pch_edp(&encoder->base))
+ is_cpu_edp = true;
+ break;
+ }
+
+ num_connectors++;
+ }
+
+ WARN(!(HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)),
+ "Unexpected PCH type %d\n", INTEL_PCH_TYPE(dev));
+
+ ok = ironlake_compute_clocks(crtc, adjusted_mode, &clock,
+ &has_reduced_clock, &reduced_clock);
+ if (!ok) {
+ DRM_ERROR("Couldn't find PLL settings for mode!\n");
+ return -EINVAL;
+ }
+
+ /* Ensure that the cursor is valid for the new mode before changing... */
+ intel_crtc_update_cursor(crtc, true);
+
+ /* determine panel color depth */
+ dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp,
+ adjusted_mode);
+ if (is_lvds && dev_priv->lvds_dither)
+ dither = true;
+
+ fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
+ if (has_reduced_clock)
+ fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
+ reduced_clock.m2;
+
+ dpll = ironlake_compute_dpll(intel_crtc, adjusted_mode, &clock, fp);
- /* Set up the display plane register */
- dspcntr = DISPPLANE_GAMMA_ENABLE;
DRM_DEBUG_KMS("Mode for pipe %d:\n", pipe);
drm_mode_debug_printmodeline(mode);
- /* CPU eDP is the only output that doesn't need a PCH PLL of its own on
- * pre-Haswell/LPT generation */
- if (HAS_PCH_LPT(dev)) {
- DRM_DEBUG_KMS("LPT detected: no PLL for pipe %d necessary\n",
- pipe);
- } else if (!is_cpu_edp) {
+ /* CPU eDP is the only output that doesn't need a PCH PLL of its own. */
+ if (!is_cpu_edp) {
struct intel_pch_pll *pll;
pll = intel_get_pch_pll(intel_crtc, dpll, fp);
@@ -4647,12 +5703,6 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
I915_WRITE(PCH_LVDS, temp);
}
- pipeconf &= ~PIPECONF_DITHER_EN;
- pipeconf &= ~PIPECONF_DITHER_TYPE_MASK;
- if ((is_lvds && dev_priv->lvds_dither) || dither) {
- pipeconf |= PIPECONF_DITHER_EN;
- pipeconf |= PIPECONF_DITHER_TYPE_SP;
- }
if (is_dp && !is_cpu_edp) {
intel_dp_set_m_n(crtc, mode, adjusted_mode);
} else {
@@ -4668,7 +5718,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
/* Wait for the clocks to stabilize. */
POSTING_READ(intel_crtc->pch_pll->pll_reg);
- DELAY(150);
+ udelay(150);
/* The pixel multiplier can only be updated once the
* DPLL is enabled and the clocks are stable.
@@ -4683,76 +5733,242 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
if (is_lvds && has_reduced_clock && i915_powersave) {
I915_WRITE(intel_crtc->pch_pll->fp1_reg, fp2);
intel_crtc->lowfreq_avail = true;
- if (HAS_PIPE_CXSR(dev)) {
- DRM_DEBUG_KMS("enabling CxSR downclocking\n");
- pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
- }
} else {
I915_WRITE(intel_crtc->pch_pll->fp1_reg, fp);
- if (HAS_PIPE_CXSR(dev)) {
- DRM_DEBUG_KMS("disabling CxSR downclocking\n");
- pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK;
+ }
+ }
+
+ intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
+
+ /* Note, this also computes intel_crtc->fdi_lanes which is used below in
+ * ironlake_check_fdi_lanes. */
+ ironlake_set_m_n(crtc, mode, adjusted_mode);
+
+ fdi_config_ok = ironlake_check_fdi_lanes(intel_crtc);
+
+ if (is_cpu_edp)
+ ironlake_set_pll_edp(crtc, adjusted_mode->clock);
+
+ ironlake_set_pipeconf(crtc, adjusted_mode, dither);
+
+ intel_wait_for_vblank(dev, pipe);
+
+ /* Set up the display plane register */
+ I915_WRITE(DSPCNTR(plane), DISPPLANE_GAMMA_ENABLE);
+ POSTING_READ(DSPCNTR(plane));
+
+ ret = intel_pipe_set_base(crtc, x, y, fb);
+
+ intel_update_watermarks(dev);
+
+ intel_update_linetime_watermarks(dev, pipe, adjusted_mode);
+
+ return fdi_config_ok ? ret : -EINVAL;
+}
+
+static int haswell_crtc_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ int num_connectors = 0;
+ intel_clock_t clock, reduced_clock;
+ u32 dpll = 0, fp = 0, fp2 = 0;
+ bool ok, has_reduced_clock = false;
+ bool is_lvds = false, is_dp = false, is_cpu_edp = false;
+ struct intel_encoder *encoder;
+ u32 temp;
+ int ret;
+ bool dither;
+
+ for_each_encoder_on_crtc(dev, crtc, encoder) {
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ is_dp = true;
+ if (!intel_encoder_is_pch_edp(&encoder->base))
+ is_cpu_edp = true;
+ break;
+ }
+
+ num_connectors++;
+ }
+
+ if (is_cpu_edp)
+ intel_crtc->cpu_transcoder = TRANSCODER_EDP;
+ else
+ intel_crtc->cpu_transcoder = pipe;
+
+ /* We are not sure yet this won't happen. */
+ WARN(!HAS_PCH_LPT(dev), "Unexpected PCH type %d\n",
+ INTEL_PCH_TYPE(dev));
+
+ WARN(num_connectors != 1, "%d connectors attached to pipe %c\n",
+ num_connectors, pipe_name(pipe));
+
+ WARN_ON(I915_READ(PIPECONF(intel_crtc->cpu_transcoder)) &
+ (PIPECONF_ENABLE | I965_PIPECONF_ACTIVE));
+
+ WARN_ON(I915_READ(DSPCNTR(plane)) & DISPLAY_PLANE_ENABLE);
+
+ if (!intel_ddi_pll_mode_set(crtc, adjusted_mode->clock))
+ return -EINVAL;
+
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
+ ok = ironlake_compute_clocks(crtc, adjusted_mode, &clock,
+ &has_reduced_clock,
+ &reduced_clock);
+ if (!ok) {
+ DRM_ERROR("Couldn't find PLL settings for mode!\n");
+ return -EINVAL;
+ }
+ }
+
+ /* Ensure that the cursor is valid for the new mode before changing... */
+ intel_crtc_update_cursor(crtc, true);
+
+ /* determine panel color depth */
+ dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp,
+ adjusted_mode);
+ if (is_lvds && dev_priv->lvds_dither)
+ dither = true;
+
+ DRM_DEBUG_KMS("Mode for pipe %d:\n", pipe);
+ drm_mode_debug_printmodeline(mode);
+
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
+ fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
+ if (has_reduced_clock)
+ fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
+ reduced_clock.m2;
+
+ dpll = ironlake_compute_dpll(intel_crtc, adjusted_mode, &clock,
+ fp);
+
+ /* CPU eDP is the only output that doesn't need a PCH PLL of its
+ * own on pre-Haswell/LPT generation */
+ if (!is_cpu_edp) {
+ struct intel_pch_pll *pll;
+
+ pll = intel_get_pch_pll(intel_crtc, dpll, fp);
+ if (pll == NULL) {
+ DRM_DEBUG_DRIVER("failed to find PLL for pipe %d\n",
+ pipe);
+ return -EINVAL;
+ }
+ } else
+ intel_put_pch_pll(intel_crtc);
+
+ /* The LVDS pin pair needs to be on before the DPLLs are
+ * enabled. This is an exception to the general rule that
+ * mode_set doesn't turn things on.
+ */
+ if (is_lvds) {
+ temp = I915_READ(PCH_LVDS);
+ temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP;
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~PORT_TRANS_SEL_MASK;
+ temp |= PORT_TRANS_SEL_CPT(pipe);
+ } else {
+ if (pipe == 1)
+ temp |= LVDS_PIPEB_SELECT;
+ else
+ temp &= ~LVDS_PIPEB_SELECT;
}
+
+ /* set the corresponsding LVDS_BORDER bit */
+ temp |= dev_priv->lvds_border_bits;
+ /* Set the B0-B3 data pairs corresponding to whether
+ * we're going to set the DPLLs for dual-channel mode or
+ * not.
+ */
+ if (clock.p2 == 7)
+ temp |= LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP;
+ else
+ temp &= ~(LVDS_B0B3_POWER_UP |
+ LVDS_CLKB_POWER_UP);
+
+ /* It would be nice to set 24 vs 18-bit mode
+ * (LVDS_A3_POWER_UP) appropriately here, but we need to
+ * look more thoroughly into how panels behave in the
+ * two modes.
+ */
+ temp &= ~(LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY);
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
+ temp |= LVDS_HSYNC_POLARITY;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
+ temp |= LVDS_VSYNC_POLARITY;
+ I915_WRITE(PCH_LVDS, temp);
}
}
- pipeconf &= ~PIPECONF_INTERLACE_MASK;
- if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
- pipeconf |= PIPECONF_INTERLACED_ILK;
- /* the chip adds 2 halflines automatically */
- adjusted_mode->crtc_vtotal -= 1;
- adjusted_mode->crtc_vblank_end -= 1;
- I915_WRITE(VSYNCSHIFT(pipe),
- adjusted_mode->crtc_hsync_start
- - adjusted_mode->crtc_htotal/2);
+ if (is_dp && !is_cpu_edp) {
+ intel_dp_set_m_n(crtc, mode, adjusted_mode);
} else {
- pipeconf |= PIPECONF_PROGRESSIVE;
- I915_WRITE(VSYNCSHIFT(pipe), 0);
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
+ /* For non-DP output, clear any trans DP clock recovery
+ * setting.*/
+ I915_WRITE(TRANSDATA_M1(pipe), 0);
+ I915_WRITE(TRANSDATA_N1(pipe), 0);
+ I915_WRITE(TRANSDPLINK_M1(pipe), 0);
+ I915_WRITE(TRANSDPLINK_N1(pipe), 0);
+ }
}
- I915_WRITE(HTOTAL(pipe),
- (adjusted_mode->crtc_hdisplay - 1) |
- ((adjusted_mode->crtc_htotal - 1) << 16));
- I915_WRITE(HBLANK(pipe),
- (adjusted_mode->crtc_hblank_start - 1) |
- ((adjusted_mode->crtc_hblank_end - 1) << 16));
- I915_WRITE(HSYNC(pipe),
- (adjusted_mode->crtc_hsync_start - 1) |
- ((adjusted_mode->crtc_hsync_end - 1) << 16));
-
- I915_WRITE(VTOTAL(pipe),
- (adjusted_mode->crtc_vdisplay - 1) |
- ((adjusted_mode->crtc_vtotal - 1) << 16));
- I915_WRITE(VBLANK(pipe),
- (adjusted_mode->crtc_vblank_start - 1) |
- ((adjusted_mode->crtc_vblank_end - 1) << 16));
- I915_WRITE(VSYNC(pipe),
- (adjusted_mode->crtc_vsync_start - 1) |
- ((adjusted_mode->crtc_vsync_end - 1) << 16));
+ intel_crtc->lowfreq_avail = false;
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
+ if (intel_crtc->pch_pll) {
+ I915_WRITE(intel_crtc->pch_pll->pll_reg, dpll);
+
+ /* Wait for the clocks to stabilize. */
+ POSTING_READ(intel_crtc->pch_pll->pll_reg);
+ udelay(150);
+
+ /* The pixel multiplier can only be updated once the
+ * DPLL is enabled and the clocks are stable.
+ *
+ * So write it again.
+ */
+ I915_WRITE(intel_crtc->pch_pll->pll_reg, dpll);
+ }
- /* pipesrc controls the size that is scaled from, which should
- * always be the user's requested size.
- */
- I915_WRITE(PIPESRC(pipe),
- ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
+ if (intel_crtc->pch_pll) {
+ if (is_lvds && has_reduced_clock && i915_powersave) {
+ I915_WRITE(intel_crtc->pch_pll->fp1_reg, fp2);
+ intel_crtc->lowfreq_avail = true;
+ } else {
+ I915_WRITE(intel_crtc->pch_pll->fp1_reg, fp);
+ }
+ }
+ }
- I915_WRITE(PIPE_DATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
- I915_WRITE(PIPE_DATA_N1(pipe), m_n.gmch_n);
- I915_WRITE(PIPE_LINK_M1(pipe), m_n.link_m);
- I915_WRITE(PIPE_LINK_N1(pipe), m_n.link_n);
+ intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
- if (is_cpu_edp)
- ironlake_set_pll_edp(crtc, adjusted_mode->clock);
+ if (!is_dp || is_cpu_edp)
+ ironlake_set_m_n(crtc, mode, adjusted_mode);
- I915_WRITE(PIPECONF(pipe), pipeconf);
- POSTING_READ(PIPECONF(pipe));
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
+ if (is_cpu_edp)
+ ironlake_set_pll_edp(crtc, adjusted_mode->clock);
- intel_wait_for_vblank(dev, pipe);
+ haswell_set_pipeconf(crtc, adjusted_mode, dither);
- I915_WRITE(DSPCNTR(plane), dspcntr);
+ /* Set up the display plane register */
+ I915_WRITE(DSPCNTR(plane), DISPPLANE_GAMMA_ENABLE);
POSTING_READ(DSPCNTR(plane));
- ret = intel_pipe_set_base(crtc, x, y, old_fb);
+ ret = intel_pipe_set_base(crtc, x, y, fb);
intel_update_watermarks(dev);
@@ -4765,10 +5981,12 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode,
int x, int y,
- struct drm_framebuffer *old_fb)
+ struct drm_framebuffer *fb)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct intel_encoder *encoder;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe;
int ret;
@@ -4776,15 +5994,22 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
drm_vblank_pre_modeset(dev, pipe);
ret = dev_priv->display.crtc_mode_set(crtc, mode, adjusted_mode,
- x, y, old_fb);
+ x, y, fb);
drm_vblank_post_modeset(dev, pipe);
- if (ret)
- intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF;
- else
- intel_crtc->dpms_mode = DRM_MODE_DPMS_ON;
+ if (ret != 0)
+ return ret;
- return ret;
+ for_each_encoder_on_crtc(dev, crtc, encoder) {
+ DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n",
+ encoder->base.base.id,
+ drm_get_encoder_name(&encoder->base),
+ mode->base.id, mode->name);
+ encoder_funcs = encoder->base.helper_private;
+ encoder_funcs->mode_set(&encoder->base, mode, adjusted_mode);
+ }
+
+ return 0;
}
static bool intel_eld_uptodate(struct drm_connector *connector,
@@ -4846,9 +6071,8 @@ static void g4x_write_eld(struct drm_connector *connector,
if (!eld[0])
return;
- if (eld[2] < (uint8_t)len)
- len = eld[2];
- DRM_DEBUG_KMS("ELD size %d\n", len);
+ len = min_t(uint8_t, eld[2], len);
+ DRM_DEBUG_DRIVER("ELD size %d\n", len);
for (i = 0; i < len; i++)
I915_WRITE(G4X_HDMIW_HDMIEDID, *((uint32_t *)eld + i));
@@ -4857,6 +6081,91 @@ static void g4x_write_eld(struct drm_connector *connector,
I915_WRITE(G4X_AUD_CNTL_ST, i);
}
+static void haswell_write_eld(struct drm_connector *connector,
+ struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ uint8_t *eld = connector->eld;
+ struct drm_device *dev = crtc->dev;
+ uint32_t eldv;
+ uint32_t i;
+ int len;
+ int pipe = to_intel_crtc(crtc)->pipe;
+ int tmp;
+
+ int hdmiw_hdmiedid = HSW_AUD_EDID_DATA(pipe);
+ int aud_cntl_st = HSW_AUD_DIP_ELD_CTRL(pipe);
+ int aud_config = HSW_AUD_CFG(pipe);
+ int aud_cntrl_st2 = HSW_AUD_PIN_ELD_CP_VLD;
+
+
+ DRM_DEBUG_DRIVER("HDMI: Haswell Audio initialize....\n");
+
+ /* Audio output enable */
+ DRM_DEBUG_DRIVER("HDMI audio: enable codec\n");
+ tmp = I915_READ(aud_cntrl_st2);
+ tmp |= (AUDIO_OUTPUT_ENABLE_A << (pipe * 4));
+ I915_WRITE(aud_cntrl_st2, tmp);
+
+ /* Wait for 1 vertical blank */
+ intel_wait_for_vblank(dev, pipe);
+
+ /* Set ELD valid state */
+ tmp = I915_READ(aud_cntrl_st2);
+ DRM_DEBUG_DRIVER("HDMI audio: pin eld vld status=0x%8x\n", tmp);
+ tmp |= (AUDIO_ELD_VALID_A << (pipe * 4));
+ I915_WRITE(aud_cntrl_st2, tmp);
+ tmp = I915_READ(aud_cntrl_st2);
+ DRM_DEBUG_DRIVER("HDMI audio: eld vld status=0x%8x\n", tmp);
+
+ /* Enable HDMI mode */
+ tmp = I915_READ(aud_config);
+ DRM_DEBUG_DRIVER("HDMI audio: audio conf: 0x%8x\n", tmp);
+ /* clear N_programing_enable and N_value_index */
+ tmp &= ~(AUD_CONFIG_N_VALUE_INDEX | AUD_CONFIG_N_PROG_ENABLE);
+ I915_WRITE(aud_config, tmp);
+
+ DRM_DEBUG_DRIVER("ELD on pipe %c\n", pipe_name(pipe));
+
+ eldv = AUDIO_ELD_VALID_A << (pipe * 4);
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) {
+ DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n");
+ eld[5] |= (1 << 2); /* Conn_Type, 0x1 = DisplayPort */
+ I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */
+ } else
+ I915_WRITE(aud_config, 0);
+
+ if (intel_eld_uptodate(connector,
+ aud_cntrl_st2, eldv,
+ aud_cntl_st, IBX_ELD_ADDRESS,
+ hdmiw_hdmiedid))
+ return;
+
+ i = I915_READ(aud_cntrl_st2);
+ i &= ~eldv;
+ I915_WRITE(aud_cntrl_st2, i);
+
+ if (!eld[0])
+ return;
+
+ i = I915_READ(aud_cntl_st);
+ i &= ~IBX_ELD_ADDRESS;
+ I915_WRITE(aud_cntl_st, i);
+ i = (i >> 29) & DIP_PORT_SEL_MASK; /* DIP_Port_Select, 0x1 = PortB */
+ DRM_DEBUG_DRIVER("port num:%d\n", i);
+
+ len = min_t(uint8_t, eld[2], 21); /* 84 bytes of hw ELD buffer */
+ DRM_DEBUG_DRIVER("ELD size %d\n", len);
+ for (i = 0; i < len; i++)
+ I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));
+
+ i = I915_READ(aud_cntrl_st2);
+ i |= eldv;
+ I915_WRITE(aud_cntrl_st2, i);
+
+}
+
static void ironlake_write_eld(struct drm_connector *connector,
struct drm_crtc *crtc)
{
@@ -4869,36 +6178,32 @@ static void ironlake_write_eld(struct drm_connector *connector,
int aud_config;
int aud_cntl_st;
int aud_cntrl_st2;
+ int pipe = to_intel_crtc(crtc)->pipe;
if (HAS_PCH_IBX(connector->dev)) {
- hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID_A;
- aud_config = IBX_AUD_CONFIG_A;
- aud_cntl_st = IBX_AUD_CNTL_ST_A;
+ hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID(pipe);
+ aud_config = IBX_AUD_CFG(pipe);
+ aud_cntl_st = IBX_AUD_CNTL_ST(pipe);
aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
} else {
- hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID_A;
- aud_config = CPT_AUD_CONFIG_A;
- aud_cntl_st = CPT_AUD_CNTL_ST_A;
+ hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID(pipe);
+ aud_config = CPT_AUD_CFG(pipe);
+ aud_cntl_st = CPT_AUD_CNTL_ST(pipe);
aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
}
- i = to_intel_crtc(crtc)->pipe;
- hdmiw_hdmiedid += i * 0x100;
- aud_cntl_st += i * 0x100;
- aud_config += i * 0x100;
-
- DRM_DEBUG_KMS("ELD on pipe %c\n", pipe_name(i));
+ DRM_DEBUG_DRIVER("ELD on pipe %c\n", pipe_name(pipe));
i = I915_READ(aud_cntl_st);
- i = (i >> 29) & 0x3; /* DIP_Port_Select, 0x1 = PortB */
+ i = (i >> 29) & DIP_PORT_SEL_MASK; /* DIP_Port_Select, 0x1 = PortB */
if (!i) {
- DRM_DEBUG_KMS("Audio directed to unknown port\n");
+ DRM_DEBUG_DRIVER("Audio directed to unknown port\n");
/* operate blindly on all ports */
eldv = IBX_ELD_VALIDB;
eldv |= IBX_ELD_VALIDB << 4;
eldv |= IBX_ELD_VALIDB << 8;
} else {
- DRM_DEBUG_KMS("ELD on port %c\n", 'A' + i);
+ DRM_DEBUG_DRIVER("ELD on port %c\n", 'A' + i);
eldv = IBX_ELD_VALIDB << ((i - 1) * 4);
}
@@ -4926,11 +6231,8 @@ static void ironlake_write_eld(struct drm_connector *connector,
i &= ~IBX_ELD_ADDRESS;
I915_WRITE(aud_cntl_st, i);
- /* 84 bytes of hw ELD buffer */
- len = 21;
- if (eld[2] < (uint8_t)len)
- len = eld[2];
- DRM_DEBUG_KMS("ELD size %d\n", len);
+ len = min_t(uint8_t, eld[2], 21); /* 84 bytes of hw ELD buffer */
+ DRM_DEBUG_DRIVER("ELD size %d\n", len);
for (i = 0; i < len; i++)
I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));
@@ -4951,7 +6253,7 @@ void intel_write_eld(struct drm_encoder *encoder,
if (!connector)
return;
- DRM_DEBUG_KMS("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
+ DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
connector->base.id,
drm_get_connector_name(connector),
connector->encoder->base.id,
@@ -5140,8 +6442,6 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
uint32_t addr;
int ret;
- DRM_DEBUG_KMS("\n");
-
/* if we want to turn off the cursor ignore width and height */
if (!handle) {
DRM_DEBUG_KMS("cursor off\n");
@@ -5184,7 +6484,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
ret = i915_gem_object_put_fence(obj);
if (ret) {
- DRM_ERROR("failed to release fence for cursor\n");
+ DRM_ERROR("failed to release fence for cursor");
goto fail_unpin;
}
@@ -5210,7 +6510,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
if (intel_crtc->cursor_bo != obj)
i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
} else
- i915_gem_object_unpin_from_display_plane(intel_crtc->cursor_bo);
+ i915_gem_object_unpin(intel_crtc->cursor_bo);
drm_gem_object_unreference(&intel_crtc->cursor_bo->base);
}
@@ -5225,7 +6525,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
return 0;
fail_unpin:
- i915_gem_object_unpin_from_display_plane(obj);
+ i915_gem_object_unpin(obj);
fail_locked:
DRM_UNLOCK(dev);
fail:
@@ -5311,6 +6611,11 @@ intel_framebuffer_create(struct drm_device *dev,
int ret;
intel_fb = malloc(sizeof(*intel_fb), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_fb) {
+ drm_gem_object_unreference_unlocked(&obj->base);
+ return -ENOMEM;
+ }
+
ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj);
if (ret) {
drm_gem_object_unreference_unlocked(&obj->base);
@@ -5325,7 +6630,7 @@ intel_framebuffer_create(struct drm_device *dev,
static u32
intel_framebuffer_pitch_for_width(int width, int bpp)
{
- u32 pitch = howmany(width * bpp, 8);
+ u32 pitch = DIV_ROUND_UP(width * bpp, 8);
return roundup2(pitch, 64);
}
@@ -5359,53 +6664,44 @@ intel_framebuffer_create_for_mode(struct drm_device *dev,
return intel_framebuffer_create(dev, &mode_cmd, obj, res);
}
-static int
+static struct drm_framebuffer *
mode_fits_in_fbdev(struct drm_device *dev,
- struct drm_display_mode *mode,
- struct drm_framebuffer **res)
+ struct drm_display_mode *mode)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj;
struct drm_framebuffer *fb;
- if (dev_priv->fbdev == NULL) {
- *res = NULL;
- return 0;
- }
+ if (dev_priv->fbdev == NULL)
+ return NULL;
obj = dev_priv->fbdev->ifb.obj;
- if (obj == NULL) {
- *res = NULL;
- return 0;
- }
+ if (obj == NULL)
+ return NULL;
fb = &dev_priv->fbdev->ifb.base;
if (fb->pitches[0] < intel_framebuffer_pitch_for_width(mode->hdisplay,
- fb->bits_per_pixel)) {
- *res = NULL;
- return 0;
- }
+ fb->bits_per_pixel))
+ return NULL;
- if (obj->base.size < mode->vdisplay * fb->pitches[0]) {
- *res = NULL;
- return 0;
- }
+ if (obj->base.size < mode->vdisplay * fb->pitches[0])
+ return NULL;
- *res = fb;
- return 0;
+ return fb;
}
-bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
- struct drm_connector *connector,
+bool intel_get_load_detect_pipe(struct drm_connector *connector,
struct drm_display_mode *mode,
struct intel_load_detect_pipe *old)
{
struct intel_crtc *intel_crtc;
+ struct intel_encoder *intel_encoder =
+ intel_attached_encoder(connector);
struct drm_crtc *possible_crtc;
struct drm_encoder *encoder = &intel_encoder->base;
struct drm_crtc *crtc = NULL;
struct drm_device *dev = encoder->dev;
- struct drm_framebuffer *old_fb;
+ struct drm_framebuffer *fb;
int i = -1;
int ret;
@@ -5427,21 +6723,12 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
if (encoder->crtc) {
crtc = encoder->crtc;
- intel_crtc = to_intel_crtc(crtc);
- old->dpms_mode = intel_crtc->dpms_mode;
+ old->dpms_mode = connector->dpms;
old->load_detect_temp = false;
/* Make sure the crtc and connector are running */
- if (intel_crtc->dpms_mode != DRM_MODE_DPMS_ON) {
- struct drm_encoder_helper_funcs *encoder_funcs;
- struct drm_crtc_helper_funcs *crtc_funcs;
-
- crtc_funcs = crtc->helper_private;
- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
-
- encoder_funcs = encoder->helper_private;
- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
- }
+ if (connector->dpms != DRM_MODE_DPMS_ON)
+ connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
return true;
}
@@ -5465,19 +6752,17 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
return false;
}
- encoder->crtc = crtc;
- connector->encoder = encoder;
+ intel_encoder->new_crtc = to_intel_crtc(crtc);
+ to_intel_connector(connector)->new_encoder = intel_encoder;
intel_crtc = to_intel_crtc(crtc);
- old->dpms_mode = intel_crtc->dpms_mode;
+ old->dpms_mode = connector->dpms;
old->load_detect_temp = true;
old->release_fb = NULL;
if (!mode)
mode = &load_detect_mode;
- old_fb = crtc->fb;
-
/* We need a framebuffer large enough to accommodate all accesses
* that the plane may generate whilst we perform load detection.
* We can not rely on the fbcon either being present (we get called
@@ -5485,25 +6770,23 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
* not even exist) or that it is large enough to satisfy the
* requested mode.
*/
- ret = mode_fits_in_fbdev(dev, mode, &crtc->fb);
- if (crtc->fb == NULL) {
+ ret = 0;
+ fb = mode_fits_in_fbdev(dev, mode);
+ if (fb == NULL) {
DRM_DEBUG_KMS("creating tmp fb for load-detection\n");
- ret = intel_framebuffer_create_for_mode(dev, mode, 24, 32,
- &crtc->fb);
- old->release_fb = crtc->fb;
+ ret = intel_framebuffer_create_for_mode(dev, mode, 24, 32, &fb);
+ old->release_fb = fb;
} else
DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n");
if (ret) {
DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n");
- crtc->fb = old_fb;
return false;
}
- if (!drm_crtc_helper_set_mode(crtc, mode, 0, 0, old_fb)) {
+ if (!intel_set_mode(crtc, mode, 0, 0, fb)) {
DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n");
if (old->release_fb)
old->release_fb->funcs->destroy(old->release_fb);
- crtc->fb = old_fb;
return false;
}
@@ -5512,23 +6795,23 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
return true;
}
-void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
- struct drm_connector *connector,
+void intel_release_load_detect_pipe(struct drm_connector *connector,
struct intel_load_detect_pipe *old)
{
+ struct intel_encoder *intel_encoder =
+ intel_attached_encoder(connector);
struct drm_encoder *encoder = &intel_encoder->base;
- struct drm_device *dev = encoder->dev;
- struct drm_crtc *crtc = encoder->crtc;
- struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
connector->base.id, drm_get_connector_name(connector),
encoder->base.id, drm_get_encoder_name(encoder));
if (old->load_detect_temp) {
- connector->encoder = NULL;
- drm_helper_disable_unused_functions(dev);
+ struct drm_crtc *crtc = encoder->crtc;
+
+ to_intel_connector(connector)->new_encoder = NULL;
+ intel_encoder->new_crtc = NULL;
+ intel_set_mode(crtc, NULL, 0, 0, NULL);
if (old->release_fb)
old->release_fb->funcs->destroy(old->release_fb);
@@ -5537,10 +6820,8 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
}
/* Switch crtc and encoder back off if necessary */
- if (old->dpms_mode != DRM_MODE_DPMS_ON) {
- encoder_funcs->dpms(encoder, old->dpms_mode);
- crtc_funcs->dpms(crtc, old->dpms_mode);
- }
+ if (old->dpms_mode != DRM_MODE_DPMS_ON)
+ connector->funcs->dpms(connector, old->dpms_mode);
}
/* Returns the clock of the currently programmed mode of the given pipe. */
@@ -5636,14 +6917,16 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- int pipe = intel_crtc->pipe;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
struct drm_display_mode *mode;
- int htot = I915_READ(HTOTAL(pipe));
- int hsync = I915_READ(HSYNC(pipe));
- int vtot = I915_READ(VTOTAL(pipe));
- int vsync = I915_READ(VSYNC(pipe));
+ int htot = I915_READ(HTOTAL(cpu_transcoder));
+ int hsync = I915_READ(HSYNC(cpu_transcoder));
+ int vtot = I915_READ(VTOTAL(cpu_transcoder));
+ int vsync = I915_READ(VSYNC(cpu_transcoder));
mode = malloc(sizeof(*mode), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!mode)
+ return NULL;
mode->clock = intel_crtc_clock_get(dev, crtc);
mode->hdisplay = (htot & 0xffff) + 1;
@@ -5660,44 +6943,6 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
return mode;
}
-#define GPU_IDLE_TIMEOUT (500 /* ms */ * 1000 / hz)
-
-/* When this timer fires, we've been idle for awhile */
-static void intel_gpu_idle_timer(void *arg)
-{
- struct drm_device *dev = arg;
- drm_i915_private_t *dev_priv = dev->dev_private;
-
- if (!list_empty(&dev_priv->mm.active_list)) {
- /* Still processing requests, so just re-arm the timer. */
- callout_schedule(&dev_priv->idle_callout, GPU_IDLE_TIMEOUT);
- return;
- }
-
- dev_priv->busy = false;
- taskqueue_enqueue(dev_priv->tq, &dev_priv->idle_task);
-}
-
-#define CRTC_IDLE_TIMEOUT (1000 /* ms */ * 1000 / hz)
-
-static void intel_crtc_idle_timer(void *arg)
-{
- struct intel_crtc *intel_crtc = arg;
- struct drm_crtc *crtc = &intel_crtc->base;
- drm_i915_private_t *dev_priv = crtc->dev->dev_private;
- struct intel_framebuffer *intel_fb;
-
- intel_fb = to_intel_framebuffer(crtc->fb);
- if (intel_fb && intel_fb->obj->active) {
- /* The framebuffer is still being accessed by the GPU. */
- callout_schedule(&intel_crtc->idle_callout, CRTC_IDLE_TIMEOUT);
- return;
- }
-
- intel_crtc->busy = false;
- taskqueue_enqueue(dev_priv->tq, &dev_priv->idle_task);
-}
-
static void intel_increase_pllclock(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
@@ -5727,10 +6972,6 @@ static void intel_increase_pllclock(struct drm_crtc *crtc)
if (dpll & DISPLAY_RATE_SELECT_FPA1)
DRM_DEBUG_DRIVER("failed to upclock LVDS!\n");
}
-
- /* Schedule downclock */
- callout_reset(&intel_crtc->idle_callout, CRTC_IDLE_TIMEOUT,
- intel_crtc_idle_timer, intel_crtc);
}
static void intel_decrease_pllclock(struct drm_crtc *crtc)
@@ -5769,88 +7010,40 @@ static void intel_decrease_pllclock(struct drm_crtc *crtc)
}
-/**
- * intel_idle_update - adjust clocks for idleness
- * @work: work struct
- *
- * Either the GPU or display (or both) went idle. Check the busy status
- * here and adjust the CRTC and GPU clocks as necessary.
- */
-static void intel_idle_update(void *arg, int pending)
+void intel_mark_busy(struct drm_device *dev)
+{
+ i915_update_gfx_val(dev->dev_private);
+}
+
+void intel_mark_idle(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv = arg;
- struct drm_device *dev = dev_priv->dev;
struct drm_crtc *crtc;
- struct intel_crtc *intel_crtc;
if (!i915_powersave)
return;
- DRM_LOCK(dev);
-
- i915_update_gfx_val(dev_priv);
-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- /* Skip inactive CRTCs */
if (!crtc->fb)
continue;
- intel_crtc = to_intel_crtc(crtc);
- if (!intel_crtc->busy)
- intel_decrease_pllclock(crtc);
+ intel_decrease_pllclock(crtc);
}
-
- DRM_UNLOCK(dev);
}
-/**
- * intel_mark_busy - mark the GPU and possibly the display busy
- * @dev: drm device
- * @obj: object we're operating on
- *
- * Callers can use this function to indicate that the GPU is busy processing
- * commands. If @obj matches one of the CRTC objects (i.e. it's a scanout
- * buffer), we'll also mark the display as busy, so we know to increase its
- * clock frequency.
- */
-void intel_mark_busy(struct drm_device *dev, struct drm_i915_gem_object *obj)
+void intel_mark_fb_busy(struct drm_i915_gem_object *obj)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
- struct drm_crtc *crtc = NULL;
- struct intel_framebuffer *intel_fb;
- struct intel_crtc *intel_crtc;
-
- if (!drm_core_check_feature(dev, DRIVER_MODESET))
- return;
-
- if (!dev_priv->busy) {
- intel_sanitize_pm(dev);
- dev_priv->busy = true;
- } else
- callout_reset(&dev_priv->idle_callout, GPU_IDLE_TIMEOUT,
- intel_gpu_idle_timer, dev);
+ struct drm_device *dev = obj->base.dev;
+ struct drm_crtc *crtc;
- if (obj == NULL)
+ if (!i915_powersave)
return;
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
if (!crtc->fb)
continue;
- intel_crtc = to_intel_crtc(crtc);
- intel_fb = to_intel_framebuffer(crtc->fb);
- if (intel_fb->obj == obj) {
- if (!intel_crtc->busy) {
- /* Non-busy -> busy, upclock */
- intel_increase_pllclock(crtc);
- intel_crtc->busy = true;
- } else {
- /* Busy -> busy, put off timer */
- callout_reset(&intel_crtc->idle_callout,
- CRTC_IDLE_TIMEOUT, intel_crtc_idle_timer,
- intel_crtc);
- }
- }
+ if (to_intel_framebuffer(crtc->fb)->obj == obj)
+ intel_increase_pllclock(crtc);
}
}
@@ -5867,8 +7060,8 @@ static void intel_crtc_destroy(struct drm_crtc *crtc)
mtx_unlock(&dev->event_lock);
if (work) {
- taskqueue_cancel(dev_priv->tq, &work->task, NULL);
- taskqueue_drain(dev_priv->tq, &work->task);
+ taskqueue_cancel(dev_priv->wq, &work->work, NULL);
+ taskqueue_drain(dev_priv->wq, &work->work);
free(work, DRM_MEM_KMS);
}
@@ -5881,7 +7074,7 @@ static void intel_unpin_work_fn(void *arg, int pending)
{
struct intel_unpin_work *work =
arg;
- struct drm_device *dev = work->dev;
+ struct drm_device *dev = work->crtc->dev;
DRM_LOCK(dev);
intel_unpin_fb_obj(work->old_fb_obj);
@@ -5890,6 +7083,10 @@ static void intel_unpin_work_fn(void *arg, int pending)
intel_update_fbc(dev);
DRM_UNLOCK(dev);
+
+ BUG_ON(atomic_read(&to_intel_crtc(work->crtc)->unpin_work_count) == 0);
+ atomic_dec(&to_intel_crtc(work->crtc)->unpin_work_count);
+
free(work, DRM_MEM_KMS);
}
@@ -5900,65 +7097,41 @@ static void do_intel_finish_page_flip(struct drm_device *dev,
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
struct intel_unpin_work *work;
struct drm_i915_gem_object *obj;
- struct drm_pending_vblank_event *e;
- struct timeval tnow, tvbl;
/* Ignore early vblank irqs */
if (intel_crtc == NULL)
return;
- microtime(&tnow);
-
mtx_lock(&dev->event_lock);
work = intel_crtc->unpin_work;
- if (work == NULL || !work->pending) {
+
+ /* Ensure we don't miss a work->pending update ... */
+ smp_rmb();
+
+ if (work == NULL || atomic_read(&work->pending) < INTEL_FLIP_COMPLETE) {
mtx_unlock(&dev->event_lock);
return;
}
- intel_crtc->unpin_work = NULL;
+ /* and that the unpin work is consistent wrt ->pending. */
+ smp_rmb();
- if (work->event) {
- e = work->event;
- e->event.sequence = drm_vblank_count_and_time(dev, intel_crtc->pipe, &tvbl);
-
- /* Called before vblank count and timestamps have
- * been updated for the vblank interval of flip
- * completion? Need to increment vblank count and
- * add one videorefresh duration to returned timestamp
- * to account for this. We assume this happened if we
- * get called over 0.9 frame durations after the last
- * timestamped vblank.
- *
- * This calculation can not be used with vrefresh rates
- * below 5Hz (10Hz to be on the safe side) without
- * promoting to 64 integers.
- */
- if (10 * (timeval_to_ns(&tnow) - timeval_to_ns(&tvbl)) >
- 9 * crtc->framedur_ns) {
- e->event.sequence++;
- tvbl = ns_to_timeval(timeval_to_ns(&tvbl) +
- crtc->framedur_ns);
- }
-
- e->event.tv_sec = tvbl.tv_sec;
- e->event.tv_usec = tvbl.tv_usec;
+ intel_crtc->unpin_work = NULL;
- list_add_tail(&e->base.link,
- &e->base.file_priv->event_list);
- drm_event_wakeup(&e->base);
- }
+ if (work->event)
+ drm_send_vblank_event(dev, intel_crtc->pipe, work->event);
drm_vblank_put(dev, intel_crtc->pipe);
+ mtx_unlock(&dev->event_lock);
+
obj = work->old_fb_obj;
- atomic_clear_int(&obj->pending_flip, 1 << intel_crtc->plane);
- if (atomic_load_acq_int(&obj->pending_flip) == 0)
- wakeup(&obj->pending_flip);
- mtx_unlock(&dev->event_lock);
+ atomic_clear_mask(1 << intel_crtc->plane,
+ &obj->pending_flip);
+ wake_up(&dev_priv->pending_flip_queue);
- taskqueue_enqueue(dev_priv->tq, &work->task);
+ taskqueue_enqueue(dev_priv->wq, &work->work);
CTR2(KTR_DRM, "i915_flip_complete %d %p", intel_crtc->plane,
work->pending_flip_obj);
@@ -5986,16 +7159,25 @@ void intel_prepare_page_flip(struct drm_device *dev, int plane)
struct intel_crtc *intel_crtc =
to_intel_crtc(dev_priv->plane_to_crtc_mapping[plane]);
+ /* NB: An MMIO update of the plane base pointer will also
+ * generate a page-flip completion irq, i.e. every modeset
+ * is also accompanied by a spurious intel_prepare_page_flip().
+ */
mtx_lock(&dev->event_lock);
- if (intel_crtc->unpin_work) {
- if ((++intel_crtc->unpin_work->pending) > 1)
- DRM_ERROR("Prepared flip multiple times\n");
- } else {
- DRM_DEBUG("preparing flip with no unpin work?\n");
- }
+ if (intel_crtc->unpin_work)
+ atomic_inc_not_zero(&intel_crtc->unpin_work->pending);
mtx_unlock(&dev->event_lock);
}
+inline static void intel_mark_page_flip_active(struct intel_crtc *intel_crtc)
+{
+ /* Ensure that the work item is consistent when activating it ... */
+ smp_wmb();
+ atomic_set(&intel_crtc->unpin_work->pending, INTEL_FLIP_PENDING);
+ /* and that it is marked active as soon as the irq could fire. */
+ smp_wmb();
+}
+
static int intel_gen2_queue_flip(struct drm_device *dev,
struct drm_crtc *crtc,
struct drm_framebuffer *fb,
@@ -6003,18 +7185,14 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- unsigned long offset;
u32 flip_mask;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
if (ret)
goto err;
- /* Offset into the new buffer for cases of shared fbs between CRTCs */
- offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
-
ret = intel_ring_begin(ring, 6);
if (ret)
goto err_unpin;
@@ -6031,8 +7209,10 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
intel_ring_emit(ring, MI_DISPLAY_FLIP |
MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
intel_ring_emit(ring, fb->pitches[0]);
- intel_ring_emit(ring, obj->gtt_offset + offset);
+ intel_ring_emit(ring, obj->gtt_offset + intel_crtc->dspaddr_offset);
intel_ring_emit(ring, 0); /* aux display base address, unused */
+
+ intel_mark_page_flip_active(intel_crtc);
intel_ring_advance(ring);
return 0;
@@ -6049,18 +7229,14 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- unsigned long offset;
u32 flip_mask;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
if (ret)
goto err;
- /* Offset into the new buffer for cases of shared fbs between CRTCs */
- offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
-
ret = intel_ring_begin(ring, 6);
if (ret)
goto err_unpin;
@@ -6074,9 +7250,10 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 |
MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
intel_ring_emit(ring, fb->pitches[0]);
- intel_ring_emit(ring, obj->gtt_offset + offset);
+ intel_ring_emit(ring, obj->gtt_offset + intel_crtc->dspaddr_offset);
intel_ring_emit(ring, MI_NOOP);
+ intel_mark_page_flip_active(intel_crtc);
intel_ring_advance(ring);
return 0;
@@ -6094,7 +7271,7 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
uint32_t pf, pipesrc;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
@@ -6112,7 +7289,9 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
intel_ring_emit(ring, MI_DISPLAY_FLIP |
MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
intel_ring_emit(ring, fb->pitches[0]);
- intel_ring_emit(ring, obj->gtt_offset | obj->tiling_mode);
+ intel_ring_emit(ring,
+ (obj->gtt_offset + intel_crtc->dspaddr_offset) |
+ obj->tiling_mode);
/* XXX Enabling the panel-fitter across page-flip is so far
* untested on non-native modes, so ignore it for now.
@@ -6121,6 +7300,8 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
pf = 0;
pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
intel_ring_emit(ring, pf | pipesrc);
+
+ intel_mark_page_flip_active(intel_crtc);
intel_ring_advance(ring);
return 0;
@@ -6137,7 +7318,7 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
uint32_t pf, pipesrc;
int ret;
@@ -6152,7 +7333,7 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
intel_ring_emit(ring, MI_DISPLAY_FLIP |
MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
intel_ring_emit(ring, fb->pitches[0] | obj->tiling_mode);
- intel_ring_emit(ring, obj->gtt_offset);
+ intel_ring_emit(ring, obj->gtt_offset + intel_crtc->dspaddr_offset);
/* Contrary to the suggestions in the documentation,
* "Enable Panel Fitter" does not seem to be required when page
@@ -6163,6 +7344,8 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
pf = 0;
pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
intel_ring_emit(ring, pf | pipesrc);
+
+ intel_mark_page_flip_active(intel_crtc);
intel_ring_advance(ring);
return 0;
@@ -6185,21 +7368,40 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- struct intel_ring_buffer *ring = &dev_priv->rings[BCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
+ uint32_t plane_bit = 0;
int ret;
ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
if (ret)
goto err;
+ switch(intel_crtc->plane) {
+ case PLANE_A:
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_A;
+ break;
+ case PLANE_B:
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_B;
+ break;
+ case PLANE_C:
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_C;
+ break;
+ default:
+ WARN_ONCE(1, "unknown plane in flip command\n");
+ ret = -ENODEV;
+ goto err_unpin;
+ }
+
ret = intel_ring_begin(ring, 4);
if (ret)
goto err_unpin;
- intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
+ intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | plane_bit);
intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
- intel_ring_emit(ring, (obj->gtt_offset));
+ intel_ring_emit(ring, obj->gtt_offset + intel_crtc->dspaddr_offset);
intel_ring_emit(ring, (MI_NOOP));
+
+ intel_mark_page_flip_active(intel_crtc);
intel_ring_advance(ring);
return 0;
@@ -6223,19 +7425,33 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_framebuffer *intel_fb;
- struct drm_i915_gem_object *obj;
+ struct drm_framebuffer *old_fb = crtc->fb;
+ struct drm_i915_gem_object *obj = to_intel_framebuffer(fb)->obj;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
struct intel_unpin_work *work;
int ret;
+ /* Can't change pixel format via MI display flips. */
+ if (fb->pixel_format != crtc->fb->pixel_format)
+ return -EINVAL;
+
+ /*
+ * TILEOFF/LINOFF registers can't be changed via MI display flips.
+ * Note that pitch changes could also affect these register.
+ */
+ if (INTEL_INFO(dev)->gen > 3 &&
+ (fb->offsets[0] != crtc->fb->offsets[0] ||
+ fb->pitches[0] != crtc->fb->pitches[0]))
+ return -EINVAL;
+
work = malloc(sizeof *work, DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (work == NULL)
+ return -ENOMEM;
work->event = event;
- work->dev = crtc->dev;
- intel_fb = to_intel_framebuffer(crtc->fb);
- work->old_fb_obj = intel_fb->obj;
- TASK_INIT(&work->task, 0, intel_unpin_work_fn, work);
+ work->crtc = crtc;
+ work->old_fb_obj = to_intel_framebuffer(old_fb)->obj;
+ TASK_INIT(&work->work, 0, intel_unpin_work_fn, work);
ret = drm_vblank_get(dev, intel_crtc->pipe);
if (ret)
@@ -6254,10 +7470,12 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
intel_crtc->unpin_work = work;
mtx_unlock(&dev->event_lock);
- intel_fb = to_intel_framebuffer(fb);
- obj = intel_fb->obj;
+ if (atomic_read(&intel_crtc->unpin_work_count) >= 2)
+ taskqueue_drain_all(dev_priv->wq);
- DRM_LOCK(dev);
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret)
+ goto cleanup;
/* Reference the objects for the scheduled work. */
drm_gem_object_reference(&work->old_fb_obj->base);
@@ -6272,13 +7490,15 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
/* Block clients from rendering to the new back buffer until
* the flip occurs and the object is no longer visible.
*/
- atomic_set_int(&work->old_fb_obj->pending_flip, 1 << intel_crtc->plane);
+ atomic_add(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
+ atomic_inc(&intel_crtc->unpin_work_count);
ret = dev_priv->display.queue_flip(dev, crtc, fb, obj);
if (ret)
goto cleanup_pending;
+
intel_disable_fbc(dev);
- intel_mark_busy(dev, obj);
+ intel_mark_fb_busy(obj);
DRM_UNLOCK(dev);
CTR2(KTR_DRM, "i915_flip_request %d %p", intel_crtc->plane, obj);
@@ -6286,11 +7506,14 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
return 0;
cleanup_pending:
- atomic_clear_int(&work->old_fb_obj->pending_flip, 1 << intel_crtc->plane);
+ atomic_dec(&intel_crtc->unpin_work_count);
+ crtc->fb = old_fb;
+ atomic_sub(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
drm_gem_object_unreference(&work->old_fb_obj->base);
drm_gem_object_unreference(&obj->base);
DRM_UNLOCK(dev);
+cleanup:
mtx_lock(&dev->event_lock);
intel_crtc->unpin_work = NULL;
mtx_unlock(&dev->event_lock);
@@ -6302,85 +7525,807 @@ free_work:
return ret;
}
-static void intel_sanitize_modesetting(struct drm_device *dev,
- int pipe, int plane)
+static struct drm_crtc_helper_funcs intel_helper_funcs = {
+ .mode_set_base_atomic = intel_pipe_set_base_atomic,
+ .load_lut = intel_crtc_load_lut,
+ .disable = intel_crtc_noop,
+};
+
+bool intel_encoder_check_is_cloned(struct intel_encoder *encoder)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
- u32 reg, val;
- int i;
+ struct intel_encoder *other_encoder;
+ struct drm_crtc *crtc = &encoder->new_crtc->base;
- /* Clear any frame start delays used for debugging left by the BIOS */
- for_each_pipe(i) {
- reg = PIPECONF(i);
- I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
+ if (WARN_ON(!crtc))
+ return false;
+
+ list_for_each_entry(other_encoder,
+ &crtc->dev->mode_config.encoder_list,
+ base.head) {
+
+ if (&other_encoder->new_crtc->base != crtc ||
+ encoder == other_encoder)
+ continue;
+ else
+ return true;
}
- if (HAS_PCH_SPLIT(dev))
- return;
+ return false;
+}
- /* Who knows what state these registers were left in by the BIOS or
- * grub?
- *
- * If we leave the registers in a conflicting state (e.g. with the
- * display plane reading from the other pipe than the one we intend
- * to use) then when we attempt to teardown the active mode, we will
- * not disable the pipes and planes in the correct order -- leaving
- * a plane reading from a disabled pipe and possibly leading to
- * undefined behaviour.
+static bool intel_encoder_crtc_ok(struct drm_encoder *encoder,
+ struct drm_crtc *crtc)
+{
+ struct drm_device *dev;
+ struct drm_crtc *tmp;
+ int crtc_mask = 1;
+
+ WARN(!crtc, "checking null crtc?\n");
+
+ dev = crtc->dev;
+
+ list_for_each_entry(tmp, &dev->mode_config.crtc_list, head) {
+ if (tmp == crtc)
+ break;
+ crtc_mask <<= 1;
+ }
+
+ if (encoder->possible_crtcs & crtc_mask)
+ return true;
+ return false;
+}
+
+/**
+ * intel_modeset_update_staged_output_state
+ *
+ * Updates the staged output configuration state, e.g. after we've read out the
+ * current hw state.
+ */
+static void intel_modeset_update_staged_output_state(struct drm_device *dev)
+{
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ connector->new_encoder =
+ to_intel_encoder(connector->base.encoder);
+ }
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ encoder->new_crtc =
+ to_intel_crtc(encoder->base.crtc);
+ }
+}
+
+/**
+ * intel_modeset_commit_output_state
+ *
+ * This function copies the stage display pipe configuration to the real one.
+ */
+static void intel_modeset_commit_output_state(struct drm_device *dev)
+{
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ connector->base.encoder = &connector->new_encoder->base;
+ }
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ encoder->base.crtc = &encoder->new_crtc->base;
+ }
+}
+
+static int
+intel_modeset_adjusted_mode(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode **res)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_display_mode *adjusted_mode;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct intel_encoder *encoder;
+
+ adjusted_mode = drm_mode_duplicate(dev, mode);
+ if (!adjusted_mode)
+ return -ENOMEM;
+
+ /* Pass our mode to the connectors and the CRTC to give them a chance to
+ * adjust it according to limitations or connector properties, and also
+ * a chance to reject the mode entirely.
*/
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
- reg = DSPCNTR(plane);
- val = I915_READ(reg);
+ if (&encoder->new_crtc->base != crtc)
+ continue;
+ encoder_funcs = encoder->base.helper_private;
+ if (!(encoder_funcs->mode_fixup(&encoder->base, mode,
+ adjusted_mode))) {
+ DRM_DEBUG_KMS("Encoder fixup failed\n");
+ goto fail;
+ }
+ }
- if ((val & DISPLAY_PLANE_ENABLE) == 0)
- return;
- if (!!(val & DISPPLANE_SEL_PIPE_MASK) == pipe)
- return;
+ if (!(intel_crtc_mode_fixup(crtc, mode, adjusted_mode))) {
+ DRM_DEBUG_KMS("CRTC fixup failed\n");
+ goto fail;
+ }
+ DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
- /* This display plane is active and attached to the other CPU pipe. */
- pipe = !pipe;
+ *res = adjusted_mode;
+ return 0;
+fail:
+ drm_mode_destroy(dev, adjusted_mode);
+ return -EINVAL;
+}
- /* Disable the plane and wait for it to stop reading from the pipe. */
- intel_disable_plane(dev_priv, plane, pipe);
- intel_disable_pipe(dev_priv, pipe);
+/* Computes which crtcs are affected and sets the relevant bits in the mask. For
+ * simplicity we use the crtc's pipe number (because it's easier to obtain). */
+static void
+intel_modeset_affected_pipes(struct drm_crtc *crtc, unsigned *modeset_pipes,
+ unsigned *prepare_pipes, unsigned *disable_pipes)
+{
+ struct intel_crtc *intel_crtc;
+ struct drm_device *dev = crtc->dev;
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+ struct drm_crtc *tmp_crtc;
+
+ *disable_pipes = *modeset_pipes = *prepare_pipes = 0;
+
+ /* Check which crtcs have changed outputs connected to them, these need
+ * to be part of the prepare_pipes mask. We don't (yet) support global
+ * modeset across multiple crtcs, so modeset_pipes will only have one
+ * bit set at most. */
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->base.encoder == &connector->new_encoder->base)
+ continue;
+
+ if (connector->base.encoder) {
+ tmp_crtc = connector->base.encoder->crtc;
+
+ *prepare_pipes |= 1 << to_intel_crtc(tmp_crtc)->pipe;
+ }
+
+ if (connector->new_encoder)
+ *prepare_pipes |=
+ 1 << connector->new_encoder->new_crtc->pipe;
+ }
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ if (encoder->base.crtc == &encoder->new_crtc->base)
+ continue;
+
+ if (encoder->base.crtc) {
+ tmp_crtc = encoder->base.crtc;
+
+ *prepare_pipes |= 1 << to_intel_crtc(tmp_crtc)->pipe;
+ }
+
+ if (encoder->new_crtc)
+ *prepare_pipes |= 1 << encoder->new_crtc->pipe;
+ }
+
+ /* Check for any pipes that will be fully disabled ... */
+ list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
+ base.head) {
+ bool used = false;
+
+ /* Don't try to disable disabled crtcs. */
+ if (!intel_crtc->base.enabled)
+ continue;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ if (encoder->new_crtc == intel_crtc)
+ used = true;
+ }
+
+ if (!used)
+ *disable_pipes |= 1 << intel_crtc->pipe;
+ }
+
+
+ /* set_mode is also used to update properties on life display pipes. */
+ intel_crtc = to_intel_crtc(crtc);
+ if (crtc->enabled)
+ *prepare_pipes |= 1 << intel_crtc->pipe;
+
+ /*
+ * For simplicity do a full modeset on any pipe where the output routing
+ * changed. We could be more clever, but that would require us to be
+ * more careful with calling the relevant encoder->mode_set functions.
+ */
+ if (*prepare_pipes)
+ *modeset_pipes = *prepare_pipes;
+
+ /* ... and mask these out. */
+ *modeset_pipes &= ~(*disable_pipes);
+ *prepare_pipes &= ~(*disable_pipes);
+
+ /*
+ * HACK: We don't (yet) fully support global modesets. intel_set_config
+ * obies this rule, but the modeset restore mode of
+ * intel_modeset_setup_hw_state does not.
+ */
+ *modeset_pipes &= 1 << intel_crtc->pipe;
+ *prepare_pipes &= 1 << intel_crtc->pipe;
}
-static void intel_crtc_reset(struct drm_crtc *crtc)
+static bool intel_crtc_in_use(struct drm_crtc *crtc)
{
+ struct drm_encoder *encoder;
struct drm_device *dev = crtc->dev;
- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- /* Reset flags back to the 'unknown' status so that they
- * will be correctly set on the initial modeset.
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
+ if (encoder->crtc == crtc)
+ return true;
+
+ return false;
+}
+
+static void
+intel_modeset_update_state(struct drm_device *dev, unsigned prepare_pipes)
+{
+ struct intel_encoder *intel_encoder;
+ struct intel_crtc *intel_crtc;
+ struct drm_connector *connector;
+
+ list_for_each_entry(intel_encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ if (!intel_encoder->base.crtc)
+ continue;
+
+ intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
+
+ if (prepare_pipes & (1 << intel_crtc->pipe))
+ intel_encoder->connectors_active = false;
+ }
+
+ intel_modeset_commit_output_state(dev);
+
+ /* Update computed state. */
+ list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
+ base.head) {
+ intel_crtc->base.enabled = intel_crtc_in_use(&intel_crtc->base);
+ }
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder || !connector->encoder->crtc)
+ continue;
+
+ intel_crtc = to_intel_crtc(connector->encoder->crtc);
+
+ if (prepare_pipes & (1 << intel_crtc->pipe)) {
+ struct drm_property *dpms_property =
+ dev->mode_config.dpms_property;
+
+ connector->dpms = DRM_MODE_DPMS_ON;
+ drm_object_property_set_value(&connector->base,
+ dpms_property,
+ DRM_MODE_DPMS_ON);
+
+ intel_encoder = to_intel_encoder(connector->encoder);
+ intel_encoder->connectors_active = true;
+ }
+ }
+
+}
+
+#define for_each_intel_crtc_masked(dev, mask, intel_crtc) \
+ list_for_each_entry((intel_crtc), \
+ &(dev)->mode_config.crtc_list, \
+ base.head) \
+ if (mask & (1 <<(intel_crtc)->pipe)) \
+
+void
+intel_modeset_check_state(struct drm_device *dev)
+{
+ struct intel_crtc *crtc;
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ /* This also checks the encoder/connector hw state with the
+ * ->get_hw_state callbacks. */
+ intel_connector_check_state(connector);
+
+ WARN(&connector->new_encoder->base != connector->base.encoder,
+ "connector's staged encoder doesn't match current encoder\n");
+ }
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ bool enabled = false;
+ bool active = false;
+ enum pipe pipe, tracked_pipe;
+
+ DRM_DEBUG_KMS("[ENCODER:%d:%s]\n",
+ encoder->base.base.id,
+ drm_get_encoder_name(&encoder->base));
+
+ WARN(&encoder->new_crtc->base != encoder->base.crtc,
+ "encoder's stage crtc doesn't match current crtc\n");
+ WARN(encoder->connectors_active && !encoder->base.crtc,
+ "encoder's active_connectors set, but no crtc\n");
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->base.encoder != &encoder->base)
+ continue;
+ enabled = true;
+ if (connector->base.dpms != DRM_MODE_DPMS_OFF)
+ active = true;
+ }
+ WARN(!!encoder->base.crtc != enabled,
+ "encoder's enabled state mismatch "
+ "(expected %i, found %i)\n",
+ !!encoder->base.crtc, enabled);
+ WARN(active && !encoder->base.crtc,
+ "active encoder with no crtc\n");
+
+ WARN(encoder->connectors_active != active,
+ "encoder's computed active state doesn't match tracked active state "
+ "(expected %i, found %i)\n", active, encoder->connectors_active);
+
+ active = encoder->get_hw_state(encoder, &pipe);
+ WARN(active != encoder->connectors_active,
+ "encoder's hw state doesn't match sw tracking "
+ "(expected %i, found %i)\n",
+ encoder->connectors_active, active);
+
+ if (!encoder->base.crtc)
+ continue;
+
+ tracked_pipe = to_intel_crtc(encoder->base.crtc)->pipe;
+ WARN(active && pipe != tracked_pipe,
+ "active encoder's pipe doesn't match"
+ "(expected %i, found %i)\n",
+ tracked_pipe, pipe);
+
+ }
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list,
+ base.head) {
+ bool enabled = false;
+ bool active = false;
+
+ DRM_DEBUG_KMS("[CRTC:%d]\n",
+ crtc->base.base.id);
+
+ WARN(crtc->active && !crtc->base.enabled,
+ "active crtc, but not enabled in sw tracking\n");
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ if (encoder->base.crtc != &crtc->base)
+ continue;
+ enabled = true;
+ if (encoder->connectors_active)
+ active = true;
+ }
+ WARN(active != crtc->active,
+ "crtc's computed active state doesn't match tracked active state "
+ "(expected %i, found %i)\n", active, crtc->active);
+ WARN(enabled != crtc->base.enabled,
+ "crtc's computed enabled state doesn't match tracked enabled state "
+ "(expected %i, found %i)\n", enabled, crtc->base.enabled);
+
+ assert_pipe(dev->dev_private, crtc->pipe, crtc->active);
+ }
+}
+
+bool intel_set_mode(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ int x, int y, struct drm_framebuffer *fb)
+{
+ struct drm_device *dev = crtc->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode;
+ struct intel_crtc *intel_crtc;
+ unsigned disable_pipes, prepare_pipes, modeset_pipes;
+ bool ret = true;
+
+ intel_modeset_affected_pipes(crtc, &modeset_pipes,
+ &prepare_pipes, &disable_pipes);
+
+ DRM_DEBUG_KMS("set mode pipe masks: modeset: %x, prepare: %x, disable: %x\n",
+ modeset_pipes, prepare_pipes, disable_pipes);
+
+ for_each_intel_crtc_masked(dev, disable_pipes, intel_crtc)
+ intel_crtc_disable(&intel_crtc->base);
+
+ saved_hwmode = crtc->hwmode;
+ saved_mode = crtc->mode;
+
+ /* Hack: Because we don't (yet) support global modeset on multiple
+ * crtcs, we don't keep track of the new mode for more than one crtc.
+ * Hence simply check whether any bit is set in modeset_pipes in all the
+ * pieces of code that are not yet converted to deal with mutliple crtcs
+ * changing their mode at the same time. */
+ adjusted_mode = NULL;
+ if (modeset_pipes) {
+ int err = intel_modeset_adjusted_mode(crtc, mode, &adjusted_mode);
+ if (err) {
+ return false;
+ }
+ }
+
+ for_each_intel_crtc_masked(dev, prepare_pipes, intel_crtc) {
+ if (intel_crtc->base.enabled)
+ dev_priv->display.crtc_disable(&intel_crtc->base);
+ }
+
+ /* crtc->mode is already used by the ->mode_set callbacks, hence we need
+ * to set it here already despite that we pass it down the callchain.
*/
- intel_crtc->dpms_mode = -1;
+ if (modeset_pipes)
+ crtc->mode = *mode;
+
+ /* Only after disabling all output pipelines that will be changed can we
+ * update the the output configuration. */
+ intel_modeset_update_state(dev, prepare_pipes);
- /* We need to fix up any BIOS configuration that conflicts with
- * our expectations.
+ if (dev_priv->display.modeset_global_resources)
+ dev_priv->display.modeset_global_resources(dev);
+
+ /* Set up the DPLL and any encoders state that needs to adjust or depend
+ * on the DPLL.
*/
- intel_sanitize_modesetting(dev, intel_crtc->pipe, intel_crtc->plane);
+ for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
+ ret = !intel_crtc_mode_set(&intel_crtc->base,
+ mode, adjusted_mode,
+ x, y, fb);
+ if (!ret)
+ goto done;
+ }
+
+ /* Now enable the clocks, plane, pipe, and connectors that we set up. */
+ for_each_intel_crtc_masked(dev, prepare_pipes, intel_crtc)
+ dev_priv->display.crtc_enable(&intel_crtc->base);
+
+ if (modeset_pipes) {
+ /* Store real post-adjustment hardware mode. */
+ crtc->hwmode = *adjusted_mode;
+
+ /* Calculate and store various constants which
+ * are later needed by vblank and swap-completion
+ * timestamping. They are derived from true hwmode.
+ */
+ drm_calc_timestamping_constants(crtc);
+ }
+
+ /* FIXME: add subpixel order */
+done:
+ drm_mode_destroy(dev, adjusted_mode);
+ if (!ret && crtc->enabled) {
+ crtc->hwmode = saved_hwmode;
+ crtc->mode = saved_mode;
+ } else {
+ intel_modeset_check_state(dev);
+ }
+
+ return ret;
}
-static struct drm_crtc_helper_funcs intel_helper_funcs = {
- .dpms = intel_crtc_dpms,
- .mode_fixup = intel_crtc_mode_fixup,
- .mode_set = intel_crtc_mode_set,
- .mode_set_base = intel_pipe_set_base,
- .mode_set_base_atomic = intel_pipe_set_base_atomic,
- .load_lut = intel_crtc_load_lut,
- .disable = intel_crtc_disable,
-};
+#undef for_each_intel_crtc_masked
+
+static void intel_set_config_free(struct intel_set_config *config)
+{
+ if (!config)
+ return;
+
+ free(config->save_connector_encoders, DRM_MEM_KMS);
+ free(config->save_encoder_crtcs, DRM_MEM_KMS);
+ free(config, DRM_MEM_KMS);
+}
+
+static int intel_set_config_save_state(struct drm_device *dev,
+ struct intel_set_config *config)
+{
+ struct drm_encoder *encoder;
+ struct drm_connector *connector;
+ int count;
+
+ config->save_encoder_crtcs =
+ malloc(dev->mode_config.num_encoder *
+ sizeof(struct drm_crtc *), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (!config->save_encoder_crtcs)
+ return -ENOMEM;
+
+ config->save_connector_encoders =
+ malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_encoder *), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (!config->save_connector_encoders)
+ return -ENOMEM;
+
+ /* Copy data. Note that driver private data is not affected.
+ * Should anything bad happen only the expected state is
+ * restored, not the drivers personal bookkeeping.
+ */
+ count = 0;
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ config->save_encoder_crtcs[count++] = encoder->crtc;
+ }
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ config->save_connector_encoders[count++] = connector->encoder;
+ }
+
+ return 0;
+}
+
+static void intel_set_config_restore_state(struct drm_device *dev,
+ struct intel_set_config *config)
+{
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+ int count;
+
+ count = 0;
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
+ encoder->new_crtc =
+ to_intel_crtc(config->save_encoder_crtcs[count++]);
+ }
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, base.head) {
+ connector->new_encoder =
+ to_intel_encoder(config->save_connector_encoders[count++]);
+ }
+}
+
+static void
+intel_set_config_compute_mode_changes(struct drm_mode_set *set,
+ struct intel_set_config *config)
+{
+
+ /* We should be able to check here if the fb has the same properties
+ * and then just flip_or_move it */
+ if (set->crtc->fb != set->fb) {
+ /* If we have no fb then treat it as a full mode set */
+ if (set->crtc->fb == NULL) {
+ DRM_DEBUG_KMS("crtc has no fb, full mode set\n");
+ config->mode_changed = true;
+ } else if (set->fb == NULL) {
+ config->mode_changed = true;
+ } else if (set->fb->depth != set->crtc->fb->depth) {
+ config->mode_changed = true;
+ } else if (set->fb->bits_per_pixel !=
+ set->crtc->fb->bits_per_pixel) {
+ config->mode_changed = true;
+ } else
+ config->fb_changed = true;
+ }
+
+ if (set->fb && (set->x != set->crtc->x || set->y != set->crtc->y))
+ config->fb_changed = true;
+
+ if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) {
+ DRM_DEBUG_KMS("modes are different, full mode set\n");
+ drm_mode_debug_printmodeline(&set->crtc->mode);
+ drm_mode_debug_printmodeline(set->mode);
+ config->mode_changed = true;
+ }
+}
+
+static int
+intel_modeset_stage_output_state(struct drm_device *dev,
+ struct drm_mode_set *set,
+ struct intel_set_config *config)
+{
+ struct drm_crtc *new_crtc;
+ struct intel_connector *connector;
+ struct intel_encoder *encoder;
+ int count, ro;
+
+ /* The upper layers ensure that we either disabl a crtc or have a list
+ * of connectors. For paranoia, double-check this. */
+ WARN_ON(!set->fb && (set->num_connectors != 0));
+ WARN_ON(set->fb && (set->num_connectors == 0));
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ /* Otherwise traverse passed in connector list and get encoders
+ * for them. */
+ for (ro = 0; ro < set->num_connectors; ro++) {
+ if (set->connectors[ro] == &connector->base) {
+ connector->new_encoder = connector->encoder;
+ break;
+ }
+ }
+
+ /* If we disable the crtc, disable all its connectors. Also, if
+ * the connector is on the changing crtc but not on the new
+ * connector list, disable it. */
+ if ((!set->fb || ro == set->num_connectors) &&
+ connector->base.encoder &&
+ connector->base.encoder->crtc == set->crtc) {
+ connector->new_encoder = NULL;
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [NOCRTC]\n",
+ connector->base.base.id,
+ drm_get_connector_name(&connector->base));
+ }
+
+
+ if (&connector->new_encoder->base != connector->base.encoder) {
+ DRM_DEBUG_KMS("encoder changed, full mode switch\n");
+ config->mode_changed = true;
+ }
+ }
+ /* connector->new_encoder is now updated for all connectors. */
+
+ /* Update crtc of enabled connectors. */
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ if (!connector->new_encoder)
+ continue;
+
+ new_crtc = connector->new_encoder->base.crtc;
+
+ for (ro = 0; ro < set->num_connectors; ro++) {
+ if (set->connectors[ro] == &connector->base)
+ new_crtc = set->crtc;
+ }
+
+ /* Make sure the new CRTC will work with the encoder */
+ if (!intel_encoder_crtc_ok(&connector->new_encoder->base,
+ new_crtc)) {
+ return -EINVAL;
+ }
+ connector->encoder->new_crtc = to_intel_crtc(new_crtc);
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [CRTC:%d]\n",
+ connector->base.base.id,
+ drm_get_connector_name(&connector->base),
+ new_crtc->base.id);
+ }
+
+ /* Check for any encoders that needs to be disabled. */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->new_encoder == encoder) {
+ WARN_ON(!connector->new_encoder->new_crtc);
+
+ goto next_encoder;
+ }
+ }
+ encoder->new_crtc = NULL;
+next_encoder:
+ /* Only now check for crtc changes so we don't miss encoders
+ * that will be disabled. */
+ if (&encoder->new_crtc->base != encoder->base.crtc) {
+ DRM_DEBUG_KMS("crtc changed, full mode switch\n");
+ config->mode_changed = true;
+ }
+ }
+ /* Now we've also updated encoder->new_crtc for all encoders. */
+
+ return 0;
+}
+
+static int intel_crtc_set_config(struct drm_mode_set *set)
+{
+ struct drm_device *dev;
+ struct drm_mode_set save_set;
+ struct intel_set_config *config;
+ int ret;
+
+ BUG_ON(!set);
+ BUG_ON(!set->crtc);
+ BUG_ON(!set->crtc->helper_private);
+
+ if (!set->mode)
+ set->fb = NULL;
+
+ /* The fb helper likes to play gross jokes with ->mode_set_config.
+ * Unfortunately the crtc helper doesn't do much at all for this case,
+ * so we have to cope with this madness until the fb helper is fixed up. */
+ if (set->fb && set->num_connectors == 0)
+ return 0;
+
+ if (set->fb) {
+ DRM_DEBUG_KMS("[CRTC:%d] [FB:%d] #connectors=%d (x y) (%i %i)\n",
+ set->crtc->base.id, set->fb->base.id,
+ (int)set->num_connectors, set->x, set->y);
+ } else {
+ DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id);
+ }
+
+ dev = set->crtc->dev;
+
+ ret = -ENOMEM;
+ config = malloc(sizeof(*config), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (!config)
+ goto out_config;
+
+ ret = intel_set_config_save_state(dev, config);
+ if (ret)
+ goto out_config;
+
+ save_set.crtc = set->crtc;
+ save_set.mode = &set->crtc->mode;
+ save_set.x = set->crtc->x;
+ save_set.y = set->crtc->y;
+ save_set.fb = set->crtc->fb;
+
+ /* Compute whether we need a full modeset, only an fb base update or no
+ * change at all. In the future we might also check whether only the
+ * mode changed, e.g. for LVDS where we only change the panel fitter in
+ * such cases. */
+ intel_set_config_compute_mode_changes(set, config);
+
+ ret = intel_modeset_stage_output_state(dev, set, config);
+ if (ret)
+ goto fail;
+
+ if (config->mode_changed) {
+ if (set->mode) {
+ DRM_DEBUG_KMS("attempting to set mode from"
+ " userspace\n");
+ drm_mode_debug_printmodeline(set->mode);
+ }
+
+ if (!intel_set_mode(set->crtc, set->mode,
+ set->x, set->y, set->fb)) {
+ DRM_ERROR("failed to set mode on [CRTC:%d]\n",
+ set->crtc->base.id);
+ ret = -EINVAL;
+ goto fail;
+ }
+ } else if (config->fb_changed) {
+ ret = intel_pipe_set_base(set->crtc,
+ set->x, set->y, set->fb);
+ }
+
+ intel_set_config_free(config);
+
+ return 0;
+
+fail:
+ intel_set_config_restore_state(dev, config);
+
+ /* Try to restore the config */
+ if (config->mode_changed &&
+ !intel_set_mode(save_set.crtc, save_set.mode,
+ save_set.x, save_set.y, save_set.fb))
+ DRM_ERROR("failed to restore config after modeset failure\n");
+
+out_config:
+ intel_set_config_free(config);
+ return ret;
+}
static const struct drm_crtc_funcs intel_crtc_funcs = {
- .reset = intel_crtc_reset,
.cursor_set = intel_crtc_cursor_set,
.cursor_move = intel_crtc_cursor_move,
.gamma_set = intel_crtc_gamma_set,
- .set_config = drm_crtc_helper_set_config,
+ .set_config = intel_crtc_set_config,
.destroy = intel_crtc_destroy,
.page_flip = intel_crtc_page_flip,
};
+static void intel_cpu_pll_init(struct drm_device *dev)
+{
+ if (IS_HASWELL(dev))
+ intel_ddi_pll_init(dev);
+}
+
static void intel_pch_pll_init(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
@@ -6404,9 +8349,9 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
struct intel_crtc *intel_crtc;
int i;
- intel_crtc = malloc(sizeof(struct intel_crtc) +
- (INTELFB_CONN_LIMIT * sizeof(struct drm_connector *)),
- DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ intel_crtc = malloc(sizeof(struct intel_crtc) + (INTELFB_CONN_LIMIT * sizeof(struct drm_connector *)), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (intel_crtc == NULL)
+ return;
drm_crtc_init(dev, &intel_crtc->base, &intel_crtc_funcs);
@@ -6420,34 +8365,20 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
/* Swap pipes & planes for FBC on pre-965 */
intel_crtc->pipe = pipe;
intel_crtc->plane = pipe;
+ intel_crtc->cpu_transcoder = pipe;
if (IS_MOBILE(dev) && IS_GEN3(dev)) {
DRM_DEBUG_KMS("swapping pipes & planes for FBC\n");
intel_crtc->plane = !pipe;
}
- KASSERT(pipe < DRM_ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) &&
- dev_priv->plane_to_crtc_mapping[intel_crtc->plane] == NULL,
- ("plane_to_crtc is already initialized"));
+ BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) ||
+ dev_priv->plane_to_crtc_mapping[intel_crtc->plane] != NULL);
dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = &intel_crtc->base;
dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
- intel_crtc_reset(&intel_crtc->base);
- intel_crtc->active = true; /* force the pipe off on setup_init_config */
intel_crtc->bpp = 24; /* default for pre-Ironlake */
- if (HAS_PCH_SPLIT(dev)) {
- intel_helper_funcs.prepare = ironlake_crtc_prepare;
- intel_helper_funcs.commit = ironlake_crtc_commit;
- } else {
- intel_helper_funcs.prepare = i9xx_crtc_prepare;
- intel_helper_funcs.commit = i9xx_crtc_commit;
- }
-
drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
-
- intel_crtc->busy = false;
-
- callout_init(&intel_crtc->idle_callout, 1);
}
int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
@@ -6474,15 +8405,23 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
return 0;
}
-static int intel_encoder_clones(struct drm_device *dev, int type_mask)
+static int intel_encoder_clones(struct intel_encoder *encoder)
{
- struct intel_encoder *encoder;
+ struct drm_device *dev = encoder->base.dev;
+ struct intel_encoder *source_encoder;
int index_mask = 0;
int entry = 0;
- list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
- if (type_mask & encoder->clone_mask)
+ list_for_each_entry(source_encoder,
+ &dev->mode_config.encoder_list, base.head) {
+
+ if (encoder == source_encoder)
+ index_mask |= (1 << entry);
+
+ /* Intel hw has only one MUX where enocoders could be cloned. */
+ if (encoder->cloneable && source_encoder->cloneable)
index_mask |= (1 << entry);
+
entry++;
}
@@ -6519,17 +8458,9 @@ static void intel_setup_outputs(struct drm_device *dev)
I915_WRITE(PFIT_CONTROL, 0);
}
- if (HAS_PCH_SPLIT(dev)) {
- dpd_is_edp = intel_dpd_is_edp(dev);
-
- if (has_edp_a(dev))
- intel_dp_init(dev, DP_A);
-
- if (dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
- intel_dp_init(dev, PCH_DP_D);
- }
-
- intel_crt_init(dev);
+ if (!(IS_HASWELL(dev) &&
+ (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)))
+ intel_crt_init(dev);
if (IS_HASWELL(dev)) {
int found;
@@ -6552,37 +8483,49 @@ static void intel_setup_outputs(struct drm_device *dev)
intel_ddi_init(dev, PORT_D);
} else if (HAS_PCH_SPLIT(dev)) {
int found;
+ dpd_is_edp = intel_dpd_is_edp(dev);
- DRM_DEBUG_KMS(
-"HDMIB %d PCH_DP_B %d HDMIC %d HDMID %d PCH_DP_C %d PCH_DP_D %d LVDS %d\n",
- (I915_READ(HDMIB) & PORT_DETECTED) != 0,
- (I915_READ(PCH_DP_B) & DP_DETECTED) != 0,
- (I915_READ(HDMIC) & PORT_DETECTED) != 0,
- (I915_READ(HDMID) & PORT_DETECTED) != 0,
- (I915_READ(PCH_DP_C) & DP_DETECTED) != 0,
- (I915_READ(PCH_DP_D) & DP_DETECTED) != 0,
- (I915_READ(PCH_LVDS) & LVDS_DETECTED) != 0);
+ if (has_edp_a(dev))
+ intel_dp_init(dev, DP_A, PORT_A);
if (I915_READ(HDMIB) & PORT_DETECTED) {
/* PCH SDVOB multiplex with HDMIB */
found = intel_sdvo_init(dev, PCH_SDVOB, true);
if (!found)
- intel_hdmi_init(dev, HDMIB);
+ intel_hdmi_init(dev, HDMIB, PORT_B);
if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
- intel_dp_init(dev, PCH_DP_B);
+ intel_dp_init(dev, PCH_DP_B, PORT_B);
}
if (I915_READ(HDMIC) & PORT_DETECTED)
- intel_hdmi_init(dev, HDMIC);
+ intel_hdmi_init(dev, HDMIC, PORT_C);
- if (I915_READ(HDMID) & PORT_DETECTED)
- intel_hdmi_init(dev, HDMID);
+ if (!dpd_is_edp && I915_READ(HDMID) & PORT_DETECTED)
+ intel_hdmi_init(dev, HDMID, PORT_D);
if (I915_READ(PCH_DP_C) & DP_DETECTED)
- intel_dp_init(dev, PCH_DP_C);
+ intel_dp_init(dev, PCH_DP_C, PORT_C);
- if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
- intel_dp_init(dev, PCH_DP_D);
+ if (I915_READ(PCH_DP_D) & DP_DETECTED)
+ intel_dp_init(dev, PCH_DP_D, PORT_D);
+ } else if (IS_VALLEYVIEW(dev)) {
+ int found;
+
+ /* Check for built-in panel first. Shares lanes with HDMI on SDVOC */
+ if (I915_READ(DP_C) & DP_DETECTED)
+ intel_dp_init(dev, DP_C, PORT_C);
+
+ if (I915_READ(SDVOB) & PORT_DETECTED) {
+ /* SDVOB multiplex with HDMIB */
+ found = intel_sdvo_init(dev, SDVOB, true);
+ if (!found)
+ intel_hdmi_init(dev, SDVOB, PORT_B);
+ if (!found && (I915_READ(DP_B) & DP_DETECTED))
+ intel_dp_init(dev, DP_B, PORT_B);
+ }
+
+ if (I915_READ(SDVOC) & PORT_DETECTED)
+ intel_hdmi_init(dev, SDVOC, PORT_C);
} else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
bool found = false;
@@ -6592,12 +8535,12 @@ static void intel_setup_outputs(struct drm_device *dev)
found = intel_sdvo_init(dev, SDVOB, true);
if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) {
DRM_DEBUG_KMS("probing HDMI on SDVOB\n");
- intel_hdmi_init(dev, SDVOB);
+ intel_hdmi_init(dev, SDVOB, PORT_B);
}
if (!found && SUPPORTS_INTEGRATED_DP(dev)) {
DRM_DEBUG_KMS("probing DP_B\n");
- intel_dp_init(dev, DP_B);
+ intel_dp_init(dev, DP_B, PORT_B);
}
}
@@ -6612,26 +8555,21 @@ static void intel_setup_outputs(struct drm_device *dev)
if (SUPPORTS_INTEGRATED_HDMI(dev)) {
DRM_DEBUG_KMS("probing HDMI on SDVOC\n");
- intel_hdmi_init(dev, SDVOC);
+ intel_hdmi_init(dev, SDVOC, PORT_C);
}
if (SUPPORTS_INTEGRATED_DP(dev)) {
DRM_DEBUG_KMS("probing DP_C\n");
- intel_dp_init(dev, DP_C);
+ intel_dp_init(dev, DP_C, PORT_C);
}
}
if (SUPPORTS_INTEGRATED_DP(dev) &&
(I915_READ(DP_D) & DP_DETECTED)) {
DRM_DEBUG_KMS("probing DP_D\n");
- intel_dp_init(dev, DP_D);
+ intel_dp_init(dev, DP_D, PORT_D);
}
- } else if (IS_GEN2(dev)) {
-#if 1
- KIB_NOTYET();
-#else
+ } else if (IS_GEN2(dev))
intel_dvo_init(dev);
-#endif
- }
if (SUPPORTS_TV(dev))
intel_tv_init(dev);
@@ -6639,14 +8577,12 @@ static void intel_setup_outputs(struct drm_device *dev)
list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
encoder->base.possible_crtcs = encoder->crtc_mask;
encoder->base.possible_clones =
- intel_encoder_clones(dev, encoder->clone_mask);
+ intel_encoder_clones(encoder);
}
- /* disable all the possible outputs/crtcs before entering KMS mode */
- drm_helper_disable_unused_functions(dev);
+ intel_init_pch_refclk(dev);
- if (HAS_PCH_SPLIT(dev))
- ironlake_init_pch_refclk(dev);
+ drm_helper_move_panel_connectors_to_head(dev);
}
static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
@@ -6681,32 +8617,74 @@ int intel_framebuffer_init(struct drm_device *dev,
{
int ret;
- if (obj->tiling_mode == I915_TILING_Y)
+ if (obj->tiling_mode == I915_TILING_Y) {
+ DRM_DEBUG("hardware does not support tiling Y\n");
+ return -EINVAL;
+ }
+
+ if (mode_cmd->pitches[0] & 63) {
+ DRM_DEBUG("pitch (%d) must be at least 64 byte aligned\n",
+ mode_cmd->pitches[0]);
+ return -EINVAL;
+ }
+
+ /* FIXME <= Gen4 stride limits are bit unclear */
+ if (mode_cmd->pitches[0] > 32768) {
+ DRM_DEBUG("pitch (%d) must be at less than 32768\n",
+ mode_cmd->pitches[0]);
return -EINVAL;
+ }
- if (mode_cmd->pitches[0] & 63)
+ if (obj->tiling_mode != I915_TILING_NONE &&
+ mode_cmd->pitches[0] != obj->stride) {
+ DRM_DEBUG("pitch (%d) must match tiling stride (%d)\n",
+ mode_cmd->pitches[0], obj->stride);
return -EINVAL;
+ }
+ /* Reject formats not supported by any plane early. */
switch (mode_cmd->pixel_format) {
- case DRM_FORMAT_RGB332:
+ case DRM_FORMAT_C8:
case DRM_FORMAT_RGB565:
case DRM_FORMAT_XRGB8888:
- case DRM_FORMAT_XBGR8888:
case DRM_FORMAT_ARGB8888:
+ break;
+ case DRM_FORMAT_XRGB1555:
+ case DRM_FORMAT_ARGB1555:
+ if (INTEL_INFO(dev)->gen > 3) {
+ DRM_DEBUG("invalid format: 0x%08x\n", mode_cmd->pixel_format);
+ return -EINVAL;
+ }
+ break;
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_ABGR8888:
case DRM_FORMAT_XRGB2101010:
case DRM_FORMAT_ARGB2101010:
- /* RGB formats are common across chipsets */
+ case DRM_FORMAT_XBGR2101010:
+ case DRM_FORMAT_ABGR2101010:
+ if (INTEL_INFO(dev)->gen < 4) {
+ DRM_DEBUG("invalid format: 0x%08x\n", mode_cmd->pixel_format);
+ return -EINVAL;
+ }
break;
case DRM_FORMAT_YUYV:
case DRM_FORMAT_UYVY:
case DRM_FORMAT_YVYU:
case DRM_FORMAT_VYUY:
+ if (INTEL_INFO(dev)->gen < 5) {
+ DRM_DEBUG("invalid format: 0x%08x\n", mode_cmd->pixel_format);
+ return -EINVAL;
+ }
break;
default:
- DRM_DEBUG("unsupported pixel format %u\n", mode_cmd->pixel_format);
+ DRM_DEBUG("unsupported pixel format 0x%08x\n", mode_cmd->pixel_format);
return -EINVAL;
}
+ /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
+ if (mode_cmd->offsets[0] != 0)
+ return -EINVAL;
+
ret = drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs);
if (ret) {
DRM_ERROR("framebuffer init failed %d\n", ret);
@@ -6745,14 +8723,22 @@ static void intel_init_display(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
/* We always want a DPMS function */
- if (HAS_PCH_SPLIT(dev)) {
- dev_priv->display.dpms = ironlake_crtc_dpms;
+ if (IS_HASWELL(dev)) {
+ dev_priv->display.crtc_mode_set = haswell_crtc_mode_set;
+ dev_priv->display.crtc_enable = haswell_crtc_enable;
+ dev_priv->display.crtc_disable = haswell_crtc_disable;
+ dev_priv->display.off = haswell_crtc_off;
+ dev_priv->display.update_plane = ironlake_update_plane;
+ } else if (HAS_PCH_SPLIT(dev)) {
dev_priv->display.crtc_mode_set = ironlake_crtc_mode_set;
+ dev_priv->display.crtc_enable = ironlake_crtc_enable;
+ dev_priv->display.crtc_disable = ironlake_crtc_disable;
dev_priv->display.off = ironlake_crtc_off;
dev_priv->display.update_plane = ironlake_update_plane;
} else {
- dev_priv->display.dpms = i9xx_crtc_dpms;
dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
+ dev_priv->display.crtc_enable = i9xx_crtc_enable;
+ dev_priv->display.crtc_disable = i9xx_crtc_disable;
dev_priv->display.off = i9xx_crtc_off;
dev_priv->display.update_plane = i9xx_update_plane;
}
@@ -6794,14 +8780,13 @@ static void intel_init_display(struct drm_device *dev)
/* FIXME: detect B0+ stepping and use auto training */
dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train;
dev_priv->display.write_eld = ironlake_write_eld;
+ dev_priv->display.modeset_global_resources =
+ ivb_modeset_global_resources;
} else if (IS_HASWELL(dev)) {
dev_priv->display.fdi_link_train = hsw_fdi_link_train;
- dev_priv->display.write_eld = ironlake_write_eld;
+ dev_priv->display.write_eld = haswell_write_eld;
} else
dev_priv->display.update_wm = NULL;
- } else if (IS_VALLEYVIEW(dev)) {
- dev_priv->display.force_wake_get = vlv_force_wake_get;
- dev_priv->display.force_wake_put = vlv_force_wake_put;
} else if (IS_G4X(dev)) {
dev_priv->display.write_eld = g4x_write_eld;
}
@@ -6873,27 +8858,49 @@ struct intel_quirk {
void (*hook)(struct drm_device *dev);
};
+/* For systems that don't have a meaningful PCI subdevice/subvendor ID */
+struct intel_dmi_quirk {
+ void (*hook)(struct drm_device *dev);
+ const struct dmi_system_id (*dmi_id_list)[];
+};
+
+static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
+{
+ DRM_INFO("Backlight polarity reversed on %s\n", id->ident);
+ return 1;
+}
+
+static const struct intel_dmi_quirk intel_dmi_quirks[] = {
+ {
+ .dmi_id_list = &(const struct dmi_system_id[]) {
+ {
+ .callback = intel_dmi_reverse_brightness,
+ .ident = "NCR Corporation",
+ .matches = {DMI_MATCH(DMI_SYS_VENDOR, "NCR Corporation"),
+ DMI_MATCH(DMI_PRODUCT_NAME, ""),
+ },
+ },
+ { } /* terminating entry */
+ },
+ .hook = quirk_invert_brightness,
+ },
+};
+
#define PCI_ANY_ID (~0u)
static struct intel_quirk intel_quirks[] = {
/* HP Mini needs pipe A force quirk (LP: #322104) */
{ 0x27ae, 0x103c, 0x361a, quirk_pipea_force },
- /* Thinkpad R31 needs pipe A force quirk */
- { 0x3577, 0x1014, 0x0505, quirk_pipea_force },
/* Toshiba Protege R-205, S-209 needs pipe A force quirk */
{ 0x2592, 0x1179, 0x0001, quirk_pipea_force },
- /* ThinkPad X30 needs pipe A force quirk (LP: #304614) */
- { 0x3577, 0x1014, 0x0513, quirk_pipea_force },
- /* ThinkPad X40 needs pipe A force quirk */
-
/* ThinkPad T60 needs pipe A force quirk (bug #16494) */
{ 0x2782, 0x17aa, 0x201a, quirk_pipea_force },
- /* 855 & before need to leave pipe A & dpll A up */
- { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
+ /* 830/845 need to leave pipe A & dpll A up */
{ 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
+ { 0x3577, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
/* Lenovo U160 cannot use SSC on LVDS */
{ 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable },
@@ -6903,24 +8910,38 @@ static struct intel_quirk intel_quirks[] = {
/* Acer Aspire 5734Z must invert backlight brightness */
{ 0x2a42, 0x1025, 0x0459, quirk_invert_brightness },
+
+ /* Acer Aspire 4736Z */
+ { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
+
+ /* Acer/eMachines G725 */
+ { 0x2a42, 0x1025, 0x0210, quirk_invert_brightness },
+
+ /* Acer/eMachines e725 */
+ { 0x2a42, 0x1025, 0x0212, quirk_invert_brightness },
+
+ /* Acer/Packard Bell NCL20 */
+ { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
};
static void intel_init_quirks(struct drm_device *dev)
{
- struct intel_quirk *q;
- device_t d;
int i;
- d = dev->dev;
for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
- q = &intel_quirks[i];
- if (pci_get_device(d) == q->device &&
- (pci_get_subvendor(d) == q->subsystem_vendor ||
+ struct intel_quirk *q = &intel_quirks[i];
+
+ if (pci_get_device(dev->dev) == q->device &&
+ (pci_get_subvendor(dev->dev) == q->subsystem_vendor ||
q->subsystem_vendor == PCI_ANY_ID) &&
- (pci_get_subdevice(d) == q->subsystem_device ||
+ (pci_get_subdevice(dev->dev) == q->subsystem_device ||
q->subsystem_device == PCI_ANY_ID))
q->hook(dev);
}
+ for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
+ if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0)
+ intel_dmi_quirks[i].hook(dev);
+ }
}
/* Disable the VGA plane that we never use */
@@ -6935,53 +8956,35 @@ static void i915_disable_vga(struct drm_device *dev)
else
vga_reg = VGACNTRL;
-#if 0
+#ifdef FREEBSD_WIP
vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
-#endif
+#endif /* FREEBSD_WIP */
outb(VGA_SR_INDEX, SR01);
sr1 = inb(VGA_SR_DATA);
outb(VGA_SR_DATA, sr1 | 1<<5);
-#if 0
+#ifdef FREEBSD_WIP
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
-#endif
- DELAY(300);
+#endif /* FREEBSD_WIP */
+ udelay(300);
I915_WRITE(vga_reg, VGA_DISP_DISABLE);
POSTING_READ(vga_reg);
}
-static void ivb_pch_pwm_override(struct drm_device *dev)
+void intel_modeset_init_hw(struct drm_device *dev)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- /*
- * IVB has CPU eDP backlight regs too, set things up to let the
- * PCH regs control the backlight
+ /* We attempt to init the necessary power wells early in the initialization
+ * time, so the subsystems that expect power to be enabled can work.
*/
- I915_WRITE(BLC_PWM_CPU_CTL2, PWM_ENABLE);
- I915_WRITE(BLC_PWM_CPU_CTL, 0);
- I915_WRITE(BLC_PWM_PCH_CTL1, PWM_ENABLE);
-}
+ intel_init_power_wells(dev);
-void intel_modeset_init_hw(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
+ intel_prepare_ddi(dev);
intel_init_clock_gating(dev);
- if (IS_IRONLAKE_M(dev)) {
- ironlake_enable_drps(dev);
- ironlake_enable_rc6(dev);
- intel_init_emon(dev);
- }
-
- if ((IS_GEN6(dev) || IS_GEN7(dev)) && !IS_VALLEYVIEW(dev)) {
- gen6_enable_rps(dev_priv);
- gen6_update_ring_freq(dev_priv);
- }
-
- if (IS_IVYBRIDGE(dev))
- ivb_pch_pwm_override(dev);
+ DRM_LOCK(dev);
+ intel_enable_gt_powersave(dev);
+ DRM_UNLOCK(dev);
}
void intel_modeset_init(struct drm_device *dev)
@@ -7003,8 +9006,6 @@ void intel_modeset_init(struct drm_device *dev)
intel_init_pm(dev);
- intel_prepare_ddi(dev);
-
intel_init_display(dev);
if (IS_GEN2(dev)) {
@@ -7017,7 +9018,7 @@ void intel_modeset_init(struct drm_device *dev)
dev->mode_config.max_width = 8192;
dev->mode_config.max_height = 8192;
}
- dev->mode_config.fb_base = dev->agp->base;
+ dev->mode_config.fb_base = dev_priv->mm.gtt_base_addr;
DRM_DEBUG_KMS("%d display pipe%s available.\n",
dev_priv->num_pipe, dev_priv->num_pipe > 1 ? "s" : "");
@@ -7029,14 +9030,327 @@ void intel_modeset_init(struct drm_device *dev)
DRM_DEBUG_KMS("plane %d init failed: %d\n", i, ret);
}
+ intel_cpu_pll_init(dev);
intel_pch_pll_init(dev);
/* Just disable it once at startup */
i915_disable_vga(dev);
intel_setup_outputs(dev);
+}
+
+static void
+intel_connector_break_all_links(struct intel_connector *connector)
+{
+ connector->base.dpms = DRM_MODE_DPMS_OFF;
+ connector->base.encoder = NULL;
+ connector->encoder->connectors_active = false;
+ connector->encoder->base.crtc = NULL;
+}
+
+static void intel_enable_pipe_a(struct drm_device *dev)
+{
+ struct intel_connector *connector;
+ struct drm_connector *crt = NULL;
+ struct intel_load_detect_pipe load_detect_temp;
+
+ /* We can't just switch on the pipe A, we need to set things up with a
+ * proper mode and output configuration. As a gross hack, enable pipe A
+ * by enabling the load detect pipe once. */
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->encoder->type == INTEL_OUTPUT_ANALOG) {
+ crt = &connector->base;
+ break;
+ }
+ }
+
+ if (!crt)
+ return;
+
+ if (intel_get_load_detect_pipe(crt, NULL, &load_detect_temp))
+ intel_release_load_detect_pipe(crt, &load_detect_temp);
+
- TASK_INIT(&dev_priv->idle_task, 0, intel_idle_update, dev_priv);
- callout_init(&dev_priv->idle_callout, 1);
+}
+
+static bool
+intel_check_plane_mapping(struct intel_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
+ u32 reg, val;
+
+ if (dev_priv->num_pipe == 1)
+ return true;
+
+ reg = DSPCNTR(!crtc->plane);
+ val = I915_READ(reg);
+
+ if ((val & DISPLAY_PLANE_ENABLE) &&
+ (!!(val & DISPPLANE_SEL_PIPE_MASK) == crtc->pipe))
+ return false;
+
+ return true;
+}
+
+static void intel_sanitize_crtc(struct intel_crtc *crtc)
+{
+ struct drm_device *dev = crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 reg;
+
+ /* Clear any frame start delays used for debugging left by the BIOS */
+ reg = PIPECONF(crtc->cpu_transcoder);
+ I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
+
+ /* We need to sanitize the plane -> pipe mapping first because this will
+ * disable the crtc (and hence change the state) if it is wrong. Note
+ * that gen4+ has a fixed plane -> pipe mapping. */
+ if (INTEL_INFO(dev)->gen < 4 && !intel_check_plane_mapping(crtc)) {
+ struct intel_connector *connector;
+ bool plane;
+
+ DRM_DEBUG_KMS("[CRTC:%d] wrong plane connection detected!\n",
+ crtc->base.base.id);
+
+ /* Pipe has the wrong plane attached and the plane is active.
+ * Temporarily change the plane mapping and disable everything
+ * ... */
+ plane = crtc->plane;
+ crtc->plane = !plane;
+ dev_priv->display.crtc_disable(&crtc->base);
+ crtc->plane = plane;
+
+ /* ... and break all links. */
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->encoder->base.crtc != &crtc->base)
+ continue;
+
+ intel_connector_break_all_links(connector);
+ }
+
+ WARN_ON(crtc->active);
+ crtc->base.enabled = false;
+ }
+
+ if (dev_priv->quirks & QUIRK_PIPEA_FORCE &&
+ crtc->pipe == PIPE_A && !crtc->active) {
+ /* BIOS forgot to enable pipe A, this mostly happens after
+ * resume. Force-enable the pipe to fix this, the update_dpms
+ * call below we restore the pipe to the right state, but leave
+ * the required bits on. */
+ intel_enable_pipe_a(dev);
+ }
+
+ /* Adjust the state of the output pipe according to whether we
+ * have active connectors/encoders. */
+ intel_crtc_update_dpms(&crtc->base);
+
+ if (crtc->active != crtc->base.enabled) {
+ struct intel_encoder *encoder;
+
+ /* This can happen either due to bugs in the get_hw_state
+ * functions or because the pipe is force-enabled due to the
+ * pipe A quirk. */
+ DRM_DEBUG_KMS("[CRTC:%d] hw state adjusted, was %s, now %s\n",
+ crtc->base.base.id,
+ crtc->base.enabled ? "enabled" : "disabled",
+ crtc->active ? "enabled" : "disabled");
+
+ crtc->base.enabled = crtc->active;
+
+ /* Because we only establish the connector -> encoder ->
+ * crtc links if something is active, this means the
+ * crtc is now deactivated. Break the links. connector
+ * -> encoder links are only establish when things are
+ * actually up, hence no need to break them. */
+ WARN_ON(crtc->active);
+
+ for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
+ WARN_ON(encoder->connectors_active);
+ encoder->base.crtc = NULL;
+ }
+ }
+}
+
+static void intel_sanitize_encoder(struct intel_encoder *encoder)
+{
+ struct intel_connector *connector;
+ struct drm_device *dev = encoder->base.dev;
+
+ /* We need to check both for a crtc link (meaning that the
+ * encoder is active and trying to read from a pipe) and the
+ * pipe itself being active. */
+ bool has_active_crtc = encoder->base.crtc &&
+ to_intel_crtc(encoder->base.crtc)->active;
+
+ if (encoder->connectors_active && !has_active_crtc) {
+ DRM_DEBUG_KMS("[ENCODER:%d:%s] has active connectors but no active pipe!\n",
+ encoder->base.base.id,
+ drm_get_encoder_name(&encoder->base));
+
+ /* Connector is active, but has no active pipe. This is
+ * fallout from our resume register restoring. Disable
+ * the encoder manually again. */
+ if (encoder->base.crtc) {
+ DRM_DEBUG_KMS("[ENCODER:%d:%s] manually disabled\n",
+ encoder->base.base.id,
+ drm_get_encoder_name(&encoder->base));
+ encoder->disable(encoder);
+ }
+
+ /* Inconsistent output/port/pipe state happens presumably due to
+ * a bug in one of the get_hw_state functions. Or someplace else
+ * in our code, like the register restore mess on resume. Clamp
+ * things to off as a safer default. */
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->encoder != encoder)
+ continue;
+
+ intel_connector_break_all_links(connector);
+ }
+ }
+ /* Enabled encoders without active connectors will be fixed in
+ * the crtc fixup. */
+}
+
+static void i915_redisable_vga(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 vga_reg;
+
+ if (HAS_PCH_SPLIT(dev))
+ vga_reg = CPU_VGACNTRL;
+ else
+ vga_reg = VGACNTRL;
+
+ if (I915_READ(vga_reg) != VGA_DISP_DISABLE) {
+ DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
+ I915_WRITE(vga_reg, VGA_DISP_DISABLE);
+ POSTING_READ(vga_reg);
+ }
+}
+
+/* Scan out the current hw modeset state, sanitizes it and maps it into the drm
+ * and i915 state tracking structures. */
+void intel_modeset_setup_hw_state(struct drm_device *dev,
+ bool force_restore)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ enum pipe pipe;
+ u32 tmp;
+ struct intel_crtc *crtc;
+ struct intel_encoder *encoder;
+ struct intel_connector *connector;
+
+ if (IS_HASWELL(dev)) {
+ tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
+
+ if (tmp & TRANS_DDI_FUNC_ENABLE) {
+ switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
+ case TRANS_DDI_EDP_INPUT_A_ON:
+ case TRANS_DDI_EDP_INPUT_A_ONOFF:
+ pipe = PIPE_A;
+ break;
+ case TRANS_DDI_EDP_INPUT_B_ONOFF:
+ pipe = PIPE_B;
+ break;
+ case TRANS_DDI_EDP_INPUT_C_ONOFF:
+ pipe = PIPE_C;
+ break;
+ }
+
+ crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
+ crtc->cpu_transcoder = TRANSCODER_EDP;
+
+ DRM_DEBUG_KMS("Pipe %c using transcoder EDP\n",
+ pipe_name(pipe));
+ }
+ }
+
+ for_each_pipe(pipe) {
+ crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
+
+ tmp = I915_READ(PIPECONF(crtc->cpu_transcoder));
+ if (tmp & PIPECONF_ENABLE)
+ crtc->active = true;
+ else
+ crtc->active = false;
+
+ crtc->base.enabled = crtc->active;
+
+ DRM_DEBUG_KMS("[CRTC:%d] hw state readout: %s\n",
+ crtc->base.base.id,
+ crtc->active ? "enabled" : "disabled");
+ }
+
+ if (IS_HASWELL(dev))
+ intel_ddi_setup_hw_pll_state(dev);
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ pipe = 0;
+
+ if (encoder->get_hw_state(encoder, &pipe)) {
+ encoder->base.crtc =
+ dev_priv->pipe_to_crtc_mapping[pipe];
+ } else {
+ encoder->base.crtc = NULL;
+ }
+
+ encoder->connectors_active = false;
+ DRM_DEBUG_KMS("[ENCODER:%d:%s] hw state readout: %s, pipe=%i\n",
+ encoder->base.base.id,
+ drm_get_encoder_name(&encoder->base),
+ encoder->base.crtc ? "enabled" : "disabled",
+ pipe);
+ }
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ base.head) {
+ if (connector->get_hw_state(connector)) {
+ connector->base.dpms = DRM_MODE_DPMS_ON;
+ connector->encoder->connectors_active = true;
+ connector->base.encoder = &connector->encoder->base;
+ } else {
+ connector->base.dpms = DRM_MODE_DPMS_OFF;
+ connector->base.encoder = NULL;
+ }
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hw state readout: %s\n",
+ connector->base.base.id,
+ drm_get_connector_name(&connector->base),
+ connector->base.encoder ? "enabled" : "disabled");
+ }
+
+ /* HW state is read out, now we need to sanitize this mess. */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+ base.head) {
+ intel_sanitize_encoder(encoder);
+ }
+
+ for_each_pipe(pipe) {
+ crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
+ intel_sanitize_crtc(crtc);
+ }
+
+ if (force_restore) {
+ for_each_pipe(pipe) {
+ crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
+ intel_set_mode(&crtc->base, &crtc->base.mode,
+ crtc->base.x, crtc->base.y, crtc->base.fb);
+ }
+
+ i915_redisable_vga(dev);
+ } else {
+ intel_modeset_update_staged_output_state(dev);
+ }
+
+ intel_modeset_check_state(dev);
+
+ drm_mode_config_reset(dev);
}
void intel_modeset_gem_init(struct drm_device *dev)
@@ -7044,6 +9358,8 @@ void intel_modeset_gem_init(struct drm_device *dev)
intel_modeset_init_hw(dev);
intel_setup_overlay(dev);
+
+ intel_modeset_setup_hw_state(dev, false);
}
void intel_modeset_cleanup(struct drm_device *dev)
@@ -7055,9 +9371,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
drm_kms_helper_poll_fini(dev);
DRM_LOCK(dev);
-#if 0
intel_unregister_dsm_handler();
-#endif
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
@@ -7071,13 +9385,9 @@ void intel_modeset_cleanup(struct drm_device *dev)
intel_disable_fbc(dev);
- if (IS_IRONLAKE_M(dev))
- ironlake_disable_drps(dev);
- if ((IS_GEN6(dev) || IS_GEN7(dev)) && !IS_VALLEYVIEW(dev))
- gen6_disable_rps(dev);
+ intel_disable_gt_powersave(dev);
- if (IS_IRONLAKE_M(dev))
- ironlake_disable_rc6(dev);
+ ironlake_teardown_rc6(dev);
if (IS_VALLEYVIEW(dev))
vlv_init_dpio(dev);
@@ -7087,19 +9397,16 @@ void intel_modeset_cleanup(struct drm_device *dev)
/* Disable the irq before mode object teardown, for the irq might
* enqueue unpin/hotplug work. */
drm_irq_uninstall(dev);
- if (taskqueue_cancel(dev_priv->tq, &dev_priv->hotplug_task, NULL))
- taskqueue_drain(dev_priv->tq, &dev_priv->hotplug_task);
- if (taskqueue_cancel(dev_priv->tq, &dev_priv->rps_task, NULL))
- taskqueue_drain(dev_priv->tq, &dev_priv->rps_task);
+ if (taskqueue_cancel(dev_priv->wq, &dev_priv->hotplug_work, NULL))
+ taskqueue_drain(dev_priv->wq, &dev_priv->hotplug_work);
+ if (taskqueue_cancel(dev_priv->wq, &dev_priv->rps.work, NULL))
+ taskqueue_drain(dev_priv->wq, &dev_priv->rps.work);
- /* Shut off idle work before the crtcs get freed. */
- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- intel_crtc = to_intel_crtc(crtc);
- callout_drain(&intel_crtc->idle_callout);
- }
- callout_drain(&dev_priv->idle_callout);
- if (taskqueue_cancel(dev_priv->tq, &dev_priv->idle_task, NULL))
- taskqueue_drain(dev_priv->tq, &dev_priv->idle_task);
+ /* flush any delayed tasks or pending work */
+ taskqueue_drain_all(dev_priv->wq);
+
+ /* destroy backlight, if any, before the connectors */
+ intel_panel_destroy_backlight(dev);
drm_mode_config_cleanup(dev);
}
@@ -7125,26 +9432,28 @@ void intel_connector_attach_encoder(struct intel_connector *connector,
*/
int intel_modeset_vga_set_state(struct drm_device *dev, bool state)
{
- device_t bridge_dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
u16 gmch_ctrl;
- bridge_dev = intel_gtt_get_bridge_device();
- gmch_ctrl = pci_read_config(bridge_dev, INTEL_GMCH_CTRL, 2);
+ pci_read_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, &gmch_ctrl);
if (state)
gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
else
gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
- pci_write_config(bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl, 2);
+ pci_write_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl);
return 0;
}
+//#ifdef CONFIG_DEBUG_FS
+#define seq_printf(m, fmt, ...) sbuf_printf((m), (fmt), ##__VA_ARGS__)
+
struct intel_display_error_state {
struct intel_cursor_error_state {
u32 control;
u32 position;
u32 base;
u32 size;
- } cursor[2];
+ } cursor[I915_MAX_PIPES];
struct intel_pipe_error_state {
u32 conf;
@@ -7156,7 +9465,7 @@ struct intel_display_error_state {
u32 vtotal;
u32 vblank;
u32 vsync;
- } pipe[2];
+ } pipe[I915_MAX_PIPES];
struct intel_plane_error_state {
u32 control;
@@ -7166,7 +9475,7 @@ struct intel_display_error_state {
u32 addr;
u32 surface;
u32 tile_offset;
- } plane[2];
+ } plane[I915_MAX_PIPES];
};
struct intel_display_error_state *
@@ -7174,13 +9483,16 @@ intel_display_capture_error_state(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
struct intel_display_error_state *error;
+ enum transcoder cpu_transcoder;
int i;
error = malloc(sizeof(*error), DRM_MEM_KMS, M_NOWAIT);
if (error == NULL)
return NULL;
- for (i = 0; i < 2; i++) {
+ for_each_pipe(i) {
+ cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, i);
+
error->cursor[i].control = I915_READ(CURCNTR(i));
error->cursor[i].position = I915_READ(CURPOS(i));
error->cursor[i].base = I915_READ(CURBASE(i));
@@ -7195,14 +9507,14 @@ intel_display_capture_error_state(struct drm_device *dev)
error->plane[i].tile_offset = I915_READ(DSPTILEOFF(i));
}
- error->pipe[i].conf = I915_READ(PIPECONF(i));
+ error->pipe[i].conf = I915_READ(PIPECONF(cpu_transcoder));
error->pipe[i].source = I915_READ(PIPESRC(i));
- error->pipe[i].htotal = I915_READ(HTOTAL(i));
- error->pipe[i].hblank = I915_READ(HBLANK(i));
- error->pipe[i].hsync = I915_READ(HSYNC(i));
- error->pipe[i].vtotal = I915_READ(VTOTAL(i));
- error->pipe[i].vblank = I915_READ(VBLANK(i));
- error->pipe[i].vsync = I915_READ(VSYNC(i));
+ error->pipe[i].htotal = I915_READ(HTOTAL(cpu_transcoder));
+ error->pipe[i].hblank = I915_READ(HBLANK(cpu_transcoder));
+ error->pipe[i].hsync = I915_READ(HSYNC(cpu_transcoder));
+ error->pipe[i].vtotal = I915_READ(VTOTAL(cpu_transcoder));
+ error->pipe[i].vblank = I915_READ(VBLANK(cpu_transcoder));
+ error->pipe[i].vsync = I915_READ(VSYNC(cpu_transcoder));
}
return error;
@@ -7213,33 +9525,36 @@ intel_display_print_error_state(struct sbuf *m,
struct drm_device *dev,
struct intel_display_error_state *error)
{
+ drm_i915_private_t *dev_priv = dev->dev_private;
int i;
- for (i = 0; i < 2; i++) {
- sbuf_printf(m, "Pipe [%d]:\n", i);
- sbuf_printf(m, " CONF: %08x\n", error->pipe[i].conf);
- sbuf_printf(m, " SRC: %08x\n", error->pipe[i].source);
- sbuf_printf(m, " HTOTAL: %08x\n", error->pipe[i].htotal);
- sbuf_printf(m, " HBLANK: %08x\n", error->pipe[i].hblank);
- sbuf_printf(m, " HSYNC: %08x\n", error->pipe[i].hsync);
- sbuf_printf(m, " VTOTAL: %08x\n", error->pipe[i].vtotal);
- sbuf_printf(m, " VBLANK: %08x\n", error->pipe[i].vblank);
- sbuf_printf(m, " VSYNC: %08x\n", error->pipe[i].vsync);
-
- sbuf_printf(m, "Plane [%d]:\n", i);
- sbuf_printf(m, " CNTR: %08x\n", error->plane[i].control);
- sbuf_printf(m, " STRIDE: %08x\n", error->plane[i].stride);
- sbuf_printf(m, " SIZE: %08x\n", error->plane[i].size);
- sbuf_printf(m, " POS: %08x\n", error->plane[i].pos);
- sbuf_printf(m, " ADDR: %08x\n", error->plane[i].addr);
+ seq_printf(m, "Num Pipes: %d\n", dev_priv->num_pipe);
+ for_each_pipe(i) {
+ seq_printf(m, "Pipe [%d]:\n", i);
+ seq_printf(m, " CONF: %08x\n", error->pipe[i].conf);
+ seq_printf(m, " SRC: %08x\n", error->pipe[i].source);
+ seq_printf(m, " HTOTAL: %08x\n", error->pipe[i].htotal);
+ seq_printf(m, " HBLANK: %08x\n", error->pipe[i].hblank);
+ seq_printf(m, " HSYNC: %08x\n", error->pipe[i].hsync);
+ seq_printf(m, " VTOTAL: %08x\n", error->pipe[i].vtotal);
+ seq_printf(m, " VBLANK: %08x\n", error->pipe[i].vblank);
+ seq_printf(m, " VSYNC: %08x\n", error->pipe[i].vsync);
+
+ seq_printf(m, "Plane [%d]:\n", i);
+ seq_printf(m, " CNTR: %08x\n", error->plane[i].control);
+ seq_printf(m, " STRIDE: %08x\n", error->plane[i].stride);
+ seq_printf(m, " SIZE: %08x\n", error->plane[i].size);
+ seq_printf(m, " POS: %08x\n", error->plane[i].pos);
+ seq_printf(m, " ADDR: %08x\n", error->plane[i].addr);
if (INTEL_INFO(dev)->gen >= 4) {
- sbuf_printf(m, " SURF: %08x\n", error->plane[i].surface);
- sbuf_printf(m, " TILEOFF: %08x\n", error->plane[i].tile_offset);
+ seq_printf(m, " SURF: %08x\n", error->plane[i].surface);
+ seq_printf(m, " TILEOFF: %08x\n", error->plane[i].tile_offset);
}
- sbuf_printf(m, "Cursor [%d]:\n", i);
- sbuf_printf(m, " CNTR: %08x\n", error->cursor[i].control);
- sbuf_printf(m, " POS: %08x\n", error->cursor[i].position);
- sbuf_printf(m, " BASE: %08x\n", error->cursor[i].base);
+ seq_printf(m, "Cursor [%d]:\n", i);
+ seq_printf(m, " CNTR: %08x\n", error->cursor[i].control);
+ seq_printf(m, " POS: %08x\n", error->cursor[i].position);
+ seq_printf(m, " BASE: %08x\n", error->cursor[i].base);
}
}
+//#endif
diff --git a/sys/dev/drm2/i915/intel_dp.c b/sys/dev/drm2/i915/intel_dp.c
index eba5fe3..8bff4610 100644
--- a/sys/dev/drm2/i915/intel_dp.c
+++ b/sys/dev/drm2/i915/intel_dp.c
@@ -29,46 +29,15 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/drm_dp_helper.h>
-#define DP_RECEIVER_CAP_SIZE 0xf
-#define DP_LINK_STATUS_SIZE 6
#define DP_LINK_CHECK_TIMEOUT (10 * 1000)
-#define DP_LINK_CONFIGURATION_SIZE 9
-
-struct intel_dp {
- struct intel_encoder base;
- uint32_t output_reg;
- uint32_t DP;
- uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE];
- bool has_audio;
- enum hdmi_force_audio force_audio;
- uint32_t color_range;
- int dpms_mode;
- uint8_t link_bw;
- uint8_t lane_count;
- uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
- device_t dp_iic_bus;
- device_t adapter;
- bool is_pch_edp;
- uint8_t train_set[4];
- int panel_power_up_delay;
- int panel_power_down_delay;
- int panel_power_cycle_delay;
- int backlight_on_delay;
- int backlight_off_delay;
- struct drm_display_mode *panel_fixed_mode; /* for eDP */
- struct timeout_task panel_vdd_task;
- bool want_panel_vdd;
-};
-
/**
* is_edp - is the given port attached to an eDP panel (either CPU or PCH)
* @intel_dp: DP struct
@@ -78,7 +47,9 @@ struct intel_dp {
*/
static bool is_edp(struct intel_dp *intel_dp)
{
- return intel_dp->base.type == INTEL_OUTPUT_EDP;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+
+ return intel_dig_port->base.type == INTEL_OUTPUT_EDP;
}
/**
@@ -105,15 +76,16 @@ static bool is_cpu_edp(struct intel_dp *intel_dp)
return is_edp(intel_dp) && !is_pch_edp(intel_dp);
}
-static struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
+static struct drm_device *intel_dp_to_dev(struct intel_dp *intel_dp)
{
- return container_of(encoder, struct intel_dp, base.base);
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+
+ return intel_dig_port->base.base.dev;
}
static struct intel_dp *intel_attached_dp(struct drm_connector *connector)
{
- return container_of(intel_attached_encoder(connector),
- struct intel_dp, base);
+ return enc_to_intel_dp(&intel_attached_encoder(connector)->base);
}
/**
@@ -135,34 +107,29 @@ bool intel_encoder_is_pch_edp(struct drm_encoder *encoder)
return is_pch_edp(intel_dp);
}
-static void intel_dp_start_link_train(struct intel_dp *intel_dp);
-static void intel_dp_complete_link_train(struct intel_dp *intel_dp);
static void intel_dp_link_down(struct intel_dp *intel_dp);
void
intel_edp_link_config(struct intel_encoder *intel_encoder,
int *lane_num, int *link_bw)
{
- struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base);
+ struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
*lane_num = intel_dp->lane_count;
- if (intel_dp->link_bw == DP_LINK_BW_1_62)
- *link_bw = 162000;
- else if (intel_dp->link_bw == DP_LINK_BW_2_7)
- *link_bw = 270000;
+ *link_bw = drm_dp_bw_code_to_link_rate(intel_dp->link_bw);
}
-static int
-intel_dp_max_lane_count(struct intel_dp *intel_dp)
+int
+intel_edp_target_clock(struct intel_encoder *intel_encoder,
+ struct drm_display_mode *mode)
{
- int max_lane_count = intel_dp->dpcd[DP_MAX_LANE_COUNT] & 0x1f;
- switch (max_lane_count) {
- case 1: case 2: case 4:
- break;
- default:
- max_lane_count = 4;
- }
- return max_lane_count;
+ struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
+ struct intel_connector *intel_connector = intel_dp->attached_connector;
+
+ if (intel_connector->panel.fixed_mode)
+ return intel_connector->panel.fixed_mode->clock;
+ else
+ return mode->clock;
}
static int
@@ -221,11 +188,11 @@ intel_dp_max_data_rate(int max_link_clock, int max_lanes)
static bool
intel_dp_adjust_dithering(struct intel_dp *intel_dp,
- const struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode)
+ struct drm_display_mode *mode,
+ bool adjust_mode)
{
int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
- int max_lanes = intel_dp_max_lane_count(intel_dp);
+ int max_lanes = drm_dp_max_lane_count(intel_dp->dpcd);
int max_rate, mode_rate;
mode_rate = intel_dp_link_required(mode->clock, 24);
@@ -236,8 +203,8 @@ intel_dp_adjust_dithering(struct intel_dp *intel_dp,
if (mode_rate > max_rate)
return false;
- if (adjusted_mode)
- adjusted_mode->private_flags
+ if (adjust_mode)
+ mode->private_flags
|= INTEL_MODE_DP_FORCE_6BPC;
return true;
@@ -251,21 +218,26 @@ intel_dp_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct intel_connector *intel_connector = to_intel_connector(connector);
+ struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
- if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
- if (mode->hdisplay > intel_dp->panel_fixed_mode->hdisplay)
+ if (is_edp(intel_dp) && fixed_mode) {
+ if (mode->hdisplay > fixed_mode->hdisplay)
return MODE_PANEL;
- if (mode->vdisplay > intel_dp->panel_fixed_mode->vdisplay)
+ if (mode->vdisplay > fixed_mode->vdisplay)
return MODE_PANEL;
}
- if (!intel_dp_adjust_dithering(intel_dp, mode, NULL))
+ if (!intel_dp_adjust_dithering(intel_dp, mode, false))
return MODE_CLOCK_HIGH;
if (mode->clock < 10000)
return MODE_CLOCK_LOW;
+ if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+ return MODE_H_ILLEGAL;
+
return MODE_OK;
}
@@ -299,6 +271,10 @@ intel_hrawclk(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t clkcfg;
+ /* There is no CLKCFG reg in Valleyview. VLV hrawclk is 200 MHz */
+ if (IS_VALLEYVIEW(dev))
+ return 200;
+
clkcfg = I915_READ(CLKCFG);
switch (clkcfg & CLKCFG_FSB_MASK) {
case CLKCFG_FSB_400:
@@ -324,7 +300,7 @@ intel_hrawclk(struct drm_device *dev)
static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
return (I915_READ(PCH_PP_STATUS) & PP_ON) != 0;
@@ -332,7 +308,7 @@ static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
return (I915_READ(PCH_PP_CONTROL) & EDP_FORCE_VDD) != 0;
@@ -341,13 +317,13 @@ static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
static void
intel_dp_check_edp(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
if (!is_edp(intel_dp))
return;
if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
- printf("eDP powered off while attempting aux channel communication.\n");
+ WARN(1, "eDP powered off while attempting aux channel communication.\n");
DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
I915_READ(PCH_PP_STATUS),
I915_READ(PCH_PP_CONTROL));
@@ -360,7 +336,8 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
uint8_t *recv, int recv_size)
{
uint32_t output_reg = intel_dp->output_reg;
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t ch_ctl = output_reg + 0x10;
uint32_t ch_data = ch_ctl + 4;
@@ -368,7 +345,30 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
int recv_bytes;
uint32_t status;
uint32_t aux_clock_divider;
- int try, precharge = 5;
+ int try, precharge;
+
+ if (IS_HASWELL(dev)) {
+ switch (intel_dig_port->port) {
+ case PORT_A:
+ ch_ctl = DPA_AUX_CH_CTL;
+ ch_data = DPA_AUX_CH_DATA1;
+ break;
+ case PORT_B:
+ ch_ctl = PCH_DPB_AUX_CH_CTL;
+ ch_data = PCH_DPB_AUX_CH_DATA1;
+ break;
+ case PORT_C:
+ ch_ctl = PCH_DPC_AUX_CH_CTL;
+ ch_data = PCH_DPC_AUX_CH_DATA1;
+ break;
+ case PORT_D:
+ ch_ctl = PCH_DPD_AUX_CH_CTL;
+ ch_data = PCH_DPD_AUX_CH_DATA1;
+ break;
+ default:
+ BUG();
+ }
+ }
intel_dp_check_edp(intel_dp);
/* The clock divider is based off the hrawclk,
@@ -379,25 +379,34 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
* clock divider.
*/
if (is_cpu_edp(intel_dp)) {
- if (IS_GEN6(dev) || IS_GEN7(dev))
+ if (IS_HASWELL(dev))
+ aux_clock_divider = intel_ddi_get_cdclk_freq(dev_priv) >> 1;
+ else if (IS_VALLEYVIEW(dev))
+ aux_clock_divider = 100;
+ else if (IS_GEN6(dev) || IS_GEN7(dev))
aux_clock_divider = 200; /* SNB & IVB eDP input clock at 400Mhz */
else
aux_clock_divider = 225; /* eDP input clock at 450Mhz */
} else if (HAS_PCH_SPLIT(dev))
- aux_clock_divider = 63; /* IRL input clock fixed at 125Mhz */
+ aux_clock_divider = DIV_ROUND_UP(intel_pch_rawclk(dev), 2);
else
aux_clock_divider = intel_hrawclk(dev) / 2;
+ if (IS_GEN6(dev))
+ precharge = 3;
+ else
+ precharge = 5;
+
/* Try to wait for any previous AUX channel activity */
for (try = 0; try < 3; try++) {
status = I915_READ(ch_ctl);
if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
break;
- drm_msleep(1, "915ach");
+ DRM_MSLEEP(1);
}
if (try == 3) {
- printf("dp_aux_ch not started status 0x%08x\n",
+ WARN(1, "dp_aux_ch not started status 0x%08x\n",
I915_READ(ch_ctl));
return -EBUSY;
}
@@ -423,7 +432,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
status = I915_READ(ch_ctl);
if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
break;
- DELAY(100);
+ udelay(100);
}
/* Clear done status and any errors */
@@ -499,7 +508,7 @@ intel_dp_aux_native_write(struct intel_dp *intel_dp,
if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
break;
else if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_DEFER)
- DELAY(100);
+ udelay(100);
else
return -EIO;
}
@@ -548,7 +557,7 @@ intel_dp_aux_native_read(struct intel_dp *intel_dp,
return ret - 1;
}
else if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_DEFER)
- DELAY(100);
+ udelay(100);
else
return -EIO;
}
@@ -558,9 +567,9 @@ static int
intel_dp_i2c_aux_ch(device_t adapter, int mode,
uint8_t write_byte, uint8_t *read_byte)
{
- struct iic_dp_aux_data *data = device_get_softc(adapter);
- struct intel_dp *intel_dp = data->priv;
- uint16_t address = data->address;
+ struct iic_dp_aux_data *algo_data = device_get_softc(adapter);
+ struct intel_dp *intel_dp = algo_data->priv;
+ uint16_t address = algo_data->address;
uint8_t msg[5];
uint8_t reply[2];
unsigned retry;
@@ -618,7 +627,7 @@ intel_dp_i2c_aux_ch(device_t adapter, int mode,
DRM_DEBUG_KMS("aux_ch native nack\n");
return -EREMOTEIO;
case AUX_NATIVE_REPLY_DEFER:
- DELAY(100);
+ udelay(100);
continue;
default:
DRM_ERROR("aux_ch invalid native reply 0x%02x\n",
@@ -631,13 +640,13 @@ intel_dp_i2c_aux_ch(device_t adapter, int mode,
if (mode == MODE_I2C_READ) {
*read_byte = reply[1];
}
- return (0/*reply_bytes - 1*/);
+ return reply_bytes - 1;
case AUX_I2C_REPLY_NACK:
DRM_DEBUG_KMS("aux_i2c nack\n");
return -EREMOTEIO;
case AUX_I2C_REPLY_DEFER:
DRM_DEBUG_KMS("aux_i2c defer\n");
- DELAY(100);
+ udelay(100);
break;
default:
DRM_ERROR("aux_i2c invalid reply 0x%02x\n", reply[0]);
@@ -649,9 +658,6 @@ intel_dp_i2c_aux_ch(device_t adapter, int mode,
return -EREMOTEIO;
}
-static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp);
-static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
-
static int
intel_dp_i2c_init(struct intel_dp *intel_dp,
struct intel_connector *intel_connector, const char *name)
@@ -668,36 +674,43 @@ intel_dp_i2c_init(struct intel_dp *intel_dp,
return ret;
}
-static bool
-intel_dp_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode,
+bool
+intel_dp_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
struct drm_device *dev = encoder->dev;
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct intel_connector *intel_connector = intel_dp->attached_connector;
int lane_count, clock;
- int max_lane_count = intel_dp_max_lane_count(intel_dp);
+ int max_lane_count = drm_dp_max_lane_count(intel_dp->dpcd);
int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0;
int bpp, mode_rate;
static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };
- if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
- intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode);
- intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
+ if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
+ intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
+ adjusted_mode);
+ intel_pch_panel_fitting(dev,
+ intel_connector->panel.fitting_mode,
mode, adjusted_mode);
}
+ if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
+ return false;
+
DRM_DEBUG_KMS("DP link computation with max lane count %i "
"max bw %02x pixel clock %iKHz\n",
- max_lane_count, bws[max_clock], mode->clock);
+ max_lane_count, bws[max_clock], adjusted_mode->clock);
- if (!intel_dp_adjust_dithering(intel_dp, adjusted_mode, adjusted_mode))
+ if (!intel_dp_adjust_dithering(intel_dp, adjusted_mode, true))
return false;
bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
mode_rate = intel_dp_link_required(adjusted_mode->clock, bpp);
- for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
- for (clock = 0; clock <= max_clock; clock++) {
+ for (clock = 0; clock <= max_clock; clock++) {
+ for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
if (mode_rate <= link_avail) {
@@ -756,59 +769,86 @@ intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
struct drm_device *dev = crtc->dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct drm_encoder *encoder;
+ struct intel_encoder *intel_encoder;
+ struct intel_dp *intel_dp;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int lane_count = 4;
struct intel_dp_m_n m_n;
int pipe = intel_crtc->pipe;
+ enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
+ int target_clock;
/*
* Find the lane count in the intel_encoder private
*/
- list_for_each_entry(encoder, &mode_config->encoder_list, head) {
- struct intel_dp *intel_dp;
-
- if (encoder->crtc != crtc)
- continue;
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ intel_dp = enc_to_intel_dp(&intel_encoder->base);
- intel_dp = enc_to_intel_dp(encoder);
- if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
- intel_dp->base.type == INTEL_OUTPUT_EDP)
+ if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT ||
+ intel_encoder->type == INTEL_OUTPUT_EDP)
{
lane_count = intel_dp->lane_count;
break;
}
}
+ target_clock = mode->clock;
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ if (intel_encoder->type == INTEL_OUTPUT_EDP) {
+ target_clock = intel_edp_target_clock(intel_encoder,
+ mode);
+ break;
+ }
+ }
+
/*
* Compute the GMCH and Link ratios. The '3' here is
* the number of bytes_per_pixel post-LUT, which we always
* set up for 8-bits of R/G/B, or 3 bytes total.
*/
intel_dp_compute_m_n(intel_crtc->bpp, lane_count,
- mode->clock, adjusted_mode->clock, &m_n);
-
- if (HAS_PCH_SPLIT(dev)) {
- I915_WRITE(TRANSDATA_M1(pipe),
- ((m_n.tu - 1) << PIPE_GMCH_DATA_M_TU_SIZE_SHIFT) |
- m_n.gmch_m);
+ target_clock, adjusted_mode->clock, &m_n);
+
+ if (IS_HASWELL(dev)) {
+ I915_WRITE(PIPE_DATA_M1(cpu_transcoder),
+ TU_SIZE(m_n.tu) | m_n.gmch_m);
+ I915_WRITE(PIPE_DATA_N1(cpu_transcoder), m_n.gmch_n);
+ I915_WRITE(PIPE_LINK_M1(cpu_transcoder), m_n.link_m);
+ I915_WRITE(PIPE_LINK_N1(cpu_transcoder), m_n.link_n);
+ } else if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(TRANSDATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
I915_WRITE(TRANSDATA_N1(pipe), m_n.gmch_n);
I915_WRITE(TRANSDPLINK_M1(pipe), m_n.link_m);
I915_WRITE(TRANSDPLINK_N1(pipe), m_n.link_n);
+ } else if (IS_VALLEYVIEW(dev)) {
+ I915_WRITE(PIPE_DATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
+ I915_WRITE(PIPE_DATA_N1(pipe), m_n.gmch_n);
+ I915_WRITE(PIPE_LINK_M1(pipe), m_n.link_m);
+ I915_WRITE(PIPE_LINK_N1(pipe), m_n.link_n);
} else {
I915_WRITE(PIPE_GMCH_DATA_M(pipe),
- ((m_n.tu - 1) << PIPE_GMCH_DATA_M_TU_SIZE_SHIFT) |
- m_n.gmch_m);
+ TU_SIZE(m_n.tu) | m_n.gmch_m);
I915_WRITE(PIPE_GMCH_DATA_N(pipe), m_n.gmch_n);
I915_WRITE(PIPE_DP_LINK_M(pipe), m_n.link_m);
I915_WRITE(PIPE_DP_LINK_N(pipe), m_n.link_n);
}
}
-static void ironlake_edp_pll_on(struct drm_encoder *encoder);
-static void ironlake_edp_pll_off(struct drm_encoder *encoder);
+void intel_dp_init_link_config(struct intel_dp *intel_dp)
+{
+ memset(intel_dp->link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
+ intel_dp->link_configuration[0] = intel_dp->link_bw;
+ intel_dp->link_configuration[1] = intel_dp->lane_count;
+ intel_dp->link_configuration[8] = DP_SET_ANSI_8B10B;
+ /*
+ * Check for DPCD version > 1.1 and enhanced framing support
+ */
+ if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
+ (intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP)) {
+ intel_dp->link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
+ }
+}
static void
intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
@@ -817,17 +857,9 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
- struct drm_crtc *crtc = intel_dp->base.base.crtc;
+ struct drm_crtc *crtc = encoder->crtc;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- /* Turn on the eDP PLL if needed */
- if (is_edp(intel_dp)) {
- if (!is_pch_edp(intel_dp))
- ironlake_edp_pll_on(encoder);
- else
- ironlake_edp_pll_off(encoder);
- }
-
/*
* There are four kinds of DP registers:
*
@@ -849,10 +881,8 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
* supposed to be read-only.
*/
intel_dp->DP = I915_READ(intel_dp->output_reg) & DP_DETECTED;
- intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
/* Handle DP bits in common between all three register formats */
-
intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
switch (intel_dp->lane_count) {
@@ -867,25 +897,17 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
break;
}
if (intel_dp->has_audio) {
- DRM_DEBUG_KMS("Enabling DP audio on pipe %c\n",
+ DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
pipe_name(intel_crtc->pipe));
intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
intel_write_eld(encoder, adjusted_mode);
}
- memset(intel_dp->link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
- intel_dp->link_configuration[0] = intel_dp->link_bw;
- intel_dp->link_configuration[1] = intel_dp->lane_count;
- /*
- * Check for DPCD version > 1.1 and enhanced framing support
- */
- if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
- (intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP)) {
- intel_dp->link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
- }
+
+ intel_dp_init_link_config(intel_dp);
/* Split out the IBX/CPU vs CPT settings */
- if (is_cpu_edp(intel_dp) && IS_GEN7(dev)) {
+ if (is_cpu_edp(intel_dp) && IS_GEN7(dev) && !IS_VALLEYVIEW(dev)) {
if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
intel_dp->DP |= DP_SYNC_HS_HIGH;
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
@@ -898,7 +920,6 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
intel_dp->DP |= intel_crtc->pipe << 29;
/* don't miss out required setting for eDP */
- intel_dp->DP |= DP_PLL_ENABLE;
if (adjusted_mode->clock < 200000)
intel_dp->DP |= DP_PLL_FREQ_160MHZ;
else
@@ -920,7 +941,6 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
if (is_cpu_edp(intel_dp)) {
/* don't miss out required setting for eDP */
- intel_dp->DP |= DP_PLL_ENABLE;
if (adjusted_mode->clock < 200000)
intel_dp->DP |= DP_PLL_FREQ_160MHZ;
else
@@ -944,7 +964,7 @@ static void ironlake_wait_panel_status(struct intel_dp *intel_dp,
u32 mask,
u32 value)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n",
@@ -991,9 +1011,9 @@ static u32 ironlake_get_pp_control(struct drm_i915_private *dev_priv)
return control;
}
-static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
+void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 pp;
@@ -1001,8 +1021,8 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
return;
DRM_DEBUG_KMS("Turn eDP VDD on\n");
- if (intel_dp->want_panel_vdd)
- printf("eDP VDD already requested on\n");
+ WARN(intel_dp->want_panel_vdd,
+ "eDP VDD already requested on\n");
intel_dp->want_panel_vdd = true;
@@ -1026,13 +1046,13 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
*/
if (!ironlake_edp_have_panel_power(intel_dp)) {
DRM_DEBUG_KMS("eDP was not running\n");
- drm_msleep(intel_dp->panel_power_up_delay, "915edpon");
+ DRM_MSLEEP(intel_dp->panel_power_up_delay);
}
}
static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 pp;
@@ -1046,28 +1066,27 @@ static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp)
DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
- drm_msleep(intel_dp->panel_power_down_delay, "915vddo");
+ DRM_MSLEEP(intel_dp->panel_power_down_delay);
}
}
static void ironlake_panel_vdd_work(void *arg, int pending __unused)
{
struct intel_dp *intel_dp = arg;
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
sx_xlock(&dev->mode_config.mutex);
ironlake_panel_vdd_off_sync(intel_dp);
sx_xunlock(&dev->mode_config.mutex);
}
-static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
+void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
{
if (!is_edp(intel_dp))
return;
DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
- if (!intel_dp->want_panel_vdd)
- printf("eDP VDD not forced on\n");
+ WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
intel_dp->want_panel_vdd = false;
@@ -1079,16 +1098,18 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
* time from now (relative to the power down delay)
* to keep the panel power up across a sequence of operations
*/
- struct drm_i915_private *dev_priv = intel_dp->base.base.dev->dev_private;
- taskqueue_enqueue_timeout(dev_priv->tq,
- &intel_dp->panel_vdd_task,
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ taskqueue_enqueue_timeout(dev_priv->wq,
+ &intel_dp->panel_vdd_work,
msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));
}
}
-static void ironlake_edp_panel_on(struct intel_dp *intel_dp)
+void ironlake_edp_panel_on(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 pp;
@@ -1128,9 +1149,9 @@ static void ironlake_edp_panel_on(struct intel_dp *intel_dp)
}
}
-static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
+void ironlake_edp_panel_off(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 pp;
@@ -1139,22 +1160,26 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
DRM_DEBUG_KMS("Turn eDP power off\n");
- if (intel_dp->want_panel_vdd)
- printf("Cannot turn power off while VDD is on\n");
- ironlake_panel_vdd_off_sync(intel_dp); /* finish any pending work */
+ WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n");
pp = ironlake_get_pp_control(dev_priv);
+ /* We need to switch off panel power _and_ force vdd, for otherwise some
+ * panels get very unhappy and cease to work. */
pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
I915_WRITE(PCH_PP_CONTROL, pp);
POSTING_READ(PCH_PP_CONTROL);
+ intel_dp->want_panel_vdd = false;
+
ironlake_wait_panel_off(intel_dp);
}
-static void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
+void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe = to_intel_crtc(intel_dig_port->base.base.crtc)->pipe;
u32 pp;
if (!is_edp(intel_dp))
@@ -1167,59 +1192,87 @@ static void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
* link. So delay a bit to make sure the image is solid before
* allowing it to appear.
*/
- drm_msleep(intel_dp->backlight_on_delay, "915ebo");
+ DRM_MSLEEP(intel_dp->backlight_on_delay);
pp = ironlake_get_pp_control(dev_priv);
pp |= EDP_BLC_ENABLE;
I915_WRITE(PCH_PP_CONTROL, pp);
POSTING_READ(PCH_PP_CONTROL);
+
+ intel_panel_enable_backlight(dev, pipe);
}
-static void ironlake_edp_backlight_off(struct intel_dp *intel_dp)
+void ironlake_edp_backlight_off(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 pp;
if (!is_edp(intel_dp))
return;
+ intel_panel_disable_backlight(dev);
+
DRM_DEBUG_KMS("\n");
pp = ironlake_get_pp_control(dev_priv);
pp &= ~EDP_BLC_ENABLE;
I915_WRITE(PCH_PP_CONTROL, pp);
POSTING_READ(PCH_PP_CONTROL);
- drm_msleep(intel_dp->backlight_off_delay, "915bo1");
+ DRM_MSLEEP(intel_dp->backlight_off_delay);
}
-static void ironlake_edp_pll_on(struct drm_encoder *encoder)
+static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
{
- struct drm_device *dev = encoder->dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_crtc *crtc = intel_dig_port->base.base.crtc;
+ struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
u32 dpa_ctl;
+ assert_pipe_disabled(dev_priv,
+ to_intel_crtc(crtc)->pipe);
+
DRM_DEBUG_KMS("\n");
dpa_ctl = I915_READ(DP_A);
- dpa_ctl |= DP_PLL_ENABLE;
- I915_WRITE(DP_A, dpa_ctl);
+ WARN(dpa_ctl & DP_PLL_ENABLE, "dp pll on, should be off\n");
+ WARN(dpa_ctl & DP_PORT_EN, "dp port still on, should be off\n");
+
+ /* We don't adjust intel_dp->DP while tearing down the link, to
+ * facilitate link retraining (e.g. after hotplug). Hence clear all
+ * enable bits here to ensure that we don't enable too much. */
+ intel_dp->DP &= ~(DP_PORT_EN | DP_AUDIO_OUTPUT_ENABLE);
+ intel_dp->DP |= DP_PLL_ENABLE;
+ I915_WRITE(DP_A, intel_dp->DP);
POSTING_READ(DP_A);
- DELAY(200);
+ udelay(200);
}
-static void ironlake_edp_pll_off(struct drm_encoder *encoder)
+static void ironlake_edp_pll_off(struct intel_dp *intel_dp)
{
- struct drm_device *dev = encoder->dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_crtc *crtc = intel_dig_port->base.base.crtc;
+ struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
u32 dpa_ctl;
+ assert_pipe_disabled(dev_priv,
+ to_intel_crtc(crtc)->pipe);
+
dpa_ctl = I915_READ(DP_A);
+ WARN((dpa_ctl & DP_PLL_ENABLE) == 0,
+ "dp pll off, should be on\n");
+ WARN(dpa_ctl & DP_PORT_EN, "dp port still on, should be off\n");
+
+ /* We can't rely on the value tracked for the DP register in
+ * intel_dp->DP because link_down must not change that (otherwise link
+ * re-training will fail. */
dpa_ctl &= ~DP_PLL_ENABLE;
I915_WRITE(DP_A, dpa_ctl);
POSTING_READ(DP_A);
- DELAY(200);
+ udelay(200);
}
/* If the sink supports it, try to set the power state appropriately */
-static void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
+void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
{
int ret, i;
@@ -1231,7 +1284,7 @@ static void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
ret = intel_dp_aux_native_write_1(intel_dp, DP_SET_POWER,
DP_SET_POWER_D3);
if (ret != 1)
- DRM_DEBUG("failed to write sink power state\n");
+ DRM_DEBUG_DRIVER("failed to write sink power state\n");
} else {
/*
* When turning on, we need to retry for 1ms to give the sink
@@ -1243,85 +1296,113 @@ static void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
DP_SET_POWER_D0);
if (ret == 1)
break;
- drm_msleep(1, "915dps");
+ DRM_MSLEEP(1);
}
}
}
-static void intel_dp_prepare(struct drm_encoder *encoder)
+static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
{
- struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 tmp = I915_READ(intel_dp->output_reg);
- ironlake_edp_backlight_off(intel_dp);
- ironlake_edp_panel_off(intel_dp);
+ if (!(tmp & DP_PORT_EN))
+ return false;
- /* Wake up the sink first */
- ironlake_edp_panel_vdd_on(intel_dp);
- intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
- intel_dp_link_down(intel_dp);
- ironlake_edp_panel_vdd_off(intel_dp, false);
+ if (is_cpu_edp(intel_dp) && IS_GEN7(dev)) {
+ *pipe = PORT_TO_PIPE_CPT(tmp);
+ } else if (!HAS_PCH_CPT(dev) || is_cpu_edp(intel_dp)) {
+ *pipe = PORT_TO_PIPE(tmp);
+ } else {
+ u32 trans_sel;
+ u32 trans_dp;
+ int i;
- /* Make sure the panel is off before trying to
- * change the mode
- */
+ switch (intel_dp->output_reg) {
+ case PCH_DP_B:
+ trans_sel = TRANS_DP_PORT_SEL_B;
+ break;
+ case PCH_DP_C:
+ trans_sel = TRANS_DP_PORT_SEL_C;
+ break;
+ case PCH_DP_D:
+ trans_sel = TRANS_DP_PORT_SEL_D;
+ break;
+ default:
+ return true;
+ }
+
+ for_each_pipe(i) {
+ trans_dp = I915_READ(TRANS_DP_CTL(i));
+ if ((trans_dp & TRANS_DP_PORT_SEL_MASK) == trans_sel) {
+ *pipe = i;
+ return true;
+ }
+ }
+
+ DRM_DEBUG_KMS("No pipe for dp port 0x%x found\n",
+ intel_dp->output_reg);
+ }
+
+ return true;
}
-static void intel_dp_commit(struct drm_encoder *encoder)
+static void intel_disable_dp(struct intel_encoder *encoder)
{
- struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
- struct drm_device *dev = encoder->dev;
- struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ /* Make sure the panel is off before trying to change the mode. But also
+ * ensure that we have vdd while we switch off the panel. */
ironlake_edp_panel_vdd_on(intel_dp);
+ ironlake_edp_backlight_off(intel_dp);
intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
- intel_dp_start_link_train(intel_dp);
- ironlake_edp_panel_on(intel_dp);
- ironlake_edp_panel_vdd_off(intel_dp, true);
- intel_dp_complete_link_train(intel_dp);
- ironlake_edp_backlight_on(intel_dp);
+ ironlake_edp_panel_off(intel_dp);
- intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
+ /* cpu edp my only be disable _after_ the cpu pipe/plane is disabled. */
+ if (!is_cpu_edp(intel_dp))
+ intel_dp_link_down(intel_dp);
+}
+
+static void intel_post_disable_dp(struct intel_encoder *encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
- if (HAS_PCH_CPT(dev))
- intel_cpt_verify_modeset(dev, intel_crtc->pipe);
+ if (is_cpu_edp(intel_dp)) {
+ intel_dp_link_down(intel_dp);
+ ironlake_edp_pll_off(intel_dp);
+ }
}
-static void
-intel_dp_dpms(struct drm_encoder *encoder, int mode)
+static void intel_enable_dp(struct intel_encoder *encoder)
{
- struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
- struct drm_device *dev = encoder->dev;
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t dp_reg = I915_READ(intel_dp->output_reg);
- if (mode != DRM_MODE_DPMS_ON) {
- ironlake_edp_backlight_off(intel_dp);
- ironlake_edp_panel_off(intel_dp);
+ if (WARN_ON(dp_reg & DP_PORT_EN))
+ return;
- ironlake_edp_panel_vdd_on(intel_dp);
- intel_dp_sink_dpms(intel_dp, mode);
- intel_dp_link_down(intel_dp);
- ironlake_edp_panel_vdd_off(intel_dp, false);
+ ironlake_edp_panel_vdd_on(intel_dp);
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
+ intel_dp_start_link_train(intel_dp);
+ ironlake_edp_panel_on(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, true);
+ intel_dp_complete_link_train(intel_dp);
+ ironlake_edp_backlight_on(intel_dp);
+}
- if (is_cpu_edp(intel_dp))
- ironlake_edp_pll_off(encoder);
- } else {
- if (is_cpu_edp(intel_dp))
- ironlake_edp_pll_on(encoder);
+static void intel_pre_enable_dp(struct intel_encoder *encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
- ironlake_edp_panel_vdd_on(intel_dp);
- intel_dp_sink_dpms(intel_dp, mode);
- if (!(dp_reg & DP_PORT_EN)) {
- intel_dp_start_link_train(intel_dp);
- ironlake_edp_panel_on(intel_dp);
- ironlake_edp_panel_vdd_off(intel_dp, true);
- intel_dp_complete_link_train(intel_dp);
- } else
- ironlake_edp_panel_vdd_off(intel_dp, false);
- ironlake_edp_backlight_on(intel_dp);
- }
- intel_dp->dpms_mode = mode;
+ if (is_cpu_edp(intel_dp))
+ ironlake_edp_pll_on(intel_dp);
}
+
/*
* Native read with retry for link status and receiver capability reads for
* cases where the sink may still be asleep.
@@ -1341,7 +1422,7 @@ intel_dp_aux_native_read_retry(struct intel_dp *intel_dp, uint16_t address,
recv_bytes);
if (ret == recv_bytes)
return true;
- drm_msleep(1, "915dpl");
+ DRM_MSLEEP(1);
}
return false;
@@ -1360,38 +1441,6 @@ intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_
DP_LINK_STATUS_SIZE);
}
-static uint8_t
-intel_dp_link_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
- int r)
-{
- return link_status[r - DP_LANE0_1_STATUS];
-}
-
-static uint8_t
-intel_get_adjust_request_voltage(uint8_t adjust_request[2],
- int lane)
-{
- int s = ((lane & 1) ?
- DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT :
- DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT);
- uint8_t l = adjust_request[lane>>1];
-
- return ((l >> s) & 3) << DP_TRAIN_VOLTAGE_SWING_SHIFT;
-}
-
-static uint8_t
-intel_get_adjust_request_pre_emphasis(uint8_t adjust_request[2],
- int lane)
-{
- int s = ((lane & 1) ?
- DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT :
- DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT);
- uint8_t l = adjust_request[lane>>1];
-
- return ((l >> s) & 3) << DP_TRAIN_PRE_EMPHASIS_SHIFT;
-}
-
-
#if 0
static char *voltage_names[] = {
"0.4V", "0.6V", "0.8V", "1.2V"
@@ -1412,7 +1461,7 @@ static char *link_train_names[] = {
static uint8_t
intel_dp_voltage_max(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
if (IS_GEN7(dev) && is_cpu_edp(intel_dp))
return DP_TRAIN_VOLTAGE_SWING_800;
@@ -1425,9 +1474,21 @@ intel_dp_voltage_max(struct intel_dp *intel_dp)
static uint8_t
intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
- if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ if (IS_HASWELL(dev)) {
+ switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
+ case DP_TRAIN_VOLTAGE_SWING_400:
+ return DP_TRAIN_PRE_EMPHASIS_9_5;
+ case DP_TRAIN_VOLTAGE_SWING_600:
+ return DP_TRAIN_PRE_EMPHASIS_6;
+ case DP_TRAIN_VOLTAGE_SWING_800:
+ return DP_TRAIN_PRE_EMPHASIS_3_5;
+ case DP_TRAIN_VOLTAGE_SWING_1200:
+ default:
+ return DP_TRAIN_PRE_EMPHASIS_0;
+ }
+ } else if (IS_GEN7(dev) && is_cpu_edp(intel_dp) && !IS_VALLEYVIEW(dev)) {
switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
case DP_TRAIN_VOLTAGE_SWING_400:
return DP_TRAIN_PRE_EMPHASIS_6;
@@ -1458,13 +1519,12 @@ intel_get_adjust_train(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_ST
uint8_t v = 0;
uint8_t p = 0;
int lane;
- uint8_t *adjust_request = link_status + (DP_ADJUST_REQUEST_LANE0_1 - DP_LANE0_1_STATUS);
uint8_t voltage_max;
uint8_t preemph_max;
for (lane = 0; lane < intel_dp->lane_count; lane++) {
- uint8_t this_v = intel_get_adjust_request_voltage(adjust_request, lane);
- uint8_t this_p = intel_get_adjust_request_pre_emphasis(adjust_request, lane);
+ uint8_t this_v = drm_dp_get_adjust_request_voltage(link_status, lane);
+ uint8_t this_p = drm_dp_get_adjust_request_pre_emphasis(link_status, lane);
if (this_v > v)
v = this_v;
@@ -1581,52 +1641,38 @@ intel_gen7_edp_signal_levels(uint8_t train_set)
}
}
-static uint8_t
-intel_get_lane_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
- int lane)
-{
- int s = (lane & 1) * 4;
- uint8_t l = link_status[lane>>1];
-
- return (l >> s) & 0xf;
-}
-
-/* Check for clock recovery is done on all channels */
-static bool
-intel_clock_recovery_ok(uint8_t link_status[DP_LINK_STATUS_SIZE], int lane_count)
+/* Gen7.5's (HSW) DP voltage swing and pre-emphasis control */
+static uint32_t
+intel_dp_signal_levels_hsw(uint8_t train_set)
{
- int lane;
- uint8_t lane_status;
-
- for (lane = 0; lane < lane_count; lane++) {
- lane_status = intel_get_lane_status(link_status, lane);
- if ((lane_status & DP_LANE_CR_DONE) == 0)
- return false;
- }
- return true;
-}
+ int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
+ DP_TRAIN_PRE_EMPHASIS_MASK);
+ switch (signal_levels) {
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
+ return DDI_BUF_EMP_400MV_0DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return DDI_BUF_EMP_400MV_3_5DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
+ return DDI_BUF_EMP_400MV_6DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_9_5:
+ return DDI_BUF_EMP_400MV_9_5DB_HSW;
-/* Check to see if channel eq is done on all channels */
-#define CHANNEL_EQ_BITS (DP_LANE_CR_DONE|\
- DP_LANE_CHANNEL_EQ_DONE|\
- DP_LANE_SYMBOL_LOCKED)
-static bool
-intel_channel_eq_ok(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
-{
- uint8_t lane_align;
- uint8_t lane_status;
- int lane;
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
+ return DDI_BUF_EMP_600MV_0DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return DDI_BUF_EMP_600MV_3_5DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_6:
+ return DDI_BUF_EMP_600MV_6DB_HSW;
- lane_align = intel_dp_link_status(link_status,
- DP_LANE_ALIGN_STATUS_UPDATED);
- if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0)
- return false;
- for (lane = 0; lane < intel_dp->lane_count; lane++) {
- lane_status = intel_get_lane_status(link_status, lane);
- if ((lane_status & CHANNEL_EQ_BITS) != CHANNEL_EQ_BITS)
- return false;
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
+ return DDI_BUF_EMP_800MV_0DB_HSW;
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return DDI_BUF_EMP_800MV_3_5DB_HSW;
+ default:
+ DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
+ "0x%x\n", signal_levels);
+ return DDI_BUF_EMP_400MV_0DB_HSW;
}
- return true;
}
static bool
@@ -1634,9 +1680,90 @@ intel_dp_set_link_train(struct intel_dp *intel_dp,
uint32_t dp_reg_value,
uint8_t dp_train_pat)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ enum port port = intel_dig_port->port;
int ret;
+ uint32_t temp;
+
+ if (IS_HASWELL(dev)) {
+ temp = I915_READ(DP_TP_CTL(port));
+
+ if (dp_train_pat & DP_LINK_SCRAMBLING_DISABLE)
+ temp |= DP_TP_CTL_SCRAMBLE_DISABLE;
+ else
+ temp &= ~DP_TP_CTL_SCRAMBLE_DISABLE;
+
+ temp &= ~DP_TP_CTL_LINK_TRAIN_MASK;
+ switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
+ case DP_TRAINING_PATTERN_DISABLE:
+
+ if (port != PORT_A) {
+ temp |= DP_TP_CTL_LINK_TRAIN_IDLE;
+ I915_WRITE(DP_TP_CTL(port), temp);
+
+ if (wait_for((I915_READ(DP_TP_STATUS(port)) &
+ DP_TP_STATUS_IDLE_DONE), 1))
+ DRM_ERROR("Timed out waiting for DP idle patterns\n");
+
+ temp &= ~DP_TP_CTL_LINK_TRAIN_MASK;
+ }
+
+ temp |= DP_TP_CTL_LINK_TRAIN_NORMAL;
+
+ break;
+ case DP_TRAINING_PATTERN_1:
+ temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
+ break;
+ case DP_TRAINING_PATTERN_2:
+ temp |= DP_TP_CTL_LINK_TRAIN_PAT2;
+ break;
+ case DP_TRAINING_PATTERN_3:
+ temp |= DP_TP_CTL_LINK_TRAIN_PAT3;
+ break;
+ }
+ I915_WRITE(DP_TP_CTL(port), temp);
+
+ } else if (HAS_PCH_CPT(dev) &&
+ (IS_GEN7(dev) || !is_cpu_edp(intel_dp))) {
+ dp_reg_value &= ~DP_LINK_TRAIN_MASK_CPT;
+
+ switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
+ case DP_TRAINING_PATTERN_DISABLE:
+ dp_reg_value |= DP_LINK_TRAIN_OFF_CPT;
+ break;
+ case DP_TRAINING_PATTERN_1:
+ dp_reg_value |= DP_LINK_TRAIN_PAT_1_CPT;
+ break;
+ case DP_TRAINING_PATTERN_2:
+ dp_reg_value |= DP_LINK_TRAIN_PAT_2_CPT;
+ break;
+ case DP_TRAINING_PATTERN_3:
+ DRM_ERROR("DP training pattern 3 not supported\n");
+ dp_reg_value |= DP_LINK_TRAIN_PAT_2_CPT;
+ break;
+ }
+
+ } else {
+ dp_reg_value &= ~DP_LINK_TRAIN_MASK;
+
+ switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
+ case DP_TRAINING_PATTERN_DISABLE:
+ dp_reg_value |= DP_LINK_TRAIN_OFF;
+ break;
+ case DP_TRAINING_PATTERN_1:
+ dp_reg_value |= DP_LINK_TRAIN_PAT_1;
+ break;
+ case DP_TRAINING_PATTERN_2:
+ dp_reg_value |= DP_LINK_TRAIN_PAT_2;
+ break;
+ case DP_TRAINING_PATTERN_3:
+ DRM_ERROR("DP training pattern 3 not supported\n");
+ dp_reg_value |= DP_LINK_TRAIN_PAT_2;
+ break;
+ }
+ }
I915_WRITE(intel_dp->output_reg, dp_reg_value);
POSTING_READ(intel_dp->output_reg);
@@ -1645,34 +1772,33 @@ intel_dp_set_link_train(struct intel_dp *intel_dp,
DP_TRAINING_PATTERN_SET,
dp_train_pat);
- ret = intel_dp_aux_native_write(intel_dp,
- DP_TRAINING_LANE0_SET,
- intel_dp->train_set,
- intel_dp->lane_count);
- if (ret != intel_dp->lane_count)
- return false;
+ if ((dp_train_pat & DP_TRAINING_PATTERN_MASK) !=
+ DP_TRAINING_PATTERN_DISABLE) {
+ ret = intel_dp_aux_native_write(intel_dp,
+ DP_TRAINING_LANE0_SET,
+ intel_dp->train_set,
+ intel_dp->lane_count);
+ if (ret != intel_dp->lane_count)
+ return false;
+ }
return true;
}
/* Enable corresponding port and start training pattern 1 */
-static void
+void
intel_dp_start_link_train(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
+ struct drm_encoder *encoder = &dp_to_dig_port(intel_dp)->base.base;
+ struct drm_device *dev = encoder->dev;
int i;
uint8_t voltage;
bool clock_recovery = false;
int voltage_tries, loop_tries;
- u32 reg;
uint32_t DP = intel_dp->DP;
- /* Enable output, wait for it to become active */
- I915_WRITE(intel_dp->output_reg, intel_dp->DP);
- POSTING_READ(intel_dp->output_reg);
- intel_wait_for_vblank(dev, intel_crtc->pipe);
+ if (IS_HASWELL(dev))
+ intel_ddi_prepare_link_retrain(encoder);
/* Write the link configuration data */
intel_dp_aux_native_write(intel_dp, DP_LINK_BW_SET,
@@ -1681,10 +1807,6 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
DP |= DP_PORT_EN;
- if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
- DP &= ~DP_LINK_TRAIN_MASK_CPT;
- else
- DP &= ~DP_LINK_TRAIN_MASK;
memset(intel_dp->train_set, 0, 4);
voltage = 0xff;
voltage_tries = 0;
@@ -1695,8 +1817,11 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
uint8_t link_status[DP_LINK_STATUS_SIZE];
uint32_t signal_levels;
-
- if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ if (IS_HASWELL(dev)) {
+ signal_levels = intel_dp_signal_levels_hsw(
+ intel_dp->train_set[0]);
+ DP = (DP & ~DDI_BUF_EMP_MASK) | signal_levels;
+ } else if (IS_GEN7(dev) && is_cpu_edp(intel_dp) && !IS_VALLEYVIEW(dev)) {
signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
} else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
@@ -1704,27 +1829,24 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
} else {
signal_levels = intel_dp_signal_levels(intel_dp->train_set[0]);
- DRM_DEBUG_KMS("training pattern 1 signal levels %08x\n", signal_levels);
DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
}
+ DRM_DEBUG_KMS("training pattern 1 signal levels %08x\n",
+ signal_levels);
- if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
- reg = DP | DP_LINK_TRAIN_PAT_1_CPT;
- else
- reg = DP | DP_LINK_TRAIN_PAT_1;
-
- if (!intel_dp_set_link_train(intel_dp, reg,
- DP_TRAINING_PATTERN_1))
- break;
/* Set training pattern 1 */
+ if (!intel_dp_set_link_train(intel_dp, DP,
+ DP_TRAINING_PATTERN_1 |
+ DP_LINK_SCRAMBLING_DISABLE))
+ break;
- DELAY(100);
+ drm_dp_link_train_clock_recovery_delay(intel_dp->dpcd);
if (!intel_dp_get_link_status(intel_dp, link_status)) {
DRM_ERROR("failed to get link status\n");
break;
}
- if (intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
+ if (drm_dp_clock_recovery_ok(link_status, intel_dp->lane_count)) {
DRM_DEBUG_KMS("clock recovery OK\n");
clock_recovery = true;
break;
@@ -1763,14 +1885,12 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
intel_dp->DP = DP;
}
-static void
+void
intel_dp_complete_link_train(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
bool channel_eq = false;
int tries, cr_tries;
- u32 reg;
uint32_t DP = intel_dp->DP;
/* channel equalization */
@@ -1788,7 +1908,10 @@ intel_dp_complete_link_train(struct intel_dp *intel_dp)
break;
}
- if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ if (IS_HASWELL(dev)) {
+ signal_levels = intel_dp_signal_levels_hsw(intel_dp->train_set[0]);
+ DP = (DP & ~DDI_BUF_EMP_MASK) | signal_levels;
+ } else if (IS_GEN7(dev) && is_cpu_edp(intel_dp) && !IS_VALLEYVIEW(dev)) {
signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
} else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
@@ -1799,28 +1922,24 @@ intel_dp_complete_link_train(struct intel_dp *intel_dp)
DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
}
- if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
- reg = DP | DP_LINK_TRAIN_PAT_2_CPT;
- else
- reg = DP | DP_LINK_TRAIN_PAT_2;
-
/* channel eq pattern */
- if (!intel_dp_set_link_train(intel_dp, reg,
- DP_TRAINING_PATTERN_2))
+ if (!intel_dp_set_link_train(intel_dp, DP,
+ DP_TRAINING_PATTERN_2 |
+ DP_LINK_SCRAMBLING_DISABLE))
break;
- DELAY(400);
+ drm_dp_link_train_channel_eq_delay(intel_dp->dpcd);
if (!intel_dp_get_link_status(intel_dp, link_status))
break;
/* Make sure clock is still ok */
- if (!intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
+ if (!drm_dp_clock_recovery_ok(link_status, intel_dp->lane_count)) {
intel_dp_start_link_train(intel_dp);
cr_tries++;
continue;
}
- if (intel_channel_eq_ok(intel_dp, link_status)) {
+ if (drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
channel_eq = true;
break;
}
@@ -1839,35 +1958,42 @@ intel_dp_complete_link_train(struct intel_dp *intel_dp)
++tries;
}
- if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
- reg = DP | DP_LINK_TRAIN_OFF_CPT;
- else
- reg = DP | DP_LINK_TRAIN_OFF;
+ if (channel_eq)
+ DRM_DEBUG_KMS("Channel EQ done. DP Training successfull\n");
- I915_WRITE(intel_dp->output_reg, reg);
- POSTING_READ(intel_dp->output_reg);
- intel_dp_aux_native_write_1(intel_dp,
- DP_TRAINING_PATTERN_SET, DP_TRAINING_PATTERN_DISABLE);
+ intel_dp_set_link_train(intel_dp, DP, DP_TRAINING_PATTERN_DISABLE);
}
static void
intel_dp_link_down(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t DP = intel_dp->DP;
- if ((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0)
+ /*
+ * DDI code has a strict mode set sequence and we should try to respect
+ * it, otherwise we might hang the machine in many different ways. So we
+ * really should be disabling the port only on a complete crtc_disable
+ * sequence. This function is just called under two conditions on DDI
+ * code:
+ * - Link train failed while doing crtc_enable, and on this case we
+ * really should respect the mode set sequence and wait for a
+ * crtc_disable.
+ * - Someone turned the monitor off and intel_dp_check_link_status
+ * called us. We don't need to disable the whole port on this case, so
+ * when someone turns the monitor on again,
+ * intel_ddi_prepare_link_retrain will take care of redoing the link
+ * train.
+ */
+ if (IS_HASWELL(dev))
return;
- DRM_DEBUG_KMS("\n");
+ if (WARN_ON((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0))
+ return;
- if (is_edp(intel_dp)) {
- DP &= ~DP_PLL_ENABLE;
- I915_WRITE(intel_dp->output_reg, DP);
- POSTING_READ(intel_dp->output_reg);
- DELAY(100);
- }
+ DRM_DEBUG_KMS("\n");
if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp))) {
DP &= ~DP_LINK_TRAIN_MASK_CPT;
@@ -1878,19 +2004,11 @@ intel_dp_link_down(struct intel_dp *intel_dp)
}
POSTING_READ(intel_dp->output_reg);
- drm_msleep(17, "915dlo");
-
- if (is_edp(intel_dp)) {
- if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
- DP |= DP_LINK_TRAIN_OFF_CPT;
- else
- DP |= DP_LINK_TRAIN_OFF;
- }
+ DRM_MSLEEP(17);
-
- if (!HAS_PCH_CPT(dev) &&
+ if (HAS_PCH_IBX(dev) &&
I915_READ(intel_dp->output_reg) & DP_PIPEB_SELECT) {
- struct drm_crtc *crtc = intel_dp->base.base.crtc;
+ struct drm_crtc *crtc = intel_dig_port->base.base.crtc;
/* Hardware workaround: leaving our transcoder select
* set to transcoder B while it's off will prevent the
@@ -1916,7 +2034,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
* continuing.
*/
POSTING_READ(intel_dp->output_reg);
- drm_msleep(50, "915dla");
+ DRM_MSLEEP(50);
} else
intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe);
}
@@ -1924,19 +2042,32 @@ intel_dp_link_down(struct intel_dp *intel_dp)
DP &= ~DP_AUDIO_OUTPUT_ENABLE;
I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
POSTING_READ(intel_dp->output_reg);
- drm_msleep(intel_dp->panel_power_down_delay, "915ldo");
+ DRM_MSLEEP(intel_dp->panel_power_down_delay);
}
static bool
intel_dp_get_dpcd(struct intel_dp *intel_dp)
{
if (intel_dp_aux_native_read_retry(intel_dp, 0x000, intel_dp->dpcd,
- sizeof(intel_dp->dpcd)) &&
- (intel_dp->dpcd[DP_DPCD_REV] != 0)) {
- return true;
- }
+ sizeof(intel_dp->dpcd)) == 0)
+ return false; /* aux transfer failed */
- return false;
+ if (intel_dp->dpcd[DP_DPCD_REV] == 0)
+ return false; /* DPCD not present */
+
+ if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
+ DP_DWN_STRM_PORT_PRESENT))
+ return true; /* native DP sink */
+
+ if (intel_dp->dpcd[DP_DPCD_REV] == 0x10)
+ return true; /* no per-port downstream info */
+
+ if (intel_dp_aux_native_read_retry(intel_dp, DP_DOWNSTREAM_PORT_0,
+ intel_dp->downstream_ports,
+ DP_MAX_DOWNSTREAM_PORTS) == 0)
+ return false; /* downstream port status fetch failed */
+
+ return true;
}
static void
@@ -1947,6 +2078,8 @@ intel_dp_probe_oui(struct intel_dp *intel_dp)
if (!(intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT))
return;
+ ironlake_edp_panel_vdd_on(intel_dp);
+
if (intel_dp_aux_native_read_retry(intel_dp, DP_SINK_OUI, buf, 3))
DRM_DEBUG_KMS("Sink OUI: %02x%02x%02x\n",
buf[0], buf[1], buf[2]);
@@ -1954,6 +2087,8 @@ intel_dp_probe_oui(struct intel_dp *intel_dp)
if (intel_dp_aux_native_read_retry(intel_dp, DP_BRANCH_OUI, buf, 3))
DRM_DEBUG_KMS("Branch OUI: %02x%02x%02x\n",
buf[0], buf[1], buf[2]);
+
+ ironlake_edp_panel_vdd_off(intel_dp, false);
}
static bool
@@ -1974,7 +2109,7 @@ static void
intel_dp_handle_test_request(struct intel_dp *intel_dp)
{
/* NAK by default */
- intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, DP_TEST_ACK);
+ intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, DP_TEST_NAK);
}
/*
@@ -1986,16 +2121,17 @@ intel_dp_handle_test_request(struct intel_dp *intel_dp)
* 4. Check link status on receipt of hot-plug interrupt
*/
-static void
+void
intel_dp_check_link_status(struct intel_dp *intel_dp)
{
+ struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
u8 sink_irq_vector;
u8 link_status[DP_LINK_STATUS_SIZE];
- if (intel_dp->dpms_mode != DRM_MODE_DPMS_ON)
+ if (!intel_encoder->connectors_active)
return;
- if (!intel_dp->base.base.crtc)
+ if (WARN_ON(!intel_encoder->base.crtc))
return;
/* Try to read receiver status if the link appears to be up */
@@ -2021,33 +2157,66 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
intel_dp_handle_test_request(intel_dp);
if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
- DRM_DEBUG_KMS("CP or sink specific irq unhandled\n");
+ DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
}
- if (!intel_channel_eq_ok(intel_dp, link_status)) {
+ if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
- drm_get_encoder_name(&intel_dp->base.base));
- intel_dp_start_link_train(intel_dp);
+ drm_get_encoder_name(&intel_encoder->base));
+ intel_dp_start_link_train(intel_dp);
intel_dp_complete_link_train(intel_dp);
}
}
+/* XXX this is probably wrong for multiple downstream ports */
static enum drm_connector_status
intel_dp_detect_dpcd(struct intel_dp *intel_dp)
{
- if (intel_dp_get_dpcd(intel_dp))
+ uint8_t *dpcd = intel_dp->dpcd;
+ bool hpd;
+ uint8_t type;
+
+ if (!intel_dp_get_dpcd(intel_dp))
+ return connector_status_disconnected;
+
+ /* if there's no downstream port, we're done */
+ if (!(dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DWN_STRM_PORT_PRESENT))
+ return connector_status_connected;
+
+ /* If we're HPD-aware, SINK_COUNT changes dynamically */
+ hpd = !!(intel_dp->downstream_ports[0] & DP_DS_PORT_HPD);
+ if (hpd) {
+ uint8_t reg;
+ if (!intel_dp_aux_native_read_retry(intel_dp, DP_SINK_COUNT,
+ &reg, 1))
+ return connector_status_unknown;
+ return DP_GET_SINK_COUNT(reg) ? connector_status_connected
+ : connector_status_disconnected;
+ }
+
+ /* If no HPD, poke DDC gently */
+ if (drm_probe_ddc(intel_dp->adapter))
return connector_status_connected;
+
+ /* Well we tried, say unknown for unreliable port types */
+ type = intel_dp->downstream_ports[0] & DP_DS_PORT_TYPE_MASK;
+ if (type == DP_DS_PORT_TYPE_VGA || type == DP_DS_PORT_TYPE_NON_EDID)
+ return connector_status_unknown;
+
+ /* Anything else is out of spec, warn and ignore */
+ DRM_DEBUG_KMS("Broken DP branch device, ignoring\n");
return connector_status_disconnected;
}
static enum drm_connector_status
ironlake_dp_detect(struct intel_dp *intel_dp)
{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
enum drm_connector_status status;
/* Can't disconnect eDP, but you can close the lid... */
if (is_edp(intel_dp)) {
- status = intel_panel_detect(intel_dp->base.base.dev);
+ status = intel_panel_detect(dev);
if (status == connector_status_unknown)
status = connector_status_connected;
return status;
@@ -2059,27 +2228,25 @@ ironlake_dp_detect(struct intel_dp *intel_dp)
static enum drm_connector_status
g4x_dp_detect(struct intel_dp *intel_dp)
{
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
struct drm_i915_private *dev_priv = dev->dev_private;
- uint32_t temp, bit;
+ uint32_t bit;
switch (intel_dp->output_reg) {
case DP_B:
- bit = DPB_HOTPLUG_INT_STATUS;
+ bit = DPB_HOTPLUG_LIVE_STATUS;
break;
case DP_C:
- bit = DPC_HOTPLUG_INT_STATUS;
+ bit = DPC_HOTPLUG_LIVE_STATUS;
break;
case DP_D:
- bit = DPD_HOTPLUG_INT_STATUS;
+ bit = DPD_HOTPLUG_LIVE_STATUS;
break;
default:
return connector_status_unknown;
}
- temp = I915_READ(PORT_HOTPLUG_STAT);
-
- if ((temp & bit) == 0)
+ if ((I915_READ(PORT_HOTPLUG_STAT) & bit) == 0)
return connector_status_disconnected;
return intel_dp_detect_dpcd(intel_dp);
@@ -2088,25 +2255,45 @@ g4x_dp_detect(struct intel_dp *intel_dp)
static struct edid *
intel_dp_get_edid(struct drm_connector *connector, device_t adapter)
{
- struct intel_dp *intel_dp = intel_attached_dp(connector);
- struct edid *edid;
+ struct intel_connector *intel_connector = to_intel_connector(connector);
- ironlake_edp_panel_vdd_on(intel_dp);
- edid = drm_get_edid(connector, adapter);
- ironlake_edp_panel_vdd_off(intel_dp, false);
- return edid;
+ /* use cached edid if we have one */
+ if (intel_connector->edid) {
+ struct edid *edid;
+ int size;
+
+ /* invalid edid */
+ if (intel_connector->edid_err)
+ return NULL;
+
+ size = (intel_connector->edid->extensions + 1) * EDID_LENGTH;
+ edid = malloc(size, DRM_MEM_KMS, M_WAITOK);
+ if (!edid)
+ return NULL;
+
+ memcpy(edid, intel_connector->edid, size);
+ return edid;
+ }
+
+ return drm_get_edid(connector, adapter);
}
static int
intel_dp_get_edid_modes(struct drm_connector *connector, device_t adapter)
{
- struct intel_dp *intel_dp = intel_attached_dp(connector);
- int ret;
+ struct intel_connector *intel_connector = to_intel_connector(connector);
- ironlake_edp_panel_vdd_on(intel_dp);
- ret = intel_ddc_get_modes(connector, adapter);
- ironlake_edp_panel_vdd_off(intel_dp, false);
- return ret;
+ /* use cached edid if we have one */
+ if (intel_connector->edid) {
+ /* invalid edid */
+ if (intel_connector->edid_err)
+ return 0;
+
+ return intel_connector_update_modes(connector,
+ intel_connector->edid);
+ }
+
+ return intel_ddc_get_modes(connector, adapter);
}
@@ -2120,9 +2307,12 @@ static enum drm_connector_status
intel_dp_detect(struct drm_connector *connector, bool force)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
- struct drm_device *dev = intel_dp->base.base.dev;
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
+ struct drm_device *dev = connector->dev;
enum drm_connector_status status;
struct edid *edid = NULL;
+ char dpcd_hex_dump[sizeof(intel_dp->dpcd) * 3];
intel_dp->has_audio = false;
@@ -2130,6 +2320,11 @@ intel_dp_detect(struct drm_connector *connector, bool force)
status = ironlake_dp_detect(intel_dp);
else
status = g4x_dp_detect(intel_dp);
+
+ hex_dump_to_buffer(intel_dp->dpcd, sizeof(intel_dp->dpcd),
+ 32, 1, dpcd_hex_dump, sizeof(dpcd_hex_dump), false);
+ DRM_DEBUG_KMS("DPCD: %s\n", dpcd_hex_dump);
+
if (status != connector_status_connected)
return status;
@@ -2145,49 +2340,31 @@ intel_dp_detect(struct drm_connector *connector, bool force)
}
}
+ if (intel_encoder->type != INTEL_OUTPUT_EDP)
+ intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
return connector_status_connected;
}
static int intel_dp_get_modes(struct drm_connector *connector)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
- struct drm_device *dev = intel_dp->base.base.dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_connector *intel_connector = to_intel_connector(connector);
+ struct drm_device *dev = connector->dev;
int ret;
/* We should parse the EDID data and find out if it has an audio sink
*/
ret = intel_dp_get_edid_modes(connector, intel_dp->adapter);
- if (ret) {
- if (is_edp(intel_dp) && !intel_dp->panel_fixed_mode) {
- struct drm_display_mode *newmode;
- list_for_each_entry(newmode, &connector->probed_modes,
- head) {
- if ((newmode->type & DRM_MODE_TYPE_PREFERRED)) {
- intel_dp->panel_fixed_mode =
- drm_mode_duplicate(dev, newmode);
- break;
- }
- }
- }
+ if (ret)
return ret;
- }
- /* if eDP has no EDID, try to use fixed panel mode from VBT */
- if (is_edp(intel_dp)) {
- /* initialize panel mode from VBT if available for eDP */
- if (intel_dp->panel_fixed_mode == NULL && dev_priv->lfp_lvds_vbt_mode != NULL) {
- intel_dp->panel_fixed_mode =
- drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
- if (intel_dp->panel_fixed_mode) {
- intel_dp->panel_fixed_mode->type |=
- DRM_MODE_TYPE_PREFERRED;
- }
- }
- if (intel_dp->panel_fixed_mode) {
- struct drm_display_mode *mode;
- mode = drm_mode_duplicate(dev, intel_dp->panel_fixed_mode);
+ /* if eDP has no EDID, fall back to fixed mode */
+ if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
+ struct drm_display_mode *mode;
+ mode = drm_mode_duplicate(dev,
+ intel_connector->panel.fixed_mode);
+ if (mode) {
drm_mode_probed_add(connector, mode);
return 1;
}
@@ -2205,7 +2382,6 @@ intel_dp_detect_audio(struct drm_connector *connector)
edid = intel_dp_get_edid(connector, intel_dp->adapter);
if (edid) {
has_audio = drm_detect_monitor_audio(edid);
-
free(edid, DRM_MEM_KMS);
}
@@ -2218,7 +2394,9 @@ intel_dp_set_property(struct drm_connector *connector,
uint64_t val)
{
struct drm_i915_private *dev_priv = connector->dev->dev_private;
- struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct intel_connector *intel_connector = to_intel_connector(connector);
+ struct intel_encoder *intel_encoder = intel_attached_encoder(connector);
+ struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
int ret;
ret = drm_object_property_set_value(&connector->base, property, val);
@@ -2254,14 +2432,29 @@ intel_dp_set_property(struct drm_connector *connector,
goto done;
}
+ if (is_edp(intel_dp) &&
+ property == connector->dev->mode_config.scaling_mode_property) {
+ if (val == DRM_MODE_SCALE_NONE) {
+ DRM_DEBUG_KMS("no scaling not supported\n");
+ return -EINVAL;
+ }
+
+ if (intel_connector->panel.fitting_mode == val) {
+ /* the eDP scaling property is not changed */
+ return 0;
+ }
+ intel_connector->panel.fitting_mode = val;
+
+ goto done;
+ }
+
return -EINVAL;
done:
- if (intel_dp->base.base.crtc) {
- struct drm_crtc *crtc = intel_dp->base.base.crtc;
- drm_crtc_helper_set_mode(crtc, &crtc->mode,
- crtc->x, crtc->y,
- crtc->fb);
+ if (intel_encoder->base.crtc) {
+ struct drm_crtc *crtc = intel_encoder->base.crtc;
+ intel_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
}
return 0;
@@ -2270,25 +2463,23 @@ done:
static void
intel_dp_destroy(struct drm_connector *connector)
{
- struct drm_device *dev = connector->dev;
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct intel_connector *intel_connector = to_intel_connector(connector);
- if (intel_dpd_is_edp(dev))
- intel_panel_destroy_backlight(dev);
+ free(intel_connector->edid, DRM_MEM_KMS);
+
+ if (is_edp(intel_dp))
+ intel_panel_fini(&intel_connector->panel);
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
free(connector, DRM_MEM_KMS);
}
-static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
+void intel_dp_encoder_destroy(struct drm_encoder *encoder)
{
- struct drm_device *dev;
- struct intel_dp *intel_dp;
-
- intel_dp = enc_to_intel_dp(encoder);
- dev = encoder->dev;
+ struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+ struct intel_dp *intel_dp = &intel_dig_port->dp;
+ struct drm_device *dev = intel_dig_port->base.base.dev;
if (intel_dp->dp_iic_bus != NULL) {
if (intel_dp->adapter != NULL) {
@@ -2299,27 +2490,25 @@ static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
}
drm_encoder_cleanup(encoder);
if (is_edp(intel_dp)) {
- struct drm_i915_private *dev_priv = intel_dp->base.base.dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
- taskqueue_cancel_timeout(dev_priv->tq,
- &intel_dp->panel_vdd_task, NULL);
- taskqueue_drain_timeout(dev_priv->tq,
- &intel_dp->panel_vdd_task);
+ taskqueue_cancel_timeout(dev_priv->wq,
+ &intel_dp->panel_vdd_work, NULL);
+ taskqueue_drain_timeout(dev_priv->wq,
+ &intel_dp->panel_vdd_work);
ironlake_panel_vdd_off_sync(intel_dp);
}
- free(intel_dp, DRM_MEM_KMS);
+ free(intel_dig_port, DRM_MEM_KMS);
}
static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = {
- .dpms = intel_dp_dpms,
.mode_fixup = intel_dp_mode_fixup,
- .prepare = intel_dp_prepare,
.mode_set = intel_dp_mode_set,
- .commit = intel_dp_commit,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_dp_connector_funcs = {
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_connector_dpms,
.detect = intel_dp_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_dp_set_property,
@@ -2339,7 +2528,7 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {
static void
intel_dp_hot_plug(struct intel_encoder *intel_encoder)
{
- struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base);
+ struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
intel_dp_check_link_status(intel_dp);
}
@@ -2349,18 +2538,14 @@ int
intel_trans_dp_port_sel(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct drm_encoder *encoder;
+ struct intel_encoder *intel_encoder;
+ struct intel_dp *intel_dp;
- list_for_each_entry(encoder, &mode_config->encoder_list, head) {
- struct intel_dp *intel_dp;
+ for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
+ intel_dp = enc_to_intel_dp(&intel_encoder->base);
- if (encoder->crtc != crtc)
- continue;
-
- intel_dp = enc_to_intel_dp(encoder);
- if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
- intel_dp->base.type == INTEL_OUTPUT_EDP)
+ if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT ||
+ intel_encoder->type == INTEL_OUTPUT_EDP)
return intel_dp->output_reg;
}
@@ -2390,156 +2575,237 @@ bool intel_dpd_is_edp(struct drm_device *dev)
static void
intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector)
{
+ struct intel_connector *intel_connector = to_intel_connector(connector);
+
intel_attach_force_audio_property(connector);
intel_attach_broadcast_rgb_property(connector);
+
+ if (is_edp(intel_dp)) {
+ drm_mode_create_scaling_mode_property(connector->dev);
+ drm_object_attach_property(
+ &connector->base,
+ connector->dev->mode_config.scaling_mode_property,
+ DRM_MODE_SCALE_ASPECT);
+ intel_connector->panel.fitting_mode = DRM_MODE_SCALE_ASPECT;
+ }
+}
+
+static void
+intel_dp_init_panel_power_sequencer(struct drm_device *dev,
+ struct intel_dp *intel_dp,
+ struct edp_power_seq *out)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct edp_power_seq cur, vbt, spec, final;
+ u32 pp_on, pp_off, pp_div, pp;
+
+ /* Workaround: Need to write PP_CONTROL with the unlock key as
+ * the very first thing. */
+ pp = ironlake_get_pp_control(dev_priv);
+ I915_WRITE(PCH_PP_CONTROL, pp);
+
+ pp_on = I915_READ(PCH_PP_ON_DELAYS);
+ pp_off = I915_READ(PCH_PP_OFF_DELAYS);
+ pp_div = I915_READ(PCH_PP_DIVISOR);
+
+ /* Pull timing values out of registers */
+ cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
+ PANEL_POWER_UP_DELAY_SHIFT;
+
+ cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
+ PANEL_LIGHT_ON_DELAY_SHIFT;
+
+ cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
+ PANEL_LIGHT_OFF_DELAY_SHIFT;
+
+ cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
+ PANEL_POWER_DOWN_DELAY_SHIFT;
+
+ cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
+ PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
+
+ DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
+ cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
+
+ vbt = dev_priv->edp.pps;
+
+ /* Upper limits from eDP 1.3 spec. Note that we use the clunky units of
+ * our hw here, which are all in 100usec. */
+ spec.t1_t3 = 210 * 10;
+ spec.t8 = 50 * 10; /* no limit for t8, use t7 instead */
+ spec.t9 = 50 * 10; /* no limit for t9, make it symmetric with t8 */
+ spec.t10 = 500 * 10;
+ /* This one is special and actually in units of 100ms, but zero
+ * based in the hw (so we need to add 100 ms). But the sw vbt
+ * table multiplies it with 1000 to make it in units of 100usec,
+ * too. */
+ spec.t11_t12 = (510 + 100) * 10;
+
+ DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
+ vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
+
+ /* Use the max of the register settings and vbt. If both are
+ * unset, fall back to the spec limits. */
+#define assign_final(field) final.field = (max(cur.field, vbt.field) == 0 ? \
+ spec.field : \
+ max(cur.field, vbt.field))
+ assign_final(t1_t3);
+ assign_final(t8);
+ assign_final(t9);
+ assign_final(t10);
+ assign_final(t11_t12);
+#undef assign_final
+
+#define get_delay(field) (DIV_ROUND_UP(final.field, 10))
+ intel_dp->panel_power_up_delay = get_delay(t1_t3);
+ intel_dp->backlight_on_delay = get_delay(t8);
+ intel_dp->backlight_off_delay = get_delay(t9);
+ intel_dp->panel_power_down_delay = get_delay(t10);
+ intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
+#undef get_delay
+
+ DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
+ intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
+ intel_dp->panel_power_cycle_delay);
+
+ DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
+ intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
+
+ if (out)
+ *out = final;
+}
+
+static void
+intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
+ struct intel_dp *intel_dp,
+ struct edp_power_seq *seq)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp_on, pp_off, pp_div;
+
+ /* And finally store the new values in the power sequencer. */
+ pp_on = (seq->t1_t3 << PANEL_POWER_UP_DELAY_SHIFT) |
+ (seq->t8 << PANEL_LIGHT_ON_DELAY_SHIFT);
+ pp_off = (seq->t9 << PANEL_LIGHT_OFF_DELAY_SHIFT) |
+ (seq->t10 << PANEL_POWER_DOWN_DELAY_SHIFT);
+ /* Compute the divisor for the pp clock, simply match the Bspec
+ * formula. */
+ pp_div = ((100 * intel_pch_rawclk(dev))/2 - 1)
+ << PP_REFERENCE_DIVIDER_SHIFT;
+ pp_div |= (DIV_ROUND_UP(seq->t11_t12, 1000)
+ << PANEL_POWER_CYCLE_DELAY_SHIFT);
+
+ /* Haswell doesn't have any port selection bits for the panel
+ * power sequencer any more. */
+ if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
+ if (is_cpu_edp(intel_dp))
+ pp_on |= PANEL_POWER_PORT_DP_A;
+ else
+ pp_on |= PANEL_POWER_PORT_DP_D;
+ }
+
+ I915_WRITE(PCH_PP_ON_DELAYS, pp_on);
+ I915_WRITE(PCH_PP_OFF_DELAYS, pp_off);
+ I915_WRITE(PCH_PP_DIVISOR, pp_div);
+
+ DRM_DEBUG_KMS("panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n",
+ I915_READ(PCH_PP_ON_DELAYS),
+ I915_READ(PCH_PP_OFF_DELAYS),
+ I915_READ(PCH_PP_DIVISOR));
}
void
-intel_dp_init(struct drm_device *dev, int output_reg)
+intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
+ struct intel_connector *intel_connector)
{
+ struct drm_connector *connector = &intel_connector->base;
+ struct intel_dp *intel_dp = &intel_dig_port->dp;
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
+ struct drm_device *dev = intel_encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_connector *connector;
- struct intel_dp *intel_dp;
- struct intel_encoder *intel_encoder;
- struct intel_connector *intel_connector;
+ struct drm_display_mode *fixed_mode = NULL;
+ struct edp_power_seq power_seq = { 0 };
+ enum port port = intel_dig_port->port;
const char *name = NULL;
int type;
- intel_dp = malloc(sizeof(struct intel_dp), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
-
- intel_dp->output_reg = output_reg;
- intel_dp->dpms_mode = -1;
+ /* Preserve the current hw state. */
+ intel_dp->DP = I915_READ(intel_dp->output_reg);
+ intel_dp->attached_connector = intel_connector;
- intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
- intel_encoder = &intel_dp->base;
-
- if (HAS_PCH_SPLIT(dev) && output_reg == PCH_DP_D)
+ if (HAS_PCH_SPLIT(dev) && port == PORT_D)
if (intel_dpd_is_edp(dev))
intel_dp->is_pch_edp = true;
- if (output_reg == DP_A || is_pch_edp(intel_dp)) {
+ /*
+ * FIXME : We need to initialize built-in panels before external panels.
+ * For X0, DP_C is fixed as eDP. Revisit this as part of VLV eDP cleanup
+ */
+ if (IS_VALLEYVIEW(dev) && port == PORT_C) {
+ type = DRM_MODE_CONNECTOR_eDP;
+ intel_encoder->type = INTEL_OUTPUT_EDP;
+ } else if (port == PORT_A || is_pch_edp(intel_dp)) {
type = DRM_MODE_CONNECTOR_eDP;
intel_encoder->type = INTEL_OUTPUT_EDP;
} else {
+ /* The intel_encoder->type value may be INTEL_OUTPUT_UNKNOWN for
+ * DDI or INTEL_OUTPUT_DISPLAYPORT for the older gens, so don't
+ * rewrite it.
+ */
type = DRM_MODE_CONNECTOR_DisplayPort;
- intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
}
- connector = &intel_connector->base;
drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
connector->polled = DRM_CONNECTOR_POLL_HPD;
-
- if (output_reg == DP_B || output_reg == PCH_DP_B)
- intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);
- else if (output_reg == DP_C || output_reg == PCH_DP_C)
- intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
- else if (output_reg == DP_D || output_reg == PCH_DP_D)
- intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
-
- if (is_edp(intel_dp)) {
- intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);
- TIMEOUT_TASK_INIT(dev_priv->tq, &intel_dp->panel_vdd_task, 0,
- ironlake_panel_vdd_work, intel_dp);
- }
-
- intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
-
connector->interlace_allowed = true;
connector->doublescan_allowed = 0;
- drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
- DRM_MODE_ENCODER_TMDS);
- drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
+ TIMEOUT_TASK_INIT(dev_priv->wq, &intel_dp->panel_vdd_work, 0,
+ ironlake_panel_vdd_work, intel_dp);
intel_connector_attach_encoder(intel_connector, intel_encoder);
-#if 0
- drm_sysfs_connector_add(connector);
-#endif
-
- /* Set up the DDC bus. */
- switch (output_reg) {
- case DP_A:
- name = "DPDDC-A";
- break;
- case DP_B:
- case PCH_DP_B:
- dev_priv->hotplug_supported_mask |=
- HDMIB_HOTPLUG_INT_STATUS;
- name = "DPDDC-B";
- break;
- case DP_C:
- case PCH_DP_C:
- dev_priv->hotplug_supported_mask |=
- HDMIC_HOTPLUG_INT_STATUS;
- name = "DPDDC-C";
- break;
- case DP_D:
- case PCH_DP_D:
- dev_priv->hotplug_supported_mask |=
- HDMID_HOTPLUG_INT_STATUS;
- name = "DPDDC-D";
- break;
- }
-
- /* Cache some DPCD data in the eDP case */
- if (is_edp(intel_dp)) {
- bool ret;
- struct edp_power_seq cur, vbt;
- u32 pp_on, pp_off, pp_div;
- pp_on = I915_READ(PCH_PP_ON_DELAYS);
- pp_off = I915_READ(PCH_PP_OFF_DELAYS);
- pp_div = I915_READ(PCH_PP_DIVISOR);
-
- if (!pp_on || !pp_off || !pp_div) {
- DRM_INFO("bad panel power sequencing delays, disabling panel\n");
- intel_dp_encoder_destroy(&intel_dp->base.base);
- intel_dp_destroy(&intel_connector->base);
- return;
- }
-
- /* Pull timing values out of registers */
- cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
- PANEL_POWER_UP_DELAY_SHIFT;
-
- cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
- PANEL_LIGHT_ON_DELAY_SHIFT;
-
- cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
- PANEL_LIGHT_OFF_DELAY_SHIFT;
-
- cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
- PANEL_POWER_DOWN_DELAY_SHIFT;
-
- cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
- PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
-
- DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
- cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
-
- vbt = dev_priv->edp.pps;
+ if (IS_HASWELL(dev))
+ intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
+ else
+ intel_connector->get_hw_state = intel_connector_get_hw_state;
- DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
- vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
-#define get_delay(field) ((max(cur.field, vbt.field) + 9) / 10)
+ /* Set up the DDC bus. */
+ switch (port) {
+ case PORT_A:
+ name = "DPDDC-A";
+ break;
+ case PORT_B:
+ dev_priv->hotplug_supported_mask |= DPB_HOTPLUG_INT_STATUS;
+ name = "DPDDC-B";
+ break;
+ case PORT_C:
+ dev_priv->hotplug_supported_mask |= DPC_HOTPLUG_INT_STATUS;
+ name = "DPDDC-C";
+ break;
+ case PORT_D:
+ dev_priv->hotplug_supported_mask |= DPD_HOTPLUG_INT_STATUS;
+ name = "DPDDC-D";
+ break;
+ default:
+ WARN(1, "Invalid port %c\n", port_name(port));
+ break;
+ }
- intel_dp->panel_power_up_delay = get_delay(t1_t3);
- intel_dp->backlight_on_delay = get_delay(t8);
- intel_dp->backlight_off_delay = get_delay(t9);
- intel_dp->panel_power_down_delay = get_delay(t10);
- intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
+ if (is_edp(intel_dp))
+ intel_dp_init_panel_power_sequencer(dev, intel_dp, &power_seq);
- DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
- intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
- intel_dp->panel_power_cycle_delay);
+ intel_dp_i2c_init(intel_dp, intel_connector, name);
- DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
- intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
+ /* Cache DPCD and EDID for edp. */
+ if (is_edp(intel_dp)) {
+ bool ret;
+ struct drm_display_mode *scan;
+ struct edid *edid;
+ int edid_err = 0;
ironlake_edp_panel_vdd_on(intel_dp);
ret = intel_dp_get_dpcd(intel_dp);
@@ -2553,19 +2819,54 @@ intel_dp_init(struct drm_device *dev, int output_reg)
} else {
/* if this fails, presume the device is a ghost */
DRM_INFO("failed to retrieve link info, disabling eDP\n");
- intel_dp_encoder_destroy(&intel_dp->base.base);
- intel_dp_destroy(&intel_connector->base);
+ intel_dp_encoder_destroy(&intel_encoder->base);
+ intel_dp_destroy(connector);
return;
}
- }
- intel_dp_i2c_init(intel_dp, intel_connector, name);
+ /* We now know it's not a ghost, init power sequence regs. */
+ intel_dp_init_panel_power_sequencer_registers(dev, intel_dp,
+ &power_seq);
- intel_encoder->hot_plug = intel_dp_hot_plug;
+ ironlake_edp_panel_vdd_on(intel_dp);
+ edid = drm_get_edid(connector, intel_dp->adapter);
+ if (edid) {
+ if (drm_add_edid_modes(connector, edid)) {
+ drm_mode_connector_update_edid_property(connector, edid);
+ drm_edid_to_eld(connector, edid);
+ } else {
+ free(edid, DRM_MEM_KMS);
+ edid = NULL;
+ edid_err = -EINVAL;
+ }
+ } else {
+ edid = NULL;
+ edid_err = -ENOENT;
+ }
+ intel_connector->edid = edid;
+ intel_connector->edid_err = edid_err;
+
+ /* prefer fixed mode from EDID if available */
+ list_for_each_entry(scan, &connector->probed_modes, head) {
+ if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
+ fixed_mode = drm_mode_duplicate(dev, scan);
+ break;
+ }
+ }
+
+ /* fallback to VBT if available for eDP */
+ if (!fixed_mode && dev_priv->lfp_lvds_vbt_mode) {
+ fixed_mode = drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
+ if (fixed_mode)
+ fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
+ }
+
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+ }
if (is_edp(intel_dp)) {
- dev_priv->int_edp_connector = connector;
- intel_panel_setup_backlight(dev);
+ intel_panel_init(&intel_connector->panel, fixed_mode);
+ intel_panel_setup_backlight(connector);
}
intel_dp_add_properties(intel_dp, connector);
@@ -2579,3 +2880,45 @@ intel_dp_init(struct drm_device *dev, int output_reg)
I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
}
}
+
+void
+intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
+{
+ struct intel_digital_port *intel_dig_port;
+ struct intel_encoder *intel_encoder;
+ struct drm_encoder *encoder;
+ struct intel_connector *intel_connector;
+
+ intel_dig_port = malloc(sizeof(struct intel_digital_port), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_dig_port)
+ return;
+
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_connector) {
+ free(intel_dig_port, DRM_MEM_KMS);
+ return;
+ }
+
+ intel_encoder = &intel_dig_port->base;
+ encoder = &intel_encoder->base;
+
+ drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
+ DRM_MODE_ENCODER_TMDS);
+ drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
+
+ intel_encoder->enable = intel_enable_dp;
+ intel_encoder->pre_enable = intel_pre_enable_dp;
+ intel_encoder->disable = intel_disable_dp;
+ intel_encoder->post_disable = intel_post_disable_dp;
+ intel_encoder->get_hw_state = intel_dp_get_hw_state;
+
+ intel_dig_port->port = port;
+ intel_dig_port->dp.output_reg = output_reg;
+
+ intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ intel_encoder->cloneable = false;
+ intel_encoder->hot_plug = intel_dp_hot_plug;
+
+ intel_dp_init_connector(intel_dig_port, intel_connector);
+}
diff --git a/sys/dev/drm2/i915/intel_drv.h b/sys/dev/drm2/i915/intel_drv.h
index 34aa6bd..fd5817f 100644
--- a/sys/dev/drm2/i915/intel_drv.h
+++ b/sys/dev/drm2/i915/intel_drv.h
@@ -24,15 +24,15 @@
*
* $FreeBSD$
*/
-
-#ifndef DRM_INTEL_DRV_H
-#define DRM_INTEL_DRV_H
+#ifndef __INTEL_DRV_H__
+#define __INTEL_DRV_H__
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_crtc_helper.h>
#include <dev/drm2/drm_fb_helper.h>
+#include <dev/drm2/drm_dp_helper.h>
#define _intel_wait_for(DEV, COND, MS, W, WMSG) \
({ \
@@ -55,6 +55,23 @@
ret; \
})
+#define _wait_for(COND, MS, W, WMSG) ({ \
+ int timeout__ = ticks + (MS) * hz / 1000; \
+ int ret__ = 0; \
+ while (!(COND)) { \
+ if (time_after(ticks, timeout__)) { \
+ ret__ = -ETIMEDOUT; \
+ break; \
+ } \
+ if (W) { \
+ pause((WMSG), 1); \
+ } else { \
+ DELAY(1000); \
+ } \
+ } \
+ ret__; \
+})
+
#define wait_for_atomic_us(COND, US) ({ \
int i, ret__ = -ETIMEDOUT; \
for (i = 0; i < (US); i++) { \
@@ -67,8 +84,8 @@
ret__; \
})
-#define wait_for(COND, MS) _intel_wait_for(NULL, COND, MS, 1, "915wfi")
-#define wait_for_atomic(COND, MS) _intel_wait_for(NULL, COND, MS, 0, "915wfa")
+#define wait_for(COND, MS) _intel_wait_for(NULL, COND, MS, 1, "915wfi")
+#define wait_for_atomic(COND, MS) _intel_wait_for(NULL, COND, MS, 0, "915wfa")
#define KHz(x) (1000*x)
#define MHz(x) KHz(1000*x)
@@ -100,25 +117,6 @@
#define INTEL_OUTPUT_EDP 8
#define INTEL_OUTPUT_UNKNOWN 9
-/* Intel Pipe Clone Bit */
-#define INTEL_HDMIB_CLONE_BIT 1
-#define INTEL_HDMIC_CLONE_BIT 2
-#define INTEL_HDMID_CLONE_BIT 3
-#define INTEL_HDMIE_CLONE_BIT 4
-#define INTEL_HDMIF_CLONE_BIT 5
-#define INTEL_SDVO_NON_TV_CLONE_BIT 6
-#define INTEL_SDVO_TV_CLONE_BIT 7
-#define INTEL_SDVO_LVDS_CLONE_BIT 8
-#define INTEL_ANALOG_CLONE_BIT 9
-#define INTEL_TV_CLONE_BIT 10
-#define INTEL_DP_B_CLONE_BIT 11
-#define INTEL_DP_C_CLONE_BIT 12
-#define INTEL_DP_D_CLONE_BIT 13
-#define INTEL_LVDS_CLONE_BIT 14
-#define INTEL_DVO_TMDS_CLONE_BIT 15
-#define INTEL_DVO_LVDS_CLONE_BIT 16
-#define INTEL_EDP_CLONE_BIT 17
-
#define INTEL_DVO_CHIP_NONE 0
#define INTEL_DVO_CHIP_LVDS 1
#define INTEL_DVO_CHIP_TMDS 2
@@ -161,32 +159,87 @@ struct intel_fbdev {
struct intel_encoder {
struct drm_encoder base;
+ /*
+ * The new crtc this encoder will be driven from. Only differs from
+ * base->crtc while a modeset is in progress.
+ */
+ struct intel_crtc *new_crtc;
+
int type;
bool needs_tv_clock;
+ /*
+ * Intel hw has only one MUX where encoders could be clone, hence a
+ * simple flag is enough to compute the possible_clones mask.
+ */
+ bool cloneable;
+ bool connectors_active;
void (*hot_plug)(struct intel_encoder *);
+ void (*pre_enable)(struct intel_encoder *);
+ void (*enable)(struct intel_encoder *);
+ void (*disable)(struct intel_encoder *);
+ void (*post_disable)(struct intel_encoder *);
+ /* Read out the current hw state of this connector, returning true if
+ * the encoder is active. If the encoder is enabled it also set the pipe
+ * it is connected to in the pipe parameter. */
+ bool (*get_hw_state)(struct intel_encoder *, enum pipe *pipe);
int crtc_mask;
- int clone_mask;
+};
+
+struct intel_panel {
+ struct drm_display_mode *fixed_mode;
+ int fitting_mode;
};
struct intel_connector {
struct drm_connector base;
+ /*
+ * The fixed encoder this connector is connected to.
+ */
struct intel_encoder *encoder;
+
+ /*
+ * The new encoder this connector will be driven. Only differs from
+ * encoder while a modeset is in progress.
+ */
+ struct intel_encoder *new_encoder;
+
+ /* Reads out the current hw, returning true if the connector is enabled
+ * and active (i.e. dpms ON state). */
+ bool (*get_hw_state)(struct intel_connector *);
+
+ /* Panel info for eDP and LVDS */
+ struct intel_panel panel;
+
+ /* Cached EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
+ struct edid *edid;
+ int edid_err;
};
struct intel_crtc {
struct drm_crtc base;
enum pipe pipe;
enum plane plane;
+ enum transcoder cpu_transcoder;
u8 lut_r[256], lut_g[256], lut_b[256];
- int dpms_mode;
- bool active; /* is the crtc on? independent of the dpms mode */
- bool busy; /* is scanout buffer being updated frequently? */
- struct callout idle_callout;
+ /*
+ * Whether the crtc and the connected output pipeline is active. Implies
+ * that crtc->enabled is set, i.e. the current mode configuration has
+ * some outputs connected to this crtc.
+ */
+ bool active;
+ bool primary_disabled; /* is the crtc obscured by a plane? */
bool lowfreq_avail;
struct intel_overlay *overlay;
struct intel_unpin_work *unpin_work;
int fdi_lanes;
+ atomic_t unpin_work_count;
+
+ /* Display surface base address adjustement for pageflips. Note that on
+ * gen4+ this only adjusts up to a tile, offsets within a tile are
+ * handled in the hw itself (with the TILEOFF register). */
+ unsigned long dspaddr_offset;
+
struct drm_i915_gem_object *cursor_bo;
uint32_t cursor_addr;
int16_t cursor_x, cursor_y;
@@ -196,13 +249,14 @@ struct intel_crtc {
/* We can share PLLs across outputs if the timings match */
struct intel_pch_pll *pch_pll;
+ uint32_t ddi_pll_sel;
};
struct intel_plane {
struct drm_plane base;
enum pipe pipe;
struct drm_i915_gem_object *obj;
- bool primary_disabled;
+ bool can_scale;
int max_downscale;
u32 lut_r[1024], lut_g[1024], lut_b[1024];
void (*update_plane)(struct drm_plane *plane,
@@ -302,16 +356,52 @@ struct dip_infoframe {
} __attribute__((packed));
struct intel_hdmi {
- struct intel_encoder base;
u32 sdvox_reg;
int ddc_bus;
- int ddi_port;
uint32_t color_range;
bool has_hdmi_sink;
bool has_audio;
enum hdmi_force_audio force_audio;
void (*write_infoframe)(struct drm_encoder *encoder,
struct dip_infoframe *frame);
+ void (*set_infoframes)(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode);
+};
+
+#define DP_MAX_DOWNSTREAM_PORTS 0x10
+#define DP_LINK_CONFIGURATION_SIZE 9
+
+struct intel_dp {
+ uint32_t output_reg;
+ uint32_t DP;
+ uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE];
+ bool has_audio;
+ enum hdmi_force_audio force_audio;
+ uint32_t color_range;
+ uint8_t link_bw;
+ uint8_t lane_count;
+ uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
+ uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
+ device_t dp_iic_bus;
+ device_t adapter;
+ bool is_pch_edp;
+ uint8_t train_set[4];
+ int panel_power_up_delay;
+ int panel_power_down_delay;
+ int panel_power_cycle_delay;
+ int backlight_on_delay;
+ int backlight_off_delay;
+ struct timeout_task panel_vdd_work;
+ bool want_panel_vdd;
+ struct intel_connector *attached_connector;
+};
+
+struct intel_digital_port {
+ struct intel_encoder base;
+ enum port port;
+ u32 port_reversal;
+ struct intel_dp dp;
+ struct intel_hdmi hdmi;
};
static inline struct drm_crtc *
@@ -329,56 +419,88 @@ intel_get_crtc_for_plane(struct drm_device *dev, int plane)
}
struct intel_unpin_work {
- struct task task;
- struct drm_device *dev;
+ struct task work;
+ struct drm_crtc *crtc;
struct drm_i915_gem_object *old_fb_obj;
struct drm_i915_gem_object *pending_flip_obj;
struct drm_pending_vblank_event *event;
- int pending;
+ atomic_t pending;
+#define INTEL_FLIP_INACTIVE 0
+#define INTEL_FLIP_PENDING 1
+#define INTEL_FLIP_COMPLETE 2
bool enable_stall_check;
};
struct intel_fbc_work {
- struct timeout_task task;
+ struct timeout_task work;
struct drm_crtc *crtc;
struct drm_framebuffer *fb;
int interval;
};
+int intel_pch_rawclk(struct drm_device *dev);
+
+int intel_connector_update_modes(struct drm_connector *connector,
+ struct edid *edid);
int intel_ddc_get_modes(struct drm_connector *c, device_t adapter);
-extern bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus);
extern void intel_attach_force_audio_property(struct drm_connector *connector);
extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
extern void intel_crt_init(struct drm_device *dev);
-extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg);
+extern void intel_hdmi_init(struct drm_device *dev,
+ int sdvox_reg, enum port port);
+extern void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
+ struct intel_connector *intel_connector);
extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
-extern void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
- struct drm_display_mode *adjusted_mode);
-extern void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder);
+extern bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
extern void intel_dip_infoframe_csum(struct dip_infoframe *avi_if);
extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg,
bool is_sdvob);
extern void intel_dvo_init(struct drm_device *dev);
extern void intel_tv_init(struct drm_device *dev);
-extern void intel_mark_busy(struct drm_device *dev,
- struct drm_i915_gem_object *obj);
+extern void intel_mark_busy(struct drm_device *dev);
+extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj);
+extern void intel_mark_idle(struct drm_device *dev);
extern bool intel_lvds_init(struct drm_device *dev);
-extern void intel_dp_init(struct drm_device *dev, int dp_reg);
+extern void intel_dp_init(struct drm_device *dev, int output_reg,
+ enum port port);
+extern void intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
+ struct intel_connector *intel_connector);
void
intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode);
+extern void intel_dp_init_link_config(struct intel_dp *intel_dp);
+extern void intel_dp_start_link_train(struct intel_dp *intel_dp);
+extern void intel_dp_complete_link_train(struct intel_dp *intel_dp);
+extern void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode);
+extern void intel_dp_encoder_destroy(struct drm_encoder *encoder);
+extern void intel_dp_check_link_status(struct intel_dp *intel_dp);
+extern bool intel_dp_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
extern bool intel_dpd_is_edp(struct drm_device *dev);
+extern void ironlake_edp_backlight_on(struct intel_dp *intel_dp);
+extern void ironlake_edp_backlight_off(struct intel_dp *intel_dp);
+extern void ironlake_edp_panel_on(struct intel_dp *intel_dp);
+extern void ironlake_edp_panel_off(struct intel_dp *intel_dp);
+extern void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp);
+extern void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
extern void intel_edp_link_config(struct intel_encoder *, int *, int *);
+extern int intel_edp_target_clock(struct intel_encoder *,
+ struct drm_display_mode *mode);
extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder);
extern int intel_plane_init(struct drm_device *dev, enum pipe pipe);
extern void intel_flush_display_plane(struct drm_i915_private *dev_priv,
enum plane plane);
-void intel_sanitize_pm(struct drm_device *dev);
-
/* intel_panel.c */
+extern int intel_panel_init(struct intel_panel *panel,
+ struct drm_display_mode *fixed_mode);
+extern void intel_panel_fini(struct intel_panel *panel);
+
extern void intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
struct drm_display_mode *adjusted_mode);
extern void intel_pch_panel_fitting(struct drm_device *dev,
@@ -386,24 +508,66 @@ extern void intel_pch_panel_fitting(struct drm_device *dev,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode);
extern u32 intel_panel_get_max_backlight(struct drm_device *dev);
-extern u32 intel_panel_get_backlight(struct drm_device *dev);
extern void intel_panel_set_backlight(struct drm_device *dev, u32 level);
-extern int intel_panel_setup_backlight(struct drm_device *dev);
-extern void intel_panel_enable_backlight(struct drm_device *dev);
+extern int intel_panel_setup_backlight(struct drm_connector *connector);
+extern void intel_panel_enable_backlight(struct drm_device *dev,
+ enum pipe pipe);
extern void intel_panel_disable_backlight(struct drm_device *dev);
extern void intel_panel_destroy_backlight(struct drm_device *dev);
extern enum drm_connector_status intel_panel_detect(struct drm_device *dev);
+struct intel_set_config {
+ struct drm_encoder **save_connector_encoders;
+ struct drm_crtc **save_encoder_crtcs;
+
+ bool fb_changed;
+ bool mode_changed;
+};
+
+extern bool intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode,
+ int x, int y, struct drm_framebuffer *old_fb);
+extern void intel_modeset_disable(struct drm_device *dev);
extern void intel_crtc_load_lut(struct drm_crtc *crtc);
-extern void intel_encoder_prepare(struct drm_encoder *encoder);
-extern void intel_encoder_commit(struct drm_encoder *encoder);
+extern void intel_crtc_update_dpms(struct drm_crtc *crtc);
+extern void intel_encoder_noop(struct drm_encoder *encoder);
extern void intel_encoder_destroy(struct drm_encoder *encoder);
+extern void intel_encoder_dpms(struct intel_encoder *encoder, int mode);
+extern bool intel_encoder_check_is_cloned(struct intel_encoder *encoder);
+extern void intel_connector_dpms(struct drm_connector *, int mode);
+extern bool intel_connector_get_hw_state(struct intel_connector *connector);
+extern void intel_modeset_check_state(struct drm_device *dev);
+
static inline struct intel_encoder *intel_attached_encoder(struct drm_connector *connector)
{
return to_intel_connector(connector)->encoder;
}
+static inline struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
+{
+ struct intel_digital_port *intel_dig_port =
+ container_of(encoder, struct intel_digital_port, base.base);
+ return &intel_dig_port->dp;
+}
+
+static inline struct intel_digital_port *
+enc_to_dig_port(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_digital_port, base.base);
+}
+
+static inline struct intel_digital_port *
+dp_to_dig_port(struct intel_dp *intel_dp)
+{
+ return container_of(intel_dp, struct intel_digital_port, dp);
+}
+
+static inline struct intel_digital_port *
+hdmi_to_dig_port(struct intel_hdmi *intel_hdmi)
+{
+ return container_of(intel_hdmi, struct intel_digital_port, hdmi);
+}
+
extern void intel_connector_attach_encoder(struct intel_connector *connector,
struct intel_encoder *encoder);
extern struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
@@ -412,20 +576,22 @@ extern struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
struct drm_crtc *crtc);
int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
struct drm_file *file_priv);
+extern enum transcoder
+intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv,
+ enum pipe pipe);
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
+extern int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp);
struct intel_load_detect_pipe {
struct drm_framebuffer *release_fb;
bool load_detect_temp;
int dpms_mode;
};
-extern bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
- struct drm_connector *connector,
+extern bool intel_get_load_detect_pipe(struct drm_connector *connector,
struct drm_display_mode *mode,
struct intel_load_detect_pipe *old);
-extern void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
- struct drm_connector *connector,
+extern void intel_release_load_detect_pipe(struct drm_connector *connector,
struct intel_load_detect_pipe *old);
extern void intelfb_restore(void);
@@ -434,19 +600,6 @@ extern void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
extern void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
u16 *blue, int regno);
extern void intel_enable_clock_gating(struct drm_device *dev);
-extern void ironlake_disable_rc6(struct drm_device *dev);
-extern void ironlake_enable_drps(struct drm_device *dev);
-extern void ironlake_disable_drps(struct drm_device *dev);
-extern void gen6_enable_rps(struct drm_i915_private *dev_priv);
-extern void gen6_update_ring_freq(struct drm_i915_private *dev_priv);
-extern void gen6_disable_rps(struct drm_device *dev);
-extern void intel_init_emon(struct drm_device *dev);
-extern int intel_enable_rc6(const struct drm_device *dev);
-
-extern void intel_ddi_dpms(struct drm_encoder *encoder, int mode);
-extern void intel_ddi_mode_set(struct drm_encoder *encoder,
- struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode);
extern int intel_pin_and_fence_fb_obj(struct drm_device *dev,
struct drm_i915_gem_object *obj,
@@ -459,7 +612,7 @@ extern int intel_framebuffer_init(struct drm_device *dev,
struct drm_i915_gem_object *obj);
extern int intel_fbdev_init(struct drm_device *dev);
extern void intel_fbdev_fini(struct drm_device *dev);
-
+extern void intel_fbdev_set_suspend(struct drm_device *dev, int state);
extern void intel_prepare_page_flip(struct drm_device *dev, int plane);
extern void intel_finish_page_flip(struct drm_device *dev, int pipe);
extern void intel_finish_page_flip_plane(struct drm_device *dev, int plane);
@@ -496,6 +649,11 @@ extern void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
extern void intel_update_linetime_watermarks(struct drm_device *dev, int pipe,
struct drm_display_mode *mode);
+extern unsigned long intel_gen4_compute_page_offset(int *x, int *y,
+ unsigned int tiling_mode,
+ unsigned int bpp,
+ unsigned int pitch);
+
extern int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
struct drm_file *file_priv);
extern int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
@@ -509,5 +667,32 @@ extern void intel_init_pm(struct drm_device *dev);
extern bool intel_fbc_enabled(struct drm_device *dev);
extern void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval);
extern void intel_update_fbc(struct drm_device *dev);
+/* IPS */
+extern void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
+extern void intel_gpu_ips_teardown(void);
+
+extern void intel_init_power_wells(struct drm_device *dev);
+extern void intel_enable_gt_powersave(struct drm_device *dev);
+extern void intel_disable_gt_powersave(struct drm_device *dev);
+extern void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv);
+extern void ironlake_teardown_rc6(struct drm_device *dev);
+
+extern bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe);
+extern int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv);
+extern void intel_ddi_pll_init(struct drm_device *dev);
+extern void intel_ddi_enable_pipe_func(struct drm_crtc *crtc);
+extern void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,
+ enum transcoder cpu_transcoder);
+extern void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc);
+extern void intel_ddi_disable_pipe_clock(struct intel_crtc *intel_crtc);
+extern void intel_ddi_setup_hw_pll_state(struct drm_device *dev);
+extern bool intel_ddi_pll_mode_set(struct drm_crtc *crtc, int clock);
+extern void intel_ddi_put_crtc_pll(struct drm_crtc *crtc);
+extern void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
+extern void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder);
+extern bool
+intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
+extern void intel_ddi_fdi_disable(struct drm_crtc *crtc);
#endif /* __INTEL_DRV_H__ */
diff --git a/sys/dev/drm2/i915/intel_dvo.c b/sys/dev/drm2/i915/intel_dvo.c
new file mode 100644
index 0000000..328ab04
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_dvo.c
@@ -0,0 +1,534 @@
+/*
+ * Copyright 2006 Dave Airlie <airlied@linux.ie>
+ * Copyright © 2006-2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/dvo.h>
+
+#define SIL164_ADDR 0x38
+#define CH7xxx_ADDR 0x76
+#define TFP410_ADDR 0x38
+#define NS2501_ADDR 0x38
+
+static const struct intel_dvo_device intel_dvo_devices[] = {
+ {
+ .type = INTEL_DVO_CHIP_TMDS,
+ .name = "sil164",
+ .dvo_reg = DVOC,
+ .slave_addr = SIL164_ADDR,
+ .dev_ops = &sil164_ops,
+ },
+ {
+ .type = INTEL_DVO_CHIP_TMDS,
+ .name = "ch7xxx",
+ .dvo_reg = DVOC,
+ .slave_addr = CH7xxx_ADDR,
+ .dev_ops = &ch7xxx_ops,
+ },
+ {
+ .type = INTEL_DVO_CHIP_LVDS,
+ .name = "ivch",
+ .dvo_reg = DVOA,
+ .slave_addr = 0x02, /* Might also be 0x44, 0x84, 0xc4 */
+ .dev_ops = &ivch_ops,
+ },
+ {
+ .type = INTEL_DVO_CHIP_TMDS,
+ .name = "tfp410",
+ .dvo_reg = DVOC,
+ .slave_addr = TFP410_ADDR,
+ .dev_ops = &tfp410_ops,
+ },
+ {
+ .type = INTEL_DVO_CHIP_LVDS,
+ .name = "ch7017",
+ .dvo_reg = DVOC,
+ .slave_addr = 0x75,
+ .gpio = GMBUS_PORT_DPB,
+ .dev_ops = &ch7017_ops,
+ },
+ {
+ .type = INTEL_DVO_CHIP_TMDS,
+ .name = "ns2501",
+ .dvo_reg = DVOC,
+ .slave_addr = NS2501_ADDR,
+ .dev_ops = &ns2501_ops,
+ }
+};
+
+struct intel_dvo {
+ struct intel_encoder base;
+
+ struct intel_dvo_device dev;
+
+ struct drm_display_mode *panel_fixed_mode;
+ bool panel_wants_dither;
+};
+
+static struct intel_dvo *enc_to_intel_dvo(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_dvo, base.base);
+}
+
+static struct intel_dvo *intel_attached_dvo(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_dvo, base);
+}
+
+static bool intel_dvo_connector_get_hw_state(struct intel_connector *connector)
+{
+ struct intel_dvo *intel_dvo = intel_attached_dvo(&connector->base);
+
+ return intel_dvo->dev.dev_ops->get_hw_state(&intel_dvo->dev);
+}
+
+static bool intel_dvo_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(&encoder->base);
+ u32 tmp;
+
+ tmp = I915_READ(intel_dvo->dev.dvo_reg);
+
+ if (!(tmp & DVO_ENABLE))
+ return false;
+
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
+}
+
+static void intel_disable_dvo(struct intel_encoder *encoder)
+{
+ struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(&encoder->base);
+ u32 dvo_reg = intel_dvo->dev.dvo_reg;
+ u32 temp = I915_READ(dvo_reg);
+
+ intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, false);
+ I915_WRITE(dvo_reg, temp & ~DVO_ENABLE);
+ I915_READ(dvo_reg);
+}
+
+static void intel_enable_dvo(struct intel_encoder *encoder)
+{
+ struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(&encoder->base);
+ u32 dvo_reg = intel_dvo->dev.dvo_reg;
+ u32 temp = I915_READ(dvo_reg);
+
+ I915_WRITE(dvo_reg, temp | DVO_ENABLE);
+ I915_READ(dvo_reg);
+ intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, true);
+}
+
+static void intel_dvo_dpms(struct drm_connector *connector, int mode)
+{
+ struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+ struct drm_crtc *crtc;
+
+ /* dvo supports only 2 dpms states. */
+ if (mode != DRM_MODE_DPMS_ON)
+ mode = DRM_MODE_DPMS_OFF;
+
+ if (mode == connector->dpms)
+ return;
+
+ connector->dpms = mode;
+
+ /* Only need to change hw state when actually enabled */
+ crtc = intel_dvo->base.base.crtc;
+ if (!crtc) {
+ intel_dvo->base.connectors_active = false;
+ return;
+ }
+
+ if (mode == DRM_MODE_DPMS_ON) {
+ intel_dvo->base.connectors_active = true;
+
+ intel_crtc_update_dpms(crtc);
+
+ intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, true);
+ } else {
+ intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, false);
+
+ intel_dvo->base.connectors_active = false;
+
+ intel_crtc_update_dpms(crtc);
+ }
+
+ intel_modeset_check_state(connector->dev);
+}
+
+static int intel_dvo_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+ return MODE_NO_DBLESCAN;
+
+ /* XXX: Validate clock range */
+
+ if (intel_dvo->panel_fixed_mode) {
+ if (mode->hdisplay > intel_dvo->panel_fixed_mode->hdisplay)
+ return MODE_PANEL;
+ if (mode->vdisplay > intel_dvo->panel_fixed_mode->vdisplay)
+ return MODE_PANEL;
+ }
+
+ return intel_dvo->dev.dev_ops->mode_valid(&intel_dvo->dev, mode);
+}
+
+static bool intel_dvo_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(encoder);
+
+ /* If we have timings from the BIOS for the panel, put them in
+ * to the adjusted mode. The CRTC will be set up for this mode,
+ * with the panel scaling set up to source from the H/VDisplay
+ * of the original mode.
+ */
+ if (intel_dvo->panel_fixed_mode != NULL) {
+#define C(x) adjusted_mode->x = intel_dvo->panel_fixed_mode->x
+ C(hdisplay);
+ C(hsync_start);
+ C(hsync_end);
+ C(htotal);
+ C(vdisplay);
+ C(vsync_start);
+ C(vsync_end);
+ C(vtotal);
+ C(clock);
+#undef C
+ }
+
+ if (intel_dvo->dev.dev_ops->mode_fixup)
+ return intel_dvo->dev.dev_ops->mode_fixup(&intel_dvo->dev, mode, adjusted_mode);
+
+ return true;
+}
+
+static void intel_dvo_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(encoder);
+ int pipe = intel_crtc->pipe;
+ u32 dvo_val;
+ u32 dvo_reg = intel_dvo->dev.dvo_reg, dvo_srcdim_reg;
+ int dpll_reg = DPLL(pipe);
+
+ switch (dvo_reg) {
+ case DVOA:
+ default:
+ dvo_srcdim_reg = DVOA_SRCDIM;
+ break;
+ case DVOB:
+ dvo_srcdim_reg = DVOB_SRCDIM;
+ break;
+ case DVOC:
+ dvo_srcdim_reg = DVOC_SRCDIM;
+ break;
+ }
+
+ intel_dvo->dev.dev_ops->mode_set(&intel_dvo->dev, mode, adjusted_mode);
+
+ /* Save the data order, since I don't know what it should be set to. */
+ dvo_val = I915_READ(dvo_reg) &
+ (DVO_PRESERVE_MASK | DVO_DATA_ORDER_GBRG);
+ dvo_val |= DVO_DATA_ORDER_FP | DVO_BORDER_ENABLE |
+ DVO_BLANK_ACTIVE_HIGH;
+
+ if (pipe == 1)
+ dvo_val |= DVO_PIPE_B_SELECT;
+ dvo_val |= DVO_PIPE_STALL;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+ dvo_val |= DVO_HSYNC_ACTIVE_HIGH;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+ dvo_val |= DVO_VSYNC_ACTIVE_HIGH;
+
+ I915_WRITE(dpll_reg, I915_READ(dpll_reg) | DPLL_DVO_HIGH_SPEED);
+
+ /*I915_WRITE(DVOB_SRCDIM,
+ (adjusted_mode->hdisplay << DVO_SRCDIM_HORIZONTAL_SHIFT) |
+ (adjusted_mode->VDisplay << DVO_SRCDIM_VERTICAL_SHIFT));*/
+ I915_WRITE(dvo_srcdim_reg,
+ (adjusted_mode->hdisplay << DVO_SRCDIM_HORIZONTAL_SHIFT) |
+ (adjusted_mode->vdisplay << DVO_SRCDIM_VERTICAL_SHIFT));
+ /*I915_WRITE(DVOB, dvo_val);*/
+ I915_WRITE(dvo_reg, dvo_val);
+}
+
+/**
+ * Detect the output connection on our DVO device.
+ *
+ * Unimplemented.
+ */
+static enum drm_connector_status
+intel_dvo_detect(struct drm_connector *connector, bool force)
+{
+ struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+ return intel_dvo->dev.dev_ops->detect(&intel_dvo->dev);
+}
+
+static int intel_dvo_get_modes(struct drm_connector *connector)
+{
+ struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+
+ /* We should probably have an i2c driver get_modes function for those
+ * devices which will have a fixed set of modes determined by the chip
+ * (TV-out, for example), but for now with just TMDS and LVDS,
+ * that's not the case.
+ */
+ intel_ddc_get_modes(connector,
+ intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPC));
+ if (!list_empty(&connector->probed_modes))
+ return 1;
+
+ if (intel_dvo->panel_fixed_mode != NULL) {
+ struct drm_display_mode *mode;
+ mode = drm_mode_duplicate(connector->dev, intel_dvo->panel_fixed_mode);
+ if (mode) {
+ drm_mode_probed_add(connector, mode);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static void intel_dvo_destroy(struct drm_connector *connector)
+{
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+static const struct drm_encoder_helper_funcs intel_dvo_helper_funcs = {
+ .mode_fixup = intel_dvo_mode_fixup,
+ .mode_set = intel_dvo_mode_set,
+ .disable = intel_encoder_noop,
+};
+
+static const struct drm_connector_funcs intel_dvo_connector_funcs = {
+ .dpms = intel_dvo_dpms,
+ .detect = intel_dvo_detect,
+ .destroy = intel_dvo_destroy,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+};
+
+static const struct drm_connector_helper_funcs intel_dvo_connector_helper_funcs = {
+ .mode_valid = intel_dvo_mode_valid,
+ .get_modes = intel_dvo_get_modes,
+ .best_encoder = intel_best_encoder,
+};
+
+static void intel_dvo_enc_destroy(struct drm_encoder *encoder)
+{
+ struct intel_dvo *intel_dvo = enc_to_intel_dvo(encoder);
+
+ if (intel_dvo->dev.dev_ops->destroy)
+ intel_dvo->dev.dev_ops->destroy(&intel_dvo->dev);
+
+ free(intel_dvo->panel_fixed_mode, DRM_MEM_KMS);
+
+ intel_encoder_destroy(encoder);
+}
+
+static const struct drm_encoder_funcs intel_dvo_enc_funcs = {
+ .destroy = intel_dvo_enc_destroy,
+};
+
+/**
+ * Attempts to get a fixed panel timing for LVDS (currently only the i830).
+ *
+ * Other chips with DVO LVDS will need to extend this to deal with the LVDS
+ * chip being on DVOB/C and having multiple pipes.
+ */
+static struct drm_display_mode *
+intel_dvo_get_current_mode(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+ uint32_t dvo_val = I915_READ(intel_dvo->dev.dvo_reg);
+ struct drm_display_mode *mode = NULL;
+
+ /* If the DVO port is active, that'll be the LVDS, so we can pull out
+ * its timings to get how the BIOS set up the panel.
+ */
+ if (dvo_val & DVO_ENABLE) {
+ struct drm_crtc *crtc;
+ int pipe = (dvo_val & DVO_PIPE_B_SELECT) ? 1 : 0;
+
+ crtc = intel_get_crtc_for_pipe(dev, pipe);
+ if (crtc) {
+ mode = intel_crtc_mode_get(dev, crtc);
+ if (mode) {
+ mode->type |= DRM_MODE_TYPE_PREFERRED;
+ if (dvo_val & DVO_HSYNC_ACTIVE_HIGH)
+ mode->flags |= DRM_MODE_FLAG_PHSYNC;
+ if (dvo_val & DVO_VSYNC_ACTIVE_HIGH)
+ mode->flags |= DRM_MODE_FLAG_PVSYNC;
+ }
+ }
+ }
+
+ return mode;
+}
+
+void intel_dvo_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ struct intel_dvo *intel_dvo;
+ struct intel_connector *intel_connector;
+ int i;
+ int encoder_type = DRM_MODE_ENCODER_NONE;
+
+ intel_dvo = malloc(sizeof(struct intel_dvo), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_dvo)
+ return;
+
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_connector) {
+ free(intel_dvo, DRM_MEM_KMS);
+ return;
+ }
+
+ intel_encoder = &intel_dvo->base;
+ drm_encoder_init(dev, &intel_encoder->base,
+ &intel_dvo_enc_funcs, encoder_type);
+
+ intel_encoder->disable = intel_disable_dvo;
+ intel_encoder->enable = intel_enable_dvo;
+ intel_encoder->get_hw_state = intel_dvo_get_hw_state;
+ intel_connector->get_hw_state = intel_dvo_connector_get_hw_state;
+
+ /* Now, try to find a controller */
+ for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) {
+ struct drm_connector *connector = &intel_connector->base;
+ const struct intel_dvo_device *dvo = &intel_dvo_devices[i];
+ device_t i2c;
+ int gpio;
+ bool dvoinit;
+
+ /* Allow the I2C driver info to specify the GPIO to be used in
+ * special cases, but otherwise default to what's defined
+ * in the spec.
+ */
+ if (intel_gmbus_is_port_valid(dvo->gpio))
+ gpio = dvo->gpio;
+ else if (dvo->type == INTEL_DVO_CHIP_LVDS)
+ gpio = GMBUS_PORT_SSC;
+ else
+ gpio = GMBUS_PORT_DPB;
+
+ /* Set up the I2C bus necessary for the chip we're probing.
+ * It appears that everything is on GPIOE except for panels
+ * on i830 laptops, which are on GPIOB (DVOA).
+ */
+ i2c = intel_gmbus_get_adapter(dev_priv, gpio);
+
+ intel_dvo->dev = *dvo;
+
+ /* GMBUS NAK handling seems to be unstable, hence let the
+ * transmitter detection run in bit banging mode for now.
+ */
+ intel_gmbus_force_bit(i2c, true);
+
+ dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c);
+
+ intel_gmbus_force_bit(i2c, false);
+
+ if (!dvoinit)
+ continue;
+
+ intel_encoder->type = INTEL_OUTPUT_DVO;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
+ switch (dvo->type) {
+ case INTEL_DVO_CHIP_TMDS:
+ intel_encoder->cloneable = true;
+ drm_connector_init(dev, connector,
+ &intel_dvo_connector_funcs,
+ DRM_MODE_CONNECTOR_DVII);
+ encoder_type = DRM_MODE_ENCODER_TMDS;
+ break;
+ case INTEL_DVO_CHIP_LVDS:
+ intel_encoder->cloneable = false;
+ drm_connector_init(dev, connector,
+ &intel_dvo_connector_funcs,
+ DRM_MODE_CONNECTOR_LVDS);
+ encoder_type = DRM_MODE_ENCODER_LVDS;
+ break;
+ }
+
+ drm_connector_helper_add(connector,
+ &intel_dvo_connector_helper_funcs);
+ connector->display_info.subpixel_order = SubPixelHorizontalRGB;
+ connector->interlace_allowed = false;
+ connector->doublescan_allowed = false;
+
+ drm_encoder_helper_add(&intel_encoder->base,
+ &intel_dvo_helper_funcs);
+
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+ if (dvo->type == INTEL_DVO_CHIP_LVDS) {
+ /* For our LVDS chipsets, we should hopefully be able
+ * to dig the fixed panel mode out of the BIOS data.
+ * However, it's in a different format from the BIOS
+ * data on chipsets with integrated LVDS (stored in AIM
+ * headers, likely), so for now, just get the current
+ * mode being output through DVO.
+ */
+ intel_dvo->panel_fixed_mode =
+ intel_dvo_get_current_mode(connector);
+ intel_dvo->panel_wants_dither = true;
+ }
+
+ return;
+ }
+
+ drm_encoder_cleanup(&intel_encoder->base);
+ free(intel_dvo, DRM_MEM_KMS);
+ free(intel_connector, DRM_MEM_KMS);
+}
diff --git a/sys/dev/drm2/i915/intel_fb.c b/sys/dev/drm2/i915/intel_fb.c
index 5ec2c17..4dd9449 100644
--- a/sys/dev/drm2/i915/intel_fb.c
+++ b/sys/dev/drm2/i915/intel_fb.c
@@ -29,20 +29,33 @@ __FBSDID("$FreeBSD$");
#include "opt_syscons.h"
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_fb_helper.h>
#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
+#if defined(__linux__)
+static struct fb_ops intelfb_ops = {
+ .owner = THIS_MODULE,
+ .fb_check_var = drm_fb_helper_check_var,
+ .fb_set_par = drm_fb_helper_set_par,
+ .fb_fillrect = cfb_fillrect,
+ .fb_copyarea = cfb_copyarea,
+ .fb_imageblit = cfb_imageblit,
+ .fb_pan_display = drm_fb_helper_pan_display,
+ .fb_blank = drm_fb_helper_blank,
+ .fb_setcmap = drm_fb_helper_setcmap,
+ .fb_debug_enter = drm_fb_helper_debug_enter,
+ .fb_debug_leave = drm_fb_helper_debug_leave,
+};
+#endif
+
static int intelfb_create(struct intel_fbdev *ifbdev,
struct drm_fb_helper_surface_size *sizes)
{
struct drm_device *dev = ifbdev->helper.dev;
-#if 0
struct drm_i915_private *dev_priv = dev->dev_private;
-#endif
struct fb_info *info;
struct drm_framebuffer *fb;
struct drm_mode_fb_cmd2 mode_cmd = {};
@@ -85,17 +98,12 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
goto out_unpin;
}
-#if 0
- info->par = ifbdev;
-#else
info->fb_size = size;
info->fb_bpp = sizes->surface_bpp;
- info->fb_pbase = dev->agp->base + obj->gtt_offset;
+ info->fb_pbase = dev_priv->mm.gtt_base_addr + obj->gtt_offset;
info->fb_vbase = (vm_offset_t)pmap_mapdev_attr(info->fb_pbase, size,
PAT_WRITE_COMBINING);
-#endif
-
ret = intel_framebuffer_init(dev, &ifbdev->ifb, &mode_cmd, obj);
if (ret)
goto out_unpin;
@@ -104,40 +112,6 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
ifbdev->helper.fb = fb;
ifbdev->helper.fbdev = info;
-#if 0
-
- strcpy(info->fix.id, "inteldrmfb");
-
- info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT;
- info->fbops = &intelfb_ops;
-
- ret = fb_alloc_cmap(&info->cmap, 256, 0);
- if (ret) {
- ret = -ENOMEM;
- goto out_unpin;
- }
- /* setup aperture base/size for vesafb takeover */
- info->apertures = alloc_apertures(1);
- if (!info->apertures) {
- ret = -ENOMEM;
- goto out_unpin;
- }
- info->apertures->ranges[0].base = dev->mode_config.fb_base;
- info->apertures->ranges[0].size =
- dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
-
- info->fix.smem_start = dev->mode_config.fb_base + obj->gtt_offset;
- info->fix.smem_len = size;
-
- info->screen_base = ioremap_wc(dev->agp->base + obj->gtt_offset, size);
- if (!info->screen_base) {
- ret = -ENOSPC;
- goto out_unpin;
- }
- info->screen_size = size;
-
-// memset(info->screen_base, 0, size);
-#endif
drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height);
@@ -148,10 +122,9 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
fb->width, fb->height, fb->depth,
obj->gtt_offset, obj);
+
DRM_UNLOCK(dev);
-#if 1
- KIB_NOTYET();
-#else
+#ifdef __linux__
vga_switcheroo_client_fb_set(dev->pdev, info);
#endif
return 0;
@@ -195,12 +168,8 @@ static void intel_fbdev_destroy(struct drm_device *dev,
if (ifbdev->helper.fbdev) {
info = ifbdev->helper.fbdev;
-#if 0
- unregister_framebuffer(info);
- iounmap(info->screen_base);
- if (info->cmap.len)
- fb_dealloc_cmap(&info->cmap);
-#endif
+ if (info->fb_fbd_dev != NULL)
+ device_delete_child(dev->dev, info->fb_fbd_dev);
framebuffer_release(info);
}
@@ -224,6 +193,8 @@ int intel_fbdev_init(struct drm_device *dev)
int ret;
ifbdev = malloc(sizeof(struct intel_fbdev), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!ifbdev)
+ return -ENOMEM;
dev_priv->fbdev = ifbdev;
ifbdev->helper.funcs = &intel_fb_helper_funcs;
@@ -255,6 +226,19 @@ void intel_fbdev_fini(struct drm_device *dev)
dev_priv->fbdev = NULL;
}
+void intel_fbdev_set_suspend(struct drm_device *dev, int state)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ if (!dev_priv->fbdev)
+ return;
+
+#ifdef FREEBSD_WIP
+ fb_set_suspend(dev_priv->fbdev->helper.fbdev, state);
+#endif /* FREEBSD_WIP */
+}
+
+MODULE_LICENSE("GPL and additional rights");
+
void intel_fb_output_poll_changed(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
diff --git a/sys/dev/drm2/i915/intel_hdmi.c b/sys/dev/drm2/i915/intel_hdmi.c
index c009b03..473e5b6 100644
--- a/sys/dev/drm2/i915/intel_hdmi.c
+++ b/sys/dev/drm2/i915/intel_hdmi.c
@@ -30,22 +30,42 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
+
+#define mmiowb() barrier()
+
+static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi)
+{
+ return hdmi_to_dig_port(intel_hdmi)->base.base.dev;
+}
+
+static void
+assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
+{
+ struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t enabled_bits;
+
+ enabled_bits = IS_HASWELL(dev) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE;
+
+ WARN(I915_READ(intel_hdmi->sdvox_reg) & enabled_bits,
+ "HDMI port enabled, expecting disabled\n");
+}
struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder)
{
- return container_of(encoder, struct intel_hdmi, base.base);
+ struct intel_digital_port *intel_dig_port =
+ container_of(encoder, struct intel_digital_port, base.base);
+ return &intel_dig_port->hdmi;
}
static struct intel_hdmi *intel_attached_hdmi(struct drm_connector *connector)
{
- return container_of(intel_attached_encoder(connector),
- struct intel_hdmi, base);
+ return enc_to_intel_hdmi(&intel_attached_encoder(connector)->base);
}
void intel_dip_infoframe_csum(struct dip_infoframe *frame)
@@ -121,36 +141,34 @@ static void g4x_write_infoframe(struct drm_encoder *encoder,
uint32_t *data = (uint32_t *)frame;
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
u32 val = I915_READ(VIDEO_DIP_CTL);
unsigned i, len = DIP_HEADER_SIZE + frame->len;
- val &= ~VIDEO_DIP_PORT_MASK;
- if (intel_hdmi->sdvox_reg == SDVOB)
- val |= VIDEO_DIP_PORT_B;
- else if (intel_hdmi->sdvox_reg == SDVOC)
- val |= VIDEO_DIP_PORT_C;
- else
- return;
+ WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n");
val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */
val |= g4x_infoframe_index(frame);
val &= ~g4x_infoframe_enable(frame);
- val |= VIDEO_DIP_ENABLE;
I915_WRITE(VIDEO_DIP_CTL, val);
+ mmiowb();
for (i = 0; i < len; i += 4) {
I915_WRITE(VIDEO_DIP_DATA, *data);
data++;
}
+ /* Write every possible data byte to force correct ECC calculation. */
+ for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
+ I915_WRITE(VIDEO_DIP_DATA, 0);
+ mmiowb();
val |= g4x_infoframe_enable(frame);
val &= ~VIDEO_DIP_FREQ_MASK;
val |= VIDEO_DIP_FREQ_VSYNC;
I915_WRITE(VIDEO_DIP_CTL, val);
+ POSTING_READ(VIDEO_DIP_CTL);
}
static void ibx_write_infoframe(struct drm_encoder *encoder,
@@ -160,46 +178,35 @@ static void ibx_write_infoframe(struct drm_encoder *encoder,
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
int reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
unsigned i, len = DIP_HEADER_SIZE + frame->len;
u32 val = I915_READ(reg);
- val &= ~VIDEO_DIP_PORT_MASK;
- switch (intel_hdmi->sdvox_reg) {
- case HDMIB:
- val |= VIDEO_DIP_PORT_B;
- break;
- case HDMIC:
- val |= VIDEO_DIP_PORT_C;
- break;
- case HDMID:
- val |= VIDEO_DIP_PORT_D;
- break;
- default:
- return;
- }
-
- intel_wait_for_vblank(dev, intel_crtc->pipe);
+ WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n");
val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */
val |= g4x_infoframe_index(frame);
val &= ~g4x_infoframe_enable(frame);
- val |= VIDEO_DIP_ENABLE;
I915_WRITE(reg, val);
+ mmiowb();
for (i = 0; i < len; i += 4) {
I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data);
data++;
}
+ /* Write every possible data byte to force correct ECC calculation. */
+ for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
+ I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), 0);
+ mmiowb();
val |= g4x_infoframe_enable(frame);
val &= ~VIDEO_DIP_FREQ_MASK;
val |= VIDEO_DIP_FREQ_VSYNC;
I915_WRITE(reg, val);
+ POSTING_READ(reg);
}
static void cpt_write_infoframe(struct drm_encoder *encoder,
@@ -213,32 +220,34 @@ static void cpt_write_infoframe(struct drm_encoder *encoder,
unsigned i, len = DIP_HEADER_SIZE + frame->len;
u32 val = I915_READ(reg);
- intel_wait_for_vblank(dev, intel_crtc->pipe);
+ WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n");
val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */
val |= g4x_infoframe_index(frame);
/* The DIP control register spec says that we need to update the AVI
* infoframe without clearing its enable bit */
- if (frame->type == DIP_TYPE_AVI)
- val |= VIDEO_DIP_ENABLE_AVI;
- else
+ if (frame->type != DIP_TYPE_AVI)
val &= ~g4x_infoframe_enable(frame);
- val |= VIDEO_DIP_ENABLE;
-
I915_WRITE(reg, val);
+ mmiowb();
for (i = 0; i < len; i += 4) {
I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data);
data++;
}
+ /* Write every possible data byte to force correct ECC calculation. */
+ for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
+ I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), 0);
+ mmiowb();
val |= g4x_infoframe_enable(frame);
val &= ~VIDEO_DIP_FREQ_MASK;
val |= VIDEO_DIP_FREQ_VSYNC;
I915_WRITE(reg, val);
+ POSTING_READ(reg);
}
static void vlv_write_infoframe(struct drm_encoder *encoder,
@@ -252,26 +261,31 @@ static void vlv_write_infoframe(struct drm_encoder *encoder,
unsigned i, len = DIP_HEADER_SIZE + frame->len;
u32 val = I915_READ(reg);
- intel_wait_for_vblank(dev, intel_crtc->pipe);
+ WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n");
val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */
val |= g4x_infoframe_index(frame);
val &= ~g4x_infoframe_enable(frame);
- val |= VIDEO_DIP_ENABLE;
I915_WRITE(reg, val);
+ mmiowb();
for (i = 0; i < len; i += 4) {
I915_WRITE(VLV_TVIDEO_DIP_DATA(intel_crtc->pipe), *data);
data++;
}
+ /* Write every possible data byte to force correct ECC calculation. */
+ for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
+ I915_WRITE(VLV_TVIDEO_DIP_DATA(intel_crtc->pipe), 0);
+ mmiowb();
val |= g4x_infoframe_enable(frame);
val &= ~VIDEO_DIP_FREQ_MASK;
val |= VIDEO_DIP_FREQ_VSYNC;
I915_WRITE(reg, val);
+ POSTING_READ(reg);
}
static void hsw_write_infoframe(struct drm_encoder *encoder,
@@ -289,18 +303,22 @@ static void hsw_write_infoframe(struct drm_encoder *encoder,
if (data_reg == 0)
return;
- intel_wait_for_vblank(dev, intel_crtc->pipe);
-
val &= ~hsw_infoframe_enable(frame);
I915_WRITE(ctl_reg, val);
+ mmiowb();
for (i = 0; i < len; i += 4) {
I915_WRITE(data_reg + i, *data);
data++;
}
+ /* Write every possible data byte to force correct ECC calculation. */
+ for (; i < VIDEO_DIP_DATA_SIZE; i += 4)
+ I915_WRITE(data_reg + i, 0);
+ mmiowb();
val |= hsw_infoframe_enable(frame);
I915_WRITE(ctl_reg, val);
+ POSTING_READ(ctl_reg);
}
static void intel_set_infoframe(struct drm_encoder *encoder,
@@ -308,14 +326,11 @@ static void intel_set_infoframe(struct drm_encoder *encoder,
{
struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
- if (!intel_hdmi->has_hdmi_sink)
- return;
-
intel_dip_infoframe_csum(frame);
intel_hdmi->write_infoframe(encoder, frame);
}
-void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
+static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
struct drm_display_mode *adjusted_mode)
{
struct dip_infoframe avi_if = {
@@ -327,10 +342,12 @@ void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
avi_if.body.avi.YQ_CN_PR |= DIP_AVI_PR_2;
+ avi_if.body.avi.VIC = drm_mode_cea_vic(adjusted_mode);
+
intel_set_infoframe(encoder, &avi_if);
}
-void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder)
+static void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder)
{
struct dip_infoframe spd_if;
@@ -345,6 +362,225 @@ void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder)
intel_set_infoframe(encoder, &spd_if);
}
+static void g4x_set_infoframes(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 reg = VIDEO_DIP_CTL;
+ u32 val = I915_READ(reg);
+ u32 port;
+
+ assert_hdmi_port_disabled(intel_hdmi);
+
+ /* If the registers were not initialized yet, they might be zeroes,
+ * which means we're selecting the AVI DIP and we're setting its
+ * frequency to once. This seems to really confuse the HW and make
+ * things stop working (the register spec says the AVI always needs to
+ * be sent every VSync). So here we avoid writing to the register more
+ * than we need and also explicitly select the AVI DIP and explicitly
+ * set its frequency to every VSync. Avoiding to write it twice seems to
+ * be enough to solve the problem, but being defensive shouldn't hurt us
+ * either. */
+ val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC;
+
+ if (!intel_hdmi->has_hdmi_sink) {
+ if (!(val & VIDEO_DIP_ENABLE))
+ return;
+ val &= ~VIDEO_DIP_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ return;
+ }
+
+ switch (intel_hdmi->sdvox_reg) {
+ case SDVOB:
+ port = VIDEO_DIP_PORT_B;
+ break;
+ case SDVOC:
+ port = VIDEO_DIP_PORT_C;
+ break;
+ default:
+ BUG();
+ return;
+ }
+
+ if (port != (val & VIDEO_DIP_PORT_MASK)) {
+ if (val & VIDEO_DIP_ENABLE) {
+ val &= ~VIDEO_DIP_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ }
+ val &= ~VIDEO_DIP_PORT_MASK;
+ val |= port;
+ }
+
+ val |= VIDEO_DIP_ENABLE;
+ val &= ~VIDEO_DIP_ENABLE_VENDOR;
+
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+
+ intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
+static void ibx_set_infoframes(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
+ u32 val = I915_READ(reg);
+ u32 port;
+
+ assert_hdmi_port_disabled(intel_hdmi);
+
+ /* See the big comment in g4x_set_infoframes() */
+ val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC;
+
+ if (!intel_hdmi->has_hdmi_sink) {
+ if (!(val & VIDEO_DIP_ENABLE))
+ return;
+ val &= ~VIDEO_DIP_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ return;
+ }
+
+ switch (intel_hdmi->sdvox_reg) {
+ case HDMIB:
+ port = VIDEO_DIP_PORT_B;
+ break;
+ case HDMIC:
+ port = VIDEO_DIP_PORT_C;
+ break;
+ case HDMID:
+ port = VIDEO_DIP_PORT_D;
+ break;
+ default:
+ BUG();
+ return;
+ }
+
+ if (port != (val & VIDEO_DIP_PORT_MASK)) {
+ if (val & VIDEO_DIP_ENABLE) {
+ val &= ~VIDEO_DIP_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ }
+ val &= ~VIDEO_DIP_PORT_MASK;
+ val |= port;
+ }
+
+ val |= VIDEO_DIP_ENABLE;
+ val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
+ VIDEO_DIP_ENABLE_GCP);
+
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+
+ intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
+static void cpt_set_infoframes(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
+ u32 val = I915_READ(reg);
+
+ assert_hdmi_port_disabled(intel_hdmi);
+
+ /* See the big comment in g4x_set_infoframes() */
+ val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC;
+
+ if (!intel_hdmi->has_hdmi_sink) {
+ if (!(val & VIDEO_DIP_ENABLE))
+ return;
+ val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI);
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ return;
+ }
+
+ /* Set both together, unset both together: see the spec. */
+ val |= VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI;
+ val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
+ VIDEO_DIP_ENABLE_GCP);
+
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+
+ intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
+static void vlv_set_infoframes(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);
+ u32 val = I915_READ(reg);
+
+ assert_hdmi_port_disabled(intel_hdmi);
+
+ /* See the big comment in g4x_set_infoframes() */
+ val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC;
+
+ if (!intel_hdmi->has_hdmi_sink) {
+ if (!(val & VIDEO_DIP_ENABLE))
+ return;
+ val &= ~VIDEO_DIP_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ return;
+ }
+
+ val |= VIDEO_DIP_ENABLE;
+ val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
+ VIDEO_DIP_ENABLE_GCP);
+
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+
+ intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
+static void hsw_set_infoframes(struct drm_encoder *encoder,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 reg = HSW_TVIDEO_DIP_CTL(intel_crtc->pipe);
+ u32 val = I915_READ(reg);
+
+ assert_hdmi_port_disabled(intel_hdmi);
+
+ if (!intel_hdmi->has_hdmi_sink) {
+ I915_WRITE(reg, 0);
+ POSTING_READ(reg);
+ return;
+ }
+
+ val &= ~(VIDEO_DIP_ENABLE_VSC_HSW | VIDEO_DIP_ENABLE_GCP_HSW |
+ VIDEO_DIP_ENABLE_VS_HSW | VIDEO_DIP_ENABLE_GMP_HSW);
+
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+
+ intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
static void intel_hdmi_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -355,7 +591,7 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,
struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
u32 sdvox;
- sdvox = SDVO_ENCODING_HDMI | SDVO_BORDER_ENABLE;
+ sdvox = SDVO_ENCODING_HDMI;
if (!HAS_PCH_SPLIT(dev))
sdvox |= intel_hdmi->color_range;
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
@@ -373,7 +609,7 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,
sdvox |= HDMI_MODE_SELECT;
if (intel_hdmi->has_audio) {
- DRM_DEBUG_KMS("Enabling HDMI audio on pipe %c\n",
+ DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n",
pipe_name(intel_crtc->pipe));
sdvox |= SDVO_AUDIO_ENABLE;
sdvox |= SDVO_NULL_PACKETS_DURING_VSYNC;
@@ -382,21 +618,41 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,
if (HAS_PCH_CPT(dev))
sdvox |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
- else if (intel_crtc->pipe == 1)
+ else if (intel_crtc->pipe == PIPE_B)
sdvox |= SDVO_PIPE_B_SELECT;
I915_WRITE(intel_hdmi->sdvox_reg, sdvox);
POSTING_READ(intel_hdmi->sdvox_reg);
- intel_hdmi_set_avi_infoframe(encoder, adjusted_mode);
- intel_hdmi_set_spd_infoframe(encoder);
+ intel_hdmi->set_infoframes(encoder, adjusted_mode);
}
-static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
+static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
{
- struct drm_device *dev = encoder->dev;
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
+ u32 tmp;
+
+ tmp = I915_READ(intel_hdmi->sdvox_reg);
+
+ if (!(tmp & SDVO_ENABLE))
+ return false;
+
+ if (HAS_PCH_CPT(dev))
+ *pipe = PORT_TO_PIPE_CPT(tmp);
+ else
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
+}
+
+static void intel_enable_hdmi(struct intel_encoder *encoder)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
u32 temp;
u32 enable_bits = SDVO_ENABLE;
@@ -405,6 +661,17 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
temp = I915_READ(intel_hdmi->sdvox_reg);
+ /* HW workaround for IBX, we need to move the port to transcoder A
+ * before disabling it. */
+ if (HAS_PCH_IBX(dev)) {
+ struct drm_crtc *crtc = encoder->base.crtc;
+ int pipe = crtc ? to_intel_crtc(crtc)->pipe : -1;
+
+ /* Restore the transcoder select bit. */
+ if (pipe == PIPE_B)
+ enable_bits |= SDVO_PIPE_B_SELECT;
+ }
+
/* HW workaround, need to toggle enable bit off and on for 12bpc, but
* we do this anyway which shows more stable in testing.
*/
@@ -413,12 +680,64 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
POSTING_READ(intel_hdmi->sdvox_reg);
}
- if (mode != DRM_MODE_DPMS_ON) {
- temp &= ~enable_bits;
- } else {
- temp |= enable_bits;
+ temp |= enable_bits;
+
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+
+ /* HW workaround, need to write this twice for issue that may result
+ * in first write getting masked.
+ */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+ }
+}
+
+static void intel_disable_hdmi(struct intel_encoder *encoder)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
+ u32 temp;
+ u32 enable_bits = SDVO_ENABLE | SDVO_AUDIO_ENABLE;
+
+ temp = I915_READ(intel_hdmi->sdvox_reg);
+
+ /* HW workaround for IBX, we need to move the port to transcoder A
+ * before disabling it. */
+ if (HAS_PCH_IBX(dev)) {
+ struct drm_crtc *crtc = encoder->base.crtc;
+ int pipe = crtc ? to_intel_crtc(crtc)->pipe : -1;
+
+ if (temp & SDVO_PIPE_B_SELECT) {
+ temp &= ~SDVO_PIPE_B_SELECT;
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+
+ /* Again we need to write this twice. */
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+
+ /* Transcoder selection bits only update
+ * effectively on vblank. */
+ if (crtc)
+ intel_wait_for_vblank(dev, pipe);
+ else
+ DRM_MSLEEP(50);
+ }
+ }
+
+ /* HW workaround, need to toggle enable bit off and on for 12bpc, but
+ * we do this anyway which shows more stable in testing.
+ */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE);
+ POSTING_READ(intel_hdmi->sdvox_reg);
}
+ temp &= ~enable_bits;
+
I915_WRITE(intel_hdmi->sdvox_reg, temp);
POSTING_READ(intel_hdmi->sdvox_reg);
@@ -445,25 +764,53 @@ static int intel_hdmi_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
- const struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode)
+bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
{
return true;
}
+static bool g4x_hdmi_connected(struct intel_hdmi *intel_hdmi)
+{
+ struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t bit;
+
+ switch (intel_hdmi->sdvox_reg) {
+ case SDVOB:
+ bit = HDMIB_HOTPLUG_LIVE_STATUS;
+ break;
+ case SDVOC:
+ bit = HDMIC_HOTPLUG_LIVE_STATUS;
+ break;
+ default:
+ bit = 0;
+ break;
+ }
+
+ return I915_READ(PORT_HOTPLUG_STAT) & bit;
+}
+
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct intel_digital_port *intel_dig_port =
+ hdmi_to_dig_port(intel_hdmi);
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
struct drm_i915_private *dev_priv = connector->dev->dev_private;
struct edid *edid;
enum drm_connector_status status = connector_status_disconnected;
+ if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))
+ return status;
+
intel_hdmi->has_hdmi_sink = false;
intel_hdmi->has_audio = false;
- edid = drm_get_edid(connector, intel_gmbus_get_adapter(dev_priv,
- intel_hdmi->ddc_bus));
+ edid = drm_get_edid(connector,
+ intel_gmbus_get_adapter(dev_priv,
+ intel_hdmi->ddc_bus));
if (edid) {
if (edid->input & DRM_EDID_INPUT_DIGITAL) {
@@ -474,16 +821,13 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
}
free(edid, DRM_MEM_KMS);
- } else {
- DRM_DEBUG_KMS("[CONNECTOR:%d:%s] got no edid, ddc port %d\n",
- connector->base.id, drm_get_connector_name(connector),
- intel_hdmi->ddc_bus);
}
if (status == connector_status_connected) {
if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
intel_hdmi->has_audio =
(intel_hdmi->force_audio == HDMI_AUDIO_ON);
+ intel_encoder->type = INTEL_OUTPUT_HDMI;
}
return status;
@@ -517,7 +861,6 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
if (edid) {
if (edid->input & DRM_EDID_INPUT_DIGITAL)
has_audio = drm_detect_monitor_audio(edid);
-
free(edid, DRM_MEM_KMS);
}
@@ -526,10 +869,12 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
static int
intel_hdmi_set_property(struct drm_connector *connector,
- struct drm_property *property,
- uint64_t val)
+ struct drm_property *property,
+ uint64_t val)
{
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct intel_digital_port *intel_dig_port =
+ hdmi_to_dig_port(intel_hdmi);
struct drm_i915_private *dev_priv = connector->dev->dev_private;
int ret;
@@ -569,11 +914,10 @@ intel_hdmi_set_property(struct drm_connector *connector,
return -EINVAL;
done:
- if (intel_hdmi->base.base.crtc) {
- struct drm_crtc *crtc = intel_hdmi->base.base.crtc;
- drm_crtc_helper_set_mode(crtc, &crtc->mode,
- crtc->x, crtc->y,
- crtc->fb);
+ if (intel_dig_port->base.base.crtc) {
+ struct drm_crtc *crtc = intel_dig_port->base.base.crtc;
+ intel_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
}
return 0;
@@ -581,31 +925,18 @@ done:
static void intel_hdmi_destroy(struct drm_connector *connector)
{
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
free(connector, DRM_MEM_KMS);
}
-static const struct drm_encoder_helper_funcs intel_hdmi_helper_funcs_hsw = {
- .dpms = intel_ddi_dpms,
- .mode_fixup = intel_hdmi_mode_fixup,
- .prepare = intel_encoder_prepare,
- .mode_set = intel_ddi_mode_set,
- .commit = intel_encoder_commit,
-};
-
static const struct drm_encoder_helper_funcs intel_hdmi_helper_funcs = {
- .dpms = intel_hdmi_dpms,
.mode_fixup = intel_hdmi_mode_fixup,
- .prepare = intel_encoder_prepare,
.mode_set = intel_hdmi_mode_set,
- .commit = intel_encoder_commit,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_connector_dpms,
.detect = intel_hdmi_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_hdmi_set_property,
@@ -629,117 +960,68 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
intel_attach_broadcast_rgb_property(connector);
}
-void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
+void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
+ struct intel_connector *intel_connector)
{
+ struct drm_connector *connector = &intel_connector->base;
+ struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
+ struct drm_device *dev = intel_encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_connector *connector;
- struct intel_encoder *intel_encoder;
- struct intel_connector *intel_connector;
- struct intel_hdmi *intel_hdmi;
- int i;
-
- intel_hdmi = malloc(sizeof(struct intel_hdmi), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
- intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
-
- intel_encoder = &intel_hdmi->base;
- drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
- DRM_MODE_ENCODER_TMDS);
+ enum port port = intel_dig_port->port;
- connector = &intel_connector->base;
drm_connector_init(dev, connector, &intel_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_HDMIA);
drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
- intel_encoder->type = INTEL_OUTPUT_HDMI;
-
connector->polled = DRM_CONNECTOR_POLL_HPD;
connector->interlace_allowed = 1;
connector->doublescan_allowed = 0;
- intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
- /* Set up the DDC bus. */
- if (sdvox_reg == SDVOB) {
- intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
- intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
- dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == SDVOC) {
- intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
- intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
- dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == HDMIB) {
- intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
- intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
- dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == HDMIC) {
- intel_encoder->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT);
- intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
- dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == HDMID) {
- intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT);
- intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
- dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == DDI_BUF_CTL(PORT_B)) {
- DRM_DEBUG_DRIVER("LPT: detected output on DDI B\n");
- intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
+ switch (port) {
+ case PORT_B:
intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
- intel_hdmi->ddi_port = PORT_B;
dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == DDI_BUF_CTL(PORT_C)) {
- DRM_DEBUG_DRIVER("LPT: detected output on DDI C\n");
- intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
+ break;
+ case PORT_C:
intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
- intel_hdmi->ddi_port = PORT_C;
dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
- } else if (sdvox_reg == DDI_BUF_CTL(PORT_D)) {
- DRM_DEBUG_DRIVER("LPT: detected output on DDI D\n");
- intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
+ break;
+ case PORT_D:
intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
- intel_hdmi->ddi_port = PORT_D;
dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
- } else {
- /* If we got an unknown sdvox_reg, things are pretty much broken
- * in a way that we should let the kernel know about it */
- DRM_DEBUG_KMS("unknown sdvox_reg %d\n", sdvox_reg);
+ break;
+ case PORT_A:
+ /* Internal port only for eDP. */
+ default:
+ BUG();
}
- intel_hdmi->sdvox_reg = sdvox_reg;
if (!HAS_PCH_SPLIT(dev)) {
intel_hdmi->write_infoframe = g4x_write_infoframe;
- I915_WRITE(VIDEO_DIP_CTL, 0);
+ intel_hdmi->set_infoframes = g4x_set_infoframes;
} else if (IS_VALLEYVIEW(dev)) {
intel_hdmi->write_infoframe = vlv_write_infoframe;
- for_each_pipe(i)
- I915_WRITE(VLV_TVIDEO_DIP_CTL(i), 0);
+ intel_hdmi->set_infoframes = vlv_set_infoframes;
} else if (IS_HASWELL(dev)) {
- /* FIXME: Haswell has a new set of DIP frame registers, but we are
- * just doing the minimal required for HDMI to work at this stage.
- */
intel_hdmi->write_infoframe = hsw_write_infoframe;
- for_each_pipe(i)
- I915_WRITE(HSW_TVIDEO_DIP_CTL(i), 0);
+ intel_hdmi->set_infoframes = hsw_set_infoframes;
} else if (HAS_PCH_IBX(dev)) {
intel_hdmi->write_infoframe = ibx_write_infoframe;
- for_each_pipe(i)
- I915_WRITE(TVIDEO_DIP_CTL(i), 0);
+ intel_hdmi->set_infoframes = ibx_set_infoframes;
} else {
intel_hdmi->write_infoframe = cpt_write_infoframe;
- for_each_pipe(i)
- I915_WRITE(TVIDEO_DIP_CTL(i), 0);
+ intel_hdmi->set_infoframes = cpt_set_infoframes;
}
if (IS_HASWELL(dev))
- drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs_hsw);
+ intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
else
- drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
+ intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_hdmi_add_properties(intel_hdmi, connector);
intel_connector_attach_encoder(intel_connector, intel_encoder);
-#if 0
- drm_sysfs_connector_add(connector);
-#endif
/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
* 0xd. Failure to do so will result in spurious interrupts being
@@ -750,3 +1032,42 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
}
}
+
+void intel_hdmi_init(struct drm_device *dev, int sdvox_reg, enum port port)
+{
+ struct intel_digital_port *intel_dig_port;
+ struct intel_encoder *intel_encoder;
+ struct drm_encoder *encoder;
+ struct intel_connector *intel_connector;
+
+ intel_dig_port = malloc(sizeof(struct intel_digital_port), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_dig_port)
+ return;
+
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_connector) {
+ free(intel_dig_port, DRM_MEM_KMS);
+ return;
+ }
+
+ intel_encoder = &intel_dig_port->base;
+ encoder = &intel_encoder->base;
+
+ drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
+ DRM_MODE_ENCODER_TMDS);
+ drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
+
+ intel_encoder->enable = intel_enable_hdmi;
+ intel_encoder->disable = intel_disable_hdmi;
+ intel_encoder->get_hw_state = intel_hdmi_get_hw_state;
+
+ intel_encoder->type = INTEL_OUTPUT_HDMI;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ intel_encoder->cloneable = false;
+
+ intel_dig_port->port = port;
+ intel_dig_port->hdmi.sdvox_reg = sdvox_reg;
+ intel_dig_port->dp.output_reg = 0;
+
+ intel_hdmi_init_connector(intel_dig_port, intel_connector);
+}
diff --git a/sys/dev/drm2/i915/intel_iic.c b/sys/dev/drm2/i915/intel_iic.c
index aacc954..f7383c0 100644
--- a/sys/dev/drm2/i915/intel_iic.c
+++ b/sys/dev/drm2/i915/intel_iic.c
@@ -25,50 +25,20 @@
* Authors:
* Eric Anholt <eric@anholt.net>
* Chris Wilson <chris@chris-wilson.co.uk>
- *
- * Copyright (c) 2011 The FreeBSD Foundation
- * All rights reserved.
- *
- * This software was developed by Konstantin Belousov under sponsorship from
- * the FreeBSD Foundation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
#include <dev/iicbus/iic.h>
#include <dev/iicbus/iiconf.h>
#include <dev/iicbus/iicbus.h>
#include "iicbus_if.h"
#include "iicbb_if.h"
-static void intel_teardown_gmbus_m(struct drm_device *dev, int m);
-
struct gmbus_port {
const char *name;
int reg;
@@ -87,17 +57,37 @@ static const struct gmbus_port gmbus_ports[] = {
#define I2C_RISEFALL_TIME 10
+/*
+ * FIXME Linux<->FreeBSD: dvo_ns2501.C wants the struct intel_gmbus
+ * below but it just has the device_t at hand. It still uses
+ * device_get_softc(), thus expects struct intel_gmbus to remain the
+ * first member.
+ */
struct intel_iic_softc {
- struct drm_device *drm_dev;
+ struct intel_gmbus *bus;
device_t iic_dev;
- bool force_bit_dev;
char name[32];
- uint32_t reg;
- uint32_t reg0;
};
+static inline struct intel_gmbus *
+to_intel_gmbus(device_t i2c)
+{
+ struct intel_iic_softc *sc;
+
+ sc = device_get_softc(i2c);
+ return sc->bus;
+}
+
+bool intel_gmbus_is_forced_bit(device_t adapter)
+{
+ struct intel_iic_softc *sc = device_get_softc(adapter);
+ struct intel_gmbus *bus = sc->bus;
+
+ return bus->force_bit;
+}
+
void
-intel_iic_reset(struct drm_device *dev)
+intel_i2c_reset(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
I915_WRITE(dev_priv->gpio_mmio_base + GMBUS0, 0);
@@ -110,9 +100,9 @@ intel_iicbus_reset(device_t idev, u_char speed, u_char addr, u_char *oldaddr)
struct drm_device *dev;
sc = device_get_softc(idev);
- dev = sc->drm_dev;
+ dev = sc->bus->dev_priv->dev;
- intel_iic_reset(dev);
+ intel_i2c_reset(dev);
return (0);
}
@@ -132,15 +122,15 @@ static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable)
I915_WRITE(DSPCLK_GATE_D, val);
}
-static u32 get_reserved(device_t idev)
+static u32 get_reserved(struct intel_gmbus *bus)
{
- struct intel_iic_softc *sc = device_get_softc(idev);
- struct drm_device *dev = sc->drm_dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ struct drm_device *dev = dev_priv->dev;
u32 reserved = 0;
+ /* On most chips, these bits must be preserved in software. */
if (!IS_I830(dev) && !IS_845G(dev))
- reserved = I915_READ_NOTRACE(sc->reg) &
+ reserved = I915_READ_NOTRACE(bus->gpio_reg) &
(GPIO_DATA_PULLUP_DISABLE |
GPIO_CLOCK_PULLUP_DISABLE);
@@ -150,28 +140,31 @@ static u32 get_reserved(device_t idev)
static int get_clock(device_t adapter)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
- u32 reserved = get_reserved(adapter);
- I915_WRITE_NOTRACE(sc->reg, reserved | GPIO_CLOCK_DIR_MASK);
- I915_WRITE_NOTRACE(sc->reg, reserved);
- return ((I915_READ_NOTRACE(sc->reg) & GPIO_CLOCK_VAL_IN) != 0);
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ u32 reserved = get_reserved(bus);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
+ return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
}
static int get_data(device_t adapter)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
- u32 reserved = get_reserved(adapter);
- I915_WRITE_NOTRACE(sc->reg, reserved | GPIO_DATA_DIR_MASK);
- I915_WRITE_NOTRACE(sc->reg, reserved);
- return ((I915_READ_NOTRACE(sc->reg) & GPIO_DATA_VAL_IN) != 0);
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ u32 reserved = get_reserved(bus);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
+ return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
}
static void set_clock(device_t adapter, int state_high)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
- u32 reserved = get_reserved(adapter);
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ u32 reserved = get_reserved(bus);
u32 clock_bits;
if (state_high)
@@ -180,15 +173,16 @@ static void set_clock(device_t adapter, int state_high)
clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
GPIO_CLOCK_VAL_MASK;
- I915_WRITE_NOTRACE(sc->reg, reserved | clock_bits);
- POSTING_READ(sc->reg);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
+ POSTING_READ(bus->gpio_reg);
}
static void set_data(device_t adapter, int state_high)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
- u32 reserved = get_reserved(adapter);
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ u32 reserved = get_reserved(bus);
u32 data_bits;
if (state_high)
@@ -197,21 +191,22 @@ static void set_data(device_t adapter, int state_high)
data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
GPIO_DATA_VAL_MASK;
- I915_WRITE_NOTRACE(sc->reg, reserved | data_bits);
- POSTING_READ(sc->reg);
+ I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
+ POSTING_READ(bus->gpio_reg);
}
static int
intel_gpio_pre_xfer(device_t adapter)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
- intel_iic_reset(sc->drm_dev);
+ intel_i2c_reset(dev_priv->dev);
intel_i2c_quirk_set(dev_priv, true);
IICBB_SETSDA(adapter, 1);
IICBB_SETSCL(adapter, 1);
- DELAY(I2C_RISEFALL_TIME);
+ udelay(I2C_RISEFALL_TIME);
return 0;
}
@@ -219,13 +214,23 @@ static void
intel_gpio_post_xfer(device_t adapter)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
IICBB_SETSDA(adapter, 1);
IICBB_SETSCL(adapter, 1);
intel_i2c_quirk_set(dev_priv, false);
}
+static void
+intel_gpio_setup(struct intel_gmbus *bus, u32 pin)
+{
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+
+ /* -1 to map pin pair to gmbus index */
+ bus->gpio_reg = dev_priv->gpio_mmio_base + gmbus_ports[pin - 1].reg;
+}
+
static int
gmbus_xfer_read(struct drm_i915_private *dev_priv, struct iic_msg *msg,
u32 gmbus1_index)
@@ -245,10 +250,9 @@ gmbus_xfer_read(struct drm_i915_private *dev_priv, struct iic_msg *msg,
u32 val, loop = 0;
u32 gmbus2;
- ret = _intel_wait_for(sc->drm_dev,
- ((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
- (GMBUS_SATOER | GMBUS_HW_RDY)),
- 50, 1, "915gbr");
+ ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
+ (GMBUS_SATOER | GMBUS_HW_RDY),
+ 50);
if (ret)
return -ETIMEDOUT;
if (gmbus2 & GMBUS_SATOER)
@@ -295,10 +299,9 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct iic_msg *msg)
I915_WRITE(GMBUS3 + reg_offset, val);
- ret = _intel_wait_for(sc->drm_dev,
- ((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
- (GMBUS_SATOER | GMBUS_HW_RDY)),
- 50, 1, "915gbw");
+ ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
+ (GMBUS_SATOER | GMBUS_HW_RDY),
+ 50);
if (ret)
return -ETIMEDOUT;
if (gmbus2 & GMBUS_SATOER)
@@ -315,8 +318,8 @@ static bool
gmbus_is_index_read(struct iic_msg *msgs, int i, int num)
{
return (i + 1 < num &&
- !(msgs[i].flags & IIC_M_RD) && msgs[i].len <= 2 &&
- (msgs[i + 1].flags & IIC_M_RD));
+ !(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 &&
+ (msgs[i + 1].flags & I2C_M_RD));
}
static int
@@ -353,43 +356,42 @@ gmbus_xfer(device_t adapter,
uint32_t num)
{
struct intel_iic_softc *sc = device_get_softc(adapter);
- struct drm_i915_private *dev_priv = sc->drm_dev->dev_private;
- int error, i, ret, reg_offset, unit;
+ struct intel_gmbus *bus = sc->bus;
+ struct drm_i915_private *dev_priv = bus->dev_priv;
+ int i, reg_offset;
+ int ret = 0;
- error = 0;
- unit = device_get_unit(adapter);
+ sx_xlock(&dev_priv->gmbus_mutex);
- sx_xlock(&dev_priv->gmbus_sx);
- if (sc->force_bit_dev) {
- error = -IICBUS_TRANSFER(dev_priv->bbbus[unit], msgs, num);
+ if (bus->force_bit) {
+ ret = -IICBUS_TRANSFER(bus->bbbus, msgs, num);
goto out;
}
reg_offset = dev_priv->gpio_mmio_base;
- I915_WRITE(GMBUS0 + reg_offset, sc->reg0);
+ I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
for (i = 0; i < num; i++) {
u32 gmbus2;
if (gmbus_is_index_read(msgs, i, num)) {
- error = gmbus_xfer_index_read(dev_priv, &msgs[i]);
+ ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
i += 1; /* set i to the index of the read xfer */
- } else if (msgs[i].flags & IIC_M_RD) {
- error = gmbus_xfer_read(dev_priv, &msgs[i], 0);
+ } else if (msgs[i].flags & I2C_M_RD) {
+ ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
} else {
- error = gmbus_xfer_write(dev_priv, &msgs[i]);
+ ret = gmbus_xfer_write(dev_priv, &msgs[i]);
}
- if (error == -ETIMEDOUT)
+ if (ret == -ETIMEDOUT)
goto timeout;
- if (error == -ENXIO)
+ if (ret == -ENXIO)
goto clear_err;
- ret = _intel_wait_for(sc->drm_dev,
- ((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
- (GMBUS_SATOER | GMBUS_HW_WAIT_PHASE)),
- 50, 1, "915gbh");
+ ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
+ (GMBUS_SATOER | GMBUS_HW_WAIT_PHASE),
+ 50);
if (ret)
goto timeout;
if (gmbus2 & GMBUS_SATOER)
@@ -406,12 +408,11 @@ gmbus_xfer(device_t adapter,
* We will re-enable it at the start of the next xfer,
* till then let it sleep.
*/
- if (_intel_wait_for(dev,
- (I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
- 10, 1, "915gbu")) {
+ if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
+ 10)) {
DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
- sc->name);
- error = -ETIMEDOUT;
+ device_get_desc(adapter));
+ ret = -ETIMEDOUT;
}
I915_WRITE(GMBUS0 + reg_offset, 0);
goto out;
@@ -421,11 +422,22 @@ clear_err:
* Wait for bus to IDLE before clearing NAK.
* If we clear the NAK while bus is still active, then it will stay
* active and the next transaction may fail.
+ *
+ * If no ACK is received during the address phase of a transaction, the
+ * adapter must report -ENXIO. It is not clear what to return if no ACK
+ * is received at other times. But we have to be careful to not return
+ * spurious -ENXIO because that will prevent i2c and drm edid functions
+ * from retrying. So return -ENXIO only when gmbus properly quiescents -
+ * timing out seems to happen when there _is_ a ddc chip present, but
+ * it's slow responding and only answers on the 2nd retry.
*/
- if (_intel_wait_for(dev,
- (I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
- 10, 1, "915gbu"))
- DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n", sc->name);
+ ret = -ENXIO;
+ if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
+ 10)) {
+ DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
+ device_get_desc(adapter));
+ ret = -ETIMEDOUT;
+ }
/* Toggle the Software Clear Interrupt bit. This has the effect
* of resetting the GMBUS controller and so clearing the
@@ -436,31 +448,23 @@ clear_err:
I915_WRITE(GMBUS0 + reg_offset, 0);
DRM_DEBUG_KMS("GMBUS [%s] NAK for addr: %04x %c(%d)\n",
- sc->name, msgs[i].slave,
- (msgs[i].flags & IIC_M_RD) ? 'r' : 'w', msgs[i].len);
+ device_get_desc(adapter), msgs[i].slave >> 1,
+ (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
- /*
- * If no ACK is received during the address phase of a transaction,
- * the adapter must report -ENXIO.
- * It is not clear what to return if no ACK is received at other times.
- * So, we always return -ENXIO in all NAK cases, to ensure we send
- * it at least during the one case that is specified.
- */
- error = -ENXIO;
goto out;
timeout:
DRM_INFO("GMBUS [%s] timed out, falling back to bit banging on pin %d\n",
- sc->name, sc->reg0 & 0xff);
+ device_get_desc(adapter), bus->reg0 & 0xff);
I915_WRITE(GMBUS0 + reg_offset, 0);
/* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */
- sc->force_bit_dev = true;
- error = -IICBUS_TRANSFER(dev_priv->bbbus[unit], msgs, num);
+ bus->force_bit = 1;
+ ret = -IICBUS_TRANSFER(bus->bbbus, msgs, num);
out:
- sx_xunlock(&dev_priv->gmbus_sx);
- return -error;
+ sx_xunlock(&dev_priv->gmbus_mutex);
+ return -ret;
}
static int
@@ -473,32 +477,23 @@ intel_gmbus_probe(device_t dev)
static int
intel_gmbus_attach(device_t idev)
{
- struct drm_i915_private *dev_priv;
struct intel_iic_softc *sc;
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
int pin, port;
sc = device_get_softc(idev);
- sc->drm_dev = device_get_softc(device_get_parent(idev));
- dev_priv = sc->drm_dev->dev_private;
pin = device_get_unit(idev);
- port = pin + 1;
+ port = pin + 1; /* +1 to map gmbus index to pin pair */
- snprintf(sc->name, sizeof(sc->name), "gmbus %s",
+ snprintf(sc->name, sizeof(sc->name), "i915 gmbus %s",
intel_gmbus_is_port_valid(port) ? gmbus_ports[pin].name :
"reserved");
device_set_desc(idev, sc->name);
- /* By default use a conservative clock rate */
- sc->reg0 = port | GMBUS_RATE_100KHZ;
-
- /* gmbus seems to be broken on i830 */
- if (IS_I830(sc->drm_dev))
- sc->force_bit_dev = true;
-#if 0
- if (IS_GEN2(sc->drm_dev)) {
- sc->force_bit_dev = true;
- }
-#endif
+ dev = device_get_softc(device_get_parent(idev));
+ dev_priv = dev->dev_private;
+ sc->bus = &dev_priv->gmbus[pin];
/* add bus interface device */
sc->iic_dev = device_add_child(idev, "iicbus", -1);
@@ -513,23 +508,31 @@ intel_gmbus_attach(device_t idev)
static int
intel_gmbus_detach(device_t idev)
{
- struct intel_iic_softc *sc;
- struct drm_i915_private *dev_priv;
- device_t child;
- int u;
- sc = device_get_softc(idev);
- u = device_get_unit(idev);
- dev_priv = sc->drm_dev->dev_private;
-
- child = sc->iic_dev;
bus_generic_detach(idev);
- if (child != NULL)
- device_delete_child(idev, child);
+ device_delete_children(idev);
return (0);
}
+static device_method_t intel_gmbus_methods[] = {
+ DEVMETHOD(device_probe, intel_gmbus_probe),
+ DEVMETHOD(device_attach, intel_gmbus_attach),
+ DEVMETHOD(device_detach, intel_gmbus_detach),
+ DEVMETHOD(iicbus_reset, intel_iicbus_reset),
+ DEVMETHOD(iicbus_transfer, gmbus_xfer),
+ DEVMETHOD_END
+};
+static driver_t intel_gmbus_driver = {
+ "intel_gmbus",
+ intel_gmbus_methods,
+ sizeof(struct intel_iic_softc)
+};
+static devclass_t intel_gmbus_devclass;
+DRIVER_MODULE_ORDERED(intel_gmbus, drmn, intel_gmbus_driver,
+ intel_gmbus_devclass, 0, 0, SI_ORDER_FIRST);
+DRIVER_MODULE(iicbus, intel_gmbus, iicbus_driver, iicbus_devclass, 0, 0);
+
static int
intel_iicbb_probe(device_t dev)
{
@@ -541,12 +544,11 @@ static int
intel_iicbb_attach(device_t idev)
{
struct intel_iic_softc *sc;
+ struct drm_device *dev;
struct drm_i915_private *dev_priv;
int pin, port;
sc = device_get_softc(idev);
- sc->drm_dev = device_get_softc(device_get_parent(idev));
- dev_priv = sc->drm_dev->dev_private;
pin = device_get_unit(idev);
port = pin + 1;
@@ -555,10 +557,9 @@ intel_iicbb_attach(device_t idev)
"reserved");
device_set_desc(idev, sc->name);
- if (!intel_gmbus_is_port_valid(port))
- pin = 1 ; /* GPIOA, VGA */
- sc->reg0 = pin | GMBUS_RATE_100KHZ;
- sc->reg = dev_priv->gpio_mmio_base + gmbus_ports[pin].reg;
+ dev = device_get_softc(device_get_parent(idev));
+ dev_priv = dev->dev_private;
+ sc->bus = &dev_priv->gmbus[pin];
/* add generic bit-banging code */
sc->iic_dev = device_add_child(idev, "iicbb", -1);
@@ -574,35 +575,13 @@ intel_iicbb_attach(device_t idev)
static int
intel_iicbb_detach(device_t idev)
{
- struct intel_iic_softc *sc;
- device_t child;
- sc = device_get_softc(idev);
- child = sc->iic_dev;
bus_generic_detach(idev);
- if (child)
- device_delete_child(idev, child);
+ device_delete_children(idev);
+
return (0);
}
-static device_method_t intel_gmbus_methods[] = {
- DEVMETHOD(device_probe, intel_gmbus_probe),
- DEVMETHOD(device_attach, intel_gmbus_attach),
- DEVMETHOD(device_detach, intel_gmbus_detach),
- DEVMETHOD(iicbus_reset, intel_iicbus_reset),
- DEVMETHOD(iicbus_transfer, gmbus_xfer),
- DEVMETHOD_END
-};
-static driver_t intel_gmbus_driver = {
- "intel_gmbus",
- intel_gmbus_methods,
- sizeof(struct intel_iic_softc)
-};
-static devclass_t intel_gmbus_devclass;
-DRIVER_MODULE_ORDERED(intel_gmbus, drmn, intel_gmbus_driver,
- intel_gmbus_devclass, 0, 0, SI_ORDER_FIRST);
-DRIVER_MODULE(iicbus, intel_gmbus, iicbus_driver, iicbus_devclass, 0, 0);
-
static device_method_t intel_iicbb_methods[] = {
DEVMETHOD(device_probe, intel_iicbb_probe),
DEVMETHOD(device_attach, intel_iicbb_attach),
@@ -631,6 +610,10 @@ DRIVER_MODULE_ORDERED(intel_iicbb, drmn, intel_iicbb_driver,
intel_iicbb_devclass, 0, 0, SI_ORDER_FIRST);
DRIVER_MODULE(iicbb, intel_iicbb, iicbb_driver, iicbb_devclass, 0, 0);
+/**
+ * intel_gmbus_setup - instantiate all Intel i2c GMBuses
+ * @dev: DRM device
+ */
int intel_setup_gmbus(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -642,7 +625,7 @@ int intel_setup_gmbus(struct drm_device *dev)
else
dev_priv->gpio_mmio_base = 0;
- sx_init(&dev_priv->gmbus_sx, "gmbus");
+ sx_init(&dev_priv->gmbus_mutex, "gmbus");
/*
* The Giant there is recursed, most likely. Normally, the
@@ -650,29 +633,46 @@ int intel_setup_gmbus(struct drm_device *dev)
* driver.
*/
mtx_lock(&Giant);
- for (i = 0; i <= GMBUS_NUM_PORTS; i++) {
+ for (i = 0; i < GMBUS_NUM_PORTS; i++) {
+ struct intel_gmbus *bus = &dev_priv->gmbus[i];
+ u32 port = i + 1; /* +1 to map gmbus index to pin pair */
+
+ bus->dev_priv = dev_priv;
+
+ /* By default use a conservative clock rate */
+ bus->reg0 = port | GMBUS_RATE_100KHZ;
+
+ /* gmbus seems to be broken on i830 */
+ if (IS_I830(dev))
+ bus->force_bit = 1;
+
+ intel_gpio_setup(bus, port);
+
/*
+ * bbbus_bridge
+ *
* Initialized bbbus_bridge before gmbus_bridge, since
* gmbus may decide to force quirk transfer in the
* attachment code.
*/
- dev_priv->bbbus_bridge[i] = device_add_child(dev->dev,
+ bus->bbbus_bridge = device_add_child(dev->dev,
"intel_iicbb", i);
- if (dev_priv->bbbus_bridge[i] == NULL) {
+ if (bus->bbbus_bridge == NULL) {
DRM_ERROR("bbbus bridge %d creation failed\n", i);
ret = -ENXIO;
goto err;
}
- device_quiet(dev_priv->bbbus_bridge[i]);
- ret = -device_probe_and_attach(dev_priv->bbbus_bridge[i]);
+ device_quiet(bus->bbbus_bridge);
+ ret = -device_probe_and_attach(bus->bbbus_bridge);
if (ret != 0) {
DRM_ERROR("bbbus bridge %d attach failed, %d\n", i,
ret);
goto err;
}
- iic_dev = device_find_child(dev_priv->bbbus_bridge[i], "iicbb",
- -1);
+ /* bbbus */
+ iic_dev = device_find_child(bus->bbbus_bridge,
+ "iicbb", -1);
if (iic_dev == NULL) {
DRM_ERROR("bbbus bridge doesn't have iicbb child\n");
goto err;
@@ -684,17 +684,18 @@ int intel_setup_gmbus(struct drm_device *dev)
goto err;
}
- dev_priv->bbbus[i] = iic_dev;
+ bus->bbbus = iic_dev;
- dev_priv->gmbus_bridge[i] = device_add_child(dev->dev,
+ /* gmbus_bridge */
+ bus->gmbus_bridge = device_add_child(dev->dev,
"intel_gmbus", i);
- if (dev_priv->gmbus_bridge[i] == NULL) {
+ if (bus->gmbus_bridge == NULL) {
DRM_ERROR("gmbus bridge %d creation failed\n", i);
ret = -ENXIO;
goto err;
}
- device_quiet(dev_priv->gmbus_bridge[i]);
- ret = -device_probe_and_attach(dev_priv->gmbus_bridge[i]);
+ device_quiet(bus->gmbus_bridge);
+ ret = -device_probe_and_attach(bus->gmbus_bridge);
if (ret != 0) {
DRM_ERROR("gmbus bridge %d attach failed, %d\n", i,
ret);
@@ -702,67 +703,84 @@ int intel_setup_gmbus(struct drm_device *dev)
goto err;
}
- iic_dev = device_find_child(dev_priv->gmbus_bridge[i],
+ /* gmbus */
+ iic_dev = device_find_child(bus->gmbus_bridge,
"iicbus", -1);
if (iic_dev == NULL) {
DRM_ERROR("gmbus bridge doesn't have iicbus child\n");
goto err;
}
- dev_priv->gmbus[i] = iic_dev;
- intel_iic_reset(dev);
+ bus->gmbus = iic_dev;
}
mtx_unlock(&Giant);
+ intel_i2c_reset(dev_priv->dev);
+
return 0;
err:
- intel_teardown_gmbus_m(dev, i);
+ while (--i) {
+ struct intel_gmbus *bus = &dev_priv->gmbus[i];
+ if (bus->gmbus_bridge != NULL)
+ device_delete_child(dev->dev, bus->gmbus_bridge);
+ if (bus->bbbus_bridge != NULL)
+ device_delete_child(dev->dev, bus->bbbus_bridge);
+ }
mtx_unlock(&Giant);
+ sx_destroy(&dev_priv->gmbus_mutex);
return ret;
}
device_t intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
unsigned port)
{
-
- if (!intel_gmbus_is_port_valid(port))
- DRM_ERROR("GMBUS get adapter %d: invalid port\n", port);
- return (intel_gmbus_is_port_valid(port) ? dev_priv->gmbus[port - 1] :
- NULL);
+ WARN_ON(!intel_gmbus_is_port_valid(port));
+ /* -1 to map pin pair to gmbus index */
+ return (intel_gmbus_is_port_valid(port)) ?
+ dev_priv->gmbus[port - 1].gmbus : NULL;
}
void intel_gmbus_set_speed(device_t adapter, int speed)
{
- struct intel_iic_softc *sc;
+ struct intel_gmbus *bus = to_intel_gmbus(adapter);
- sc = device_get_softc(device_get_parent(adapter));
-
- sc->reg0 = (sc->reg0 & ~(0x3 << 8)) | speed;
+ bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed;
}
void intel_gmbus_force_bit(device_t adapter, bool force_bit)
{
- struct intel_iic_softc *sc;
+ struct intel_gmbus *bus = to_intel_gmbus(adapter);
- sc = device_get_softc(device_get_parent(adapter));
- sc->force_bit_dev = force_bit;
+ bus->force_bit += force_bit ? 1 : -1;
+ DRM_DEBUG_KMS("%sabling bit-banging on %s. force bit now %d\n",
+ force_bit ? "en" : "dis", device_get_desc(adapter),
+ bus->force_bit);
}
-static void
-intel_teardown_gmbus_m(struct drm_device *dev, int m)
+void intel_teardown_gmbus(struct drm_device *dev)
{
- struct drm_i915_private *dev_priv;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+ int ret;
- dev_priv = dev->dev_private;
+ for (i = 0; i < GMBUS_NUM_PORTS; i++) {
+ struct intel_gmbus *bus = &dev_priv->gmbus[i];
- sx_destroy(&dev_priv->gmbus_sx);
-}
+ mtx_lock(&Giant);
+ ret = device_delete_child(dev->dev, bus->gmbus_bridge);
+ mtx_unlock(&Giant);
-void intel_teardown_gmbus(struct drm_device *dev)
-{
+ KASSERT(ret == 0, ("unable to detach iic gmbus %s: %d",
+ device_get_desc(bus->gmbus_bridge), ret));
- mtx_lock(&Giant);
- intel_teardown_gmbus_m(dev, GMBUS_NUM_PORTS);
- mtx_unlock(&Giant);
+ mtx_lock(&Giant);
+ ret = device_delete_child(dev->dev, bus->bbbus_bridge);
+ mtx_unlock(&Giant);
+
+ KASSERT(ret == 0, ("unable to detach iic bbbus %s: %d",
+ device_get_desc(bus->bbbus_bridge), ret));
+ }
+
+ sx_destroy(&dev_priv->gmbus_mutex);
}
diff --git a/sys/dev/drm2/i915/intel_lvds.c b/sys/dev/drm2/i915/intel_lvds.c
index 9e6c667..e5db0ee 100644
--- a/sys/dev/drm2/i915/intel_lvds.c
+++ b/sys/dev/drm2/i915/intel_lvds.c
@@ -31,44 +31,75 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
/* Private structure for the integrated LVDS support */
-struct intel_lvds {
- struct intel_encoder base;
+struct intel_lvds_connector {
+ struct intel_connector base;
- struct edid *edid;
+#ifdef FREEBSD_WIP
+ struct notifier_block lid_notifier;
+#endif /* FREEBSD_WIP */
+};
+
+struct intel_lvds_encoder {
+ struct intel_encoder base;
- int fitting_mode;
u32 pfit_control;
u32 pfit_pgm_ratios;
bool pfit_dirty;
- struct drm_display_mode *fixed_mode;
+ struct intel_lvds_connector *attached_connector;
};
-static struct intel_lvds *to_intel_lvds(struct drm_encoder *encoder)
+static struct intel_lvds_encoder *to_lvds_encoder(struct drm_encoder *encoder)
{
- return container_of(encoder, struct intel_lvds, base.base);
+ return container_of(encoder, struct intel_lvds_encoder, base.base);
}
-static struct intel_lvds *intel_attached_lvds(struct drm_connector *connector)
+static struct intel_lvds_connector *to_lvds_connector(struct drm_connector *connector)
{
- return container_of(intel_attached_encoder(connector),
- struct intel_lvds, base);
+ return container_of(connector, struct intel_lvds_connector, base.base);
+}
+
+static bool intel_lvds_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 lvds_reg, tmp;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ lvds_reg = PCH_LVDS;
+ } else {
+ lvds_reg = LVDS;
+ }
+
+ tmp = I915_READ(lvds_reg);
+
+ if (!(tmp & LVDS_PORT_EN))
+ return false;
+
+ if (HAS_PCH_CPT(dev))
+ *pipe = PORT_TO_PIPE_CPT(tmp);
+ else
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
}
/**
* Sets the power state for the panel.
*/
-static void intel_lvds_enable(struct intel_lvds *intel_lvds)
+static void intel_enable_lvds(struct intel_encoder *encoder)
{
- struct drm_device *dev = intel_lvds->base.base.dev;
+ struct drm_device *dev = encoder->base.dev;
+ struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 ctl_reg, lvds_reg, stat_reg;
@@ -84,7 +115,7 @@ static void intel_lvds_enable(struct intel_lvds *intel_lvds)
I915_WRITE(lvds_reg, I915_READ(lvds_reg) | LVDS_PORT_EN);
- if (intel_lvds->pfit_dirty) {
+ if (lvds_encoder->pfit_dirty) {
/*
* Enable automatic panel scaling so that non-native modes
* fill the screen. The panel fitter should only be
@@ -92,27 +123,26 @@ static void intel_lvds_enable(struct intel_lvds *intel_lvds)
* register description and PRM.
*/
DRM_DEBUG_KMS("applying panel-fitter: %x, %x\n",
- intel_lvds->pfit_control,
- intel_lvds->pfit_pgm_ratios);
+ lvds_encoder->pfit_control,
+ lvds_encoder->pfit_pgm_ratios);
- I915_WRITE(PFIT_PGM_RATIOS, intel_lvds->pfit_pgm_ratios);
- I915_WRITE(PFIT_CONTROL, intel_lvds->pfit_control);
- intel_lvds->pfit_dirty = false;
+ I915_WRITE(PFIT_PGM_RATIOS, lvds_encoder->pfit_pgm_ratios);
+ I915_WRITE(PFIT_CONTROL, lvds_encoder->pfit_control);
+ lvds_encoder->pfit_dirty = false;
}
I915_WRITE(ctl_reg, I915_READ(ctl_reg) | POWER_TARGET_ON);
POSTING_READ(lvds_reg);
- if (_intel_wait_for(dev,
- (I915_READ(stat_reg) & PP_ON) == 0, 1000,
- 1, "915lvds"))
- DRM_ERROR("timed out waiting for panel to power off\n");
+ if (wait_for((I915_READ(stat_reg) & PP_ON) != 0, 1000))
+ DRM_ERROR("timed out waiting for panel to power on\n");
- intel_panel_enable_backlight(dev);
+ intel_panel_enable_backlight(dev, intel_crtc->pipe);
}
-static void intel_lvds_disable(struct intel_lvds *intel_lvds)
+static void intel_disable_lvds(struct intel_encoder *encoder)
{
- struct drm_device *dev = intel_lvds->base.base.dev;
+ struct drm_device *dev = encoder->base.dev;
+ struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
struct drm_i915_private *dev_priv = dev->dev_private;
u32 ctl_reg, lvds_reg, stat_reg;
@@ -129,37 +159,23 @@ static void intel_lvds_disable(struct intel_lvds *intel_lvds)
intel_panel_disable_backlight(dev);
I915_WRITE(ctl_reg, I915_READ(ctl_reg) & ~POWER_TARGET_ON);
- if (_intel_wait_for(dev,
- (I915_READ(stat_reg) & PP_ON) == 0, 1000,
- 1, "915lvo"))
+ if (wait_for((I915_READ(stat_reg) & PP_ON) == 0, 1000))
DRM_ERROR("timed out waiting for panel to power off\n");
- if (intel_lvds->pfit_control) {
+ if (lvds_encoder->pfit_control) {
I915_WRITE(PFIT_CONTROL, 0);
- intel_lvds->pfit_dirty = true;
+ lvds_encoder->pfit_dirty = true;
}
I915_WRITE(lvds_reg, I915_READ(lvds_reg) & ~LVDS_PORT_EN);
POSTING_READ(lvds_reg);
}
-static void intel_lvds_dpms(struct drm_encoder *encoder, int mode)
-{
- struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
-
- if (mode == DRM_MODE_DPMS_ON)
- intel_lvds_enable(intel_lvds);
- else
- intel_lvds_disable(intel_lvds);
-
- /* XXX: We never power down the LVDS pairs. */
-}
-
static int intel_lvds_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
{
- struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
- struct drm_display_mode *fixed_mode = intel_lvds->fixed_mode;
+ struct intel_connector *intel_connector = to_intel_connector(connector);
+ struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
if (mode->hdisplay > fixed_mode->hdisplay)
return MODE_PANEL;
@@ -235,9 +251,10 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
{
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
- struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
- struct drm_encoder *tmp_encoder;
+ struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(encoder);
+ struct intel_connector *intel_connector =
+ &lvds_encoder->attached_connector->base;
+ struct intel_crtc *intel_crtc = lvds_encoder->base.new_crtc;
u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0;
int pipe;
@@ -247,14 +264,8 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
return false;
}
- /* Should never happen!! */
- list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list, head) {
- if (tmp_encoder != encoder && tmp_encoder->crtc == encoder->crtc) {
- DRM_ERROR("Can't enable LVDS and another "
- "encoder on the same pipe\n");
- return false;
- }
- }
+ if (intel_encoder_check_is_cloned(&lvds_encoder->base))
+ return false;
/*
* We have timings from the BIOS for the panel, put them in
@@ -262,10 +273,12 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
* with the panel scaling set up to source from the H/VDisplay
* of the original mode.
*/
- intel_fixed_panel_mode(intel_lvds->fixed_mode, adjusted_mode);
+ intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
+ adjusted_mode);
if (HAS_PCH_SPLIT(dev)) {
- intel_pch_panel_fitting(dev, intel_lvds->fitting_mode,
+ intel_pch_panel_fitting(dev,
+ intel_connector->panel.fitting_mode,
mode, adjusted_mode);
return true;
}
@@ -291,7 +304,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
drm_mode_set_crtcinfo(adjusted_mode, 0);
- switch (intel_lvds->fitting_mode) {
+ switch (intel_connector->panel.fitting_mode) {
case DRM_MODE_SCALE_CENTER:
/*
* For centered modes, we have to calculate border widths &
@@ -389,11 +402,11 @@ out:
if (INTEL_INFO(dev)->gen < 4 && dev_priv->lvds_dither)
pfit_control |= PANEL_8TO6_DITHER_ENABLE;
- if (pfit_control != intel_lvds->pfit_control ||
- pfit_pgm_ratios != intel_lvds->pfit_pgm_ratios) {
- intel_lvds->pfit_control = pfit_control;
- intel_lvds->pfit_pgm_ratios = pfit_pgm_ratios;
- intel_lvds->pfit_dirty = true;
+ if (pfit_control != lvds_encoder->pfit_control ||
+ pfit_pgm_ratios != lvds_encoder->pfit_pgm_ratios) {
+ lvds_encoder->pfit_control = pfit_control;
+ lvds_encoder->pfit_pgm_ratios = pfit_pgm_ratios;
+ lvds_encoder->pfit_dirty = true;
}
dev_priv->lvds_border_bits = border;
@@ -406,29 +419,6 @@ out:
return true;
}
-static void intel_lvds_prepare(struct drm_encoder *encoder)
-{
- struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
-
- /*
- * Prior to Ironlake, we must disable the pipe if we want to adjust
- * the panel fitter. However at all other times we can just reset
- * the registers regardless.
- */
- if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
- intel_lvds_disable(intel_lvds);
-}
-
-static void intel_lvds_commit(struct drm_encoder *encoder)
-{
- struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
-
- /* Always do a full power on as we do not know what state
- * we were left in.
- */
- intel_lvds_enable(intel_lvds);
-}
-
static void intel_lvds_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -465,14 +455,15 @@ intel_lvds_detect(struct drm_connector *connector, bool force)
*/
static int intel_lvds_get_modes(struct drm_connector *connector)
{
- struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
+ struct intel_lvds_connector *lvds_connector = to_lvds_connector(connector);
struct drm_device *dev = connector->dev;
struct drm_display_mode *mode;
- if (intel_lvds->edid)
- return drm_add_edid_modes(connector, intel_lvds->edid);
+ /* use cached edid if we have one */
+ if (lvds_connector->base.edid)
+ return drm_add_edid_modes(connector, lvds_connector->base.edid);
- mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
+ mode = drm_mode_duplicate(dev, lvds_connector->base.panel.fixed_mode);
if (mode == NULL)
return 0;
@@ -500,7 +491,7 @@ static const struct dmi_system_id intel_no_modeset_on_lid[] = {
{ } /* terminating entry */
};
-#ifdef NOTYET
+#ifdef FREEBSD_WIP
/*
* Lid events. Note the use of 'modeset_on_lid':
* - we set it on lid close, and reset it on open
@@ -513,10 +504,11 @@ static const struct dmi_system_id intel_no_modeset_on_lid[] = {
static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
void *unused)
{
- struct drm_i915_private *dev_priv =
- container_of(nb, struct drm_i915_private, lid_notifier);
- struct drm_device *dev = dev_priv->dev;
- struct drm_connector *connector = dev_priv->int_lvds_connector;
+ struct intel_lvds_connector *lvds_connector =
+ container_of(nb, struct intel_lvds_connector, lid_notifier);
+ struct drm_connector *connector = &lvds_connector->base.base;
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
if (dev->switch_power_state != DRM_SWITCH_POWER_ON)
return NOTIFY_OK;
@@ -525,9 +517,7 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
* check and update the status of LVDS connector after receiving
* the LID nofication event.
*/
- if (connector)
- connector->status = connector->funcs->detect(connector,
- false);
+ connector->status = connector->funcs->detect(connector, false);
/* Don't force modeset on machines where it causes a GPU lockup */
if (dmi_check_system(intel_no_modeset_on_lid))
@@ -543,12 +533,12 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
dev_priv->modeset_on_lid = 0;
mutex_lock(&dev->mode_config.mutex);
- drm_helper_resume_force_mode(dev);
+ intel_modeset_setup_hw_state(dev, true);
mutex_unlock(&dev->mode_config.mutex);
return NOTIFY_OK;
}
-#endif
+#endif /* FREEBSD_WIP */
/**
* intel_lvds_destroy - unregister and free LVDS structures
@@ -559,20 +549,18 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
*/
static void intel_lvds_destroy(struct drm_connector *connector)
{
- struct drm_device *dev = connector->dev;
-#if 0
- struct drm_i915_private *dev_priv = dev->dev_private;
-#endif
+ struct intel_lvds_connector *lvds_connector =
+ to_lvds_connector(connector);
+
+#ifdef FREEBSD_WIP
+ if (lvds_connector->lid_notifier.notifier_call)
+ acpi_lid_notifier_unregister(&lvds_connector->lid_notifier);
+#endif /* FREEBSD_WIP */
+
+ free(lvds_connector->base.edid, DRM_MEM_KMS);
- intel_panel_destroy_backlight(dev);
+ intel_panel_fini(&lvds_connector->base.panel);
-#if 0
- if (dev_priv->lid_notifier.notifier_call)
- acpi_lid_notifier_unregister(&dev_priv->lid_notifier);
-#endif
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
free(connector, DRM_MEM_KMS);
}
@@ -581,29 +569,31 @@ static int intel_lvds_set_property(struct drm_connector *connector,
struct drm_property *property,
uint64_t value)
{
- struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
+ struct intel_connector *intel_connector = to_intel_connector(connector);
struct drm_device *dev = connector->dev;
if (property == dev->mode_config.scaling_mode_property) {
- struct drm_crtc *crtc = intel_lvds->base.base.crtc;
+ struct drm_crtc *crtc;
if (value == DRM_MODE_SCALE_NONE) {
DRM_DEBUG_KMS("no scaling not supported\n");
return -EINVAL;
}
- if (intel_lvds->fitting_mode == value) {
+ if (intel_connector->panel.fitting_mode == value) {
/* the LVDS scaling property is not changed */
return 0;
}
- intel_lvds->fitting_mode = value;
+ intel_connector->panel.fitting_mode = value;
+
+ crtc = intel_attached_encoder(connector)->base.crtc;
if (crtc && crtc->enabled) {
/*
* If the CRTC is enabled, the display will be changed
* according to the new panel fitting mode.
*/
- drm_crtc_helper_set_mode(crtc, &crtc->mode,
- crtc->x, crtc->y, crtc->fb);
+ intel_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
}
}
@@ -611,11 +601,9 @@ static int intel_lvds_set_property(struct drm_connector *connector,
}
static const struct drm_encoder_helper_funcs intel_lvds_helper_funcs = {
- .dpms = intel_lvds_dpms,
.mode_fixup = intel_lvds_mode_fixup,
- .prepare = intel_lvds_prepare,
.mode_set = intel_lvds_mode_set,
- .commit = intel_lvds_commit,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
@@ -625,7 +613,7 @@ static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs
};
static const struct drm_connector_funcs intel_lvds_connector_funcs = {
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_connector_dpms,
.detect = intel_lvds_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_lvds_set_property,
@@ -636,7 +624,7 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
.destroy = intel_encoder_destroy,
};
-static int intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
+static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
{
DRM_INFO("Skipping LVDS initialization for %s\n", id->ident);
return 1;
@@ -757,6 +745,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
},
{
.callback = intel_no_lvds_dmi_callback,
+ .ident = "Hewlett-Packard HP t5740e Thin Client",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
.ident = "Hewlett-Packard t5745",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
@@ -779,6 +775,30 @@ static const struct dmi_system_id intel_no_lvds[] = {
DMI_MATCH(DMI_BOARD_NAME, "MS-7469"),
},
},
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Gigabyte GA-D525TUD",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
+ DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Supermicro X7SPA-H",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "X7SPA-H"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Fujitsu Esprimo Q900",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Q900"),
+ },
+ },
{ } /* terminating entry */
};
@@ -906,12 +926,16 @@ static bool intel_lvds_supported(struct drm_device *dev)
bool intel_lvds_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_lvds *intel_lvds;
+ struct intel_lvds_encoder *lvds_encoder;
struct intel_encoder *intel_encoder;
+ struct intel_lvds_connector *lvds_connector;
struct intel_connector *intel_connector;
struct drm_connector *connector;
struct drm_encoder *encoder;
struct drm_display_mode *scan; /* *modes, *bios_mode; */
+ struct drm_display_mode *fixed_mode = NULL;
+ struct edid *edid;
+ int edid_err = 0;
struct drm_crtc *crtc;
u32 lvds;
int pipe;
@@ -939,17 +963,25 @@ bool intel_lvds_init(struct drm_device *dev)
}
}
- intel_lvds = malloc(sizeof(struct intel_lvds), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
- intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ lvds_encoder = malloc(sizeof(struct intel_lvds_encoder), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!lvds_encoder)
+ return false;
+
+ lvds_connector = malloc(sizeof(struct intel_lvds_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!lvds_connector) {
+ free(lvds_encoder, DRM_MEM_KMS);
+ return false;
+ }
+
+ lvds_encoder->attached_connector = lvds_connector;
if (!HAS_PCH_SPLIT(dev)) {
- intel_lvds->pfit_control = I915_READ(PFIT_CONTROL);
+ lvds_encoder->pfit_control = I915_READ(PFIT_CONTROL);
}
- intel_encoder = &intel_lvds->base;
+ intel_encoder = &lvds_encoder->base;
encoder = &intel_encoder->base;
+ intel_connector = &lvds_connector->base;
connector = &intel_connector->base;
drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs,
DRM_MODE_CONNECTOR_LVDS);
@@ -957,12 +989,19 @@ bool intel_lvds_init(struct drm_device *dev)
drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs,
DRM_MODE_ENCODER_LVDS);
+ intel_encoder->enable = intel_enable_lvds;
+ intel_encoder->disable = intel_disable_lvds;
+ intel_encoder->get_hw_state = intel_lvds_get_hw_state;
+ intel_connector->get_hw_state = intel_connector_get_hw_state;
+
intel_connector_attach_encoder(intel_connector, intel_encoder);
intel_encoder->type = INTEL_OUTPUT_LVDS;
- intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT);
+ intel_encoder->cloneable = false;
if (HAS_PCH_SPLIT(dev))
intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ else if (IS_GEN4(dev))
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
else
intel_encoder->crtc_mask = (1 << 1);
@@ -974,14 +1013,10 @@ bool intel_lvds_init(struct drm_device *dev)
/* create the scaling mode property */
drm_mode_create_scaling_mode_property(dev);
- /*
- * the initial panel fitting mode will be FULL_SCREEN.
- */
-
drm_object_attach_property(&connector->base,
dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_ASPECT);
- intel_lvds->fitting_mode = DRM_MODE_SCALE_ASPECT;
+ intel_connector->panel.fitting_mode = DRM_MODE_SCALE_ASPECT;
/*
* LVDS discovery:
* 1) check for EDID on DDC
@@ -996,19 +1031,24 @@ bool intel_lvds_init(struct drm_device *dev)
* Attempt to get the fixed panel mode from DDC. Assume that the
* preferred mode is the right one.
*/
- intel_lvds->edid = drm_get_edid(connector,
- intel_gmbus_get_adapter(dev_priv, pin));
- if (intel_lvds->edid) {
- if (drm_add_edid_modes(connector,
- intel_lvds->edid)) {
+ edid = drm_get_edid(connector, intel_gmbus_get_adapter(dev_priv, pin));
+ if (edid) {
+ if (drm_add_edid_modes(connector, edid)) {
drm_mode_connector_update_edid_property(connector,
- intel_lvds->edid);
+ edid);
} else {
- free(intel_lvds->edid, DRM_MEM_KMS);
- intel_lvds->edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ edid = NULL;
+ edid_err = -EINVAL;
}
+ } else {
+ edid = NULL;
+ edid_err = -ENOENT;
}
- if (!intel_lvds->edid) {
+ lvds_connector->base.edid = edid;
+ lvds_connector->base.edid_err = edid_err;
+
+ if (edid_err) {
/* Didn't get an EDID, so
* Set wide sync ranges so we get all modes
* handed to valid_mode for checking
@@ -1021,22 +1061,26 @@ bool intel_lvds_init(struct drm_device *dev)
list_for_each_entry(scan, &connector->probed_modes, head) {
if (scan->type & DRM_MODE_TYPE_PREFERRED) {
- intel_lvds->fixed_mode =
- drm_mode_duplicate(dev, scan);
- intel_find_lvds_downclock(dev,
- intel_lvds->fixed_mode,
- connector);
- goto out;
+ DRM_DEBUG_KMS("using preferred mode from EDID: ");
+ drm_mode_debug_printmodeline(scan);
+
+ fixed_mode = drm_mode_duplicate(dev, scan);
+ if (fixed_mode) {
+ intel_find_lvds_downclock(dev, fixed_mode,
+ connector);
+ goto out;
+ }
}
}
/* Failed to get EDID, what about VBT? */
if (dev_priv->lfp_lvds_vbt_mode) {
- intel_lvds->fixed_mode =
- drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
- if (intel_lvds->fixed_mode) {
- intel_lvds->fixed_mode->type |=
- DRM_MODE_TYPE_PREFERRED;
+ DRM_DEBUG_KMS("using mode from VBT: ");
+ drm_mode_debug_printmodeline(dev_priv->lfp_lvds_vbt_mode);
+
+ fixed_mode = drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
+ if (fixed_mode) {
+ fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
goto out;
}
}
@@ -1056,71 +1100,51 @@ bool intel_lvds_init(struct drm_device *dev)
crtc = intel_get_crtc_for_pipe(dev, pipe);
if (crtc && (lvds & LVDS_PORT_EN)) {
- intel_lvds->fixed_mode = intel_crtc_mode_get(dev, crtc);
- if (intel_lvds->fixed_mode) {
- intel_lvds->fixed_mode->type |=
- DRM_MODE_TYPE_PREFERRED;
+ fixed_mode = intel_crtc_mode_get(dev, crtc);
+ if (fixed_mode) {
+ DRM_DEBUG_KMS("using current (BIOS) mode: ");
+ drm_mode_debug_printmodeline(fixed_mode);
+ fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
goto out;
}
}
/* If we still don't have a mode after all that, give up. */
- if (!intel_lvds->fixed_mode)
+ if (!fixed_mode)
goto failed;
out:
+ /*
+ * Unlock registers and just
+ * leave them unlocked
+ */
if (HAS_PCH_SPLIT(dev)) {
- u32 pwm;
-
- pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0;
-
- /* make sure PWM is enabled and locked to the LVDS pipe */
- pwm = I915_READ(BLC_PWM_CPU_CTL2);
- if (pipe == 0 && (pwm & PWM_PIPE_B))
- I915_WRITE(BLC_PWM_CPU_CTL2, pwm & ~PWM_ENABLE);
- if (pipe)
- pwm |= PWM_PIPE_B;
- else
- pwm &= ~PWM_PIPE_B;
- I915_WRITE(BLC_PWM_CPU_CTL2, pwm | PWM_ENABLE);
-
- pwm = I915_READ(BLC_PWM_PCH_CTL1);
- pwm |= PWM_PCH_ENABLE;
- I915_WRITE(BLC_PWM_PCH_CTL1, pwm);
- /*
- * Unlock registers and just
- * leave them unlocked
- */
I915_WRITE(PCH_PP_CONTROL,
I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
} else {
- /*
- * Unlock registers and just
- * leave them unlocked
- */
I915_WRITE(PP_CONTROL,
I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
}
-#ifdef NOTYET
- dev_priv->lid_notifier.notifier_call = intel_lid_notify;
- if (acpi_lid_notifier_register(&dev_priv->lid_notifier)) {
+#ifdef FREEBSD_WIP
+ lvds_connector->lid_notifier.notifier_call = intel_lid_notify;
+ if (acpi_lid_notifier_register(&lvds_connector->lid_notifier)) {
DRM_DEBUG_KMS("lid notifier registration failed\n");
- dev_priv->lid_notifier.notifier_call = NULL;
+ lvds_connector->lid_notifier.notifier_call = NULL;
}
-#endif
- /* keep the LVDS connector */
- dev_priv->int_lvds_connector = connector;
-#if 0
- drm_sysfs_connector_add(connector);
-#endif
- intel_panel_setup_backlight(dev);
+#endif /* FREEBSD_WIP */
+
+ intel_panel_init(&intel_connector->panel, fixed_mode);
+ intel_panel_setup_backlight(connector);
+
return true;
failed:
DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
drm_connector_cleanup(connector);
drm_encoder_cleanup(encoder);
- free(intel_lvds, DRM_MEM_KMS);
- free(intel_connector, DRM_MEM_KMS);
+ if (fixed_mode)
+ drm_mode_destroy(dev, fixed_mode);
+ free(lvds_encoder, DRM_MEM_KMS);
+ free(lvds_connector, DRM_MEM_KMS);
return false;
}
diff --git a/sys/dev/drm2/i915/intel_modes.c b/sys/dev/drm2/i915/intel_modes.c
index d061d08..5ff9591 100644
--- a/sys/dev/drm2/i915/intel_modes.c
+++ b/sys/dev/drm2/i915/intel_modes.c
@@ -27,39 +27,26 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
-#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/i915_drv.h>
#include <dev/iicbus/iiconf.h>
/**
- * intel_ddc_probe
- *
+ * intel_connector_update_modes - update connector from edid
+ * @connector: DRM connector device to use
+ * @edid: previously read EDID information
*/
-bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus)
+int intel_connector_update_modes(struct drm_connector *connector,
+ struct edid *edid)
{
- struct drm_i915_private *dev_priv = intel_encoder->base.dev->dev_private;
- u8 out_buf[] = { 0x0, 0x0};
- u8 buf[2];
- struct iic_msg msgs[] = {
- {
- .slave = DDC_ADDR << 1,
- .flags = IIC_M_WR,
- .len = 1,
- .buf = out_buf,
- },
- {
- .slave = DDC_ADDR << 1,
- .flags = IIC_M_RD,
- .len = 1,
- .buf = buf,
- }
- };
-
- return (iicbus_transfer(intel_gmbus_get_adapter(dev_priv, ddc_bus),
- msgs, 2) == 0/* XXXKIB 2*/);
+ int ret;
+
+ drm_mode_connector_update_edid_property(connector, edid);
+ ret = drm_add_edid_modes(connector, edid);
+ drm_edid_to_eld(connector, edid);
+
+ return ret;
}
/**
@@ -69,19 +56,18 @@ bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus)
*
* Fetch the EDID information from @connector using the DDC bus.
*/
-int
-intel_ddc_get_modes(struct drm_connector *connector, device_t adapter)
+int intel_ddc_get_modes(struct drm_connector *connector,
+ device_t adapter)
{
struct edid *edid;
- int ret = 0;
+ int ret;
edid = drm_get_edid(connector, adapter);
- if (edid) {
- drm_mode_connector_update_edid_property(connector, edid);
- ret = drm_add_edid_modes(connector, edid);
- drm_edid_to_eld(connector, edid);
- free(edid, DRM_MEM_KMS);
- }
+ if (!edid)
+ return 0;
+
+ ret = intel_connector_update_modes(connector, edid);
+ free(edid, DRM_MEM_KMS);
return ret;
}
@@ -129,9 +115,9 @@ intel_attach_broadcast_rgb_property(struct drm_connector *connector)
prop = dev_priv->broadcast_rgb_property;
if (prop == NULL) {
prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
- "Broadcast RGB",
- broadcast_rgb_names,
- ARRAY_SIZE(broadcast_rgb_names));
+ "Broadcast RGB",
+ broadcast_rgb_names,
+ ARRAY_SIZE(broadcast_rgb_names));
if (prop == NULL)
return;
diff --git a/sys/dev/drm2/i915/intel_opregion.c b/sys/dev/drm2/i915/intel_opregion.c
index 397c559..7e6cb91 100644
--- a/sys/dev/drm2/i915/intel_opregion.c
+++ b/sys/dev/drm2/i915/intel_opregion.c
@@ -28,10 +28,13 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <dev/drm2/drmP.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
+
#include <contrib/dev/acpica/include/acpi.h>
#include <contrib/dev/acpica/include/accommon.h>
#include <dev/acpica/acpivar.h>
@@ -147,13 +150,15 @@ struct opregion_asle {
#define ACPI_DIGITAL_OUTPUT (3<<8)
#define ACPI_LVDS_OUTPUT (4<<8)
-#if defined(CONFIG_ACPI)
+#ifdef CONFIG_ACPI
static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct opregion_asle *asle = dev_priv->opregion.asle;
+ struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
u32 max;
+ DRM_DEBUG_DRIVER("bclp = 0x%08x\n", bclp);
+
if (!(bclp & ASLE_BCLP_VALID))
return ASLE_BACKLIGHT_FAILED;
@@ -163,7 +168,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
max = intel_panel_get_max_backlight(dev);
intel_panel_set_backlight(dev, bclp * max / 255);
- asle->cblv = (bclp*0x64)/0xff | ASLE_CBLV_VALID;
+ iowrite32((bclp*0x64)/0xff | ASLE_CBLV_VALID, &asle->cblv);
return 0;
}
@@ -200,71 +205,71 @@ static u32 asle_set_pfit(struct drm_device *dev, u32 pfit)
void intel_opregion_asle_intr(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct opregion_asle *asle = dev_priv->opregion.asle;
+ struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
u32 asle_stat = 0;
u32 asle_req;
if (!asle)
return;
- asle_req = asle->aslc & ASLE_REQ_MSK;
+ asle_req = ioread32(&asle->aslc) & ASLE_REQ_MSK;
if (!asle_req) {
- DRM_DEBUG("non asle set request??\n");
+ DRM_DEBUG_DRIVER("non asle set request??\n");
return;
}
if (asle_req & ASLE_SET_ALS_ILLUM)
- asle_stat |= asle_set_als_illum(dev, asle->alsi);
+ asle_stat |= asle_set_als_illum(dev, ioread32(&asle->alsi));
if (asle_req & ASLE_SET_BACKLIGHT)
- asle_stat |= asle_set_backlight(dev, asle->bclp);
+ asle_stat |= asle_set_backlight(dev, ioread32(&asle->bclp));
if (asle_req & ASLE_SET_PFIT)
- asle_stat |= asle_set_pfit(dev, asle->pfit);
+ asle_stat |= asle_set_pfit(dev, ioread32(&asle->pfit));
if (asle_req & ASLE_SET_PWM_FREQ)
- asle_stat |= asle_set_pwm_freq(dev, asle->pfmb);
+ asle_stat |= asle_set_pwm_freq(dev, ioread32(&asle->pfmb));
- asle->aslc = asle_stat;
+ iowrite32(asle_stat, &asle->aslc);
}
void intel_opregion_gse_intr(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct opregion_asle *asle = dev_priv->opregion.asle;
+ struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
u32 asle_stat = 0;
u32 asle_req;
if (!asle)
return;
- asle_req = asle->aslc & ASLE_REQ_MSK;
+ asle_req = ioread32(&asle->aslc) & ASLE_REQ_MSK;
if (!asle_req) {
- DRM_DEBUG("non asle set request??\n");
+ DRM_DEBUG_DRIVER("non asle set request??\n");
return;
}
if (asle_req & ASLE_SET_ALS_ILLUM) {
- DRM_DEBUG("Illum is not supported\n");
+ DRM_DEBUG_DRIVER("Illum is not supported\n");
asle_stat |= ASLE_ALS_ILLUM_FAILED;
}
if (asle_req & ASLE_SET_BACKLIGHT)
- asle_stat |= asle_set_backlight(dev, asle->bclp);
+ asle_stat |= asle_set_backlight(dev, ioread32(&asle->bclp));
if (asle_req & ASLE_SET_PFIT) {
- DRM_DEBUG("Pfit is not supported\n");
+ DRM_DEBUG_DRIVER("Pfit is not supported\n");
asle_stat |= ASLE_PFIT_FAILED;
}
if (asle_req & ASLE_SET_PWM_FREQ) {
- DRM_DEBUG("PWM freq is not supported\n");
+ DRM_DEBUG_DRIVER("PWM freq is not supported\n");
asle_stat |= ASLE_PWM_FREQ_FAILED;
}
- asle->aslc = asle_stat;
+ iowrite32(asle_stat, &asle->aslc);
}
#define ASLE_ALS_EN (1<<0)
#define ASLE_BLC_EN (1<<1)
@@ -274,15 +279,16 @@ void intel_opregion_gse_intr(struct drm_device *dev)
void intel_opregion_enable_asle(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct opregion_asle *asle = dev_priv->opregion.asle;
+ struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
if (asle) {
if (IS_MOBILE(dev))
intel_enable_asle(dev);
- asle->tche = ASLE_ALS_EN | ASLE_BLC_EN | ASLE_PFIT_EN |
- ASLE_PFMB_EN;
- asle->ardy = 1;
+ iowrite32(ASLE_ALS_EN | ASLE_BLC_EN | ASLE_PFIT_EN |
+ ASLE_PFMB_EN,
+ &asle->tche);
+ iowrite32(1, &asle->ardy);
}
}
@@ -292,7 +298,7 @@ void intel_opregion_enable_asle(struct drm_device *dev)
static struct intel_opregion *system_opregion;
-#if 0
+#ifdef FREEBSD_WIP
static int intel_opregion_video_event(struct notifier_block *nb,
unsigned long val, void *data)
{
@@ -300,7 +306,8 @@ static int intel_opregion_video_event(struct notifier_block *nb,
either a docking event, lid switch or display switch request. In
Linux, these are handled by the dock, button and video drivers.
*/
- struct opregion_acpi *acpi;
+
+ struct opregion_acpi __iomem *acpi;
struct acpi_bus_event *event = data;
int ret = NOTIFY_OK;
@@ -312,10 +319,11 @@ static int intel_opregion_video_event(struct notifier_block *nb,
acpi = system_opregion->acpi;
- if (event->type == 0x80 && !(acpi->cevt & 0x1))
+ if (event->type == 0x80 &&
+ (ioread32(&acpi->cevt) & 1) == 0)
ret = NOTIFY_BAD;
- acpi->csts = 0;
+ iowrite32(0, &acpi->csts);
return ret;
}
@@ -323,7 +331,7 @@ static int intel_opregion_video_event(struct notifier_block *nb,
static struct notifier_block intel_opregion_notifier = {
.notifier_call = intel_opregion_video_event,
};
-#endif
+#endif /* FREEBSD_WIP */
/*
* Initialise the DIDL field in opregion. This passes a list of devices to
@@ -345,9 +353,10 @@ static void intel_didl_outputs(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_opregion *opregion = &dev_priv->opregion;
struct drm_connector *connector;
+ ACPI_HANDLE handle, acpi_cdev, acpi_video_bus = NULL;
u32 device_id;
- ACPI_HANDLE handle, acpi_video_bus, acpi_cdev;
ACPI_STATUS status;
+ u32 temp;
int i = 0;
handle = acpi_get_handle(dev->dev);
@@ -358,7 +367,6 @@ static void intel_didl_outputs(struct drm_device *dev)
acpi_video_bus = handle;
else {
acpi_cdev = NULL;
- acpi_video_bus = NULL;
while (AcpiGetNextObject(ACPI_TYPE_DEVICE, handle, acpi_cdev,
&acpi_cdev) != AE_NOT_FOUND) {
if (acpi_is_video_device(acpi_cdev)) {
@@ -366,14 +374,6 @@ static void intel_didl_outputs(struct drm_device *dev)
break;
}
}
-#if 0
- list_for_each_entry(acpi_cdev, &acpi_dev->children, node) {
- if (acpi_is_video_device(acpi_cdev)) {
- acpi_video_bus = acpi_cdev;
- break;
- }
- }
-#endif
}
if (!acpi_video_bus) {
@@ -388,37 +388,22 @@ static void intel_didl_outputs(struct drm_device *dev)
device_printf(dev->dev, "More than 8 outputs detected\n");
return;
}
- status = acpi_GetInteger(acpi_cdev, "_ADR", &device_id);
- if (ACPI_SUCCESS(status)) {
- if (!device_id)
- goto blind_set;
- opregion->acpi->didl[i] = (u32)(device_id & 0x0f0f);
- i++;
- }
- }
-#if 0
- list_for_each_entry(acpi_cdev, &acpi_video_bus->children, node) {
- if (i >= 8) {
- dev_printk(KERN_ERR, &dev->pdev->dev,
- "More than 8 outputs detected\n");
- return;
- }
status =
- acpi_evaluate_integer(acpi_cdev->handle, "_ADR",
- NULL, &device_id);
+ acpi_GetInteger(acpi_cdev, "_ADR",
+ &device_id);
if (ACPI_SUCCESS(status)) {
if (!device_id)
goto blind_set;
- opregion->acpi->didl[i] = (u32)(device_id & 0x0f0f);
+ iowrite32((u32)(device_id & 0x0f0f),
+ &opregion->acpi->didl[i]);
i++;
}
}
-#endif
end:
/* If fewer than 8 outputs, the list must be null terminated */
if (i < 8)
- opregion->acpi->didl[i] = 0;
+ iowrite32(0, &opregion->acpi->didl[i]);
return;
blind_set:
@@ -452,7 +437,9 @@ blind_set:
output_type = ACPI_LVDS_OUTPUT;
break;
}
- opregion->acpi->didl[i] |= (1<<31) | output_type | i;
+ temp = ioread32(&opregion->acpi->didl[i]);
+ iowrite32(temp | (1<<31) | output_type | i,
+ &opregion->acpi->didl[i]);
i++;
}
goto end;
@@ -472,8 +459,8 @@ static void intel_setup_cadls(struct drm_device *dev)
* display switching hotkeys. Just like DIDL, CADL is NULL-terminated if
* there are less than eight devices. */
do {
- disp_id = opregion->acpi->didl[i];
- opregion->acpi->cadl[i] = disp_id;
+ disp_id = ioread32(&opregion->acpi->didl[i]);
+ iowrite32(disp_id, &opregion->acpi->cadl[i]);
} while (++i < 8 && disp_id != 0);
}
@@ -494,13 +481,13 @@ void intel_opregion_init(struct drm_device *dev)
/* Notify BIOS we are ready to handle ACPI video ext notifs.
* Right now, all the events are handled by the ACPI video module.
* We don't actually need to do anything with them. */
- opregion->acpi->csts = 0;
- opregion->acpi->drdy = 1;
+ iowrite32(0, &opregion->acpi->csts);
+ iowrite32(1, &opregion->acpi->drdy);
system_opregion = opregion;
-#if 0
+#ifdef FREEBSD_WIP
register_acpi_notifier(&intel_opregion_notifier);
-#endif
+#endif /* FREEBSD_WIP */
}
if (opregion->asle)
@@ -516,12 +503,12 @@ void intel_opregion_fini(struct drm_device *dev)
return;
if (opregion->acpi) {
- opregion->acpi->drdy = 0;
+ iowrite32(0, &opregion->acpi->drdy);
system_opregion = NULL;
-#if 0
+#ifdef FREEBSD_WIP
unregister_acpi_notifier(&intel_opregion_notifier);
-#endif
+#endif /* FREEBSD_WIP */
}
/* just clear all opregion memory pointers now */
@@ -532,45 +519,21 @@ void intel_opregion_fini(struct drm_device *dev)
opregion->asle = NULL;
opregion->vbt = NULL;
}
-#else
-void
-intel_opregion_init(struct drm_device *dev)
-{
-}
-
-void
-intel_opregion_fini(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv;
- struct intel_opregion *opregion;
-
- dev_priv = dev->dev_private;
- opregion = &dev_priv->opregion;
-
- if (opregion->header == NULL)
- return;
-
- pmap_unmapdev((vm_offset_t)opregion->header, OPREGION_SIZE);
- opregion->header = NULL;
- opregion->acpi = NULL;
- opregion->swsci = NULL;
- opregion->asle = NULL;
- opregion->vbt = NULL;
-}
#endif
int intel_opregion_setup(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_opregion *opregion = &dev_priv->opregion;
- char *base;
+ void __iomem *base;
u32 asls, mboxes;
+ char buf[sizeof(OPREGION_SIGNATURE)];
int err = 0;
- asls = pci_read_config(dev->dev, PCI_ASLS, 4);
- DRM_DEBUG("graphic opregion physical addr: 0x%x\n", asls);
+ pci_read_config_dword(dev->dev, PCI_ASLS, &asls);
+ DRM_DEBUG_DRIVER("graphic opregion physical addr: 0x%x\n", asls);
if (asls == 0) {
- DRM_DEBUG("ACPI OpRegion not supported!\n");
+ DRM_DEBUG_DRIVER("ACPI OpRegion not supported!\n");
return -ENOTSUP;
}
@@ -578,31 +541,33 @@ int intel_opregion_setup(struct drm_device *dev)
if (!base)
return -ENOMEM;
- if (memcmp(base, OPREGION_SIGNATURE, 16)) {
- DRM_DEBUG("opregion signature mismatch\n");
+ memcpy_fromio(buf, base, sizeof(buf));
+
+ if (memcmp(buf, OPREGION_SIGNATURE, 16)) {
+ DRM_DEBUG_DRIVER("opregion signature mismatch\n");
err = -EINVAL;
goto err_out;
}
opregion->header = (struct opregion_header *)base;
- opregion->vbt = base + OPREGION_VBT_OFFSET;
+ opregion->vbt = (char *)base + OPREGION_VBT_OFFSET;
- opregion->lid_state = (u32 *)(base + ACPI_CLID);
+ opregion->lid_state = (u32 *)((char *)base + ACPI_CLID);
mboxes = opregion->header->mboxes;
if (mboxes & MBOX_ACPI) {
- DRM_DEBUG("Public ACPI methods supported\n");
- opregion->acpi = (struct opregion_acpi *)(base +
+ DRM_DEBUG_DRIVER("Public ACPI methods supported\n");
+ opregion->acpi = (struct opregion_acpi *)((char *)base +
OPREGION_ACPI_OFFSET);
}
if (mboxes & MBOX_SWSCI) {
- DRM_DEBUG("SWSCI supported\n");
- opregion->swsci = (struct opregion_swsci *)(base +
+ DRM_DEBUG_DRIVER("SWSCI supported\n");
+ opregion->swsci = (struct opregion_swsci *)((char *)base +
OPREGION_SWSCI_OFFSET);
}
if (mboxes & MBOX_ASLE) {
- DRM_DEBUG("ASLE supported\n");
- opregion->asle = (struct opregion_asle *)(base +
+ DRM_DEBUG_DRIVER("ASLE supported\n");
+ opregion->asle = (struct opregion_asle *)((char *)base +
OPREGION_ASLE_OFFSET);
}
diff --git a/sys/dev/drm2/i915/intel_overlay.c b/sys/dev/drm2/i915/intel_overlay.c
index 349a74f..f526633 100644
--- a/sys/dev/drm2/i915/intel_overlay.c
+++ b/sys/dev/drm2/i915/intel_overlay.c
@@ -25,12 +25,10 @@
*
* Derived from Xorg ddx, xf86-video-intel, src/i830_video.c
*/
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/i915_reg.h>
@@ -191,46 +189,44 @@ struct intel_overlay {
void (*flip_tail)(struct intel_overlay *);
};
-static struct overlay_registers *
+static struct overlay_registers __iomem *
intel_overlay_map_regs(struct intel_overlay *overlay)
{
- struct overlay_registers *regs;
+ drm_i915_private_t *dev_priv = overlay->dev->dev_private;
+ struct overlay_registers __iomem *regs;
- if (OVERLAY_NEEDS_PHYSICAL(overlay->dev)) {
- regs = overlay->reg_bo->phys_obj->handle->vaddr;
- } else {
- regs = pmap_mapdev_attr(overlay->dev->agp->base +
+ if (OVERLAY_NEEDS_PHYSICAL(overlay->dev))
+ regs = (struct overlay_registers __iomem *)overlay->reg_bo->phys_obj->handle->vaddr;
+ else
+ regs = pmap_mapdev_attr(dev_priv->mm.gtt_base_addr +
overlay->reg_bo->gtt_offset, PAGE_SIZE,
PAT_WRITE_COMBINING);
- }
- return (regs);
+
+ return regs;
}
static void intel_overlay_unmap_regs(struct intel_overlay *overlay,
- struct overlay_registers *regs)
+ struct overlay_registers __iomem *regs)
{
if (!OVERLAY_NEEDS_PHYSICAL(overlay->dev))
pmap_unmapdev((vm_offset_t)regs, PAGE_SIZE);
}
static int intel_overlay_do_wait_request(struct intel_overlay *overlay,
- struct drm_i915_gem_request *request,
void (*tail)(struct intel_overlay *))
{
struct drm_device *dev = overlay->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
- KASSERT(!overlay->last_flip_req, ("Overlay already has flip req"));
- ret = i915_add_request(ring, NULL, request);
- if (ret) {
- free(request, DRM_I915_GEM);
+ BUG_ON(overlay->last_flip_req);
+ ret = i915_add_request(ring, NULL, &overlay->last_flip_req);
+ if (ret)
return ret;
- }
- overlay->last_flip_req = request->seqno;
+
overlay->flip_tail = tail;
- ret = i915_wait_request(ring, overlay->last_flip_req);
+ ret = i915_wait_seqno(ring, overlay->last_flip_req);
if (ret)
return ret;
i915_gem_retire_requests(dev);
@@ -239,80 +235,22 @@ static int intel_overlay_do_wait_request(struct intel_overlay *overlay,
return 0;
}
-/* Workaround for i830 bug where pipe a must be enable to change control regs */
-static int
-i830_activate_pipe_a(struct drm_device *dev)
-{
- drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_crtc *crtc;
- struct drm_crtc_helper_funcs *crtc_funcs;
- struct drm_display_mode vesa_640x480 = {
- DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
- 752, 800, 0, 480, 489, 492, 525, 0,
- DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC)
- }, *mode;
-
- crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[0]);
- if (crtc->dpms_mode == DRM_MODE_DPMS_ON)
- return 0;
-
- /* most i8xx have pipe a forced on, so don't trust dpms mode */
- if (I915_READ(_PIPEACONF) & PIPECONF_ENABLE)
- return 0;
-
- crtc_funcs = crtc->base.helper_private;
- if (crtc_funcs->dpms == NULL)
- return 0;
-
- DRM_DEBUG_DRIVER("Enabling pipe A in order to enable overlay\n");
-
- mode = drm_mode_duplicate(dev, &vesa_640x480);
-
- if (!drm_crtc_helper_set_mode(&crtc->base, mode,
- crtc->base.x, crtc->base.y,
- crtc->base.fb))
- return 0;
-
- crtc_funcs->dpms(&crtc->base, DRM_MODE_DPMS_ON);
- return 1;
-}
-
-static void
-i830_deactivate_pipe_a(struct drm_device *dev)
-{
- drm_i915_private_t *dev_priv = dev->dev_private;
- struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[0];
- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-
- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
-}
-
/* overlay needs to be disable in OCMD reg */
static int intel_overlay_on(struct intel_overlay *overlay)
{
struct drm_device *dev = overlay->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
- struct drm_i915_gem_request *request;
- int pipe_a_quirk = 0;
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
- KASSERT(!overlay->active, ("Overlay is active"));
+ BUG_ON(overlay->active);
overlay->active = 1;
- if (IS_I830(dev)) {
- pipe_a_quirk = i830_activate_pipe_a(dev);
- if (pipe_a_quirk < 0)
- return pipe_a_quirk;
- }
-
- request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ WARN_ON(IS_I830(dev) && !(dev_priv->quirks & QUIRK_PIPEA_FORCE));
ret = intel_ring_begin(ring, 4);
- if (ret) {
- free(request, DRM_I915_GEM);
- goto out;
- }
+ if (ret)
+ return ret;
intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_ON);
intel_ring_emit(ring, overlay->flip_addr | OFC_UPDATE);
@@ -320,12 +258,7 @@ static int intel_overlay_on(struct intel_overlay *overlay)
intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring);
- ret = intel_overlay_do_wait_request(overlay, request, NULL);
-out:
- if (pipe_a_quirk)
- i830_deactivate_pipe_a(dev);
-
- return ret;
+ return intel_overlay_do_wait_request(overlay, NULL);
}
/* overlay needs to be enabled in OCMD reg */
@@ -334,15 +267,12 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
{
struct drm_device *dev = overlay->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
- struct drm_i915_gem_request *request;
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
u32 flip_addr = overlay->flip_addr;
u32 tmp;
int ret;
- KASSERT(overlay->active, ("Overlay not active"));
-
- request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ BUG_ON(!overlay->active);
if (load_polyphase_filter)
flip_addr |= OFC_UPDATE;
@@ -353,22 +283,14 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
DRM_DEBUG("overlay underrun, DOVSTA: %x\n", tmp);
ret = intel_ring_begin(ring, 2);
- if (ret) {
- free(request, DRM_I915_GEM);
+ if (ret)
return ret;
- }
+
intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE);
intel_ring_emit(ring, flip_addr);
intel_ring_advance(ring);
- ret = i915_add_request(ring, NULL, request);
- if (ret) {
- free(request, DRM_I915_GEM);
- return ret;
- }
-
- overlay->last_flip_req = request->seqno;
- return 0;
+ return i915_add_request(ring, NULL, &overlay->last_flip_req);
}
static void intel_overlay_release_old_vid_tail(struct intel_overlay *overlay)
@@ -386,7 +308,7 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)
struct drm_i915_gem_object *obj = overlay->vid_bo;
/* never have the overlay hw on without showing a frame */
- KASSERT(overlay->vid_bo != NULL, ("No vid_bo"));
+ BUG_ON(!overlay->vid_bo);
i915_gem_object_unpin(obj);
drm_gem_object_unreference(&obj->base);
@@ -402,14 +324,11 @@ static int intel_overlay_off(struct intel_overlay *overlay)
{
struct drm_device *dev = overlay->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
u32 flip_addr = overlay->flip_addr;
- struct drm_i915_gem_request *request;
int ret;
- KASSERT(overlay->active, ("Overlay is not active"));
-
- request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ BUG_ON(!overlay->active);
/* According to intel docs the overlay hw may hang (when switching
* off) without loading the filter coeffs. It is however unclear whether
@@ -418,22 +337,28 @@ static int intel_overlay_off(struct intel_overlay *overlay)
flip_addr |= OFC_UPDATE;
ret = intel_ring_begin(ring, 6);
- if (ret) {
- free(request, DRM_I915_GEM);
+ if (ret)
return ret;
- }
+
/* wait for overlay to go idle */
intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE);
intel_ring_emit(ring, flip_addr);
intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
/* turn overlay off */
- intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
- intel_ring_emit(ring, flip_addr);
- intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ if (IS_I830(dev)) {
+ /* Workaround: Don't disable the overlay fully, since otherwise
+ * it dies on the next OVERLAY_ON cmd. */
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_emit(ring, MI_NOOP);
+ } else {
+ intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
+ intel_ring_emit(ring, flip_addr);
+ intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ }
intel_ring_advance(ring);
- return intel_overlay_do_wait_request(overlay, request,
- intel_overlay_off_tail);
+ return intel_overlay_do_wait_request(overlay, intel_overlay_off_tail);
}
/* recover from an interruption due to a signal
@@ -442,13 +367,13 @@ static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)
{
struct drm_device *dev = overlay->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
if (overlay->last_flip_req == 0)
return 0;
- ret = i915_wait_request(ring, overlay->last_flip_req);
+ ret = i915_wait_seqno(ring, overlay->last_flip_req);
if (ret)
return ret;
i915_gem_retire_requests(dev);
@@ -468,7 +393,7 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
{
struct drm_device *dev = overlay->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
int ret;
/* Only wait if there is actually an old frame to release to
@@ -478,22 +403,16 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
return 0;
if (I915_READ(ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT) {
- struct drm_i915_gem_request *request;
-
/* synchronous slowpath */
- request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
-
ret = intel_ring_begin(ring, 2);
- if (ret) {
- free(request, DRM_I915_GEM);
+ if (ret)
return ret;
- }
intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring);
- ret = intel_overlay_do_wait_request(overlay, request,
+ ret = intel_overlay_do_wait_request(overlay,
intel_overlay_release_old_vid_tail);
if (ret)
return ret;
@@ -619,14 +538,15 @@ static const u16 uv_static_hcoeffs[N_HORIZ_UV_TAPS * N_PHASES] = {
0x3000, 0x0800, 0x3000
};
-static void update_polyphase_filter(struct overlay_registers *regs)
+static void update_polyphase_filter(struct overlay_registers __iomem *regs)
{
- memcpy(regs->Y_HCOEFS, y_static_hcoeffs, sizeof(y_static_hcoeffs));
- memcpy(regs->UV_HCOEFS, uv_static_hcoeffs, sizeof(uv_static_hcoeffs));
+ memcpy_toio(regs->Y_HCOEFS, y_static_hcoeffs, sizeof(y_static_hcoeffs));
+ memcpy_toio(regs->UV_HCOEFS, uv_static_hcoeffs,
+ sizeof(uv_static_hcoeffs));
}
static bool update_scaling_factors(struct intel_overlay *overlay,
- struct overlay_registers *regs,
+ struct overlay_registers __iomem *regs,
struct put_image_params *params)
{
/* fixed point with a 12 bit shift */
@@ -665,16 +585,19 @@ static bool update_scaling_factors(struct intel_overlay *overlay,
overlay->old_xscale = xscale;
overlay->old_yscale = yscale;
- regs->YRGBSCALE = (((yscale & FRACT_MASK) << 20) |
- ((xscale >> FP_SHIFT) << 16) |
- ((xscale & FRACT_MASK) << 3));
+ iowrite32(((yscale & FRACT_MASK) << 20) |
+ ((xscale >> FP_SHIFT) << 16) |
+ ((xscale & FRACT_MASK) << 3),
+ &regs->YRGBSCALE);
- regs->UVSCALE = (((yscale_UV & FRACT_MASK) << 20) |
- ((xscale_UV >> FP_SHIFT) << 16) |
- ((xscale_UV & FRACT_MASK) << 3));
+ iowrite32(((yscale_UV & FRACT_MASK) << 20) |
+ ((xscale_UV >> FP_SHIFT) << 16) |
+ ((xscale_UV & FRACT_MASK) << 3),
+ &regs->UVSCALE);
- regs->UVSCALEV = ((((yscale >> FP_SHIFT) << 16) |
- ((yscale_UV >> FP_SHIFT) << 0)));
+ iowrite32((((yscale >> FP_SHIFT) << 16) |
+ ((yscale_UV >> FP_SHIFT) << 0)),
+ &regs->UVSCALEV);
if (scale_changed)
update_polyphase_filter(regs);
@@ -683,30 +606,32 @@ static bool update_scaling_factors(struct intel_overlay *overlay,
}
static void update_colorkey(struct intel_overlay *overlay,
- struct overlay_registers *regs)
+ struct overlay_registers __iomem *regs)
{
u32 key = overlay->color_key;
switch (overlay->crtc->base.fb->bits_per_pixel) {
case 8:
- regs->DCLRKV = 0;
- regs->DCLRKM = CLK_RGB8I_MASK | DST_KEY_ENABLE;
+ iowrite32(0, &regs->DCLRKV);
+ iowrite32(CLK_RGB8I_MASK | DST_KEY_ENABLE, &regs->DCLRKM);
break;
case 16:
if (overlay->crtc->base.fb->depth == 15) {
- regs->DCLRKV = RGB15_TO_COLORKEY(key);
- regs->DCLRKM = CLK_RGB15_MASK | DST_KEY_ENABLE;
+ iowrite32(RGB15_TO_COLORKEY(key), &regs->DCLRKV);
+ iowrite32(CLK_RGB15_MASK | DST_KEY_ENABLE,
+ &regs->DCLRKM);
} else {
- regs->DCLRKV = RGB16_TO_COLORKEY(key);
- regs->DCLRKM = CLK_RGB16_MASK | DST_KEY_ENABLE;
+ iowrite32(RGB16_TO_COLORKEY(key), &regs->DCLRKV);
+ iowrite32(CLK_RGB16_MASK | DST_KEY_ENABLE,
+ &regs->DCLRKM);
}
break;
case 24:
case 32:
- regs->DCLRKV = key;
- regs->DCLRKM = CLK_RGB24_MASK | DST_KEY_ENABLE;
+ iowrite32(key, &regs->DCLRKV);
+ iowrite32(CLK_RGB24_MASK | DST_KEY_ENABLE, &regs->DCLRKM);
break;
}
}
@@ -756,24 +681,21 @@ static u32 overlay_cmd_reg(struct put_image_params *params)
return cmd;
}
-static u32
-max_u32(u32 a, u32 b)
-{
-
- return (a > b ? a : b);
-}
-
static int intel_overlay_do_put_image(struct intel_overlay *overlay,
struct drm_i915_gem_object *new_bo,
struct put_image_params *params)
{
int ret, tmp_width;
- struct overlay_registers *regs;
+ struct overlay_registers __iomem *regs;
bool scale_changed = false;
+#ifdef INVARIANTS
+ struct drm_device *dev = overlay->dev;
+#endif
u32 swidth, swidthsw, sheight, ostride;
- KASSERT(overlay != NULL, ("No overlay ?"));
- DRM_LOCK_ASSERT(overlay->dev);
+ DRM_LOCK_ASSERT(dev);
+ sx_assert(&dev->mode_config.mutex, SA_XLOCKED);
+ BUG_ON(!overlay);
ret = intel_overlay_release_old_vid(overlay);
if (ret != 0)
@@ -781,7 +703,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
ret = i915_gem_object_pin_to_display_plane(new_bo, 0, NULL);
if (ret != 0)
- goto out_unpin;
+ return ret;
ret = i915_gem_object_put_fence(new_bo);
if (ret)
@@ -799,7 +721,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
oconfig |= OCONF_CSC_MODE_BT709;
oconfig |= overlay->crtc->pipe == 0 ?
OCONF_PIPE_A : OCONF_PIPE_B;
- regs->OCONFIG = oconfig;
+ iowrite32(oconfig, &regs->OCONFIG);
intel_overlay_unmap_regs(overlay, regs);
ret = intel_overlay_on(overlay);
@@ -813,8 +735,8 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
goto out_unpin;
}
- regs->DWINPOS = (params->dst_y << 16) | params->dst_x;
- regs->DWINSZ = (params->dst_h << 16) | params->dst_w;
+ iowrite32((params->dst_y << 16) | params->dst_x, &regs->DWINPOS);
+ iowrite32((params->dst_h << 16) | params->dst_w, &regs->DWINSZ);
if (params->format & I915_OVERLAY_YUV_PACKED)
tmp_width = packed_width_bytes(params->format, params->src_w);
@@ -824,7 +746,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
swidth = params->src_w;
swidthsw = calc_swidthsw(overlay->dev, params->offset_Y, tmp_width);
sheight = params->src_h;
- regs->OBUF_0Y = new_bo->gtt_offset + params->offset_Y;
+ iowrite32(new_bo->gtt_offset + params->offset_Y, &regs->OBUF_0Y);
ostride = params->stride_Y;
if (params->format & I915_OVERLAY_YUV_PLANAR) {
@@ -836,23 +758,23 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
params->src_w/uv_hscale);
tmp_V = calc_swidthsw(overlay->dev, params->offset_V,
params->src_w/uv_hscale);
- swidthsw |= max_u32(tmp_U, tmp_V) << 16;
+ swidthsw |= max_t(u32, tmp_U, tmp_V) << 16;
sheight |= (params->src_h/uv_vscale) << 16;
- regs->OBUF_0U = new_bo->gtt_offset + params->offset_U;
- regs->OBUF_0V = new_bo->gtt_offset + params->offset_V;
+ iowrite32(new_bo->gtt_offset + params->offset_U, &regs->OBUF_0U);
+ iowrite32(new_bo->gtt_offset + params->offset_V, &regs->OBUF_0V);
ostride |= params->stride_UV << 16;
}
- regs->SWIDTH = swidth;
- regs->SWIDTHSW = swidthsw;
- regs->SHEIGHT = sheight;
- regs->OSTRIDE = ostride;
+ iowrite32(swidth, &regs->SWIDTH);
+ iowrite32(swidthsw, &regs->SWIDTHSW);
+ iowrite32(sheight, &regs->SHEIGHT);
+ iowrite32(ostride, &regs->OSTRIDE);
scale_changed = update_scaling_factors(overlay, regs, params);
update_colorkey(overlay, regs);
- regs->OCMD = overlay_cmd_reg(params);
+ iowrite32(overlay_cmd_reg(params), &regs->OCMD);
intel_overlay_unmap_regs(overlay, regs);
@@ -872,10 +794,14 @@ out_unpin:
int intel_overlay_switch_off(struct intel_overlay *overlay)
{
- struct overlay_registers *regs;
+ struct overlay_registers __iomem *regs;
+#ifdef INVARIANTS
+ struct drm_device *dev = overlay->dev;
+#endif
int ret;
- DRM_LOCK_ASSERT(overlay->dev);
+ DRM_LOCK_ASSERT(dev);
+ sx_assert(&dev->mode_config.mutex, SA_XLOCKED);
ret = intel_overlay_recover_from_interrupt(overlay);
if (ret != 0)
@@ -889,7 +815,7 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
return ret;
regs = intel_overlay_map_regs(overlay);
- regs->OCMD = 0;
+ iowrite32(0, &regs->OCMD);
intel_overlay_unmap_regs(overlay, regs);
ret = intel_overlay_off(overlay);
@@ -1138,7 +1064,9 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,
return ret;
}
- params = malloc(sizeof(struct put_image_params), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ params = malloc(sizeof(struct put_image_params), DRM_I915_GEM, M_WAITOK);
+ if (!params)
+ return -ENOMEM;
drmmode_obj = drm_mode_object_find(dev, put_image_rec->crtc_id,
DRM_MODE_OBJECT_CRTC);
@@ -1254,10 +1182,11 @@ out_free:
}
static void update_reg_attrs(struct intel_overlay *overlay,
- struct overlay_registers *regs)
+ struct overlay_registers __iomem *regs)
{
- regs->OCLRC0 = (overlay->contrast << 18) | (overlay->brightness & 0xff);
- regs->OCLRC1 = overlay->saturation;
+ iowrite32((overlay->contrast << 18) | (overlay->brightness & 0xff),
+ &regs->OCLRC0);
+ iowrite32(overlay->saturation, &regs->OCLRC1);
}
static bool check_gamma_bounds(u32 gamma1, u32 gamma2)
@@ -1310,7 +1239,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
struct drm_intel_overlay_attrs *attrs = data;
drm_i915_private_t *dev_priv = dev->dev_private;
struct intel_overlay *overlay;
- struct overlay_registers *regs;
+ struct overlay_registers __iomem *regs;
int ret;
/* No need to check for DRIVER_MODESET - we don't set it up then. */
@@ -1396,16 +1325,20 @@ void intel_setup_overlay(struct drm_device *dev)
drm_i915_private_t *dev_priv = dev->dev_private;
struct intel_overlay *overlay;
struct drm_i915_gem_object *reg_bo;
- struct overlay_registers *regs;
+ struct overlay_registers __iomem *regs;
int ret;
if (!HAS_OVERLAY(dev))
return;
overlay = malloc(sizeof(struct intel_overlay), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (!overlay)
+ return;
+
DRM_LOCK(dev);
- if (dev_priv->overlay != NULL)
+ if (WARN_ON(dev_priv->overlay))
goto out_free;
+
overlay->dev = dev;
reg_bo = i915_gem_alloc_object(dev, PAGE_SIZE);
@@ -1423,7 +1356,7 @@ void intel_setup_overlay(struct drm_device *dev)
}
overlay->flip_addr = reg_bo->phys_obj->handle->busaddr;
} else {
- ret = i915_gem_object_pin(reg_bo, PAGE_SIZE, true);
+ ret = i915_gem_object_pin(reg_bo, PAGE_SIZE, true, false);
if (ret) {
DRM_ERROR("failed to pin overlay register bo\n");
goto out_free_bo;
@@ -1447,7 +1380,7 @@ void intel_setup_overlay(struct drm_device *dev)
if (!regs)
goto out_unpin_bo;
- memset(regs, 0, sizeof(struct overlay_registers));
+ memset_io(regs, 0, sizeof(struct overlay_registers));
update_polyphase_filter(regs);
update_reg_attrs(overlay, regs);
@@ -1479,12 +1412,15 @@ void intel_cleanup_overlay(struct drm_device *dev)
/* The bo's should be free'd by the generic code already.
* Furthermore modesetting teardown happens beforehand so the
* hardware should be off already */
- KASSERT(!dev_priv->overlay->active, ("Overlay still active"));
+ BUG_ON(dev_priv->overlay->active);
drm_gem_object_unreference_unlocked(&dev_priv->overlay->reg_bo->base);
free(dev_priv->overlay, DRM_I915_GEM);
}
+//#ifdef CONFIG_DEBUG_FS
+#define seq_printf(m, fmt, ...) sbuf_printf((m), (fmt), ##__VA_ARGS__)
+
struct intel_overlay_error_state {
struct overlay_registers regs;
unsigned long base;
@@ -1492,6 +1428,11 @@ struct intel_overlay_error_state {
u32 isr;
};
+/*
+ * NOTE Linux<->FreeBSD: We use the normal intel_overlay_map_regs() and
+ * intel_overlay_unmap_regs() defined at the top of this file.
+ */
+
struct intel_overlay_error_state *
intel_overlay_capture_error_state(struct drm_device *dev)
{
@@ -1510,15 +1451,15 @@ intel_overlay_capture_error_state(struct drm_device *dev)
error->dovsta = I915_READ(DOVSTA);
error->isr = I915_READ(ISR);
if (OVERLAY_NEEDS_PHYSICAL(overlay->dev))
- error->base = (long) overlay->reg_bo->phys_obj->handle->vaddr;
+ error->base = (__force long)overlay->reg_bo->phys_obj->handle->vaddr;
else
- error->base = (long) overlay->reg_bo->gtt_offset;
+ error->base = overlay->reg_bo->gtt_offset;
regs = intel_overlay_map_regs(overlay);
if (!regs)
goto err;
- memcpy(&error->regs, regs, sizeof(struct overlay_registers));
+ memcpy_fromio(&error->regs, regs, sizeof(struct overlay_registers));
intel_overlay_unmap_regs(overlay, regs);
return error;
@@ -1531,12 +1472,12 @@ err:
void
intel_overlay_print_error_state(struct sbuf *m, struct intel_overlay_error_state *error)
{
- sbuf_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
- error->dovsta, error->isr);
- sbuf_printf(m, " Register file at 0x%08lx:\n",
- error->base);
+ seq_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
+ error->dovsta, error->isr);
+ seq_printf(m, " Register file at 0x%08lx:\n",
+ error->base);
-#define P(x) sbuf_printf(m, " " #x ": 0x%08x\n", error->regs.x)
+#define P(x) seq_printf(m, " " #x ": 0x%08x\n", error->regs.x)
P(OBUF_0Y);
P(OBUF_1Y);
P(OBUF_0U);
@@ -1580,3 +1521,4 @@ intel_overlay_print_error_state(struct sbuf *m, struct intel_overlay_error_state
P(UVSCALEV);
#undef P
}
+//#endif
diff --git a/sys/dev/drm2/i915/intel_panel.c b/sys/dev/drm2/i915/intel_panel.c
index 2d4210d..f822649 100644
--- a/sys/dev/drm2/i915/intel_panel.c
+++ b/sys/dev/drm2/i915/intel_panel.c
@@ -31,9 +31,9 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/intel_drv.h>
#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */
@@ -95,7 +95,7 @@ intel_pch_panel_fitting(struct drm_device *dev,
} else if (scaled_width < scaled_height) { /* letter */
height = scaled_width / mode->hdisplay;
if (height & 1)
- height++;
+ height++;
y = (adjusted_mode->vdisplay - height + 1) / 2;
x = 0;
width = adjusted_mode->hdisplay;
@@ -133,53 +133,45 @@ static int is_backlight_combination_mode(struct drm_device *dev)
return 0;
}
-static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
+static u32 i915_read_blc_pwm_ctl(struct drm_device *dev)
{
+ struct drm_i915_private *dev_priv = dev->dev_private;
u32 val;
/* Restore the CTL value if it lost, e.g. GPU reset */
if (HAS_PCH_SPLIT(dev_priv->dev)) {
val = I915_READ(BLC_PWM_PCH_CTL2);
- if (dev_priv->saveBLC_PWM_CTL2 == 0) {
- dev_priv->saveBLC_PWM_CTL2 = val;
+ if (dev_priv->regfile.saveBLC_PWM_CTL2 == 0) {
+ dev_priv->regfile.saveBLC_PWM_CTL2 = val;
} else if (val == 0) {
- I915_WRITE(BLC_PWM_PCH_CTL2,
- dev_priv->saveBLC_PWM_CTL2);
- val = dev_priv->saveBLC_PWM_CTL2;
+ val = dev_priv->regfile.saveBLC_PWM_CTL2;
+ I915_WRITE(BLC_PWM_PCH_CTL2, val);
}
} else {
val = I915_READ(BLC_PWM_CTL);
- if (dev_priv->saveBLC_PWM_CTL == 0) {
- dev_priv->saveBLC_PWM_CTL = val;
- dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
+ if (dev_priv->regfile.saveBLC_PWM_CTL == 0) {
+ dev_priv->regfile.saveBLC_PWM_CTL = val;
+ if (INTEL_INFO(dev)->gen >= 4)
+ dev_priv->regfile.saveBLC_PWM_CTL2 =
+ I915_READ(BLC_PWM_CTL2);
} else if (val == 0) {
- I915_WRITE(BLC_PWM_CTL,
- dev_priv->saveBLC_PWM_CTL);
- I915_WRITE(BLC_PWM_CTL2,
- dev_priv->saveBLC_PWM_CTL2);
- val = dev_priv->saveBLC_PWM_CTL;
+ val = dev_priv->regfile.saveBLC_PWM_CTL;
+ I915_WRITE(BLC_PWM_CTL, val);
+ if (INTEL_INFO(dev)->gen >= 4)
+ I915_WRITE(BLC_PWM_CTL2,
+ dev_priv->regfile.saveBLC_PWM_CTL2);
}
}
return val;
}
-u32 intel_panel_get_max_backlight(struct drm_device *dev)
+static u32 _intel_panel_get_max_backlight(struct drm_device *dev)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
u32 max;
- max = i915_read_blc_pwm_ctl(dev_priv);
- if (max == 0) {
- /* XXX add code here to query mode clock or hardware clock
- * and program max PWM appropriately.
- */
-#if 0
- printf("fixme: max PWM is zero.\n");
-#endif
- return 1;
- }
+ max = i915_read_blc_pwm_ctl(dev);
if (HAS_PCH_SPLIT(dev)) {
max >>= 16;
@@ -193,10 +185,34 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
max *= 0xff;
}
- DRM_DEBUG("max backlight PWM = %d\n", max);
return max;
}
+u32 intel_panel_get_max_backlight(struct drm_device *dev)
+{
+ u32 max;
+
+ max = _intel_panel_get_max_backlight(dev);
+ if (max == 0) {
+ /* XXX add code here to query mode clock or hardware clock
+ * and program max PWM appropriately.
+ */
+ pr_warn_once("fixme: max PWM is zero\n");
+ return 1;
+ }
+
+ DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max);
+ return max;
+}
+
+static int i915_panel_invert_brightness;
+TUNABLE_INT("drm.i915.invert_brightness", &i915_panel_invert_brightness);
+MODULE_PARM_DESC(invert_brightness, "Invert backlight brightness "
+ "(-1 force normal, 0 machine defaults, 1 force inversion), please "
+ "report PCI device ID, subsystem vendor and subsystem device ID "
+ "to dri-devel@lists.freedesktop.org, if your machine needs it. "
+ "It will then be included in an upcoming module version.");
+module_param_named(invert_brightness, i915_panel_invert_brightness, int, 0600);
static u32 intel_panel_compute_brightness(struct drm_device *dev, u32 val)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -211,7 +227,7 @@ static u32 intel_panel_compute_brightness(struct drm_device *dev, u32 val)
return val;
}
-u32 intel_panel_get_backlight(struct drm_device *dev)
+static u32 intel_panel_get_backlight(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
u32 val;
@@ -226,7 +242,7 @@ u32 intel_panel_get_backlight(struct drm_device *dev)
if (is_backlight_combination_mode(dev)) {
u8 lbpc;
- lbpc = pci_read_config(dev->dev, PCI_LBPC, 1);
+ pci_read_config_byte(dev->dev, PCI_LBPC, &lbpc);
val *= lbpc;
}
}
@@ -260,11 +276,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
lbpc = level * 0xfe / max + 1;
level /= lbpc;
- pci_write_config(dev->dev, PCI_LBPC, lbpc, 4);
+ pci_write_config_byte(dev->dev, PCI_LBPC, lbpc);
}
tmp = I915_READ(BLC_PWM_CTL);
- if (INTEL_INFO(dev)->gen < 4)
+ if (INTEL_INFO(dev)->gen < 4)
level <<= 1;
tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
I915_WRITE(BLC_PWM_CTL, tmp | level);
@@ -285,15 +301,69 @@ void intel_panel_disable_backlight(struct drm_device *dev)
dev_priv->backlight_enabled = false;
intel_panel_actually_set_backlight(dev, 0);
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ uint32_t reg, tmp;
+
+ reg = HAS_PCH_SPLIT(dev) ? BLC_PWM_CPU_CTL2 : BLC_PWM_CTL2;
+
+ I915_WRITE(reg, I915_READ(reg) & ~BLM_PWM_ENABLE);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ tmp = I915_READ(BLC_PWM_PCH_CTL1);
+ tmp &= ~BLM_PCH_PWM_ENABLE;
+ I915_WRITE(BLC_PWM_PCH_CTL1, tmp);
+ }
+ }
}
-void intel_panel_enable_backlight(struct drm_device *dev)
+void intel_panel_enable_backlight(struct drm_device *dev,
+ enum pipe pipe)
{
struct drm_i915_private *dev_priv = dev->dev_private;
if (dev_priv->backlight_level == 0)
dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ uint32_t reg, tmp;
+
+ reg = HAS_PCH_SPLIT(dev) ? BLC_PWM_CPU_CTL2 : BLC_PWM_CTL2;
+
+
+ tmp = I915_READ(reg);
+
+ /* Note that this can also get called through dpms changes. And
+ * we don't track the backlight dpms state, hence check whether
+ * we have to do anything first. */
+ if (tmp & BLM_PWM_ENABLE)
+ goto set_level;
+
+ if (dev_priv->num_pipe == 3)
+ tmp &= ~BLM_PIPE_SELECT_IVB;
+ else
+ tmp &= ~BLM_PIPE_SELECT;
+
+ tmp |= BLM_PIPE(pipe);
+ tmp &= ~BLM_PWM_ENABLE;
+
+ I915_WRITE(reg, tmp);
+ POSTING_READ(reg);
+ I915_WRITE(reg, tmp | BLM_PWM_ENABLE);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ tmp = I915_READ(BLC_PWM_PCH_CTL1);
+ tmp |= BLM_PCH_PWM_ENABLE;
+ tmp &= ~BLM_PCH_OVERRIDE_ENABLE;
+ I915_WRITE(BLC_PWM_PCH_CTL1, tmp);
+ }
+ }
+
+set_level:
+ /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1.
+ * BLC_PWM_CPU_CTL may be cleared to zero automatically when these
+ * registers are set.
+ */
dev_priv->backlight_enabled = true;
intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
}
@@ -309,31 +379,90 @@ static void intel_panel_init_backlight(struct drm_device *dev)
enum drm_connector_status
intel_panel_detect(struct drm_device *dev)
{
-#if 0
struct drm_i915_private *dev_priv = dev->dev_private;
-#endif
-
- if (i915_panel_ignore_lid)
- return i915_panel_ignore_lid > 0 ?
- connector_status_connected :
- connector_status_disconnected;
- /* opregion lid state on HP 2540p is wrong at boot up,
- * appears to be either the BIOS or Linux ACPI fault */
-#if 0
/* Assume that the BIOS does not lie through the OpRegion... */
- if (dev_priv->opregion.lid_state)
+ if (!i915_panel_ignore_lid && dev_priv->opregion.lid_state) {
return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
connector_status_connected :
connector_status_disconnected;
-#endif
+ }
- return connector_status_unknown;
+ switch (i915_panel_ignore_lid) {
+ case -2:
+ return connector_status_connected;
+ case -1:
+ return connector_status_disconnected;
+ default:
+ return connector_status_unknown;
+ }
}
-int intel_panel_setup_backlight(struct drm_device *dev)
+#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
+static int intel_panel_update_status(struct backlight_device *bd)
{
+ struct drm_device *dev = bl_get_data(bd);
+ intel_panel_set_backlight(dev, bd->props.brightness);
+ return 0;
+}
+
+static int intel_panel_get_brightness(struct backlight_device *bd)
+{
+ struct drm_device *dev = bl_get_data(bd);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ return dev_priv->backlight_level;
+}
+
+static const struct backlight_ops intel_panel_bl_ops = {
+ .update_status = intel_panel_update_status,
+ .get_brightness = intel_panel_get_brightness,
+};
+
+int intel_panel_setup_backlight(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct backlight_properties props;
+
intel_panel_init_backlight(dev);
+
+ if (WARN_ON(dev_priv->backlight))
+ return -ENODEV;
+
+ memset(&props, 0, sizeof(props));
+ props.type = BACKLIGHT_RAW;
+ props.max_brightness = _intel_panel_get_max_backlight(dev);
+ if (props.max_brightness == 0) {
+ DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n");
+ return -ENODEV;
+ }
+ dev_priv->backlight =
+ backlight_device_register("intel_backlight",
+ &connector->kdev, dev,
+ &intel_panel_bl_ops, &props);
+
+ if (IS_ERR(dev_priv->backlight)) {
+ DRM_ERROR("Failed to register backlight: %ld\n",
+ PTR_ERR(dev_priv->backlight));
+ dev_priv->backlight = NULL;
+ return -ENODEV;
+ }
+ dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev);
+ return 0;
+}
+
+void intel_panel_destroy_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ if (dev_priv->backlight) {
+ backlight_device_unregister(dev_priv->backlight);
+ dev_priv->backlight = NULL;
+ }
+}
+#else
+int intel_panel_setup_backlight(struct drm_connector *connector)
+{
+ intel_panel_init_backlight(connector->dev);
return 0;
}
@@ -341,3 +470,21 @@ void intel_panel_destroy_backlight(struct drm_device *dev)
{
return;
}
+#endif
+
+int intel_panel_init(struct intel_panel *panel,
+ struct drm_display_mode *fixed_mode)
+{
+ panel->fixed_mode = fixed_mode;
+
+ return 0;
+}
+
+void intel_panel_fini(struct intel_panel *panel)
+{
+ struct intel_connector *intel_connector =
+ container_of(panel, struct intel_connector, panel);
+
+ if (panel->fixed_mode)
+ drm_mode_destroy(intel_connector->base.dev, panel->fixed_mode);
+}
diff --git a/sys/dev/drm2/i915/intel_pm.c b/sys/dev/drm2/i915/intel_pm.c
index 90f513d..ab9eee4 100644
--- a/sys/dev/drm2/i915/intel_pm.c
+++ b/sys/dev/drm2/i915/intel_pm.c
@@ -29,23 +29,11 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_drv.h>
#include <sys/kdb.h>
-static struct drm_i915_private *i915_mch_dev;
-/*
- * Lock protecting IPS related data structures
- * - i915_mch_dev
- * - dev_priv->max_delay
- * - dev_priv->min_delay
- * - dev_priv->fmax
- * - dev_priv->gpu_busy
- */
-static struct mtx mchdev_lock;
-MTX_SYSINIT(mchdev, &mchdev_lock, "mchdev", MTX_DEF);
+#define FORCEWAKE_ACK_TIMEOUT_MS 2
/* FBC, or Frame Buffer Compression, is a technique employed to compress the
* framebuffer contents in-memory, aiming at reducing the required bandwidth
@@ -58,6 +46,14 @@ MTX_SYSINIT(mchdev, &mchdev_lock, "mchdev", MTX_DEF);
* i915.i915_enable_fbc parameter
*/
+static bool intel_crtc_active(struct drm_crtc *crtc)
+{
+ /* Be paranoid as we can arrive here with only partial
+ * state retrieved from the hardware during setup.
+ */
+ return to_intel_crtc(crtc)->active && crtc->fb && crtc->mode.clock;
+}
+
static void i8xx_disable_fbc(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -298,8 +294,6 @@ static void intel_fbc_work_fn(void *arg, int pending)
static void intel_cancel_fbc_work(struct drm_i915_private *dev_priv)
{
- u_int pending;
-
if (dev_priv->fbc_work == NULL)
return;
@@ -309,8 +303,8 @@ static void intel_cancel_fbc_work(struct drm_i915_private *dev_priv)
* dev_priv->fbc_work, so we can perform the cancellation
* entirely asynchronously.
*/
- if (taskqueue_cancel_timeout(dev_priv->tq, &dev_priv->fbc_work->task,
- &pending) == 0)
+ if (taskqueue_cancel_timeout(dev_priv->wq, &dev_priv->fbc_work->work,
+ NULL) == 0)
/* tasklet was killed before being run, clean up */
free(dev_priv->fbc_work, DRM_MEM_KMS);
@@ -333,12 +327,16 @@ void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
intel_cancel_fbc_work(dev_priv);
- work = malloc(sizeof(*work), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ work = malloc(sizeof *work, DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (work == NULL) {
+ dev_priv->display.enable_fbc(crtc, interval);
+ return;
+ }
work->crtc = crtc;
work->fb = crtc->fb;
work->interval = interval;
- TIMEOUT_TASK_INIT(dev_priv->tq, &work->task, 0, intel_fbc_work_fn,
+ TIMEOUT_TASK_INIT(dev_priv->wq, &work->work, 0, intel_fbc_work_fn,
work);
dev_priv->fbc_work = work;
@@ -356,7 +354,7 @@ void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
* and indeed performing the enable as a co-routine and not
* waiting synchronously upon the vblank.
*/
- taskqueue_enqueue_timeout(dev_priv->tq, &work->task,
+ taskqueue_enqueue_timeout(dev_priv->wq, &work->work,
msecs_to_jiffies(50));
}
@@ -402,8 +400,6 @@ void intel_update_fbc(struct drm_device *dev)
struct drm_i915_gem_object *obj;
int enable_fbc;
- DRM_DEBUG_KMS("\n");
-
if (!i915_powersave)
return;
@@ -420,7 +416,8 @@ void intel_update_fbc(struct drm_device *dev)
* - going to an unsupported config (interlace, pixel multiply, etc.)
*/
list_for_each_entry(tmp_crtc, &dev->mode_config.crtc_list, head) {
- if (tmp_crtc->enabled && tmp_crtc->fb) {
+ if (intel_crtc_active(tmp_crtc) &&
+ !to_intel_crtc(tmp_crtc)->primary_disabled) {
if (crtc) {
DRM_DEBUG_KMS("more than one pipe active, disabling compression\n");
dev_priv->no_fbc_reason = FBC_MULTIPLE_PIPES;
@@ -608,7 +605,7 @@ static void i915_ironlake_get_mem_freq(struct drm_device *dev)
break;
}
- dev_priv->r_t = dev_priv->mem_freq;
+ dev_priv->ips.r_t = dev_priv->mem_freq;
switch (csipll & 0x3ff) {
case 0x00c:
@@ -640,11 +637,11 @@ static void i915_ironlake_get_mem_freq(struct drm_device *dev)
}
if (dev_priv->fsb_freq == 3200) {
- dev_priv->c_m = 0;
+ dev_priv->ips.c_m = 0;
} else if (dev_priv->fsb_freq > 3200 && dev_priv->fsb_freq <= 4800) {
- dev_priv->c_m = 1;
+ dev_priv->ips.c_m = 1;
} else {
- dev_priv->c_m = 2;
+ dev_priv->ips.c_m = 2;
}
}
@@ -697,7 +694,7 @@ static const struct cxsr_latency *intel_get_cxsr_latency(int is_desktop,
if (fsb == 0 || mem == 0)
return NULL;
- for (i = 0; i < DRM_ARRAY_SIZE(cxsr_latency_table); i++) {
+ for (i = 0; i < ARRAY_SIZE(cxsr_latency_table); i++) {
latency = &cxsr_latency_table[i];
if (is_desktop == latency->is_desktop &&
is_ddr3 == latency->is_ddr3 &&
@@ -1005,7 +1002,7 @@ static struct drm_crtc *single_enabled_crtc(struct drm_device *dev)
struct drm_crtc *crtc, *enabled = NULL;
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- if (crtc->enabled && crtc->fb) {
+ if (intel_crtc_active(crtc)) {
if (enabled)
return NULL;
enabled = crtc;
@@ -1099,7 +1096,7 @@ static bool g4x_compute_wm0(struct drm_device *dev,
int entries, tlb_miss;
crtc = intel_get_crtc_for_plane(dev, plane);
- if (crtc->fb == NULL || !crtc->enabled) {
+ if (!intel_crtc_active(crtc)) {
*cursor_wm = cursor->guard_size;
*plane_wm = display->guard_size;
return false;
@@ -1228,7 +1225,7 @@ static bool vlv_compute_drain_latency(struct drm_device *dev,
int entries;
crtc = intel_get_crtc_for_plane(dev, plane);
- if (crtc->fb == NULL || !crtc->enabled)
+ if (!intel_crtc_active(crtc))
return false;
clock = crtc->mode.clock; /* VESA DOT Clock */
@@ -1299,6 +1296,7 @@ static void valleyview_update_wm(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
int plane_sr, cursor_sr;
+ int ignore_plane_sr, ignore_cursor_sr;
unsigned int enabled = 0;
vlv_update_drain_latency(dev);
@@ -1315,17 +1313,23 @@ static void valleyview_update_wm(struct drm_device *dev)
&planeb_wm, &cursorb_wm))
enabled |= 2;
- plane_sr = cursor_sr = 0;
if (single_plane_enabled(enabled) &&
g4x_compute_srwm(dev, ffs(enabled) - 1,
sr_latency_ns,
&valleyview_wm_info,
&valleyview_cursor_wm_info,
- &plane_sr, &cursor_sr))
+ &plane_sr, &ignore_cursor_sr) &&
+ g4x_compute_srwm(dev, ffs(enabled) - 1,
+ 2*sr_latency_ns,
+ &valleyview_wm_info,
+ &valleyview_cursor_wm_info,
+ &ignore_plane_sr, &cursor_sr)) {
I915_WRITE(FW_BLC_SELF_VLV, FW_CSPWRDWNEN);
- else
+ } else {
I915_WRITE(FW_BLC_SELF_VLV,
I915_READ(FW_BLC_SELF_VLV) & ~FW_CSPWRDWNEN);
+ plane_sr = cursor_sr = 0;
+ }
DRM_DEBUG_KMS("Setting FIFO watermarks - A: plane=%d, cursor=%d, B: plane=%d, cursor=%d, SR: plane=%d, cursor=%d\n",
planea_wm, cursora_wm,
@@ -1338,10 +1342,11 @@ static void valleyview_update_wm(struct drm_device *dev)
(planeb_wm << DSPFW_PLANEB_SHIFT) |
planea_wm);
I915_WRITE(DSPFW2,
- (I915_READ(DSPFW2) & DSPFW_CURSORA_MASK) |
+ (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) |
(cursora_wm << DSPFW_CURSORA_SHIFT));
I915_WRITE(DSPFW3,
- (I915_READ(DSPFW3) | (cursor_sr << DSPFW_CURSOR_SR_SHIFT)));
+ (I915_READ(DSPFW3) & ~DSPFW_CURSOR_SR_MASK) |
+ (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
}
static void g4x_update_wm(struct drm_device *dev)
@@ -1364,17 +1369,18 @@ static void g4x_update_wm(struct drm_device *dev)
&planeb_wm, &cursorb_wm))
enabled |= 2;
- plane_sr = cursor_sr = 0;
if (single_plane_enabled(enabled) &&
g4x_compute_srwm(dev, ffs(enabled) - 1,
sr_latency_ns,
&g4x_wm_info,
&g4x_cursor_wm_info,
- &plane_sr, &cursor_sr))
+ &plane_sr, &cursor_sr)) {
I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN);
- else
+ } else {
I915_WRITE(FW_BLC_SELF,
I915_READ(FW_BLC_SELF) & ~FW_BLC_SELF_EN);
+ plane_sr = cursor_sr = 0;
+ }
DRM_DEBUG_KMS("Setting FIFO watermarks - A: plane=%d, cursor=%d, B: plane=%d, cursor=%d, SR: plane=%d, cursor=%d\n",
planea_wm, cursora_wm,
@@ -1387,11 +1393,11 @@ static void g4x_update_wm(struct drm_device *dev)
(planeb_wm << DSPFW_PLANEB_SHIFT) |
planea_wm);
I915_WRITE(DSPFW2,
- (I915_READ(DSPFW2) & DSPFW_CURSORA_MASK) |
+ (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) |
(cursora_wm << DSPFW_CURSORA_SHIFT));
/* HPLL off in SR has some issues on G4x... disable it */
I915_WRITE(DSPFW3,
- (I915_READ(DSPFW3) & ~DSPFW_HPLL_SR_EN) |
+ (I915_READ(DSPFW3) & ~(DSPFW_HPLL_SR_EN | DSPFW_CURSOR_SR_MASK)) |
(cursor_sr << DSPFW_CURSOR_SR_SHIFT));
}
@@ -1480,10 +1486,13 @@ static void i9xx_update_wm(struct drm_device *dev)
fifo_size = dev_priv->display.get_fifo_size(dev, 0);
crtc = intel_get_crtc_for_plane(dev, 0);
- if (crtc->enabled && crtc->fb) {
+ if (intel_crtc_active(crtc)) {
+ int cpp = crtc->fb->bits_per_pixel / 8;
+ if (IS_GEN2(dev))
+ cpp = 4;
+
planea_wm = intel_calculate_wm(crtc->mode.clock,
- wm_info, fifo_size,
- crtc->fb->bits_per_pixel / 8,
+ wm_info, fifo_size, cpp,
latency_ns);
enabled = crtc;
} else
@@ -1491,10 +1500,13 @@ static void i9xx_update_wm(struct drm_device *dev)
fifo_size = dev_priv->display.get_fifo_size(dev, 1);
crtc = intel_get_crtc_for_plane(dev, 1);
- if (crtc->enabled && crtc->fb) {
+ if (intel_crtc_active(crtc)) {
+ int cpp = crtc->fb->bits_per_pixel / 8;
+ if (IS_GEN2(dev))
+ cpp = 4;
+
planeb_wm = intel_calculate_wm(crtc->mode.clock,
- wm_info, fifo_size,
- crtc->fb->bits_per_pixel / 8,
+ wm_info, fifo_size, cpp,
latency_ns);
if (enabled == NULL)
enabled = crtc;
@@ -1584,8 +1596,7 @@ static void i830_update_wm(struct drm_device *dev)
planea_wm = intel_calculate_wm(crtc->mode.clock, &i830_wm_info,
dev_priv->display.get_fifo_size(dev, 0),
- crtc->fb->bits_per_pixel / 8,
- latency_ns);
+ 4, latency_ns);
fwater_lo = I915_READ(FW_BLC) & ~0xfff;
fwater_lo |= (3<<8) | planea_wm;
@@ -1818,8 +1829,110 @@ static void sandybridge_update_wm(struct drm_device *dev)
enabled |= 2;
}
- if ((dev_priv->num_pipe == 3) &&
- g4x_compute_wm0(dev, 2,
+ /*
+ * Calculate and update the self-refresh watermark only when one
+ * display plane is used.
+ *
+ * SNB support 3 levels of watermark.
+ *
+ * WM1/WM2/WM2 watermarks have to be enabled in the ascending order,
+ * and disabled in the descending order
+ *
+ */
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ if (!single_plane_enabled(enabled) ||
+ dev_priv->sprite_scaling_enabled)
+ return;
+ enabled = ffs(enabled) - 1;
+
+ /* WM1 */
+ if (!ironlake_compute_srwm(dev, 1, enabled,
+ SNB_READ_WM1_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM1_LP_ILK,
+ WM1_LP_SR_EN |
+ (SNB_READ_WM1_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /* WM2 */
+ if (!ironlake_compute_srwm(dev, 2, enabled,
+ SNB_READ_WM2_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM2_LP_ILK,
+ WM2_LP_EN |
+ (SNB_READ_WM2_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /* WM3 */
+ if (!ironlake_compute_srwm(dev, 3, enabled,
+ SNB_READ_WM3_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM3_LP_ILK,
+ WM3_LP_EN |
+ (SNB_READ_WM3_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+}
+
+static void ivybridge_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int latency = SNB_READ_WM0_LATENCY() * 100; /* In unit 0.1us */
+ u32 val;
+ int fbc_wm, plane_wm, cursor_wm;
+ int ignore_fbc_wm, ignore_plane_wm, ignore_cursor_wm;
+ unsigned int enabled;
+
+ enabled = 0;
+ if (g4x_compute_wm0(dev, 0,
+ &sandybridge_display_wm_info, latency,
+ &sandybridge_cursor_wm_info, latency,
+ &plane_wm, &cursor_wm)) {
+ val = I915_READ(WM0_PIPEA_ILK);
+ val &= ~(WM0_PIPE_PLANE_MASK | WM0_PIPE_CURSOR_MASK);
+ I915_WRITE(WM0_PIPEA_ILK, val |
+ ((plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm));
+ DRM_DEBUG_KMS("FIFO watermarks For pipe A -"
+ " plane %d, " "cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 1;
+ }
+
+ if (g4x_compute_wm0(dev, 1,
+ &sandybridge_display_wm_info, latency,
+ &sandybridge_cursor_wm_info, latency,
+ &plane_wm, &cursor_wm)) {
+ val = I915_READ(WM0_PIPEB_ILK);
+ val &= ~(WM0_PIPE_PLANE_MASK | WM0_PIPE_CURSOR_MASK);
+ I915_WRITE(WM0_PIPEB_ILK, val |
+ ((plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm));
+ DRM_DEBUG_KMS("FIFO watermarks For pipe B -"
+ " plane %d, cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 2;
+ }
+
+ if (g4x_compute_wm0(dev, 2,
&sandybridge_display_wm_info, latency,
&sandybridge_cursor_wm_info, latency,
&plane_wm, &cursor_wm)) {
@@ -1882,12 +1995,17 @@ static void sandybridge_update_wm(struct drm_device *dev)
(plane_wm << WM1_LP_SR_SHIFT) |
cursor_wm);
- /* WM3 */
+ /* WM3, note we have to correct the cursor latency */
if (!ironlake_compute_srwm(dev, 3, enabled,
SNB_READ_WM3_LATENCY() * 500,
&sandybridge_display_srwm_info,
&sandybridge_cursor_srwm_info,
- &fbc_wm, &plane_wm, &cursor_wm))
+ &fbc_wm, &plane_wm, &ignore_cursor_wm) ||
+ !ironlake_compute_srwm(dev, 3, enabled,
+ 2 * SNB_READ_WM3_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &ignore_fbc_wm, &ignore_plane_wm, &cursor_wm))
return;
I915_WRITE(WM3_LP_ILK,
@@ -1936,7 +2054,7 @@ sandybridge_compute_sprite_wm(struct drm_device *dev, int plane,
int entries, tlb_miss;
crtc = intel_get_crtc_for_plane(dev, plane);
- if (crtc->fb == NULL || !crtc->enabled) {
+ if (!intel_crtc_active(crtc)) {
*sprite_wm = display->guard_size;
return false;
}
@@ -2153,7 +2271,7 @@ intel_alloc_context_page(struct drm_device *dev)
return NULL;
}
- ret = i915_gem_object_pin(ctx, 4096, true);
+ ret = i915_gem_object_pin(ctx, 4096, true, false);
if (ret) {
DRM_ERROR("failed to pin power context: %d\n", ret);
goto err_unref;
@@ -2175,11 +2293,23 @@ err_unref:
return NULL;
}
+/**
+ * Lock protecting IPS related data structures
+ */
+struct mtx mchdev_lock;
+MTX_SYSINIT(mchdev, &mchdev_lock, "mchdev", MTX_DEF);
+
+/* Global for IPS driver to get at the current i915 device. Protected by
+ * mchdev_lock. */
+static struct drm_i915_private *i915_mch_dev;
+
bool ironlake_set_drps(struct drm_device *dev, u8 val)
{
struct drm_i915_private *dev_priv = dev->dev_private;
u16 rgvswctl;
+ mtx_assert(&mchdev_lock, MA_OWNED);
+
rgvswctl = I915_READ16(MEMSWCTL);
if (rgvswctl & MEMCTL_CMD_STS) {
DRM_DEBUG("gpu busy, RCS change rejected\n");
@@ -2197,12 +2327,14 @@ bool ironlake_set_drps(struct drm_device *dev, u8 val)
return true;
}
-void ironlake_enable_drps(struct drm_device *dev)
+static void ironlake_enable_drps(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
u32 rgvmodectl = I915_READ(MEMMODECTL);
u8 fmax, fmin, fstart, vstart;
+ mtx_lock(&mchdev_lock);
+
/* Enable temp reporting */
I915_WRITE16(PMMISC, I915_READ(PMMISC) | MCPPCE_EN);
I915_WRITE16(TSC1, I915_READ(TSC1) | TSE);
@@ -2226,12 +2358,12 @@ void ironlake_enable_drps(struct drm_device *dev)
vstart = (I915_READ(PXVFREQ_BASE + (fstart * 4)) & PXVFREQ_PX_MASK) >>
PXVFREQ_PX_SHIFT;
- dev_priv->fmax = fmax; /* IPS callback will increase this */
- dev_priv->fstart = fstart;
+ dev_priv->ips.fmax = fmax; /* IPS callback will increase this */
+ dev_priv->ips.fstart = fstart;
- dev_priv->max_delay = fstart;
- dev_priv->min_delay = fmin;
- dev_priv->cur_delay = fstart;
+ dev_priv->ips.max_delay = fstart;
+ dev_priv->ips.min_delay = fmin;
+ dev_priv->ips.cur_delay = fstart;
DRM_DEBUG_DRIVER("fmax: %d, fmin: %d, fstart: %d\n",
fmax, fmin, fstart);
@@ -2248,23 +2380,29 @@ void ironlake_enable_drps(struct drm_device *dev)
rgvmodectl |= MEMMODE_SWMODE_EN;
I915_WRITE(MEMMODECTL, rgvmodectl);
- if (wait_for((I915_READ(MEMSWCTL) & MEMCTL_CMD_STS) == 0, 10))
+ if (wait_for_atomic((I915_READ(MEMSWCTL) & MEMCTL_CMD_STS) == 0, 10))
DRM_ERROR("stuck trying to change perf mode\n");
- pause("915dsp", 1);
+ mdelay(1);
ironlake_set_drps(dev, fstart);
- dev_priv->last_count1 = I915_READ(0x112e4) + I915_READ(0x112e8) +
+ dev_priv->ips.last_count1 = I915_READ(0x112e4) + I915_READ(0x112e8) +
I915_READ(0x112e0);
- dev_priv->last_time1 = jiffies_to_msecs(jiffies);
- dev_priv->last_count2 = I915_READ(0x112f4);
- nanotime(&dev_priv->last_time2);
+ dev_priv->ips.last_time1 = jiffies_to_msecs(jiffies);
+ dev_priv->ips.last_count2 = I915_READ(0x112f4);
+ getrawmonotonic(&dev_priv->ips.last_time2);
+
+ mtx_unlock(&mchdev_lock);
}
-void ironlake_disable_drps(struct drm_device *dev)
+static void ironlake_disable_drps(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- u16 rgvswctl = I915_READ16(MEMSWCTL);
+ u16 rgvswctl;
+
+ mtx_lock(&mchdev_lock);
+
+ rgvswctl = I915_READ16(MEMSWCTL);
/* Ack interrupts, disable EFC interrupt */
I915_WRITE(MEMINTREN, I915_READ(MEMINTREN) & ~MEMINT_EVAL_CHG_EN);
@@ -2274,27 +2412,76 @@ void ironlake_disable_drps(struct drm_device *dev)
I915_WRITE(DEIMR, I915_READ(DEIMR) | DE_PCU_EVENT);
/* Go back to the starting frequency */
- ironlake_set_drps(dev, dev_priv->fstart);
- pause("915dsp", 1);
+ ironlake_set_drps(dev, dev_priv->ips.fstart);
+ mdelay(1);
rgvswctl |= MEMCTL_CMD_STS;
I915_WRITE(MEMSWCTL, rgvswctl);
- pause("915dsp", 1);
+ mdelay(1);
+
+ mtx_unlock(&mchdev_lock);
+}
+
+/* There's a funny hw issue where the hw returns all 0 when reading from
+ * GEN6_RP_INTERRUPT_LIMITS. Hence we always need to compute the desired value
+ * ourselves, instead of doing a rmw cycle (which might result in us clearing
+ * all limits and the gpu stuck at whatever frequency it is at atm).
+ */
+static u32 gen6_rps_limits(struct drm_i915_private *dev_priv, u8 *val)
+{
+ u32 limits;
+
+ limits = 0;
+
+ if (*val >= dev_priv->rps.max_delay)
+ *val = dev_priv->rps.max_delay;
+ limits |= dev_priv->rps.max_delay << 24;
+
+ /* Only set the down limit when we've reached the lowest level to avoid
+ * getting more interrupts, otherwise leave this clear. This prevents a
+ * race in the hw when coming out of rc6: There's a tiny window where
+ * the hw runs at the minimal clock before selecting the desired
+ * frequency, if the down threshold expires in that window we will not
+ * receive a down interrupt. */
+ if (*val <= dev_priv->rps.min_delay) {
+ *val = dev_priv->rps.min_delay;
+ limits |= dev_priv->rps.min_delay << 16;
+ }
+ return limits;
}
void gen6_set_rps(struct drm_device *dev, u8 val)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- u32 swreq;
+ u32 limits = gen6_rps_limits(dev_priv, &val);
+
+ sx_assert(&dev_priv->rps.hw_lock, SA_XLOCKED);
+ WARN_ON(val > dev_priv->rps.max_delay);
+ WARN_ON(val < dev_priv->rps.min_delay);
+
+ if (val == dev_priv->rps.cur_delay)
+ return;
+
+ I915_WRITE(GEN6_RPNSWREQ,
+ GEN6_FREQUENCY(val) |
+ GEN6_OFFSET(0) |
+ GEN6_AGGRESSIVE_TURBO);
+
+ /* Make sure we continue to get interrupts
+ * until we hit the minimum or maximum frequencies.
+ */
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, limits);
- swreq = (val & 0x3ff) << 25;
- I915_WRITE(GEN6_RPNSWREQ, swreq);
+ POSTING_READ(GEN6_RPNSWREQ);
+
+ dev_priv->rps.cur_delay = val;
}
-void gen6_disable_rps(struct drm_device *dev)
+static void gen6_disable_rps(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ I915_WRITE(GEN6_RC_CONTROL, 0);
I915_WRITE(GEN6_RPNSWREQ, 1 << 31);
I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
I915_WRITE(GEN6_PMIER, 0);
@@ -2303,52 +2490,50 @@ void gen6_disable_rps(struct drm_device *dev)
* register (PMIMR) to mask PM interrupts. The only risk is in leaving
* stale bits in PMIIR and PMIMR which gen6_enable_rps will clean up. */
- mtx_lock(&dev_priv->rps_lock);
- dev_priv->pm_iir = 0;
- mtx_unlock(&dev_priv->rps_lock);
+ mtx_lock(&dev_priv->rps.lock);
+ dev_priv->rps.pm_iir = 0;
+ mtx_unlock(&dev_priv->rps.lock);
I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR));
}
int intel_enable_rc6(const struct drm_device *dev)
{
- /*
- * Respect the kernel parameter if it is set
- */
+ /* Respect the kernel parameter if it is set */
if (i915_enable_rc6 >= 0)
return i915_enable_rc6;
- /*
- * Disable RC6 on Ironlake
- */
+ /* Disable RC6 on Ironlake */
if (INTEL_INFO(dev)->gen == 5)
return 0;
- /* Sorry Haswell, no RC6 for you for now. */
- if (IS_HASWELL(dev))
- return 0;
+ if (IS_HASWELL(dev)) {
+ DRM_DEBUG_DRIVER("Haswell: only RC6 available\n");
+ return INTEL_RC6_ENABLE;
+ }
- /*
- * Disable rc6 on Sandybridge
- */
+ /* snb/ivb have more than one rc6 state. */
if (INTEL_INFO(dev)->gen == 6) {
DRM_DEBUG_DRIVER("Sandybridge: deep RC6 disabled\n");
return INTEL_RC6_ENABLE;
}
+
DRM_DEBUG_DRIVER("RC6 and deep RC6 enabled\n");
return (INTEL_RC6_ENABLE | INTEL_RC6p_ENABLE);
}
-void gen6_enable_rps(struct drm_i915_private *dev_priv)
+static void gen6_enable_rps(struct drm_device *dev)
{
+ struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_ring_buffer *ring;
- u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
- u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
- u32 pcu_mbox, rc6_mask = 0;
+ u32 rp_state_cap;
+ u32 gt_perf_status;
+ u32 rc6vids, pcu_mbox, rc6_mask = 0;
u32 gtfifodbg;
- int cur_freq, min_freq, max_freq;
int rc6_mode;
- int i;
+ int i, ret;
+
+ sx_assert(&dev_priv->rps.hw_lock, SA_XLOCKED);
/* Here begins a magic sequence of register writes to enable
* auto-downclocking.
@@ -2357,7 +2542,6 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
* userspace...
*/
I915_WRITE(GEN6_RC_STATE, 0);
- DRM_LOCK(dev_priv->dev);
/* Clear the DBG now so we don't confuse earlier errors */
if ((gtfifodbg = I915_READ(GTFIFODBG))) {
@@ -2367,6 +2551,14 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
gen6_gt_force_wake_get(dev_priv);
+ rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
+ gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
+
+ /* In units of 100MHz */
+ dev_priv->rps.max_delay = rp_state_cap & 0xff;
+ dev_priv->rps.min_delay = (rp_state_cap & 0xff0000) >> 16;
+ dev_priv->rps.cur_delay = 0;
+
/* disable the counters and set deterministic thresholds */
I915_WRITE(GEN6_RC_CONTROL, 0);
@@ -2382,23 +2574,27 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
I915_WRITE(GEN6_RC_SLEEP, 0);
I915_WRITE(GEN6_RC1e_THRESHOLD, 1000);
I915_WRITE(GEN6_RC6_THRESHOLD, 50000);
- I915_WRITE(GEN6_RC6p_THRESHOLD, 100000);
+ I915_WRITE(GEN6_RC6p_THRESHOLD, 150000);
I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
+ /* Check if we are enabling RC6 */
rc6_mode = intel_enable_rc6(dev_priv->dev);
if (rc6_mode & INTEL_RC6_ENABLE)
rc6_mask |= GEN6_RC_CTL_RC6_ENABLE;
- if (rc6_mode & INTEL_RC6p_ENABLE)
- rc6_mask |= GEN6_RC_CTL_RC6p_ENABLE;
+ /* We don't use those on Haswell */
+ if (!IS_HASWELL(dev)) {
+ if (rc6_mode & INTEL_RC6p_ENABLE)
+ rc6_mask |= GEN6_RC_CTL_RC6p_ENABLE;
- if (rc6_mode & INTEL_RC6pp_ENABLE)
- rc6_mask |= GEN6_RC_CTL_RC6pp_ENABLE;
+ if (rc6_mode & INTEL_RC6pp_ENABLE)
+ rc6_mask |= GEN6_RC_CTL_RC6pp_ENABLE;
+ }
DRM_INFO("Enabling RC6 states: RC6 %s, RC6p %s, RC6pp %s\n",
- (rc6_mode & INTEL_RC6_ENABLE) ? "on" : "off",
- (rc6_mode & INTEL_RC6p_ENABLE) ? "on" : "off",
- (rc6_mode & INTEL_RC6pp_ENABLE) ? "on" : "off");
+ (rc6_mask & GEN6_RC_CTL_RC6_ENABLE) ? "on" : "off",
+ (rc6_mask & GEN6_RC_CTL_RC6p_ENABLE) ? "on" : "off",
+ (rc6_mask & GEN6_RC_CTL_RC6pp_ENABLE) ? "on" : "off");
I915_WRITE(GEN6_RC_CONTROL,
rc6_mask |
@@ -2414,85 +2610,74 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
I915_WRITE(GEN6_RP_DOWN_TIMEOUT, 1000000);
I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
- 18 << 24 |
- 6 << 16);
- I915_WRITE(GEN6_RP_UP_THRESHOLD, 10000);
- I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 1000000);
- I915_WRITE(GEN6_RP_UP_EI, 100000);
- I915_WRITE(GEN6_RP_DOWN_EI, 5000000);
+ dev_priv->rps.max_delay << 24 |
+ dev_priv->rps.min_delay << 16);
+
+ I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400);
+ I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000);
+ I915_WRITE(GEN6_RP_UP_EI, 66000);
+ I915_WRITE(GEN6_RP_DOWN_EI, 350000);
+
I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
I915_WRITE(GEN6_RP_CONTROL,
GEN6_RP_MEDIA_TURBO |
- GEN6_RP_MEDIA_HW_MODE |
+ GEN6_RP_MEDIA_HW_NORMAL_MODE |
GEN6_RP_MEDIA_IS_GFX |
GEN6_RP_ENABLE |
GEN6_RP_UP_BUSY_AVG |
- GEN6_RP_DOWN_IDLE_CONT);
-
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
- 500))
- DRM_ERROR("timeout waiting for pcode mailbox to become idle\n");
-
- I915_WRITE(GEN6_PCODE_DATA, 0);
- I915_WRITE(GEN6_PCODE_MAILBOX,
- GEN6_PCODE_READY |
- GEN6_PCODE_WRITE_MIN_FREQ_TABLE);
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
- 500))
- DRM_ERROR("timeout waiting for pcode mailbox to finish\n");
-
- min_freq = (rp_state_cap & 0xff0000) >> 16;
- max_freq = rp_state_cap & 0xff;
- cur_freq = (gt_perf_status & 0xff00) >> 8;
+ (IS_HASWELL(dev) ? GEN7_RP_DOWN_IDLE_AVG : GEN6_RP_DOWN_IDLE_CONT));
- /* Check for overclock support */
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
- 500))
- DRM_ERROR("timeout waiting for pcode mailbox to become idle\n");
- I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_READ_OC_PARAMS);
- pcu_mbox = I915_READ(GEN6_PCODE_DATA);
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
- 500))
- DRM_ERROR("timeout waiting for pcode mailbox to finish\n");
- if (pcu_mbox & (1<<31)) { /* OC supported */
- max_freq = pcu_mbox & 0xff;
- DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 50);
+ ret = sandybridge_pcode_write(dev_priv, GEN6_PCODE_WRITE_MIN_FREQ_TABLE, 0);
+ if (!ret) {
+ pcu_mbox = 0;
+ ret = sandybridge_pcode_read(dev_priv, GEN6_READ_OC_PARAMS, &pcu_mbox);
+ if (ret && pcu_mbox & (1<<31)) { /* OC supported */
+ dev_priv->rps.max_delay = pcu_mbox & 0xff;
+ DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 50);
+ }
+ } else {
+ DRM_DEBUG_DRIVER("Failed to set the min frequency\n");
}
- /* In units of 100MHz */
- dev_priv->max_delay = max_freq;
- dev_priv->min_delay = min_freq;
- dev_priv->cur_delay = cur_freq;
+ gen6_set_rps(dev_priv->dev, (gt_perf_status & 0xff00) >> 8);
/* requires MSI enabled */
- I915_WRITE(GEN6_PMIER,
- GEN6_PM_MBOX_EVENT |
- GEN6_PM_THERMAL_EVENT |
- GEN6_PM_RP_DOWN_TIMEOUT |
- GEN6_PM_RP_UP_THRESHOLD |
- GEN6_PM_RP_DOWN_THRESHOLD |
- GEN6_PM_RP_UP_EI_EXPIRED |
- GEN6_PM_RP_DOWN_EI_EXPIRED);
- mtx_lock(&dev_priv->rps_lock);
- if (dev_priv->pm_iir != 0)
- printf("KMS: pm_iir %x\n", dev_priv->pm_iir);
+ I915_WRITE(GEN6_PMIER, GEN6_PM_DEFERRED_EVENTS);
+ mtx_lock(&dev_priv->rps.lock);
+ WARN_ON(dev_priv->rps.pm_iir != 0);
I915_WRITE(GEN6_PMIMR, 0);
- mtx_unlock(&dev_priv->rps_lock);
+ mtx_unlock(&dev_priv->rps.lock);
/* enable all PM interrupts */
I915_WRITE(GEN6_PMINTRMSK, 0);
+ rc6vids = 0;
+ ret = sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS, &rc6vids);
+ if (IS_GEN6(dev) && ret) {
+ DRM_DEBUG_DRIVER("Couldn't check for BIOS workaround\n");
+ } else if (IS_GEN6(dev) && (GEN6_DECODE_RC6_VID(rc6vids & 0xff) < 450)) {
+ DRM_DEBUG_DRIVER("You should update your BIOS. Correcting minimum rc6 voltage (%dmV->%dmV)\n",
+ GEN6_DECODE_RC6_VID(rc6vids & 0xff), 450);
+ rc6vids &= 0xffff00;
+ rc6vids |= GEN6_ENCODE_RC6_VID(450);
+ ret = sandybridge_pcode_write(dev_priv, GEN6_PCODE_WRITE_RC6VIDS, rc6vids);
+ if (ret)
+ DRM_ERROR("Couldn't fix incorrect rc6 voltage\n");
+ }
+
gen6_gt_force_wake_put(dev_priv);
- DRM_UNLOCK(dev_priv->dev);
}
-void gen6_update_ring_freq(struct drm_i915_private *dev_priv)
+static void gen6_update_ring_freq(struct drm_device *dev)
{
+ struct drm_i915_private *dev_priv = dev->dev_private;
int min_freq = 15;
- int gpu_freq, ia_freq, max_ia_freq;
+ int gpu_freq;
+ unsigned int ia_freq, max_ia_freq;
int scaling_factor = 180;
- uint64_t tsc_freq;
-#if 0
+ sx_assert(&dev_priv->rps.hw_lock, SA_XLOCKED);
+
+#ifdef FREEBSD_WIP
max_ia_freq = cpufreq_quick_get_max(0);
/*
* Default to measured freq if none found, PCU will ensure we don't go
@@ -2500,25 +2685,23 @@ void gen6_update_ring_freq(struct drm_i915_private *dev_priv)
*/
if (!max_ia_freq)
max_ia_freq = tsc_khz;
-
- /* Convert from kHz to MHz */
- max_ia_freq /= 1000;
#else
+ uint64_t tsc_freq;
tsc_freq = atomic_load_acq_64(&tsc_freq);
- max_ia_freq = tsc_freq / 1000 / 1000;
-#endif
+ max_ia_freq = tsc_freq / 1000;
+#endif /* FREEBSD_WIP */
- DRM_LOCK(dev_priv->dev);
+ /* Convert from kHz to MHz */
+ max_ia_freq /= 1000;
/*
* For each potential GPU frequency, load a ring frequency we'd like
* to use for memory access. We do this by specifying the IA frequency
* the PCU should use as a reference to determine the ring frequency.
*/
- for (gpu_freq = dev_priv->max_delay; gpu_freq >= dev_priv->min_delay;
+ for (gpu_freq = dev_priv->rps.max_delay; gpu_freq >= dev_priv->rps.min_delay;
gpu_freq--) {
- int diff = dev_priv->max_delay - gpu_freq;
- int d;
+ int diff = dev_priv->rps.max_delay - gpu_freq;
/*
* For GPU frequencies less than 750MHz, just use the lowest
@@ -2528,42 +2711,33 @@ void gen6_update_ring_freq(struct drm_i915_private *dev_priv)
ia_freq = 800;
else
ia_freq = max_ia_freq - ((diff * scaling_factor) / 2);
- d = 100;
- ia_freq = (ia_freq + d / 2) / d;
-
- I915_WRITE(GEN6_PCODE_DATA,
- (ia_freq << GEN6_PCODE_FREQ_IA_RATIO_SHIFT) |
- gpu_freq);
- I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY |
- GEN6_PCODE_WRITE_MIN_FREQ_TABLE);
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) &
- GEN6_PCODE_READY) == 0, 10)) {
- DRM_ERROR("pcode write of freq table timed out\n");
- continue;
- }
- }
+ ia_freq = DIV_ROUND_CLOSEST(ia_freq, 100);
+ ia_freq <<= GEN6_PCODE_FREQ_IA_RATIO_SHIFT;
- DRM_UNLOCK(dev_priv->dev);
+ sandybridge_pcode_write(dev_priv,
+ GEN6_PCODE_WRITE_MIN_FREQ_TABLE,
+ ia_freq | gpu_freq);
+ }
}
-static void ironlake_teardown_rc6(struct drm_device *dev)
+void ironlake_teardown_rc6(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- if (dev_priv->renderctx) {
- i915_gem_object_unpin(dev_priv->renderctx);
- drm_gem_object_unreference(&dev_priv->renderctx->base);
- dev_priv->renderctx = NULL;
+ if (dev_priv->ips.renderctx) {
+ i915_gem_object_unpin(dev_priv->ips.renderctx);
+ drm_gem_object_unreference(&dev_priv->ips.renderctx->base);
+ dev_priv->ips.renderctx = NULL;
}
- if (dev_priv->pwrctx) {
- i915_gem_object_unpin(dev_priv->pwrctx);
- drm_gem_object_unreference(&dev_priv->pwrctx->base);
- dev_priv->pwrctx = NULL;
+ if (dev_priv->ips.pwrctx) {
+ i915_gem_object_unpin(dev_priv->ips.pwrctx);
+ drm_gem_object_unreference(&dev_priv->ips.pwrctx->base);
+ dev_priv->ips.pwrctx = NULL;
}
}
-void ironlake_disable_rc6(struct drm_device *dev)
+static void ironlake_disable_rc6(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -2579,22 +2753,20 @@ void ironlake_disable_rc6(struct drm_device *dev)
I915_WRITE(RSTDBYCTL, I915_READ(RSTDBYCTL) & ~RCX_SW_EXIT);
POSTING_READ(RSTDBYCTL);
}
-
- ironlake_teardown_rc6(dev);
}
static int ironlake_setup_rc6(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- if (dev_priv->renderctx == NULL)
- dev_priv->renderctx = intel_alloc_context_page(dev);
- if (!dev_priv->renderctx)
+ if (dev_priv->ips.renderctx == NULL)
+ dev_priv->ips.renderctx = intel_alloc_context_page(dev);
+ if (!dev_priv->ips.renderctx)
return -ENOMEM;
- if (dev_priv->pwrctx == NULL)
- dev_priv->pwrctx = intel_alloc_context_page(dev);
- if (!dev_priv->pwrctx) {
+ if (dev_priv->ips.pwrctx == NULL)
+ dev_priv->ips.pwrctx = intel_alloc_context_page(dev);
+ if (!dev_priv->ips.pwrctx) {
ironlake_teardown_rc6(dev);
return -ENOMEM;
}
@@ -2602,10 +2774,11 @@ static int ironlake_setup_rc6(struct drm_device *dev)
return 0;
}
-void ironlake_enable_rc6(struct drm_device *dev)
+static void ironlake_enable_rc6(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
+ bool was_interruptible;
int ret;
/* rc6 disabled by default due to repeated reports of hanging during
@@ -2614,12 +2787,14 @@ void ironlake_enable_rc6(struct drm_device *dev)
if (!intel_enable_rc6(dev))
return;
- DRM_LOCK(dev);
+ DRM_LOCK_ASSERT(dev);
+
ret = ironlake_setup_rc6(dev);
- if (ret) {
- DRM_UNLOCK(dev);
+ if (ret)
return;
- }
+
+ was_interruptible = dev_priv->mm.interruptible;
+ dev_priv->mm.interruptible = false;
/*
* GPU can automatically power down the render unit if given a page
@@ -2628,13 +2803,13 @@ void ironlake_enable_rc6(struct drm_device *dev)
ret = intel_ring_begin(ring, 6);
if (ret) {
ironlake_teardown_rc6(dev);
- DRM_UNLOCK(dev);
+ dev_priv->mm.interruptible = was_interruptible;
return;
}
intel_ring_emit(ring, MI_SUSPEND_FLUSH | MI_SUSPEND_FLUSH_EN);
intel_ring_emit(ring, MI_SET_CONTEXT);
- intel_ring_emit(ring, dev_priv->renderctx->gtt_offset |
+ intel_ring_emit(ring, dev_priv->ips.renderctx->gtt_offset |
MI_MM_SPACE_GTT |
MI_SAVE_EXT_STATE_EN |
MI_RESTORE_EXT_STATE_EN |
@@ -2649,17 +2824,16 @@ void ironlake_enable_rc6(struct drm_device *dev)
* does an implicit flush, combined with MI_FLUSH above, it should be
* safe to assume that renderctx is valid
*/
- ret = intel_wait_ring_idle(ring);
+ ret = intel_ring_idle(ring);
+ dev_priv->mm.interruptible = was_interruptible;
if (ret) {
DRM_ERROR("failed to enable ironlake power power savings\n");
ironlake_teardown_rc6(dev);
- DRM_UNLOCK(dev);
return;
}
- I915_WRITE(PWRCTXA, dev_priv->pwrctx->gtt_offset | PWRCTX_EN);
+ I915_WRITE(PWRCTXA, dev_priv->ips.pwrctx->gtt_offset | PWRCTX_EN);
I915_WRITE(RSTDBYCTL, I915_READ(RSTDBYCTL) & ~RCX_SW_EXIT);
- DRM_UNLOCK(dev);
}
static unsigned long intel_pxfreq(u32 vidfreq)
@@ -2691,22 +2865,24 @@ static const struct cparams {
{ 0, 800, 231, 23784 },
};
-unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
+static unsigned long __i915_chipset_val(struct drm_i915_private *dev_priv)
{
u64 total_count, diff, ret;
u32 count1, count2, count3, m = 0, c = 0;
unsigned long now = jiffies_to_msecs(jiffies), diff1;
int i;
- diff1 = now - dev_priv->last_time1;
- /*
- * sysctl(8) reads the value of sysctl twice in rapid
- * succession. There is high chance that it happens in the
- * same timer tick. Use the cached value to not divide by
- * zero and give the hw a chance to gather more samples.
+ mtx_assert(&mchdev_lock, MA_OWNED);
+
+ diff1 = now - dev_priv->ips.last_time1;
+
+ /* Prevent division-by-zero if we are asking too fast.
+ * Also, we don't get interesting results if we are polling
+ * faster than once in 10ms, so just return the saved value
+ * in such cases.
*/
if (diff1 <= 10)
- return dev_priv->chipset_power;
+ return dev_priv->ips.chipset_power;
count1 = I915_READ(DMIEC);
count2 = I915_READ(DDREC);
@@ -2715,33 +2891,50 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
total_count = count1 + count2 + count3;
/* FIXME: handle per-counter overflow */
- if (total_count < dev_priv->last_count1) {
- diff = ~0UL - dev_priv->last_count1;
+ if (total_count < dev_priv->ips.last_count1) {
+ diff = ~0UL - dev_priv->ips.last_count1;
diff += total_count;
} else {
- diff = total_count - dev_priv->last_count1;
+ diff = total_count - dev_priv->ips.last_count1;
}
- for (i = 0; i < DRM_ARRAY_SIZE(cparams); i++) {
- if (cparams[i].i == dev_priv->c_m &&
- cparams[i].t == dev_priv->r_t) {
+ for (i = 0; i < ARRAY_SIZE(cparams); i++) {
+ if (cparams[i].i == dev_priv->ips.c_m &&
+ cparams[i].t == dev_priv->ips.r_t) {
m = cparams[i].m;
c = cparams[i].c;
break;
}
}
- diff = diff / diff1;
+ diff = div_u64(diff, diff1);
ret = ((m * diff) + c);
- ret = ret / 10;
+ ret = div_u64(ret, 10);
+
+ dev_priv->ips.last_count1 = total_count;
+ dev_priv->ips.last_time1 = now;
- dev_priv->last_count1 = total_count;
- dev_priv->last_time1 = now;
+ dev_priv->ips.chipset_power = ret;
- dev_priv->chipset_power = ret;
return ret;
}
+unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
+{
+ unsigned long val;
+
+ if (dev_priv->info->gen != 5)
+ return 0;
+
+ mtx_lock(&mchdev_lock);
+
+ val = __i915_chipset_val(dev_priv);
+
+ mtx_unlock(&mchdev_lock);
+
+ return val;
+}
+
unsigned long i915_mch_val(struct drm_i915_private *dev_priv)
{
unsigned long m, x, b;
@@ -2898,19 +3091,18 @@ static u16 pvid_to_extvid(struct drm_i915_private *dev_priv, u8 pxvid)
return v_table[pxvid].vd;
}
-void i915_update_gfx_val(struct drm_i915_private *dev_priv)
+static void __i915_update_gfx_val(struct drm_i915_private *dev_priv)
{
struct timespec now, diff1;
u64 diff;
unsigned long diffms;
u32 count;
- if (dev_priv->info->gen != 5)
- return;
+ mtx_assert(&mchdev_lock, MA_OWNED);
nanotime(&now);
diff1 = now;
- timespecsub(&diff1, &dev_priv->last_time2);
+ timespecsub(&diff1, &dev_priv->ips.last_time2);
/* Don't divide by 0 */
diffms = diff1.tv_sec * 1000 + diff1.tv_nsec / 1000000;
@@ -2919,28 +3111,42 @@ void i915_update_gfx_val(struct drm_i915_private *dev_priv)
count = I915_READ(GFXEC);
- if (count < dev_priv->last_count2) {
- diff = ~0UL - dev_priv->last_count2;
+ if (count < dev_priv->ips.last_count2) {
+ diff = ~0UL - dev_priv->ips.last_count2;
diff += count;
} else {
- diff = count - dev_priv->last_count2;
+ diff = count - dev_priv->ips.last_count2;
}
- dev_priv->last_count2 = count;
- dev_priv->last_time2 = now;
+ dev_priv->ips.last_count2 = count;
+ dev_priv->ips.last_time2 = now;
/* More magic constants... */
diff = diff * 1181;
- diff = diff / (diffms * 10);
- dev_priv->gfx_power = diff;
+ diff = div_u64(diff, diffms * 10);
+ dev_priv->ips.gfx_power = diff;
}
-unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
+void i915_update_gfx_val(struct drm_i915_private *dev_priv)
+{
+ if (dev_priv->info->gen != 5)
+ return;
+
+ mtx_lock(&mchdev_lock);
+
+ __i915_update_gfx_val(dev_priv);
+
+ mtx_unlock(&mchdev_lock);
+}
+
+static unsigned long __i915_gfx_val(struct drm_i915_private *dev_priv)
{
unsigned long t, corr, state1, corr2, state2;
u32 pxvid, ext_v;
- pxvid = I915_READ(PXVFREQ_BASE + (dev_priv->cur_delay * 4));
+ mtx_assert(&mchdev_lock, MA_OWNED);
+
+ pxvid = I915_READ(PXVFREQ_BASE + (dev_priv->rps.cur_delay * 4));
pxvid = (pxvid >> 24) & 0x7f;
ext_v = pvid_to_extvid(dev_priv, pxvid);
@@ -2960,14 +3166,30 @@ unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
corr = corr * ((150142 * state1) / 10000 - 78642);
corr /= 100000;
- corr2 = (corr * dev_priv->corr);
+ corr2 = (corr * dev_priv->ips.corr);
state2 = (corr2 * state1) / 10000;
state2 /= 100; /* convert to mW */
- i915_update_gfx_val(dev_priv);
+ __i915_update_gfx_val(dev_priv);
+
+ return dev_priv->ips.gfx_power + state2;
+}
+
+unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
+{
+ unsigned long val;
+
+ if (dev_priv->info->gen != 5)
+ return 0;
+
+ mtx_lock(&mchdev_lock);
+
+ val = __i915_gfx_val(dev_priv);
+
+ mtx_unlock(&mchdev_lock);
- return dev_priv->gfx_power + state2;
+ return val;
}
/**
@@ -2986,8 +3208,8 @@ unsigned long i915_read_mch_val(void)
goto out_unlock;
dev_priv = i915_mch_dev;
- chipset_val = i915_chipset_val(dev_priv);
- graphics_val = i915_gfx_val(dev_priv);
+ chipset_val = __i915_chipset_val(dev_priv);
+ graphics_val = __i915_gfx_val(dev_priv);
ret = chipset_val + graphics_val;
@@ -2996,6 +3218,7 @@ out_unlock:
return ret;
}
+EXPORT_SYMBOL_GPL(i915_read_mch_val);
/**
* i915_gpu_raise - raise GPU frequency limit
@@ -3014,14 +3237,15 @@ bool i915_gpu_raise(void)
}
dev_priv = i915_mch_dev;
- if (dev_priv->max_delay > dev_priv->fmax)
- dev_priv->max_delay--;
+ if (dev_priv->ips.max_delay > dev_priv->ips.fmax)
+ dev_priv->ips.max_delay--;
out_unlock:
mtx_unlock(&mchdev_lock);
return ret;
}
+EXPORT_SYMBOL_GPL(i915_gpu_raise);
/**
* i915_gpu_lower - lower GPU frequency limit
@@ -3041,14 +3265,15 @@ bool i915_gpu_lower(void)
}
dev_priv = i915_mch_dev;
- if (dev_priv->max_delay < dev_priv->min_delay)
- dev_priv->max_delay++;
+ if (dev_priv->ips.max_delay < dev_priv->ips.min_delay)
+ dev_priv->ips.max_delay++;
out_unlock:
mtx_unlock(&mchdev_lock);
return ret;
}
+EXPORT_SYMBOL_GPL(i915_gpu_lower);
/**
* i915_gpu_busy - indicate GPU business to IPS
@@ -3058,20 +3283,24 @@ out_unlock:
bool i915_gpu_busy(void)
{
struct drm_i915_private *dev_priv;
+ struct intel_ring_buffer *ring;
bool ret = false;
+ int i;
mtx_lock(&mchdev_lock);
if (!i915_mch_dev)
goto out_unlock;
dev_priv = i915_mch_dev;
- ret = dev_priv->busy;
+ for_each_ring(ring, dev_priv, i)
+ ret |= !list_empty(&ring->request_list);
out_unlock:
mtx_unlock(&mchdev_lock);
return ret;
}
+EXPORT_SYMBOL_GPL(i915_gpu_busy);
/**
* i915_gpu_turbo_disable - disable graphics turbo
@@ -3091,9 +3320,9 @@ bool i915_gpu_turbo_disable(void)
}
dev_priv = i915_mch_dev;
- dev_priv->max_delay = dev_priv->fstart;
+ dev_priv->ips.max_delay = dev_priv->ips.fstart;
- if (!ironlake_set_drps(dev_priv->dev, dev_priv->fstart))
+ if (!ironlake_set_drps(dev_priv->dev, dev_priv->ips.fstart))
ret = false;
out_unlock:
@@ -3101,17 +3330,41 @@ out_unlock:
return ret;
}
+EXPORT_SYMBOL_GPL(i915_gpu_turbo_disable);
+
+#ifdef FREEBSD_WIP
+/**
+ * Tells the intel_ips driver that the i915 driver is now loaded, if
+ * IPS got loaded first.
+ *
+ * This awkward dance is so that neither module has to depend on the
+ * other in order for IPS to do the appropriate communication of
+ * GPU turbo limits to i915.
+ */
+static void
+ips_ping_for_i915_load(void)
+{
+ void (*link)(void);
+
+ link = symbol_get(ips_link_to_i915_driver);
+ if (link) {
+ link();
+ symbol_put(ips_link_to_i915_driver);
+ }
+}
+#endif /* FREEBSD_WIP */
void intel_gpu_ips_init(struct drm_i915_private *dev_priv)
{
+ /* We only register the i915 ips part with intel-ips once everything is
+ * set up, to avoid intel-ips sneaking in and reading bogus values. */
mtx_lock(&mchdev_lock);
i915_mch_dev = dev_priv;
- dev_priv->mchdev_lock = &mchdev_lock;
mtx_unlock(&mchdev_lock);
-#if 0
+#ifdef FREEBSD_WIP
ips_ping_for_i915_load();
-#endif
+#endif /* FREEBSD_WIP */
}
void intel_gpu_ips_teardown(void)
@@ -3120,8 +3373,7 @@ void intel_gpu_ips_teardown(void)
i915_mch_dev = NULL;
mtx_unlock(&mchdev_lock);
}
-
-void intel_init_emon(struct drm_device *dev)
+static void intel_init_emon(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
u32 lcfuse;
@@ -3189,7 +3441,52 @@ void intel_init_emon(struct drm_device *dev)
lcfuse = I915_READ(LCFUSE02);
- dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK);
+ dev_priv->ips.corr = (lcfuse & LCFUSE_HIV_MASK);
+}
+
+void intel_disable_gt_powersave(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_IRONLAKE_M(dev)) {
+ ironlake_disable_drps(dev);
+ ironlake_disable_rc6(dev);
+ } else if (INTEL_INFO(dev)->gen >= 6 && !IS_VALLEYVIEW(dev)) {
+ taskqueue_cancel_timeout(dev_priv->wq, &dev_priv->rps.delayed_resume_work, NULL);
+ sx_xlock(&dev_priv->rps.hw_lock);
+ gen6_disable_rps(dev);
+ sx_xunlock(&dev_priv->rps.hw_lock);
+ }
+}
+
+static void intel_gen6_powersave_work(void *arg, int pending)
+{
+ struct drm_i915_private *dev_priv = arg;
+ struct drm_device *dev = dev_priv->dev;
+
+ sx_xlock(&dev_priv->rps.hw_lock);
+ gen6_enable_rps(dev);
+ gen6_update_ring_freq(dev);
+ sx_xunlock(&dev_priv->rps.hw_lock);
+}
+
+void intel_enable_gt_powersave(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_IRONLAKE_M(dev)) {
+ ironlake_enable_drps(dev);
+ ironlake_enable_rc6(dev);
+ intel_init_emon(dev);
+ } else if ((IS_GEN6(dev) || IS_GEN7(dev)) && !IS_VALLEYVIEW(dev)) {
+ /*
+ * PCU communication is slow and this doesn't need to be
+ * done at any specific time, so do this out of our fast path
+ * to make resume and init faster.
+ */
+ taskqueue_enqueue_timeout(dev_priv->wq, &dev_priv->rps.delayed_resume_work,
+ round_jiffies_up_relative(HZ));
+ }
}
static void ibx_init_clock_gating(struct drm_device *dev)
@@ -3207,14 +3504,12 @@ static void ibx_init_clock_gating(struct drm_device *dev)
static void ironlake_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
+ uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE;
/* Required for FBC */
- dspclk_gate |= DPFCUNIT_CLOCK_GATE_DISABLE |
- DPFCRUNIT_CLOCK_GATE_DISABLE |
- DPFDUNIT_CLOCK_GATE_DISABLE;
- /* Required for CxSR */
- dspclk_gate |= DPARBUNIT_CLOCK_GATE_DISABLE;
+ dspclk_gate |= ILK_DPFCRUNIT_CLOCK_GATE_DISABLE |
+ ILK_DPFCUNIT_CLOCK_GATE_DISABLE |
+ ILK_DPFDUNIT_CLOCK_GATE_ENABLE;
I915_WRITE(PCH_3DCGDIS0,
MARIUNIT_CLOCK_GATE_DISABLE |
@@ -3222,8 +3517,6 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
I915_WRITE(PCH_3DCGDIS1,
VFMUNIT_CLOCK_GATE_DISABLE);
- I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
-
/*
* According to the spec the following bits should be set in
* order to enable memory self-refresh
@@ -3234,9 +3527,7 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
I915_WRITE(ILK_DISPLAY_CHICKEN2,
(I915_READ(ILK_DISPLAY_CHICKEN2) |
ILK_DPARB_GATE | ILK_VSDPFD_FULL));
- I915_WRITE(ILK_DSPCLK_GATE,
- (I915_READ(ILK_DSPCLK_GATE) |
- ILK_DPARB_CLK_GATE));
+ dspclk_gate |= ILK_DPARBUNIT_CLOCK_GATE_ENABLE;
I915_WRITE(DISP_ARB_CTL,
(I915_READ(DISP_ARB_CTL) |
DISP_FBC_WM_DIS));
@@ -3258,25 +3549,29 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
I915_WRITE(ILK_DISPLAY_CHICKEN2,
I915_READ(ILK_DISPLAY_CHICKEN2) |
ILK_DPARB_GATE);
- I915_WRITE(ILK_DSPCLK_GATE,
- I915_READ(ILK_DSPCLK_GATE) |
- ILK_DPFC_DIS1 |
- ILK_DPFC_DIS2 |
- ILK_CLK_FBC);
}
+ I915_WRITE(ILK_DSPCLK_GATE_D, dspclk_gate);
+
I915_WRITE(ILK_DISPLAY_CHICKEN2,
I915_READ(ILK_DISPLAY_CHICKEN2) |
ILK_ELPIN_409_SELECT);
I915_WRITE(_3D_CHICKEN2,
_3D_CHICKEN2_WM_READ_PIPELINED << 16 |
_3D_CHICKEN2_WM_READ_PIPELINED);
+
+ /* WaDisableRenderCachePipelinedFlush */
+ I915_WRITE(CACHE_MODE_0,
+ _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE));
+
+ ibx_init_clock_gating(dev);
}
static void cpt_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
int pipe;
+ uint32_t val;
/*
* On Ibex Peak and Cougar Point, we need to disable clock
@@ -3286,23 +3581,43 @@ static void cpt_init_clock_gating(struct drm_device *dev)
I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |
DPLS_EDP_PPS_FIX_DIS);
- /* Without this, mode sets may fail silently on FDI */
- for_each_pipe(pipe)
- I915_WRITE(TRANS_CHICKEN2(pipe), TRANS_AUTOTRAIN_GEN_STALL_DIS);
+ /* The below fixes the weird display corruption, a few pixels shifted
+ * downward, on (only) LVDS of some HP laptops with IVY.
+ */
+ for_each_pipe(pipe) {
+ val = TRANS_CHICKEN2_TIMING_OVERRIDE;
+ if (dev_priv->fdi_rx_polarity_inverted)
+ val |= TRANS_CHICKEN2_FDI_POLARITY_REVERSED;
+ I915_WRITE(TRANS_CHICKEN2(pipe), val);
+ }
+ /* WADP0ClockGatingDisable */
+ for_each_pipe(pipe) {
+ I915_WRITE(TRANS_CHICKEN1(pipe),
+ TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
+ }
}
static void gen6_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
int pipe;
- uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
+ uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE;
- I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
+ I915_WRITE(ILK_DSPCLK_GATE_D, dspclk_gate);
I915_WRITE(ILK_DISPLAY_CHICKEN2,
I915_READ(ILK_DISPLAY_CHICKEN2) |
ILK_ELPIN_409_SELECT);
+ /* WaDisableHiZPlanesWhenMSAAEnabled */
+ I915_WRITE(_3D_CHICKEN,
+ _MASKED_BIT_ENABLE(_3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB));
+
+ /* WaSetupGtModeTdRowDispatch */
+ if (IS_SNB_GT1(dev))
+ I915_WRITE(GEN6_GT_MODE,
+ _MASKED_BIT_ENABLE(GEN6_TD_FOUR_ROW_DISPATCH_DISABLE));
+
I915_WRITE(WM3_LP_ILK, 0);
I915_WRITE(WM2_LP_ILK, 0);
I915_WRITE(WM1_LP_ILK, 0);
@@ -3324,13 +3639,17 @@ static void gen6_init_clock_gating(struct drm_device *dev)
*
* According to the spec, bit 11 (RCCUNIT) must also be set,
* but we didn't debug actual testcases to find it out.
+ *
+ * Also apply WaDisableVDSUnitClockGating and
+ * WaDisableRCPBUnitClockGating.
*/
I915_WRITE(GEN6_UCGCTL2,
+ GEN7_VDSUNIT_CLOCK_GATE_DISABLE |
GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
/* Bspec says we need to always set all mask bits. */
- I915_WRITE(_3D_CHICKEN, (0xFFFF << 16) |
+ I915_WRITE(_3D_CHICKEN3, (0xFFFF << 16) |
_3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL);
/*
@@ -3348,10 +3667,14 @@ static void gen6_init_clock_gating(struct drm_device *dev)
I915_WRITE(ILK_DISPLAY_CHICKEN2,
I915_READ(ILK_DISPLAY_CHICKEN2) |
ILK_DPARB_GATE | ILK_VSDPFD_FULL);
- I915_WRITE(ILK_DSPCLK_GATE,
- I915_READ(ILK_DSPCLK_GATE) |
- ILK_DPARB_CLK_GATE |
- ILK_DPFD_CLK_GATE);
+ I915_WRITE(ILK_DSPCLK_GATE_D,
+ I915_READ(ILK_DSPCLK_GATE_D) |
+ ILK_DPARBUNIT_CLOCK_GATE_ENABLE |
+ ILK_DPFDUNIT_CLOCK_GATE_ENABLE);
+
+ /* WaMbcDriverBootEnable */
+ I915_WRITE(GEN6_MBCTL, I915_READ(GEN6_MBCTL) |
+ GEN6_MBCTL_ENABLE_BOOT_FETCH);
for_each_pipe(pipe) {
I915_WRITE(DSPCNTR(pipe),
@@ -3359,6 +3682,13 @@ static void gen6_init_clock_gating(struct drm_device *dev)
DISPPLANE_TRICKLE_FEED_DISABLE);
intel_flush_display_plane(dev_priv, pipe);
}
+
+ /* The default value should be 0x200 according to docs, but the two
+ * platforms I checked have a 0 for this. (Maybe BIOS overrides?) */
+ I915_WRITE(GEN6_GT_MODE, _MASKED_BIT_DISABLE(0xffff));
+ I915_WRITE(GEN6_GT_MODE, _MASKED_BIT_ENABLE(GEN6_GT_MODE_HI));
+
+ cpt_init_clock_gating(dev);
}
static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
@@ -3373,13 +3703,24 @@ static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
I915_WRITE(GEN7_FF_THREAD_MODE, reg);
}
-static void ivybridge_init_clock_gating(struct drm_device *dev)
+static void lpt_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- int pipe;
- uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
- I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
+ /*
+ * TODO: this bit should only be enabled when really needed, then
+ * disabled when not needed anymore in order to save power.
+ */
+ if (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE)
+ I915_WRITE(SOUTH_DSPCLK_GATE_D,
+ I915_READ(SOUTH_DSPCLK_GATE_D) |
+ PCH_LP_PARTITION_LEVEL_DISABLE);
+}
+
+static void haswell_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe;
I915_WRITE(WM3_LP_ILK, 0);
I915_WRITE(WM2_LP_ILK, 0);
@@ -3390,12 +3731,79 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
*/
I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
- I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
+ /* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
+ I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
+ GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
+
+ /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */
+ I915_WRITE(GEN7_L3CNTLREG1,
+ GEN7_WA_FOR_GEN7_L3_CONTROL);
+ I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
+ GEN7_WA_L3_CHICKEN_MODE);
+
+ /* This is required by WaCatErrorRejectionIssue */
+ I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
+ I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
+ GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
+
+ for_each_pipe(pipe) {
+ I915_WRITE(DSPCNTR(pipe),
+ I915_READ(DSPCNTR(pipe)) |
+ DISPPLANE_TRICKLE_FEED_DISABLE);
+ intel_flush_display_plane(dev_priv, pipe);
+ }
+
+ gen7_setup_fixed_func_scheduler(dev_priv);
+
+ /* WaDisable4x2SubspanOptimization */
+ I915_WRITE(CACHE_MODE_1,
+ _MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
+
+ /* WaMbcDriverBootEnable */
+ I915_WRITE(GEN6_MBCTL, I915_READ(GEN6_MBCTL) |
+ GEN6_MBCTL_ENABLE_BOOT_FETCH);
+
+ /* XXX: This is a workaround for early silicon revisions and should be
+ * removed later.
+ */
+ I915_WRITE(WM_DBG,
+ I915_READ(WM_DBG) |
+ WM_DBG_DISALLOW_MULTIPLE_LP |
+ WM_DBG_DISALLOW_SPRITE |
+ WM_DBG_DISALLOW_MAXFIFO);
+
+ lpt_init_clock_gating(dev);
+}
+
+static void ivybridge_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe;
+ uint32_t snpcr;
+
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ I915_WRITE(ILK_DSPCLK_GATE_D, ILK_VRHUNIT_CLOCK_GATE_DISABLE);
+ /* WaDisableEarlyCull */
+ I915_WRITE(_3D_CHICKEN3,
+ _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
+
+ /* WaDisableBackToBackFlipFix */
I915_WRITE(IVB_CHICKEN3,
CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
CHICKEN3_DGMG_DONE_FIX_DISABLE);
+ /* WaDisablePSDDualDispatchEnable */
+ if (IS_IVB_GT1(dev))
+ I915_WRITE(GEN7_HALF_SLICE_CHICKEN1,
+ _MASKED_BIT_ENABLE(GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
+ else
+ I915_WRITE(GEN7_HALF_SLICE_CHICKEN1_GT2,
+ _MASKED_BIT_ENABLE(GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
+
/* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
@@ -3404,7 +3812,35 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
I915_WRITE(GEN7_L3CNTLREG1,
GEN7_WA_FOR_GEN7_L3_CONTROL);
I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
- GEN7_WA_L3_CHICKEN_MODE);
+ GEN7_WA_L3_CHICKEN_MODE);
+ if (IS_IVB_GT1(dev))
+ I915_WRITE(GEN7_ROW_CHICKEN2,
+ _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
+ else
+ I915_WRITE(GEN7_ROW_CHICKEN2_GT2,
+ _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
+
+
+ /* WaForceL3Serialization */
+ I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
+ ~L3SQ_URB_READ_CAM_MATCH_DISABLE);
+
+ /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock
+ * gating disable must be set. Failure to set it results in
+ * flickering pixels due to Z write ordering failures after
+ * some amount of runtime in the Mesa "fire" demo, and Unigine
+ * Sanctuary and Tropics, and apparently anything else with
+ * alpha test or pixel discard.
+ *
+ * According to the spec, bit 11 (RCCUNIT) must also be set,
+ * but we didn't debug actual testcases to find it out.
+ *
+ * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
+ * This implements the WaDisableRCZUnitClockGating workaround.
+ */
+ I915_WRITE(GEN6_UCGCTL2,
+ GEN6_RCZUNIT_CLOCK_GATE_DISABLE |
+ GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
/* This is required by WaCatErrorRejectionIssue */
I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
@@ -3418,49 +3854,102 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
intel_flush_display_plane(dev_priv, pipe);
}
+ /* WaMbcDriverBootEnable */
+ I915_WRITE(GEN6_MBCTL, I915_READ(GEN6_MBCTL) |
+ GEN6_MBCTL_ENABLE_BOOT_FETCH);
+
gen7_setup_fixed_func_scheduler(dev_priv);
/* WaDisable4x2SubspanOptimization */
I915_WRITE(CACHE_MODE_1,
_MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
+
+ snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
+ snpcr &= ~GEN6_MBC_SNPCR_MASK;
+ snpcr |= GEN6_MBC_SNPCR_MED;
+ I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
+
+ cpt_init_clock_gating(dev);
}
static void valleyview_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
int pipe;
- uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
-
- I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
I915_WRITE(WM3_LP_ILK, 0);
I915_WRITE(WM2_LP_ILK, 0);
I915_WRITE(WM1_LP_ILK, 0);
- /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
- * This implements the WaDisableRCZUnitClockGating workaround.
- */
- I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
+ I915_WRITE(ILK_DSPCLK_GATE_D, ILK_VRHUNIT_CLOCK_GATE_DISABLE);
- I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
+ /* WaDisableEarlyCull */
+ I915_WRITE(_3D_CHICKEN3,
+ _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
+ /* WaDisableBackToBackFlipFix */
I915_WRITE(IVB_CHICKEN3,
CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
CHICKEN3_DGMG_DONE_FIX_DISABLE);
+ I915_WRITE(GEN7_HALF_SLICE_CHICKEN1,
+ _MASKED_BIT_ENABLE(GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
+
/* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
/* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */
- I915_WRITE(GEN7_L3CNTLREG1, GEN7_WA_FOR_GEN7_L3_CONTROL);
+ I915_WRITE(GEN7_L3CNTLREG1, I915_READ(GEN7_L3CNTLREG1) | GEN7_L3AGDIS);
I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER, GEN7_WA_L3_CHICKEN_MODE);
+ /* WaForceL3Serialization */
+ I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
+ ~L3SQ_URB_READ_CAM_MATCH_DISABLE);
+
+ /* WaDisableDopClockGating */
+ I915_WRITE(GEN7_ROW_CHICKEN2,
+ _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
+
+ /* WaForceL3Serialization */
+ I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
+ ~L3SQ_URB_READ_CAM_MATCH_DISABLE);
+
/* This is required by WaCatErrorRejectionIssue */
I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
+ /* WaMbcDriverBootEnable */
+ I915_WRITE(GEN6_MBCTL, I915_READ(GEN6_MBCTL) |
+ GEN6_MBCTL_ENABLE_BOOT_FETCH);
+
+
+ /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock
+ * gating disable must be set. Failure to set it results in
+ * flickering pixels due to Z write ordering failures after
+ * some amount of runtime in the Mesa "fire" demo, and Unigine
+ * Sanctuary and Tropics, and apparently anything else with
+ * alpha test or pixel discard.
+ *
+ * According to the spec, bit 11 (RCCUNIT) must also be set,
+ * but we didn't debug actual testcases to find it out.
+ *
+ * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
+ * This implements the WaDisableRCZUnitClockGating workaround.
+ *
+ * Also apply WaDisableVDSUnitClockGating and
+ * WaDisableRCPBUnitClockGating.
+ */
+ I915_WRITE(GEN6_UCGCTL2,
+ GEN7_VDSUNIT_CLOCK_GATE_DISABLE |
+ GEN7_TDLUNIT_CLOCK_GATE_DISABLE |
+ GEN6_RCZUNIT_CLOCK_GATE_DISABLE |
+ GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
+ GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
+
+ I915_WRITE(GEN7_UCGCTL4, GEN7_L3BANK2X_CLOCK_GATE_DISABLE);
+
for_each_pipe(pipe) {
I915_WRITE(DSPCNTR(pipe),
I915_READ(DSPCNTR(pipe)) |
@@ -3470,6 +3959,26 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
I915_WRITE(CACHE_MODE_1,
_MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
+
+ /*
+ * On ValleyView, the GUnit needs to signal the GT
+ * when flip and other events complete. So enable
+ * all the GUnit->GT interrupts here
+ */
+ I915_WRITE(VLV_DPFLIPSTAT, PIPEB_LINE_COMPARE_INT_EN |
+ PIPEB_HLINE_INT_EN | PIPEB_VBLANK_INT_EN |
+ SPRITED_FLIPDONE_INT_EN | SPRITEC_FLIPDONE_INT_EN |
+ PLANEB_FLIPDONE_INT_EN | PIPEA_LINE_COMPARE_INT_EN |
+ PIPEA_HLINE_INT_EN | PIPEA_VBLANK_INT_EN |
+ SPRITEB_FLIPDONE_INT_EN | SPRITEA_FLIPDONE_INT_EN |
+ PLANEA_FLIPDONE_INT_EN);
+
+ /*
+ * WaDisableVLVClockGating_VBIIssue
+ * Disable clock gating on th GCFG unit to prevent a delay
+ * in the reporting of vblank events.
+ */
+ I915_WRITE(VLV_GUNIT_CLOCK_GATE, GCFG_DIS);
}
static void g4x_init_clock_gating(struct drm_device *dev)
@@ -3488,6 +3997,10 @@ static void g4x_init_clock_gating(struct drm_device *dev)
if (IS_GM45(dev))
dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
I915_WRITE(DSPCLK_GATE_D, dspclk_gate);
+
+ /* WaDisableRenderCachePipelinedFlush */
+ I915_WRITE(CACHE_MODE_0,
+ _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE));
}
static void crestline_init_clock_gating(struct drm_device *dev)
@@ -3524,6 +4037,9 @@ static void gen3_init_clock_gating(struct drm_device *dev)
if (IS_PINEVIEW(dev))
I915_WRITE(ECOSKPD, _MASKED_BIT_ENABLE(ECO_GATING_CX_ONLY));
+
+ /* IIR "flip pending" means done if this bit is set */
+ I915_WRITE(ECOSKPD, _MASKED_BIT_DISABLE(ECO_FLIP_DONE));
}
static void i85x_init_clock_gating(struct drm_device *dev)
@@ -3545,50 +4061,12 @@ void intel_init_clock_gating(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
dev_priv->display.init_clock_gating(dev);
-
- if (dev_priv->display.init_pch_clock_gating)
- dev_priv->display.init_pch_clock_gating(dev);
-}
-
-static void gen6_sanitize_pm(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- u32 limits, delay, old;
-
- gen6_gt_force_wake_get(dev_priv);
-
- old = limits = I915_READ(GEN6_RP_INTERRUPT_LIMITS);
- /* Make sure we continue to get interrupts
- * until we hit the minimum or maximum frequencies.
- */
- limits &= ~(0x3f << 16 | 0x3f << 24);
- delay = dev_priv->cur_delay;
- if (delay < dev_priv->max_delay)
- limits |= (dev_priv->max_delay & 0x3f) << 24;
- if (delay > dev_priv->min_delay)
- limits |= (dev_priv->min_delay & 0x3f) << 16;
-
- if (old != limits) {
- DRM_ERROR("Power management discrepancy: GEN6_RP_INTERRUPT_LIMITS expected %08x, was %08x\n",
- limits, old);
- I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, limits);
- }
-
- gen6_gt_force_wake_put(dev_priv);
-}
-
-void intel_sanitize_pm(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (dev_priv->display.sanitize_pm)
- dev_priv->display.sanitize_pm(dev);
}
/* Starting with Haswell, we have different power wells for
* different parts of the GPU. This attempts to enable them all.
*/
-static void intel_init_power_wells(struct drm_device *dev)
+void intel_init_power_wells(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long power_wells[] = {
@@ -3603,19 +4081,16 @@ static void intel_init_power_wells(struct drm_device *dev)
DRM_LOCK(dev);
- for (i = 0; i < DRM_ARRAY_SIZE(power_wells); i++) {
+ for (i = 0; i < ARRAY_SIZE(power_wells); i++) {
int well = I915_READ(power_wells[i]);
if ((well & HSW_PWR_WELL_STATE) == 0) {
I915_WRITE(power_wells[i], well & HSW_PWR_WELL_ENABLE);
- if (wait_for(I915_READ(power_wells[i] & HSW_PWR_WELL_STATE), 20))
+ if (wait_for((I915_READ(power_wells[i]) & HSW_PWR_WELL_STATE), 20))
DRM_ERROR("Error enabling power well %lx\n", power_wells[i]);
}
}
-printf("XXXKIB HACK: HSW RC OFF\n");
- I915_WRITE(GEN6_RC_STATE, 0);
- I915_WRITE(GEN6_RC_CONTROL, 0);
DRM_UNLOCK(dev);
}
@@ -3649,39 +4124,6 @@ void intel_init_pm(struct drm_device *dev)
/* For FIFO watermark updates */
if (HAS_PCH_SPLIT(dev)) {
- dev_priv->display.force_wake_get = __gen6_gt_force_wake_get;
- dev_priv->display.force_wake_put = __gen6_gt_force_wake_put;
-
- /* IVB configs may use multi-threaded forcewake */
- if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
- u32 ecobus;
-
- /* A small trick here - if the bios hasn't configured MT forcewake,
- * and if the device is in RC6, then force_wake_mt_get will not wake
- * the device and the ECOBUS read will return zero. Which will be
- * (correctly) interpreted by the test below as MT forcewake being
- * disabled.
- */
- DRM_LOCK(dev);
- __gen6_gt_force_wake_mt_get(dev_priv);
- ecobus = I915_READ_NOTRACE(ECOBUS);
- __gen6_gt_force_wake_mt_put(dev_priv);
- DRM_UNLOCK(dev);
-
- if (ecobus & FORCEWAKE_MT_ENABLE) {
- DRM_DEBUG_KMS("Using MT version of forcewake\n");
- dev_priv->display.force_wake_get =
- __gen6_gt_force_wake_mt_get;
- dev_priv->display.force_wake_put =
- __gen6_gt_force_wake_mt_put;
- }
- }
-
- if (HAS_PCH_IBX(dev))
- dev_priv->display.init_pch_clock_gating = ibx_init_clock_gating;
- else if (HAS_PCH_CPT(dev))
- dev_priv->display.init_pch_clock_gating = cpt_init_clock_gating;
-
if (IS_GEN5(dev)) {
if (I915_READ(MLTR_ILK) & ILK_SRLT_MASK)
dev_priv->display.update_wm = ironlake_update_wm;
@@ -3701,11 +4143,10 @@ void intel_init_pm(struct drm_device *dev)
dev_priv->display.update_wm = NULL;
}
dev_priv->display.init_clock_gating = gen6_init_clock_gating;
- dev_priv->display.sanitize_pm = gen6_sanitize_pm;
} else if (IS_IVYBRIDGE(dev)) {
/* FIXME: detect B0+ stepping and use auto training */
if (SNB_READ_WM0_LATENCY()) {
- dev_priv->display.update_wm = sandybridge_update_wm;
+ dev_priv->display.update_wm = ivybridge_update_wm;
dev_priv->display.update_sprite_wm = sandybridge_update_sprite_wm;
} else {
DRM_DEBUG_KMS("Failed to read display plane latency. "
@@ -3713,7 +4154,6 @@ void intel_init_pm(struct drm_device *dev)
dev_priv->display.update_wm = NULL;
}
dev_priv->display.init_clock_gating = ivybridge_init_clock_gating;
- dev_priv->display.sanitize_pm = gen6_sanitize_pm;
} else if (IS_HASWELL(dev)) {
if (SNB_READ_WM0_LATENCY()) {
dev_priv->display.update_wm = sandybridge_update_wm;
@@ -3724,16 +4164,13 @@ void intel_init_pm(struct drm_device *dev)
"Disable CxSR\n");
dev_priv->display.update_wm = NULL;
}
- dev_priv->display.init_clock_gating = ivybridge_init_clock_gating;
- dev_priv->display.sanitize_pm = gen6_sanitize_pm;
+ dev_priv->display.init_clock_gating = haswell_init_clock_gating;
} else
dev_priv->display.update_wm = NULL;
} else if (IS_VALLEYVIEW(dev)) {
dev_priv->display.update_wm = valleyview_update_wm;
dev_priv->display.init_clock_gating =
valleyview_init_clock_gating;
- dev_priv->display.force_wake_get = vlv_force_wake_get;
- dev_priv->display.force_wake_put = vlv_force_wake_put;
} else if (IS_PINEVIEW(dev)) {
if (!intel_get_cxsr_latency(IS_PINEVIEW_G(dev),
dev_priv->is_ddr3,
@@ -3779,10 +4216,264 @@ void intel_init_pm(struct drm_device *dev)
else
dev_priv->display.get_fifo_size = i830_get_fifo_size;
}
+}
+
+static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
+{
+ u32 gt_thread_status_mask;
- /* We attempt to init the necessary power wells early in the initialization
- * time, so the subsystems that expect power to be enabled can work.
+ if (IS_HASWELL(dev_priv->dev))
+ gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK_HSW;
+ else
+ gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK;
+
+ /* w/a for a sporadic read returning 0 by waiting for the GT
+ * thread to wake up.
*/
- intel_init_power_wells(dev);
+ if (wait_for_atomic_us((I915_READ_NOTRACE(GEN6_GT_THREAD_STATUS_REG) & gt_thread_status_mask) == 0, 500))
+ DRM_ERROR("GT thread status wait timed out\n");
+}
+
+static void __gen6_gt_force_wake_reset(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE, 0);
+ POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
+}
+
+static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ u32 forcewake_ack;
+
+ if (IS_HASWELL(dev_priv->dev))
+ forcewake_ack = FORCEWAKE_ACK_HSW;
+ else
+ forcewake_ack = FORCEWAKE_ACK;
+
+ if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ I915_WRITE_NOTRACE(FORCEWAKE, FORCEWAKE_KERNEL);
+ POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
+
+ if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
+
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+static void __gen6_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(0xffff));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ POSTING_READ(ECOBUS);
+}
+
+static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
+{
+ u32 forcewake_ack;
+
+ if (IS_HASWELL(dev_priv->dev))
+ forcewake_ack = FORCEWAKE_ACK_HSW;
+ else
+ forcewake_ack = FORCEWAKE_MT_ACK;
+
+ if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ POSTING_READ(ECOBUS);
+
+ if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
+
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+/*
+ * Generally this is called implicitly by the register read function. However,
+ * if some sequence requires the GT to not power down then this function should
+ * be called at the beginning of the sequence followed by a call to
+ * gen6_gt_force_wake_put() at the end of the sequence.
+ */
+void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+
+ mtx_lock(&dev_priv->gt_lock);
+ if (dev_priv->forcewake_count++ == 0)
+ dev_priv->gt.force_wake_get(dev_priv);
+ mtx_unlock(&dev_priv->gt_lock);
+}
+
+void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
+{
+ u32 gtfifodbg;
+ gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
+ if (WARN(gtfifodbg & GT_FIFO_CPU_ERROR_MASK,
+ "MMIO read or write has been dropped %x\n", gtfifodbg))
+ I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
}
+static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE, 0);
+ /* something from same cacheline, but !FORCEWAKE */
+ POSTING_READ(ECOBUS);
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ POSTING_READ(ECOBUS);
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+/*
+ * see gen6_gt_force_wake_get()
+ */
+void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+
+ mtx_lock(&dev_priv->gt_lock);
+ if (--dev_priv->forcewake_count == 0)
+ dev_priv->gt.force_wake_put(dev_priv);
+ mtx_unlock(&dev_priv->gt_lock);
+}
+
+int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
+{
+ int ret = 0;
+
+ if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
+ int loop = 500;
+ u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
+ while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
+ udelay(10);
+ fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
+ }
+ if (WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES))
+ ++ret;
+ dev_priv->gt_fifo_count = fifo;
+ }
+ dev_priv->gt_fifo_count--;
+
+ return ret;
+}
+
+static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(0xffff));
+ /* something from same cacheline, but !FORCEWAKE_VLV */
+ POSTING_READ(FORCEWAKE_ACK_VLV);
+}
+
+static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+
+ if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
+
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
+ /* something from same cacheline, but !FORCEWAKE_VLV */
+ POSTING_READ(FORCEWAKE_ACK_VLV);
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+void intel_gt_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_VALLEYVIEW(dev)) {
+ vlv_force_wake_reset(dev_priv);
+ } else if (INTEL_INFO(dev)->gen >= 6) {
+ __gen6_gt_force_wake_reset(dev_priv);
+ if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
+ __gen6_gt_force_wake_mt_reset(dev_priv);
+ }
+}
+
+void intel_gt_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ mtx_init(&dev_priv->gt_lock, "i915_gt_lock", NULL, MTX_DEF);
+
+ intel_gt_reset(dev);
+
+ if (IS_VALLEYVIEW(dev)) {
+ dev_priv->gt.force_wake_get = vlv_force_wake_get;
+ dev_priv->gt.force_wake_put = vlv_force_wake_put;
+ } else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
+ dev_priv->gt.force_wake_get = __gen6_gt_force_wake_mt_get;
+ dev_priv->gt.force_wake_put = __gen6_gt_force_wake_mt_put;
+ } else if (IS_GEN6(dev)) {
+ dev_priv->gt.force_wake_get = __gen6_gt_force_wake_get;
+ dev_priv->gt.force_wake_put = __gen6_gt_force_wake_put;
+ }
+ TIMEOUT_TASK_INIT(dev_priv->wq, &dev_priv->rps.delayed_resume_work, 0,
+ intel_gen6_powersave_work, dev_priv);
+}
+
+int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u8 mbox, u32 *val)
+{
+ sx_assert(&dev_priv->rps.hw_lock, SA_XLOCKED);
+
+ if (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
+ DRM_DEBUG_DRIVER("warning: pcode (read) mailbox access failed\n");
+ return -EAGAIN;
+ }
+
+ I915_WRITE(GEN6_PCODE_DATA, *val);
+ I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
+
+ if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
+ 500)) {
+ DRM_ERROR("timeout waiting for pcode read (%d) to finish\n", mbox);
+ return -ETIMEDOUT;
+ }
+
+ *val = I915_READ(GEN6_PCODE_DATA);
+ I915_WRITE(GEN6_PCODE_DATA, 0);
+
+ return 0;
+}
+
+int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u8 mbox, u32 val)
+{
+ sx_assert(&dev_priv->rps.hw_lock, SA_XLOCKED);
+
+ if (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
+ DRM_DEBUG_DRIVER("warning: pcode (write) mailbox access failed\n");
+ return -EAGAIN;
+ }
+
+ I915_WRITE(GEN6_PCODE_DATA, val);
+ I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
+
+ if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
+ 500)) {
+ DRM_ERROR("timeout waiting for pcode write (%d) to finish\n", mbox);
+ return -ETIMEDOUT;
+ }
+
+ I915_WRITE(GEN6_PCODE_DATA, 0);
+
+ return 0;
+}
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.c b/sys/dev/drm2/i915/intel_ringbuffer.c
index e0abb83..92a7927 100644
--- a/sys/dev/drm2/i915/intel_ringbuffer.c
+++ b/sys/dev/drm2/i915/intel_ringbuffer.c
@@ -31,11 +31,9 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
-#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/i915/intel_ringbuffer.h>
#include <sys/sched.h>
#include <sys/sf_buf.h>
@@ -49,23 +47,9 @@ struct pipe_control {
u32 gtt_offset;
};
-void
-i915_trace_irq_get(struct intel_ring_buffer *ring, uint32_t seqno)
-{
- struct drm_i915_private *dev_priv;
-
- if (ring->trace_irq_seqno == 0) {
- dev_priv = ring->dev->dev_private;
- mtx_lock(&dev_priv->irq_lock);
- if (ring->irq_get(ring))
- ring->trace_irq_seqno = seqno;
- mtx_unlock(&dev_priv->irq_lock);
- }
-}
-
static inline int ring_space(struct intel_ring_buffer *ring)
{
- int space = (ring->head & HEAD_ADDR) - (ring->tail + 8);
+ int space = (ring->head & HEAD_ADDR) - (ring->tail + I915_RING_FREE_SPACE);
if (space < 0)
space += ring->size;
return space;
@@ -238,30 +222,121 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring,
int ret;
/* Force SNB workarounds for PIPE_CONTROL flushes */
- intel_emit_post_sync_nonzero_flush(ring);
+ ret = intel_emit_post_sync_nonzero_flush(ring);
+ if (ret)
+ return ret;
/* Just flush everything. Experiments have shown that reducing the
* number of bits based on the write domains has little performance
* impact.
*/
- flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
- flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
- flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
- flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
- flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
- flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
- flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
+ if (flush_domains) {
+ flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
+ flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+ /*
+ * Ensure that any following seqno writes only happen
+ * when the render cache is indeed flushed.
+ */
+ flags |= PIPE_CONTROL_CS_STALL;
+ }
+ if (invalidate_domains) {
+ flags |= PIPE_CONTROL_TLB_INVALIDATE;
+ flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
+ /*
+ * TLB invalidate requires a post-sync write.
+ */
+ flags |= PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_CS_STALL;
+ }
- ret = intel_ring_begin(ring, 6);
+ ret = intel_ring_begin(ring, 4);
if (ret)
return ret;
- intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
intel_ring_emit(ring, flags);
intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
- intel_ring_emit(ring, 0); /* lower dword */
- intel_ring_emit(ring, 0); /* uppwer dword */
- intel_ring_emit(ring, MI_NOOP);
+ intel_ring_emit(ring, 0);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
+gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring)
+{
+ int ret;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
+ intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
+ PIPE_CONTROL_STALL_AT_SCOREBOARD);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, 0);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
+gen7_render_ring_flush(struct intel_ring_buffer *ring,
+ u32 invalidate_domains, u32 flush_domains)
+{
+ u32 flags = 0;
+ struct pipe_control *pc = ring->private;
+ u32 scratch_addr = pc->gtt_offset + 128;
+ int ret;
+
+ /*
+ * Ensure that any following seqno writes only happen when the render
+ * cache is indeed flushed.
+ *
+ * Workaround: 4th PIPE_CONTROL command (except the ones with only
+ * read-cache invalidate bits set) must have the CS_STALL bit set. We
+ * don't try to be clever and just set it unconditionally.
+ */
+ flags |= PIPE_CONTROL_CS_STALL;
+
+ /* Just flush everything. Experiments have shown that reducing the
+ * number of bits based on the write domains has little performance
+ * impact.
+ */
+ if (flush_domains) {
+ flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
+ flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+ }
+ if (invalidate_domains) {
+ flags |= PIPE_CONTROL_TLB_INVALIDATE;
+ flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
+ /*
+ * TLB invalidate requires a post-sync write.
+ */
+ flags |= PIPE_CONTROL_QW_WRITE;
+
+ /* Workaround: we must issue a pipe_control with CS-stall bit
+ * set before a pipe_control command that has the state cache
+ * invalidate bit set. */
+ gen7_render_ring_cs_stall_wa(ring);
+ }
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
+ intel_ring_emit(ring, flags);
+ intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
+ intel_ring_emit(ring, 0);
intel_ring_advance(ring);
return 0;
@@ -285,17 +360,20 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
static int init_ring_common(struct intel_ring_buffer *ring)
{
- drm_i915_private_t *dev_priv = ring->dev->dev_private;
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj = ring->obj;
+ int ret = 0;
u32 head;
+ if (HAS_FORCE_WAKE(dev))
+ gen6_gt_force_wake_get(dev_priv);
+
/* Stop the ring if it's running. */
I915_WRITE_CTL(ring, 0);
I915_WRITE_HEAD(ring, 0);
ring->write_tail(ring, 0);
- /* Initialize the ring. */
- I915_WRITE_START(ring, obj->gtt_offset);
head = I915_READ_HEAD(ring) & HEAD_ADDR;
/* G45 ring initialization fails to reset head to zero */
@@ -321,16 +399,19 @@ static int init_ring_common(struct intel_ring_buffer *ring)
}
}
+ /* Initialize the ring. This must happen _after_ we've cleared the ring
+ * registers with the above sequence (the readback of the HEAD registers
+ * also enforces ordering), otherwise the hw might lose the new ring
+ * register values. */
+ I915_WRITE_START(ring, obj->gtt_offset);
I915_WRITE_CTL(ring,
((ring->size - PAGE_SIZE) & RING_NR_PAGES)
| RING_VALID);
/* If the head is still not zero, the ring is dead */
- if (_intel_wait_for(ring->dev,
- (I915_READ_CTL(ring) & RING_VALID) != 0 &&
- I915_READ_START(ring) == obj->gtt_offset &&
- (I915_READ_HEAD(ring) & HEAD_ADDR) == 0,
- 50, 1, "915rii")) {
+ if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
+ I915_READ_START(ring) == obj->gtt_offset &&
+ (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
DRM_ERROR("%s initialization failed "
"ctl %08x head %08x tail %08x start %08x\n",
ring->name,
@@ -338,7 +419,8 @@ static int init_ring_common(struct intel_ring_buffer *ring)
I915_READ_HEAD(ring),
I915_READ_TAIL(ring),
I915_READ_START(ring));
- return -EIO;
+ ret = -EIO;
+ goto out;
}
if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
@@ -347,9 +429,14 @@ static int init_ring_common(struct intel_ring_buffer *ring)
ring->head = I915_READ_HEAD(ring);
ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
ring->space = ring_space(ring);
+ ring->last_retired_head = -1;
}
- return 0;
+out:
+ if (HAS_FORCE_WAKE(dev))
+ gen6_gt_force_wake_put(dev_priv);
+
+ return ret;
}
static int
@@ -375,7 +462,7 @@ init_pipe_control(struct intel_ring_buffer *ring)
i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
- ret = i915_gem_object_pin(obj, 4096, true);
+ ret = i915_gem_object_pin(obj, 4096, true, false);
if (ret)
goto err_unref;
@@ -426,13 +513,25 @@ static int init_render_ring(struct intel_ring_buffer *ring)
struct drm_i915_private *dev_priv = dev->dev_private;
int ret = init_ring_common(ring);
- if (INTEL_INFO(dev)->gen > 3) {
+ if (INTEL_INFO(dev)->gen > 3)
I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
- if (IS_GEN7(dev))
- I915_WRITE(GFX_MODE_GEN7,
- _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
- _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
- }
+
+ /* We need to disable the AsyncFlip performance optimisations in order
+ * to use MI_WAIT_FOR_EVENT within the CS. It should already be
+ * programmed to '1' on all products.
+ */
+ if (INTEL_INFO(dev)->gen >= 6)
+ I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
+
+ /* Required for the hardware to program scanline values for waiting */
+ if (INTEL_INFO(dev)->gen == 6)
+ I915_WRITE(GFX_MODE,
+ _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_ALWAYS));
+
+ if (IS_GEN7(dev))
+ I915_WRITE(GFX_MODE_GEN7,
+ _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
+ _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
if (INTEL_INFO(dev)->gen >= 5) {
ret = init_pipe_control(ring);
@@ -460,28 +559,32 @@ static int init_render_ring(struct intel_ring_buffer *ring)
if (INTEL_INFO(dev)->gen >= 6)
I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
+ if (HAS_L3_GPU_CACHE(dev))
+ I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
+
return ret;
}
static void render_ring_cleanup(struct intel_ring_buffer *ring)
{
+ struct drm_device *dev = ring->dev;
+
if (!ring->private)
return;
+ if (HAS_BROKEN_CS_TLB(dev))
+ drm_gem_object_unreference(to_gem_object(ring->private));
+
cleanup_pipe_control(ring);
}
static void
update_mboxes(struct intel_ring_buffer *ring,
- u32 seqno,
u32 mmio_offset)
{
- intel_ring_emit(ring, MI_SEMAPHORE_MBOX |
- MI_SEMAPHORE_GLOBAL_GTT |
- MI_SEMAPHORE_REGISTER |
- MI_SEMAPHORE_UPDATE);
- intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
intel_ring_emit(ring, mmio_offset);
+ intel_ring_emit(ring, ring->outstanding_lazy_request);
}
/**
@@ -494,8 +597,7 @@ update_mboxes(struct intel_ring_buffer *ring,
* This acts like a signal in the canonical semaphore.
*/
static int
-gen6_add_request(struct intel_ring_buffer *ring,
- u32 *seqno)
+gen6_add_request(struct intel_ring_buffer *ring)
{
u32 mbox1_reg;
u32 mbox2_reg;
@@ -508,13 +610,11 @@ gen6_add_request(struct intel_ring_buffer *ring,
mbox1_reg = ring->signal_mbox[0];
mbox2_reg = ring->signal_mbox[1];
- *seqno = i915_gem_next_request_seqno(ring);
-
- update_mboxes(ring, *seqno, mbox1_reg);
- update_mboxes(ring, *seqno, mbox2_reg);
+ update_mboxes(ring, mbox1_reg);
+ update_mboxes(ring, mbox2_reg);
intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
- intel_ring_emit(ring, *seqno);
+ intel_ring_emit(ring, ring->outstanding_lazy_request);
intel_ring_emit(ring, MI_USER_INTERRUPT);
intel_ring_advance(ring);
@@ -544,10 +644,8 @@ gen6_ring_sync(struct intel_ring_buffer *waiter,
*/
seqno -= 1;
- if (signaller->semaphore_register[waiter->id] ==
- MI_SEMAPHORE_SYNC_INVALID)
- printf("gen6_ring_sync semaphore_register %d invalid\n",
- waiter->id);
+ WARN_ON(signaller->semaphore_register[waiter->id] ==
+ MI_SEMAPHORE_SYNC_INVALID);
ret = intel_ring_begin(waiter, 4);
if (ret)
@@ -563,13 +661,6 @@ gen6_ring_sync(struct intel_ring_buffer *waiter,
return 0;
}
-int render_ring_sync_to(struct intel_ring_buffer *waiter,
- struct intel_ring_buffer *signaller, u32 seqno);
-int gen6_bsd_ring_sync_to(struct intel_ring_buffer *waiter,
- struct intel_ring_buffer *signaller, u32 seqno);
-int gen6_blt_ring_sync_to(struct intel_ring_buffer *waiter,
- struct intel_ring_buffer *signaller, u32 seqno);
-
#define PIPE_CONTROL_FLUSH(ring__, addr__) \
do { \
intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE | \
@@ -580,10 +671,8 @@ do { \
} while (0)
static int
-pc_render_add_request(struct intel_ring_buffer *ring,
- uint32_t *result)
+pc_render_add_request(struct intel_ring_buffer *ring)
{
- u32 seqno = i915_gem_next_request_seqno(ring);
struct pipe_control *pc = ring->private;
u32 scratch_addr = pc->gtt_offset + 128;
int ret;
@@ -604,7 +693,7 @@ pc_render_add_request(struct intel_ring_buffer *ring,
PIPE_CONTROL_WRITE_FLUSH |
PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
- intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, ring->outstanding_lazy_request);
intel_ring_emit(ring, 0);
PIPE_CONTROL_FLUSH(ring, scratch_addr);
scratch_addr += 128; /* write to separate cachelines */
@@ -617,48 +706,41 @@ pc_render_add_request(struct intel_ring_buffer *ring,
PIPE_CONTROL_FLUSH(ring, scratch_addr);
scratch_addr += 128;
PIPE_CONTROL_FLUSH(ring, scratch_addr);
+
intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
PIPE_CONTROL_WRITE_FLUSH |
PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
PIPE_CONTROL_NOTIFY);
intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
- intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, ring->outstanding_lazy_request);
intel_ring_emit(ring, 0);
intel_ring_advance(ring);
- *result = seqno;
return 0;
}
static u32
-gen6_ring_get_seqno(struct intel_ring_buffer *ring)
+gen6_ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
{
- struct drm_device *dev = ring->dev;
-
/* Workaround to force correct ordering between irq and seqno writes on
* ivb (and maybe also on snb) by reading from a CS register (like
* ACTHD) before reading the status page. */
- if (/* IS_GEN6(dev) || */IS_GEN7(dev))
+ if (!lazy_coherency)
intel_ring_get_active_head(ring);
return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
}
static u32
-ring_get_seqno(struct intel_ring_buffer *ring)
+ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
{
- if (ring->status_page.page_addr == NULL)
- return (-1);
return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
}
static u32
-pc_render_get_seqno(struct intel_ring_buffer *ring)
+pc_render_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
{
struct pipe_control *pc = ring->private;
- if (pc != NULL)
- return pc->cpu_page[0];
- else
- return (-1);
+ return pc->cpu_page[0];
}
static bool
@@ -670,12 +752,13 @@ gen5_ring_get_irq(struct intel_ring_buffer *ring)
if (!dev->irq_enabled)
return false;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (ring->irq_refcount++ == 0) {
dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
POSTING_READ(GTIMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
return true;
}
@@ -686,12 +769,13 @@ gen5_ring_put_irq(struct intel_ring_buffer *ring)
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (--ring->irq_refcount == 0) {
dev_priv->gt_irq_mask |= ring->irq_enable_mask;
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
POSTING_READ(GTIMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
}
static bool
@@ -703,12 +787,13 @@ i9xx_ring_get_irq(struct intel_ring_buffer *ring)
if (!dev->irq_enabled)
return false;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (ring->irq_refcount++ == 0) {
dev_priv->irq_mask &= ~ring->irq_enable_mask;
I915_WRITE(IMR, dev_priv->irq_mask);
POSTING_READ(IMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
return true;
}
@@ -719,12 +804,13 @@ i9xx_ring_put_irq(struct intel_ring_buffer *ring)
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (--ring->irq_refcount == 0) {
dev_priv->irq_mask |= ring->irq_enable_mask;
I915_WRITE(IMR, dev_priv->irq_mask);
POSTING_READ(IMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
}
static bool
@@ -736,12 +822,13 @@ i8xx_ring_get_irq(struct intel_ring_buffer *ring)
if (!dev->irq_enabled)
return false;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (ring->irq_refcount++ == 0) {
dev_priv->irq_mask &= ~ring->irq_enable_mask;
I915_WRITE16(IMR, dev_priv->irq_mask);
POSTING_READ16(IMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
return true;
}
@@ -752,18 +839,19 @@ i8xx_ring_put_irq(struct intel_ring_buffer *ring)
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (--ring->irq_refcount == 0) {
dev_priv->irq_mask |= ring->irq_enable_mask;
I915_WRITE16(IMR, dev_priv->irq_mask);
POSTING_READ16(IMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
}
void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
{
struct drm_device *dev = ring->dev;
- drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_private_t *dev_priv = ring->dev->dev_private;
u32 mmio = 0;
/* The ring status page addresses are no longer next to the rest of
@@ -781,7 +869,7 @@ void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
mmio = BSD_HWS_PGA_GEN7;
break;
}
- } else if (IS_GEN6(dev)) {
+ } else if (IS_GEN6(ring->dev)) {
mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
} else {
mmio = RING_HWS_PGA(ring->mmio_base);
@@ -809,25 +897,20 @@ bsd_ring_flush(struct intel_ring_buffer *ring,
}
static int
-i9xx_add_request(struct intel_ring_buffer *ring,
- u32 *result)
+i9xx_add_request(struct intel_ring_buffer *ring)
{
- u32 seqno;
int ret;
ret = intel_ring_begin(ring, 4);
if (ret)
return ret;
- seqno = i915_gem_next_request_seqno(ring);
-
intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
- intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, ring->outstanding_lazy_request);
intel_ring_emit(ring, MI_USER_INTERRUPT);
intel_ring_advance(ring);
- *result = seqno;
return 0;
}
@@ -840,15 +923,23 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring)
if (!dev->irq_enabled)
return false;
+ /* It looks like we need to prevent the gt from suspending while waiting
+ * for an notifiy irq, otherwise irqs seem to get lost on at least the
+ * blt/bsd rings on ivb. */
gen6_gt_force_wake_get(dev_priv);
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (ring->irq_refcount++ == 0) {
- I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
+ if (HAS_L3_GPU_CACHE(dev) && ring->id == RCS)
+ I915_WRITE_IMR(ring, ~(ring->irq_enable_mask |
+ GEN6_RENDER_L3_PARITY_ERROR));
+ else
+ I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
POSTING_READ(GTIMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
return true;
}
@@ -859,20 +950,25 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring)
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- mtx_assert(&dev_priv->irq_lock, MA_OWNED);
+ mtx_lock(&dev_priv->irq_lock);
if (--ring->irq_refcount == 0) {
- I915_WRITE_IMR(ring, ~0);
+ if (HAS_L3_GPU_CACHE(dev) && ring->id == RCS)
+ I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
+ else
+ I915_WRITE_IMR(ring, ~0);
dev_priv->gt_irq_mask |= ring->irq_enable_mask;
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
POSTING_READ(GTIMR);
}
+ mtx_unlock(&dev_priv->irq_lock);
gen6_gt_force_wake_put(dev_priv);
}
static int
i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
- u32 offset, u32 length)
+ u32 offset, u32 length,
+ unsigned flags)
{
int ret;
@@ -883,35 +979,71 @@ i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
intel_ring_emit(ring,
MI_BATCH_BUFFER_START |
MI_BATCH_GTT |
- MI_BATCH_NON_SECURE_I965);
+ (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
intel_ring_emit(ring, offset);
intel_ring_advance(ring);
return 0;
}
+/* Just userspace ABI convention to limit the wa batch bo to a resonable size */
+#define I830_BATCH_LIMIT (256*1024)
static int
i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
- u32 offset, u32 len)
+ u32 offset, u32 len,
+ unsigned flags)
{
int ret;
- ret = intel_ring_begin(ring, 4);
- if (ret)
- return ret;
+ if (flags & I915_DISPATCH_PINNED) {
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
- intel_ring_emit(ring, MI_BATCH_BUFFER);
- intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
- intel_ring_emit(ring, offset + len - 8);
- intel_ring_emit(ring, 0);
- intel_ring_advance(ring);
+ intel_ring_emit(ring, MI_BATCH_BUFFER);
+ intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
+ intel_ring_emit(ring, offset + len - 8);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+ } else {
+ struct drm_i915_gem_object *obj = ring->private;
+ u32 cs_offset = obj->gtt_offset;
+
+ if (len > I830_BATCH_LIMIT)
+ return -ENOSPC;
+
+ ret = intel_ring_begin(ring, 9+3);
+ if (ret)
+ return ret;
+ /* Blit the batch (which has now all relocs applied) to the stable batch
+ * scratch bo area (so that the CS never stumbles over its tlb
+ * invalidation bug) ... */
+ intel_ring_emit(ring, XY_SRC_COPY_BLT_CMD |
+ XY_SRC_COPY_BLT_WRITE_ALPHA |
+ XY_SRC_COPY_BLT_WRITE_RGB);
+ intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_GXCOPY | 4096);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, (DIV_ROUND_UP(len, 4096) << 16) | 1024);
+ intel_ring_emit(ring, cs_offset);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, 4096);
+ intel_ring_emit(ring, offset);
+ intel_ring_emit(ring, MI_FLUSH);
+
+ /* ... and execute it. */
+ intel_ring_emit(ring, MI_BATCH_BUFFER);
+ intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
+ intel_ring_emit(ring, cs_offset + len - 8);
+ intel_ring_advance(ring);
+ }
return 0;
}
static int
i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
- u32 offset, u32 len)
+ u32 offset, u32 len,
+ unsigned flags)
{
int ret;
@@ -920,7 +1052,7 @@ i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
return ret;
intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT);
- intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
+ intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
intel_ring_advance(ring);
return 0;
@@ -957,7 +1089,7 @@ static int init_status_page(struct intel_ring_buffer *ring)
i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
- ret = i915_gem_object_pin(obj, 4096, true);
+ ret = i915_gem_object_pin(obj, 4096, true, false);
if (ret != 0) {
goto err_unref;
}
@@ -965,6 +1097,7 @@ static int init_status_page(struct intel_ring_buffer *ring)
ring->status_page.gfx_addr = obj->gtt_offset;
ring->status_page.page_addr = (void *)kva_alloc(PAGE_SIZE);
if (ring->status_page.page_addr == NULL) {
+ ret = -ENOMEM;
goto err_unpin;
}
pmap_qenter((vm_offset_t)ring->status_page.page_addr, &obj->pages[0],
@@ -988,22 +1121,55 @@ err:
return ret;
}
+static int init_phys_hws_pga(struct intel_ring_buffer *ring)
+{
+ struct drm_i915_private *dev_priv = ring->dev->dev_private;
+ u32 addr;
+
+ if (!dev_priv->status_page_dmah) {
+ dev_priv->status_page_dmah =
+ drm_pci_alloc(ring->dev, PAGE_SIZE, PAGE_SIZE, BUS_SPACE_MAXADDR);
+ if (!dev_priv->status_page_dmah)
+ return -ENOMEM;
+ }
+
+ addr = dev_priv->status_page_dmah->busaddr;
+ if (INTEL_INFO(ring->dev)->gen >= 4)
+ addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
+ I915_WRITE(HWS_PGA, addr);
+
+ ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
+ memset(ring->status_page.page_addr, 0, PAGE_SIZE);
+
+ return 0;
+}
+
static int intel_init_ring_buffer(struct drm_device *dev,
- struct intel_ring_buffer *ring)
+ struct intel_ring_buffer *ring)
{
struct drm_i915_gem_object *obj;
+ struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
ring->dev = dev;
INIT_LIST_HEAD(&ring->active_list);
INIT_LIST_HEAD(&ring->request_list);
- INIT_LIST_HEAD(&ring->gpu_write_list);
ring->size = 32 * PAGE_SIZE;
+ memset(ring->sync_seqno, 0, sizeof(ring->sync_seqno));
+
+#ifdef __linux__
+ init_waitqueue_head(&ring->irq_queue);
+#endif
if (I915_NEED_GFX_HWS(dev)) {
ret = init_status_page(ring);
if (ret)
return ret;
+ } else {
+ BUG_ON(ring->id != RCS);
+ ret = init_phys_hws_pga(ring);
+ if (ret)
+ return ret;
}
obj = i915_gem_alloc_object(dev, ring->size);
@@ -1015,13 +1181,18 @@ static int intel_init_ring_buffer(struct drm_device *dev,
ring->obj = obj;
- ret = i915_gem_object_pin(obj, PAGE_SIZE, true);
+ ret = i915_gem_object_pin(obj, PAGE_SIZE, true, false);
if (ret)
goto err_unref;
- ring->virtual_start = pmap_mapdev_attr(
- dev->agp->base + obj->gtt_offset, ring->size,
- VM_MEMATTR_WRITE_COMBINING);
+ ret = i915_gem_object_set_to_gtt_domain(obj, true);
+ if (ret)
+ goto err_unpin;
+
+ ring->virtual_start =
+ pmap_mapdev_attr(
+ dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset, ring->size,
+ VM_MEMATTR_WRITE_COMBINING);
if (ring->virtual_start == NULL) {
DRM_ERROR("Failed to map ringbuffer.\n");
ret = -EINVAL;
@@ -1064,7 +1235,11 @@ void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
/* Disable the ring buffer. The ring must be idle at this point */
dev_priv = ring->dev->dev_private;
- ret = intel_wait_ring_idle(ring);
+ ret = intel_ring_idle(ring);
+ if (ret)
+ DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
+ ring->name, ret);
+
I915_WRITE_CTL(ring, 0);
pmap_unmapdev((vm_offset_t)ring->virtual_start, ring->size);
@@ -1081,20 +1256,9 @@ void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
static int intel_ring_wait_seqno(struct intel_ring_buffer *ring, u32 seqno)
{
- struct drm_i915_private *dev_priv = ring->dev->dev_private;
- bool was_interruptible;
int ret;
- /* XXX As we have not yet audited all the paths to check that
- * they are ready for ERESTARTSYS from intel_ring_begin, do not
- * allow us to be interruptible by a signal.
- */
- was_interruptible = dev_priv->mm.interruptible;
- dev_priv->mm.interruptible = false;
-
- ret = i915_wait_request(ring, seqno);
-
- dev_priv->mm.interruptible = was_interruptible;
+ ret = i915_wait_seqno(ring, seqno);
if (!ret)
i915_gem_retire_requests_ring(ring);
@@ -1123,7 +1287,7 @@ static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
if (request->tail == -1)
continue;
- space = request->tail - (ring->tail + 8);
+ space = request->tail - (ring->tail + I915_RING_FREE_SPACE);
if (space < 0)
space += ring->size;
if (space >= n) {
@@ -1146,23 +1310,23 @@ static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
if (ret)
return ret;
- if (ring->last_retired_head == -1)
+ if (WARN_ON(ring->last_retired_head == -1))
return -ENOSPC;
ring->head = ring->last_retired_head;
ring->last_retired_head = -1;
ring->space = ring_space(ring);
- if (ring->space < n)
+ if (WARN_ON(ring->space < n))
return -ENOSPC;
return 0;
}
-int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
+static int ring_wait_for_space(struct intel_ring_buffer *ring, int n)
{
struct drm_device *dev = ring->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- int end;
+ unsigned long end;
int ret;
ret = intel_ring_wait_request(ring, n);
@@ -1175,7 +1339,7 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
* to running on almost untested codepaths). But on resume
* timers don't work yet, so prevent a complete hang in that
* case by choosing an insanely large timeout. */
- end = ticks + hz * 60;
+ end = jiffies + 60 * HZ;
do {
ring->head = I915_READ_HEAD(ring);
@@ -1191,23 +1355,25 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
}
- pause("915rng", 1);
- if (atomic_load_acq_32(&dev_priv->mm.wedged) != 0) {
+ DRM_MSLEEP(1);
+
+ ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
+ if (ret) {
CTR1(KTR_DRM, "ring_wait_end %s wedged", ring->name);
- return -EAGAIN;
+ return ret;
}
- } while (!time_after(ticks, end));
+ } while (!time_after(jiffies, end));
CTR1(KTR_DRM, "ring_wait_end %s busy", ring->name);
return -EBUSY;
}
static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
{
- uint32_t *virt;
+ uint32_t __iomem *virt;
int rem = ring->size - ring->tail;
if (ring->space < rem) {
- int ret = intel_wait_ring_buffer(ring, rem);
+ int ret = ring_wait_for_space(ring, rem);
if (ret)
return ret;
}
@@ -1215,7 +1381,7 @@ static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
virt = (uint32_t *)((char *)ring->virtual_start + ring->tail);
rem /= 4;
while (rem--)
- *virt++ = MI_NOOP;
+ iowrite32(MI_NOOP, virt++);
ring->tail = 0;
ring->space = ring_space(ring);
@@ -1223,25 +1389,63 @@ static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
return 0;
}
+int intel_ring_idle(struct intel_ring_buffer *ring)
+{
+ u32 seqno;
+ int ret;
+
+ /* We need to add any requests required to flush the objects and ring */
+ if (ring->outstanding_lazy_request) {
+ ret = i915_add_request(ring, NULL, NULL);
+ if (ret)
+ return ret;
+ }
+
+ /* Wait upon the last request to be completed */
+ if (list_empty(&ring->request_list))
+ return 0;
+
+ seqno = list_entry(ring->request_list.prev,
+ struct drm_i915_gem_request,
+ list)->seqno;
+
+ return i915_wait_seqno(ring, seqno);
+}
+
+static int
+intel_ring_alloc_seqno(struct intel_ring_buffer *ring)
+{
+ if (ring->outstanding_lazy_request)
+ return 0;
+
+ return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_request);
+}
+
int intel_ring_begin(struct intel_ring_buffer *ring,
int num_dwords)
{
- struct drm_i915_private *dev_priv = ring->dev->dev_private;
+ drm_i915_private_t *dev_priv = ring->dev->dev_private;
int n = 4*num_dwords;
int ret;
- if (atomic_load_acq_int(&dev_priv->mm.wedged))
- return -EIO;
+ ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
+ if (ret)
+ return ret;
+
+ /* Preallocate the olr before touching the ring */
+ ret = intel_ring_alloc_seqno(ring);
+ if (ret)
+ return ret;
- if (ring->tail + n > ring->effective_size) {
+ if (unlikely(ring->tail + n > ring->effective_size)) {
ret = intel_wrap_ring_buffer(ring);
- if (ret != 0)
+ if (unlikely(ret))
return ret;
}
- if (ring->space < n) {
- ret = intel_wait_ring_buffer(ring, n);
- if (ret != 0)
+ if (unlikely(ring->space < n)) {
+ ret = ring_wait_for_space(ring, n);
+ if (unlikely(ret))
return ret;
}
@@ -1265,22 +1469,32 @@ static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
- /* Every tail move must follow the sequence below */
+ /* Every tail move must follow the sequence below */
+
+ /* Disable notification that the ring is IDLE. The GT
+ * will then assume that it is busy and bring it out of rc6.
+ */
I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
- GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK |
- GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_DISABLE);
- I915_WRITE(GEN6_BSD_RNCID, 0x0);
+ _MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
- if (_intel_wait_for(ring->dev,
- (I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
- GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR) == 0, 50,
- true, "915g6i") != 0)
- DRM_ERROR("timed out waiting for IDLE Indicator\n");
+ /* Clear the context id. Here be magic! */
+ I915_WRITE64(GEN6_BSD_RNCID, 0x0);
+ /* Wait for the ring not to be idle, i.e. for it to wake up. */
+ if (wait_for((I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
+ GEN6_BSD_SLEEP_INDICATOR) == 0,
+ 50))
+ DRM_ERROR("timed out waiting for the BSD ring to wake up\n");
+
+ /* Now that the ring is fully powered up, update the tail */
I915_WRITE_TAIL(ring, value);
+ POSTING_READ(RING_TAIL(ring->mmio_base));
+
+ /* Let the ring send IDLE messages to the GT again,
+ * and so let it sleep to conserve power when idle.
+ */
I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
- GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK |
- GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE);
+ _MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
}
static int gen6_ring_flush(struct intel_ring_buffer *ring,
@@ -1294,10 +1508,17 @@ static int gen6_ring_flush(struct intel_ring_buffer *ring,
return ret;
cmd = MI_FLUSH_DW;
+ /*
+ * Bspec vol 1c.5 - video engine command streamer:
+ * "If ENABLED, all TLBs will be invalidated once the flush
+ * operation is complete. This bit is only valid when the
+ * Post-Sync Operation field is a value of 1h or 3h."
+ */
if (invalidate & I915_GEM_GPU_DOMAINS)
- cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD;
+ cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD |
+ MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
intel_ring_emit(ring, cmd);
- intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
intel_ring_emit(ring, 0);
intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring);
@@ -1305,8 +1526,30 @@ static int gen6_ring_flush(struct intel_ring_buffer *ring,
}
static int
+hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
+ u32 offset, u32 len,
+ unsigned flags)
+{
+ int ret;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring,
+ MI_BATCH_BUFFER_START | MI_BATCH_PPGTT_HSW |
+ (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_HSW));
+ /* bit0-7 is the length on GEN6+ */
+ intel_ring_emit(ring, offset);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
- u32 offset, u32 len)
+ u32 offset, u32 len,
+ unsigned flags)
{
int ret;
@@ -1314,7 +1557,9 @@ gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
if (ret)
return ret;
- intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_NON_SECURE_I965);
+ intel_ring_emit(ring,
+ MI_BATCH_BUFFER_START |
+ (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
/* bit0-7 is the length on GEN6+ */
intel_ring_emit(ring, offset);
intel_ring_advance(ring);
@@ -1335,10 +1580,17 @@ static int blt_ring_flush(struct intel_ring_buffer *ring,
return ret;
cmd = MI_FLUSH_DW;
+ /*
+ * Bspec vol 1c.3 - blitter engine command streamer:
+ * "If ENABLED, all TLBs will be invalidated once the flush
+ * operation is complete. This bit is only valid when the
+ * Post-Sync Operation field is a value of 1h or 3h."
+ */
if (invalidate & I915_GEM_DOMAIN_RENDER)
- cmd |= MI_INVALIDATE_TLB;
+ cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX |
+ MI_FLUSH_DW_OP_STOREDW;
intel_ring_emit(ring, cmd);
- intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
intel_ring_emit(ring, 0);
intel_ring_emit(ring, MI_NOOP);
intel_ring_advance(ring);
@@ -1348,7 +1600,7 @@ static int blt_ring_flush(struct intel_ring_buffer *ring,
int intel_init_render_ring_buffer(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
ring->name = "render ring";
ring->id = RCS;
@@ -1356,7 +1608,9 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
if (INTEL_INFO(dev)->gen >= 6) {
ring->add_request = gen6_add_request;
- ring->flush = gen6_render_ring_flush;
+ ring->flush = gen7_render_ring_flush;
+ if (INTEL_INFO(dev)->gen == 6)
+ ring->flush = gen6_render_ring_flush;
ring->irq_get = gen6_ring_get_irq;
ring->irq_put = gen6_ring_put_irq;
ring->irq_enable_mask = GT_USER_INTERRUPT;
@@ -1391,7 +1645,9 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
ring->irq_enable_mask = I915_USER_INTERRUPT;
}
ring->write_tail = ring_write_tail;
- if (INTEL_INFO(dev)->gen >= 6)
+ if (IS_HASWELL(dev))
+ ring->dispatch_execbuffer = hsw_ring_dispatch_execbuffer;
+ else if (INTEL_INFO(dev)->gen >= 6)
ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
else if (INTEL_INFO(dev)->gen >= 4)
ring->dispatch_execbuffer = i965_dispatch_execbuffer;
@@ -1402,10 +1658,25 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
ring->init = init_render_ring;
ring->cleanup = render_ring_cleanup;
+ /* Workaround batchbuffer to combat CS tlb bug. */
+ if (HAS_BROKEN_CS_TLB(dev)) {
+ struct drm_i915_gem_object *obj;
+ int ret;
- if (!I915_NEED_GFX_HWS(dev)) {
- ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
- memset(ring->status_page.page_addr, 0, PAGE_SIZE);
+ obj = i915_gem_alloc_object(dev, I830_BATCH_LIMIT);
+ if (obj == NULL) {
+ DRM_ERROR("Failed to allocate batch bo\n");
+ return -ENOMEM;
+ }
+
+ ret = i915_gem_object_pin(obj, 0, true, false);
+ if (ret != 0) {
+ drm_gem_object_unreference(&obj->base);
+ DRM_ERROR("Failed to ping batch bo\n");
+ return ret;
+ }
+
+ ring->private = obj;
}
return intel_init_ring_buffer(dev, ring);
@@ -1414,7 +1685,8 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
+ int ret;
ring->name = "render ring";
ring->id = RCS;
@@ -1455,11 +1727,10 @@ int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
ring->dev = dev;
INIT_LIST_HEAD(&ring->active_list);
INIT_LIST_HEAD(&ring->request_list);
- INIT_LIST_HEAD(&ring->gpu_write_list);
ring->size = size;
ring->effective_size = ring->size;
- if (IS_I830(ring->dev))
+ if (IS_I830(ring->dev) || IS_845G(ring->dev))
ring->effective_size -= 128;
ring->virtual_start = pmap_mapdev_attr(start, size,
@@ -1470,13 +1741,19 @@ int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
return -ENOMEM;
}
+ if (!I915_NEED_GFX_HWS(dev)) {
+ ret = init_phys_hws_pga(ring);
+ if (ret)
+ return ret;
+ }
+
return 0;
}
int intel_init_bsd_ring_buffer(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[VCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[VCS];
ring->name = "bsd ring";
ring->id = VCS;
@@ -1518,14 +1795,13 @@ int intel_init_bsd_ring_buffer(struct drm_device *dev)
}
ring->init = init_ring_common;
-
return intel_init_ring_buffer(dev, ring);
}
int intel_init_blt_ring_buffer(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring = &dev_priv->rings[BCS];
+ struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
ring->name = "blitter ring";
ring->id = BCS;
@@ -1549,3 +1825,37 @@ int intel_init_blt_ring_buffer(struct drm_device *dev)
return intel_init_ring_buffer(dev, ring);
}
+
+int
+intel_ring_flush_all_caches(struct intel_ring_buffer *ring)
+{
+ int ret;
+
+ if (!ring->gpu_caches_dirty)
+ return 0;
+
+ ret = ring->flush(ring, 0, I915_GEM_GPU_DOMAINS);
+ if (ret)
+ return ret;
+
+ ring->gpu_caches_dirty = false;
+ return 0;
+}
+
+int
+intel_ring_invalidate_all_caches(struct intel_ring_buffer *ring)
+{
+ uint32_t flush_domains;
+ int ret;
+
+ flush_domains = 0;
+ if (ring->gpu_caches_dirty)
+ flush_domains = I915_GEM_GPU_DOMAINS;
+
+ ret = ring->flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
+ if (ret)
+ return ret;
+
+ ring->gpu_caches_dirty = false;
+ return 0;
+}
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.h b/sys/dev/drm2/i915/intel_ringbuffer.h
index e5e52ae..fb6707f 100644
--- a/sys/dev/drm2/i915/intel_ringbuffer.h
+++ b/sys/dev/drm2/i915/intel_ringbuffer.h
@@ -1,10 +1,9 @@
-/*
- * $FreeBSD$
- */
-
#ifndef _INTEL_RINGBUFFER_H_
#define _INTEL_RINGBUFFER_H_
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
/*
* Gen2 BSpec "1. Programming Environment" / 1.4.4.6 "Ring Buffer Use"
* Gen3 BSpec "vol1c Memory Interface Functions" / 2.3.4.5 "Ring Buffer Use"
@@ -50,7 +49,7 @@ struct intel_ring_buffer {
} id;
#define I915_NUM_RINGS 3
u32 mmio_base;
- void *virtual_start;
+ void __iomem *virtual_start;
struct drm_device *dev;
struct drm_i915_gem_object *obj;
@@ -75,21 +74,28 @@ struct intel_ring_buffer {
u32 irq_enable_mask; /* bitmask to enable ring interrupt */
u32 trace_irq_seqno;
u32 sync_seqno[I915_NUM_RINGS-1];
- bool (*irq_get)(struct intel_ring_buffer *ring);
+ bool __must_check (*irq_get)(struct intel_ring_buffer *ring);
void (*irq_put)(struct intel_ring_buffer *ring);
int (*init)(struct intel_ring_buffer *ring);
void (*write_tail)(struct intel_ring_buffer *ring,
u32 value);
- int (*flush)(struct intel_ring_buffer *ring,
+ int __must_check (*flush)(struct intel_ring_buffer *ring,
u32 invalidate_domains,
u32 flush_domains);
- int (*add_request)(struct intel_ring_buffer *ring,
- uint32_t *seqno);
- uint32_t (*get_seqno)(struct intel_ring_buffer *ring);
+ int (*add_request)(struct intel_ring_buffer *ring);
+ /* Some chipsets are not quite as coherent as advertised and need
+ * an expensive kick to force a true read of the up-to-date seqno.
+ * However, the up-to-date seqno is not always required and the last
+ * seen value is good enough. Note that the seqno will always be
+ * monotonic, even if not coherent.
+ */
+ u32 (*get_seqno)(struct intel_ring_buffer *ring,
+ bool lazy_coherency);
int (*dispatch_execbuffer)(struct intel_ring_buffer *ring,
- u32 offset, u32 length);
+ u32 offset, u32 length,
+ unsigned flags);
#define I915_DISPATCH_SECURE 0x1
#define I915_DISPATCH_PINNED 0x2
void (*cleanup)(struct intel_ring_buffer *ring);
@@ -118,18 +124,12 @@ struct intel_ring_buffer {
struct list_head request_list;
/**
- * List of objects currently pending a GPU write flush.
- *
- * All elements on this list will belong to either the
- * active_list or flushing_list, last_rendering_seqno can
- * be used to differentiate between the two elements.
- */
- struct list_head gpu_write_list;
-
- /**
* Do we have some not yet emitted requests outstanding?
*/
u32 outstanding_lazy_request;
+ bool gpu_caches_dirty;
+
+ wait_queue_head_t irq_queue;
/**
* Do an explicit TLB flush before MI_SET_CONTEXT
@@ -138,8 +138,6 @@ struct intel_ring_buffer {
struct i915_hw_context *default_context;
struct drm_i915_gem_object *last_context_obj;
- drm_local_map_t map;
-
void *private;
};
@@ -179,32 +177,43 @@ intel_read_status_page(struct intel_ring_buffer *ring,
int reg)
{
/* Ensure that the compiler doesn't optimize away the load. */
- __compiler_membar();
+ barrier();
return atomic_load_acq_32(ring->status_page.page_addr + reg);
}
-void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
-
-int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n);
-static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring)
-{
-
- return (intel_wait_ring_buffer(ring, ring->size - 8));
-}
+/**
+ * Reads a dword out of the status page, which is written to from the command
+ * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
+ * MI_STORE_DATA_IMM.
+ *
+ * The following dwords have a reserved meaning:
+ * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
+ * 0x04: ring 0 head pointer
+ * 0x05: ring 1 head pointer (915-class)
+ * 0x06: ring 2 head pointer (915-class)
+ * 0x10-0x1b: Context status DWords (GM45)
+ * 0x1f: Last written status offset. (GM45)
+ *
+ * The area from dword 0x20 to 0x3ff is available for driver usage.
+ */
+#define I915_GEM_HWS_INDEX 0x20
+#define I915_GEM_HWS_SCRATCH_INDEX 0x30
+#define I915_GEM_HWS_SCRATCH_ADDR (I915_GEM_HWS_SCRATCH_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
-int intel_ring_begin(struct intel_ring_buffer *ring, int n);
+void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
+int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n);
static inline void intel_ring_emit(struct intel_ring_buffer *ring,
u32 data)
{
- *(volatile uint32_t *)((char *)ring->virtual_start +
- ring->tail) = data;
+ iowrite32(data, ring->virtual_start + ring->tail);
ring->tail += 4;
}
-
void intel_ring_advance(struct intel_ring_buffer *ring);
+int __must_check intel_ring_idle(struct intel_ring_buffer *ring);
-uint32_t intel_ring_get_seqno(struct intel_ring_buffer *ring);
+int intel_ring_flush_all_caches(struct intel_ring_buffer *ring);
+int intel_ring_invalidate_all_caches(struct intel_ring_buffer *ring);
int intel_init_render_ring_buffer(struct drm_device *dev);
int intel_init_bsd_ring_buffer(struct drm_device *dev);
@@ -218,7 +227,19 @@ static inline u32 intel_ring_get_tail(struct intel_ring_buffer *ring)
return ring->tail;
}
-void i915_trace_irq_get(struct intel_ring_buffer *ring, uint32_t seqno);
+static inline u32 intel_ring_get_seqno(struct intel_ring_buffer *ring)
+{
+ BUG_ON(ring->outstanding_lazy_request == 0);
+ return ring->outstanding_lazy_request;
+}
+
+#ifdef __linux__
+static inline void i915_trace_irq_get(struct intel_ring_buffer *ring, u32 seqno)
+{
+ if (ring->trace_irq_seqno == 0 && ring->irq_get(ring))
+ ring->trace_irq_seqno = seqno;
+}
+#endif
/* DRI warts */
int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size);
diff --git a/sys/dev/drm2/i915/intel_sdvo.c b/sys/dev/drm2/i915/intel_sdvo.c
index 91056d7..78b60d5 100644
--- a/sys/dev/drm2/i915/intel_sdvo.c
+++ b/sys/dev/drm2/i915/intel_sdvo.c
@@ -25,18 +25,16 @@
* Authors:
* Eric Anholt <eric@anholt.net>
*/
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
#include <dev/drm2/i915/intel_sdvo_regs.h>
-#include <dev/drm2/i915/intel_drv.h>
#include <dev/iicbus/iic.h>
#include <dev/iicbus/iiconf.h>
#include "iicbus_if.h"
@@ -100,7 +98,7 @@ struct intel_sdvo {
/*
* Hotplug activation bits for this device
*/
- uint8_t hotplug_active[2];
+ uint16_t hotplug_active;
/**
* This is used to select the color range of RBG outputs in HDMI mode.
@@ -144,8 +142,10 @@ struct intel_sdvo {
/* DDC bus used by this SDVO encoder */
uint8_t ddc_bus;
- /* Input timings for adjusted_mode */
- struct intel_sdvo_dtd input_dtd;
+ /*
+ * the sdvo flag gets lost in round trip: dtd->adjusted_mode->dtd
+ */
+ uint8_t dtd_sdvo_flags;
};
struct intel_sdvo_connector {
@@ -276,14 +276,14 @@ static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch)
},
{
.slave = intel_sdvo->slave_addr << 1,
- .flags = IIC_M_RD,
+ .flags = I2C_M_RD,
.len = 1,
.buf = ch,
}
};
int ret;
- if ((ret = iicbus_transfer(intel_sdvo->i2c, msgs, 2)) == 0)
+ if ((ret = -iicbus_transfer(intel_sdvo->i2c, msgs, 2)) == 0)
return true;
DRM_DEBUG_KMS("i2c transfer returned %d\n", ret);
@@ -416,22 +416,21 @@ static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
{
int i;
- if ((drm_debug & DRM_DEBUGBITS_KMS) == 0)
- return;
- DRM_DEBUG_KMS("%s: W: %02X ", SDVO_NAME(intel_sdvo), cmd);
+ DRM_DEBUG_KMS("%s: W: %02X ",
+ SDVO_NAME(intel_sdvo), cmd);
for (i = 0; i < args_len; i++)
- printf("%02X ", ((const u8 *)args)[i]);
+ DRM_LOG_KMS("%02X ", ((const u8 *)args)[i]);
for (; i < 8; i++)
- printf(" ");
+ DRM_LOG_KMS(" ");
for (i = 0; i < ARRAY_SIZE(sdvo_cmd_names); i++) {
if (cmd == sdvo_cmd_names[i].cmd) {
- printf("(%s)", sdvo_cmd_names[i].name);
+ DRM_LOG_KMS("(%s)", sdvo_cmd_names[i].name);
break;
}
}
if (i == ARRAY_SIZE(sdvo_cmd_names))
- printf("(%02X)", cmd);
- printf("\n");
+ DRM_LOG_KMS("(%02X)", cmd);
+ DRM_LOG_KMS("\n");
}
static const char *cmd_status_names[] = {
@@ -444,13 +443,23 @@ static const char *cmd_status_names[] = {
"Scaling not supported"
};
-static bool
-intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, const void *args,
- int args_len)
+static bool intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd,
+ const void *args, int args_len)
{
- u8 buf[args_len*2 + 2], status;
- struct iic_msg msgs[args_len + 3];
- int i, ret;
+ u8 *buf, status;
+ struct iic_msg *msgs;
+ int i, ret = true;
+
+ /* Would be simpler to allocate both in one go ? */
+ buf = (u8 *)malloc(args_len * 2 + 2, DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (!buf)
+ return false;
+
+ msgs = malloc(args_len + 3 * sizeof(*msgs), DRM_MEM_KMS, M_NOWAIT | M_ZERO);
+ if (!msgs) {
+ free(buf, DRM_MEM_KMS);
+ return false;
+ }
intel_sdvo_debug_write(intel_sdvo, cmd, args, args_len);
@@ -477,31 +486,27 @@ intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, const void *args,
msgs[i+1].buf = &status;
msgs[i+2].slave = intel_sdvo->slave_addr << 1;
- msgs[i+2].flags = IIC_M_RD;
+ msgs[i+2].flags = I2C_M_RD;
msgs[i+2].len = 1;
msgs[i+2].buf = &status;
- ret = iicbus_transfer(intel_sdvo->i2c, msgs, i+3);
- if (ret != 0) {
+ ret = -iicbus_transfer(intel_sdvo->i2c, msgs, i+3);
+ if (ret < 0) {
DRM_DEBUG_KMS("I2c transfer returned %d\n", ret);
- return (false);
- }
-#if 0
- if (ret != i+3) {
- /* failure in I2C transfer */
- DRM_DEBUG_KMS("I2c transfer returned %d/%d\n", ret, i+3);
- return false;
+ ret = false;
+ goto out;
}
-#endif
- return true;
+out:
+ free(msgs, DRM_MEM_KMS);
+ free(buf, DRM_MEM_KMS);
+ return ret;
}
-static bool
-intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, void *response,
- int response_len)
+static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo,
+ void *response, int response_len)
{
- u8 retry = 5;
+ u8 retry = 15; /* 5 quick checks, followed by 10 long checks */
u8 status;
int i;
@@ -514,23 +519,37 @@ intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, void *response,
* command to be complete.
*
* Check 5 times in case the hardware failed to read the docs.
+ *
+ * Also beware that the first response by many devices is to
+ * reply PENDING and stall for time. TVs are notorious for
+ * requiring longer than specified to complete their replies.
+ * Originally (in the DDX long ago), the delay was only ever 15ms
+ * with an additional delay of 30ms applied for TVs added later after
+ * many experiments. To accommodate both sets of delays, we do a
+ * sequence of slow checks if the device is falling behind and fails
+ * to reply within 5*15µs.
*/
- if (!intel_sdvo_read_byte(intel_sdvo, SDVO_I2C_CMD_STATUS, &status))
+ if (!intel_sdvo_read_byte(intel_sdvo,
+ SDVO_I2C_CMD_STATUS,
+ &status))
goto log_fail;
- while (status == SDVO_CMD_STATUS_PENDING && retry--) {
- DELAY(15);
+ while (status == SDVO_CMD_STATUS_PENDING && --retry) {
+ if (retry < 10)
+ DRM_MSLEEP(15);
+ else
+ udelay(15);
+
if (!intel_sdvo_read_byte(intel_sdvo,
- SDVO_I2C_CMD_STATUS, &status))
+ SDVO_I2C_CMD_STATUS,
+ &status))
goto log_fail;
}
- if ((drm_debug & DRM_DEBUGBITS_KMS) != 0) {
- if (status <= SDVO_CMD_STATUS_SCALING_NOT_SUPP)
- printf("(%s)", cmd_status_names[status]);
- else
- printf("(??? %d)", status);
- }
+ if (status <= SDVO_CMD_STATUS_SCALING_NOT_SUPP)
+ DRM_LOG_KMS("(%s)", cmd_status_names[status]);
+ else
+ DRM_LOG_KMS("(??? %d)", status);
if (status != SDVO_CMD_STATUS_SUCCESS)
goto log_fail;
@@ -541,17 +560,14 @@ intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, void *response,
SDVO_I2C_RETURN_0 + i,
&((u8 *)response)[i]))
goto log_fail;
- if ((drm_debug & DRM_DEBUGBITS_KMS) != 0)
- printf(" %02X", ((u8 *)response)[i]);
+ DRM_LOG_KMS(" %02X", ((u8 *)response)[i]);
}
- if ((drm_debug & DRM_DEBUGBITS_KMS) != 0)
- printf("\n");
- return (true);
+ DRM_LOG_KMS("\n");
+ return true;
log_fail:
- if ((drm_debug & DRM_DEBUGBITS_KMS) != 0)
- printf("... failed\n");
- return (false);
+ DRM_LOG_KMS("... failed\n");
+ return false;
}
static int intel_sdvo_get_pixel_multiplier(struct drm_display_mode *mode)
@@ -608,7 +624,7 @@ static bool intel_sdvo_get_trained_inputs(struct intel_sdvo *intel_sdvo, bool *i
{
struct intel_sdvo_get_trained_inputs_response response;
- CTASSERT(sizeof(response) == 1);
+ BUILD_BUG_ON(sizeof(response) != 1);
if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS,
&response, sizeof(response)))
return false;
@@ -626,6 +642,14 @@ static bool intel_sdvo_set_active_outputs(struct intel_sdvo *intel_sdvo,
&outputs, sizeof(outputs));
}
+static bool intel_sdvo_get_active_outputs(struct intel_sdvo *intel_sdvo,
+ u16 *outputs)
+{
+ return intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_ACTIVE_OUTPUTS,
+ outputs, sizeof(*outputs));
+}
+
static bool intel_sdvo_set_encoder_power_state(struct intel_sdvo *intel_sdvo,
int mode)
{
@@ -656,7 +680,7 @@ static bool intel_sdvo_get_input_pixel_clock_range(struct intel_sdvo *intel_sdvo
{
struct intel_sdvo_pixel_clock_range clocks;
- CTASSERT(sizeof(clocks) == 4);
+ BUILD_BUG_ON(sizeof(clocks) != 4);
if (!intel_sdvo_get_value(intel_sdvo,
SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE,
&clocks, sizeof(clocks)))
@@ -724,8 +748,8 @@ intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo,
static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo,
struct intel_sdvo_dtd *dtd)
{
- CTASSERT(sizeof(dtd->part1) == 8);
- CTASSERT(sizeof(dtd->part2) == 8);
+ BUILD_BUG_ON(sizeof(dtd->part1) != 8);
+ BUILD_BUG_ON(sizeof(dtd->part2) != 8);
return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1,
&dtd->part1, sizeof(dtd->part1)) &&
intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2,
@@ -748,7 +772,7 @@ static void intel_sdvo_get_dtd_from_mode(struct intel_sdvo_dtd *dtd,
width = mode->hdisplay;
height = mode->vdisplay;
- /* do some mode translations */
+ /* do some mode translations */
h_blank_len = mode->htotal - mode->hdisplay;
h_sync_len = mode->hsync_end - mode->hsync_start;
@@ -781,10 +805,12 @@ static void intel_sdvo_get_dtd_from_mode(struct intel_sdvo_dtd *dtd,
((v_sync_len & 0x30) >> 4);
dtd->part2.dtd_flags = 0x18;
+ if (mode->flags & DRM_MODE_FLAG_INTERLACE)
+ dtd->part2.dtd_flags |= DTD_FLAG_INTERLACE;
if (mode->flags & DRM_MODE_FLAG_PHSYNC)
- dtd->part2.dtd_flags |= 0x2;
+ dtd->part2.dtd_flags |= DTD_FLAG_HSYNC_POSITIVE;
if (mode->flags & DRM_MODE_FLAG_PVSYNC)
- dtd->part2.dtd_flags |= 0x4;
+ dtd->part2.dtd_flags |= DTD_FLAG_VSYNC_POSITIVE;
dtd->part2.sdvo_flags = 0;
dtd->part2.v_sync_off_high = v_sync_offset & 0xc0;
@@ -818,9 +844,11 @@ static void intel_sdvo_get_mode_from_dtd(struct drm_display_mode * mode,
mode->clock = dtd->part1.clock * 10;
mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
- if (dtd->part2.dtd_flags & 0x2)
+ if (dtd->part2.dtd_flags & DTD_FLAG_INTERLACE)
+ mode->flags |= DRM_MODE_FLAG_INTERLACE;
+ if (dtd->part2.dtd_flags & DTD_FLAG_HSYNC_POSITIVE)
mode->flags |= DRM_MODE_FLAG_PHSYNC;
- if (dtd->part2.dtd_flags & 0x4)
+ if (dtd->part2.dtd_flags & DTD_FLAG_VSYNC_POSITIVE)
mode->flags |= DRM_MODE_FLAG_PVSYNC;
}
@@ -828,7 +856,7 @@ static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo)
{
struct intel_sdvo_encode encode;
- CTASSERT(sizeof(encode) == 2);
+ BUILD_BUG_ON(sizeof(encode) != 2);
return intel_sdvo_get_value(intel_sdvo,
SDVO_CMD_GET_SUPP_ENCODE,
&encode, sizeof(encode));
@@ -876,6 +904,45 @@ static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
}
#endif
+static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo,
+ unsigned if_index, uint8_t tx_rate,
+ uint8_t *data, unsigned length)
+{
+ uint8_t set_buf_index[2] = { if_index, 0 };
+ uint8_t hbuf_size, tmp[8];
+ int i;
+
+ if (!intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_INDEX,
+ set_buf_index, 2))
+ return false;
+
+ if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO,
+ &hbuf_size, 1))
+ return false;
+
+ /* Buffer size is 0 based, hooray! */
+ hbuf_size++;
+
+ DRM_DEBUG_KMS("writing sdvo hbuf: %i, hbuf_size %i, hbuf_size: %i\n",
+ if_index, length, hbuf_size);
+
+ for (i = 0; i < hbuf_size; i += 8) {
+ memset(tmp, 0, 8);
+ if (i < length)
+ memcpy(tmp, data + i, min_t(unsigned, 8, length - i));
+
+ if (!intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_DATA,
+ tmp, 8))
+ return false;
+ }
+
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_TXRATE,
+ &tx_rate, 1);
+}
+
static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
{
struct dip_infoframe avi_if = {
@@ -883,11 +950,7 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
.ver = DIP_VERSION_AVI,
.len = DIP_LEN_AVI,
};
- uint8_t tx_rate = SDVO_HBUF_TX_VSYNC;
- uint8_t set_buf_index[2] = { 1, 0 };
uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)];
- uint64_t *data = (uint64_t *)sdvo_data;
- unsigned i;
intel_dip_infoframe_csum(&avi_if);
@@ -897,22 +960,9 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
sdvo_data[3] = avi_if.checksum;
memcpy(&sdvo_data[4], &avi_if.body, sizeof(avi_if.body.avi));
- if (!intel_sdvo_set_value(intel_sdvo,
- SDVO_CMD_SET_HBUF_INDEX,
- set_buf_index, 2))
- return false;
-
- for (i = 0; i < sizeof(sdvo_data); i += 8) {
- if (!intel_sdvo_set_value(intel_sdvo,
- SDVO_CMD_SET_HBUF_DATA,
- data, 8))
- return false;
- data++;
- }
-
- return intel_sdvo_set_value(intel_sdvo,
- SDVO_CMD_SET_HBUF_TXRATE,
- &tx_rate, 1);
+ return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF,
+ SDVO_HBUF_TX_VSYNC,
+ sdvo_data, sizeof(sdvo_data));
}
static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo)
@@ -924,7 +974,7 @@ static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo)
memset(&format, 0, sizeof(format));
memcpy(&format, &format_map, min(sizeof(format), sizeof(format_map)));
- CTASSERT(sizeof(format) == 6);
+ BUILD_BUG_ON(sizeof(format) != 6);
return intel_sdvo_set_value(intel_sdvo,
SDVO_CMD_SET_TV_FORMAT,
&format, sizeof(format));
@@ -947,11 +997,15 @@ intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo,
return true;
}
+/* Asks the sdvo controller for the preferred input mode given the output mode.
+ * Unfortunately we have to set up the full output mode to do that. */
static bool
-intel_sdvo_set_input_timings_for_mode(struct intel_sdvo *intel_sdvo,
- const struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode)
+intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
{
+ struct intel_sdvo_dtd input_dtd;
+
/* Reset the input timing to the screen. Assume always input 0. */
if (!intel_sdvo_set_target_input(intel_sdvo))
return false;
@@ -963,10 +1017,11 @@ intel_sdvo_set_input_timings_for_mode(struct intel_sdvo *intel_sdvo,
return false;
if (!intel_sdvo_get_preferred_input_timing(intel_sdvo,
- &intel_sdvo->input_dtd))
+ &input_dtd))
return false;
- intel_sdvo_get_mode_from_dtd(adjusted_mode, &intel_sdvo->input_dtd);
+ intel_sdvo_get_mode_from_dtd(adjusted_mode, &input_dtd);
+ intel_sdvo->dtd_sdvo_flags = input_dtd.part2.sdvo_flags;
return true;
}
@@ -987,17 +1042,17 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,
if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode))
return false;
- (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
- mode,
- adjusted_mode);
+ (void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
+ mode,
+ adjusted_mode);
} else if (intel_sdvo->is_lvds) {
if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
intel_sdvo->sdvo_lvds_fixed_mode))
return false;
- (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
- mode,
- adjusted_mode);
+ (void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
+ mode,
+ adjusted_mode);
}
/* Make the CRTC code factor in the SDVO pixel multiplier. The
@@ -1051,7 +1106,9 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
intel_sdvo->sdvo_lvds_fixed_mode);
else
intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
- (void) intel_sdvo_set_output_timing(intel_sdvo, &output_dtd);
+ if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd))
+ DRM_INFO("Setting output timings on %s failed\n",
+ SDVO_NAME(intel_sdvo));
/* Set the input timing to the screen. Assume always input 0. */
if (!intel_sdvo_set_target_input(intel_sdvo))
@@ -1073,7 +1130,11 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
* adjusted_mode.
*/
intel_sdvo_get_dtd_from_mode(&input_dtd, adjusted_mode);
- (void) intel_sdvo_set_input_timing(intel_sdvo, &input_dtd);
+ if (intel_sdvo->is_tv || intel_sdvo->is_lvds)
+ input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags;
+ if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd))
+ DRM_INFO("Setting input timings on %s failed\n",
+ SDVO_NAME(intel_sdvo));
switch (pixel_multiplier) {
default:
@@ -1128,51 +1189,170 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
intel_sdvo_write_sdvox(intel_sdvo, sdvox);
}
-static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)
+static bool intel_sdvo_connector_get_hw_state(struct intel_connector *connector)
{
- struct drm_device *dev = encoder->dev;
+ struct intel_sdvo_connector *intel_sdvo_connector =
+ to_intel_sdvo_connector(&connector->base);
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(&connector->base);
+ u16 active_outputs;
+
+ intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs);
+
+ if (active_outputs & intel_sdvo_connector->output_flag)
+ return true;
+ else
+ return false;
+}
+
+static bool intel_sdvo_get_hw_state(struct intel_encoder *encoder,
+ enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_sdvo *intel_sdvo = to_intel_sdvo(encoder);
- struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base);
+ u16 active_outputs;
+ u32 tmp;
+
+ tmp = I915_READ(intel_sdvo->sdvo_reg);
+ intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs);
+
+ if (!(tmp & SDVO_ENABLE) && (active_outputs == 0))
+ return false;
+
+ if (HAS_PCH_CPT(dev))
+ *pipe = PORT_TO_PIPE_CPT(tmp);
+ else
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
+}
+
+static void intel_disable_sdvo(struct intel_encoder *encoder)
+{
+ struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base);
u32 temp;
+ intel_sdvo_set_active_outputs(intel_sdvo, 0);
+ if (0)
+ intel_sdvo_set_encoder_power_state(intel_sdvo,
+ DRM_MODE_DPMS_OFF);
+
+ temp = I915_READ(intel_sdvo->sdvo_reg);
+ if ((temp & SDVO_ENABLE) != 0) {
+ /* HW workaround for IBX, we need to move the port to
+ * transcoder A before disabling it. */
+ if (HAS_PCH_IBX(encoder->base.dev)) {
+ struct drm_crtc *crtc = encoder->base.crtc;
+ int pipe = crtc ? to_intel_crtc(crtc)->pipe : -1;
+
+ if (temp & SDVO_PIPE_B_SELECT) {
+ temp &= ~SDVO_PIPE_B_SELECT;
+ I915_WRITE(intel_sdvo->sdvo_reg, temp);
+ POSTING_READ(intel_sdvo->sdvo_reg);
+
+ /* Again we need to write this twice. */
+ I915_WRITE(intel_sdvo->sdvo_reg, temp);
+ POSTING_READ(intel_sdvo->sdvo_reg);
+
+ /* Transcoder selection bits only update
+ * effectively on vblank. */
+ if (crtc)
+ intel_wait_for_vblank(encoder->base.dev, pipe);
+ else
+ DRM_MSLEEP(50);
+ }
+ }
+
+ intel_sdvo_write_sdvox(intel_sdvo, temp & ~SDVO_ENABLE);
+ }
+}
+
+static void intel_enable_sdvo(struct intel_encoder *encoder)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base);
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
+ u32 temp;
+ bool input1, input2;
+ int i;
+ u8 status;
+
+ temp = I915_READ(intel_sdvo->sdvo_reg);
+ if ((temp & SDVO_ENABLE) == 0) {
+ /* HW workaround for IBX, we need to move the port
+ * to transcoder A before disabling it. */
+ if (HAS_PCH_IBX(dev)) {
+ struct drm_crtc *crtc = encoder->base.crtc;
+ int pipe = crtc ? to_intel_crtc(crtc)->pipe : -1;
+
+ /* Restore the transcoder select bit. */
+ if (pipe == PIPE_B)
+ temp |= SDVO_PIPE_B_SELECT;
+ }
+
+ intel_sdvo_write_sdvox(intel_sdvo, temp | SDVO_ENABLE);
+ }
+ for (i = 0; i < 2; i++)
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ status = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2);
+ /* Warn if the device reported failure to sync.
+ * A lot of SDVO devices fail to notify of sync, but it's
+ * a given it the status is a success, we succeeded.
+ */
+ if (status == SDVO_CMD_STATUS_SUCCESS && !input1) {
+ DRM_DEBUG_KMS("First %s output reported failure to "
+ "sync\n", SDVO_NAME(intel_sdvo));
+ }
+
+ if (0)
+ intel_sdvo_set_encoder_power_state(intel_sdvo,
+ DRM_MODE_DPMS_ON);
+ intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
+}
+
+static void intel_sdvo_dpms(struct drm_connector *connector, int mode)
+{
+ struct drm_crtc *crtc;
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+
+ /* dvo supports only 2 dpms states. */
+ if (mode != DRM_MODE_DPMS_ON)
+ mode = DRM_MODE_DPMS_OFF;
+
+ if (mode == connector->dpms)
+ return;
+
+ connector->dpms = mode;
+
+ /* Only need to change hw state when actually enabled */
+ crtc = intel_sdvo->base.base.crtc;
+ if (!crtc) {
+ intel_sdvo->base.connectors_active = false;
+ return;
+ }
+
if (mode != DRM_MODE_DPMS_ON) {
intel_sdvo_set_active_outputs(intel_sdvo, 0);
if (0)
intel_sdvo_set_encoder_power_state(intel_sdvo, mode);
- if (mode == DRM_MODE_DPMS_OFF) {
- temp = I915_READ(intel_sdvo->sdvo_reg);
- if ((temp & SDVO_ENABLE) != 0) {
- intel_sdvo_write_sdvox(intel_sdvo, temp & ~SDVO_ENABLE);
- }
- }
+ intel_sdvo->base.connectors_active = false;
+
+ intel_crtc_update_dpms(crtc);
} else {
- bool input1, input2;
- int i;
- u8 status;
-
- temp = I915_READ(intel_sdvo->sdvo_reg);
- if ((temp & SDVO_ENABLE) == 0)
- intel_sdvo_write_sdvox(intel_sdvo, temp | SDVO_ENABLE);
- for (i = 0; i < 2; i++)
- intel_wait_for_vblank(dev, intel_crtc->pipe);
-
- status = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2);
- /* Warn if the device reported failure to sync.
- * A lot of SDVO devices fail to notify of sync, but it's
- * a given it the status is a success, we succeeded.
- */
- if (status == SDVO_CMD_STATUS_SUCCESS && !input1) {
- DRM_DEBUG_KMS("First %s output reported failure to "
- "sync\n", SDVO_NAME(intel_sdvo));
- }
+ intel_sdvo->base.connectors_active = true;
+
+ intel_crtc_update_dpms(crtc);
if (0)
intel_sdvo_set_encoder_power_state(intel_sdvo, mode);
intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
}
- return;
+
+ intel_modeset_check_state(connector->dev);
}
static int intel_sdvo_mode_valid(struct drm_connector *connector,
@@ -1202,7 +1382,7 @@ static int intel_sdvo_mode_valid(struct drm_connector *connector,
static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps)
{
- CTASSERT(sizeof(*caps) == 8);
+ BUILD_BUG_ON(sizeof(*caps) != 8);
if (!intel_sdvo_get_value(intel_sdvo,
SDVO_CMD_GET_DEVICE_CAPS,
caps, sizeof(*caps)))
@@ -1237,18 +1417,21 @@ static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct in
return true;
}
-static int intel_sdvo_supports_hotplug(struct intel_sdvo *intel_sdvo)
+static uint16_t intel_sdvo_get_hotplug_support(struct intel_sdvo *intel_sdvo)
{
struct drm_device *dev = intel_sdvo->base.base.dev;
- u8 response[2];
+ uint16_t hotplug;
/* HW Erratum: SDVO Hotplug is broken on all i945G chips, there's noise
* on the line. */
if (IS_I945G(dev) || IS_I945GM(dev))
- return false;
+ return 0;
- return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
- &response, 2) && response[0];
+ if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
+ &hotplug, sizeof(hotplug)))
+ return 0;
+
+ return hotplug;
}
static void intel_sdvo_enable_hotplug(struct intel_encoder *encoder)
@@ -1256,7 +1439,7 @@ static void intel_sdvo_enable_hotplug(struct intel_encoder *encoder)
struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base);
intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG,
- &intel_sdvo->hotplug_active, 2);
+ &intel_sdvo->hotplug_active, 2);
}
static bool
@@ -1364,15 +1547,9 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
enum drm_connector_status ret;
- if (!intel_sdvo_write_cmd(intel_sdvo,
- SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0))
- return connector_status_unknown;
-
- /* add 30ms delay when the output type might be TV */
- if (intel_sdvo->caps.output_flags & SDVO_TV_MASK)
- drm_msleep(30, "915svo");
-
- if (!intel_sdvo_read_response(intel_sdvo, &response, 2))
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_ATTACHED_DISPLAYS,
+ &response, 2))
return connector_status_unknown;
DRM_DEBUG_KMS("SDVO response %d %d [%x]\n",
@@ -1536,7 +1713,7 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector)
if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output))
return;
- CTASSERT(sizeof(tv_res) == 3);
+ BUILD_BUG_ON(sizeof(tv_res) != 3);
if (!intel_sdvo_write_cmd(intel_sdvo,
SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT,
&tv_res, sizeof(tv_res)))
@@ -1566,7 +1743,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
* arranged in priority order.
*/
intel_ddc_get_modes(connector, intel_sdvo->i2c);
- if (!list_empty(&connector->probed_modes))
+ if (list_empty(&connector->probed_modes) == false)
goto end;
/* Fetch modes from VBT */
@@ -1659,11 +1836,8 @@ static void intel_sdvo_destroy(struct drm_connector *connector)
intel_sdvo_connector->tv_format);
intel_sdvo_destroy_enhance_property(connector);
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
- free(connector, DRM_MEM_KMS);
+ free(intel_sdvo_connector, DRM_MEM_KMS);
}
static bool intel_sdvo_detect_hdmi_audio(struct drm_connector *connector)
@@ -1678,6 +1852,7 @@ static bool intel_sdvo_detect_hdmi_audio(struct drm_connector *connector)
edid = intel_sdvo_get_edid(connector);
if (edid != NULL && edid->input & DRM_EDID_INPUT_DIGITAL)
has_audio = drm_detect_monitor_audio(edid);
+ free(edid, DRM_MEM_KMS);
return has_audio;
}
@@ -1822,8 +1997,8 @@ set_value:
done:
if (intel_sdvo->base.base.crtc) {
struct drm_crtc *crtc = intel_sdvo->base.base.crtc;
- drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x,
- crtc->y, crtc->fb);
+ intel_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
}
return 0;
@@ -1831,15 +2006,13 @@ done:
}
static const struct drm_encoder_helper_funcs intel_sdvo_helper_funcs = {
- .dpms = intel_sdvo_dpms,
.mode_fixup = intel_sdvo_mode_fixup,
- .prepare = intel_encoder_prepare,
.mode_set = intel_sdvo_mode_set,
- .commit = intel_encoder_commit,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_sdvo_dpms,
.detect = intel_sdvo_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_sdvo_set_property,
@@ -1941,17 +2114,24 @@ intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
else
mapping = &dev_priv->sdvo_mappings[1];
- pin = GMBUS_PORT_DPB;
- if (mapping->initialized)
+ if (mapping->initialized && intel_gmbus_is_port_valid(mapping->i2c_pin))
pin = mapping->i2c_pin;
+ else
+ pin = GMBUS_PORT_DPB;
- if (intel_gmbus_is_port_valid(pin)) {
- sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
- intel_gmbus_set_speed(sdvo->i2c, GMBUS_RATE_1MHZ);
- intel_gmbus_force_bit(sdvo->i2c, true);
- } else {
- sdvo->i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
- }
+ sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
+
+ /* With gmbus we should be able to drive sdvo i2c at 2MHz, but somehow
+ * our code totally fails once we start using gmbus. Hence fall back to
+ * bit banging for now. */
+ intel_gmbus_force_bit(sdvo->i2c, true);
+}
+
+/* undo any changes intel_sdvo_select_i2c_bus() did to sdvo->i2c */
+static void
+intel_sdvo_unselect_i2c_bus(struct intel_sdvo *sdvo)
+{
+ intel_gmbus_force_bit(sdvo->i2c, false);
}
static bool
@@ -2012,11 +2192,9 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
connector->base.base.interlace_allowed = 1;
connector->base.base.doublescan_allowed = 0;
connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
+ connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;
intel_connector_attach_encoder(&connector->base, &encoder->base);
-#if 0
- drm_sysfs_connector_add(&connector->base.base);
-#endif
}
static void
@@ -2038,8 +2216,9 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
struct intel_connector *intel_connector;
struct intel_sdvo_connector *intel_sdvo_connector;
- intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
- DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_sdvo_connector)
+ return false;
if (device == 0) {
intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0;
@@ -2051,17 +2230,18 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
intel_connector = &intel_sdvo_connector->base;
connector = &intel_connector->base;
- if (intel_sdvo_supports_hotplug(intel_sdvo) & (1 << device)) {
+ if (intel_sdvo_get_hotplug_support(intel_sdvo) &
+ intel_sdvo_connector->output_flag) {
connector->polled = DRM_CONNECTOR_POLL_HPD;
- intel_sdvo->hotplug_active[0] |= 1 << device;
+ intel_sdvo->hotplug_active |= intel_sdvo_connector->output_flag;
/* Some SDVO devices have one-shot hotplug interrupts.
* Ensure that they get re-enabled when an interrupt happens.
*/
intel_encoder->hot_plug = intel_sdvo_enable_hotplug;
intel_sdvo_enable_hotplug(intel_encoder);
- }
- else
+ } else {
connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
+ }
encoder->encoder_type = DRM_MODE_ENCODER_TMDS;
connector->connector_type = DRM_MODE_CONNECTOR_DVID;
@@ -2069,8 +2249,6 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
intel_sdvo->is_hdmi = true;
}
- intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
- (1 << INTEL_ANALOG_CLONE_BIT));
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
if (intel_sdvo->is_hdmi)
@@ -2087,8 +2265,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
struct intel_connector *intel_connector;
struct intel_sdvo_connector *intel_sdvo_connector;
- intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
- DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
if (!intel_sdvo_connector)
return false;
@@ -2102,7 +2279,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
intel_sdvo->is_tv = true;
intel_sdvo->base.needs_tv_clock = true;
- intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
@@ -2127,8 +2303,9 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
struct intel_connector *intel_connector;
struct intel_sdvo_connector *intel_sdvo_connector;
- intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
- DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_sdvo_connector)
+ return false;
intel_connector = &intel_sdvo_connector->base;
connector = &intel_connector->base;
@@ -2144,9 +2321,6 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
}
- intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
- (1 << INTEL_ANALOG_CLONE_BIT));
-
intel_sdvo_connector_init(intel_sdvo_connector,
intel_sdvo);
return true;
@@ -2160,8 +2334,9 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
struct intel_connector *intel_connector;
struct intel_sdvo_connector *intel_sdvo_connector;
- intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
- DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_sdvo_connector)
+ return false;
intel_connector = &intel_sdvo_connector->base;
connector = &intel_connector->base;
@@ -2176,9 +2351,6 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
}
- intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) |
- (1 << INTEL_SDVO_LVDS_CLONE_BIT));
-
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
goto err;
@@ -2251,6 +2423,18 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags)
return true;
}
+static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ struct drm_connector *connector, *tmp;
+
+ list_for_each_entry_safe(connector, tmp,
+ &dev->mode_config.connector_list, head) {
+ if (intel_attached_encoder(connector) == &intel_sdvo->base)
+ intel_sdvo_destroy(connector);
+ }
+}
+
static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
struct intel_sdvo_connector *intel_sdvo_connector,
int type)
@@ -2262,7 +2446,7 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
if (!intel_sdvo_set_target_output(intel_sdvo, type))
return false;
- CTASSERT(sizeof(format) == 6);
+ BUILD_BUG_ON(sizeof(format) != 6);
if (!intel_sdvo_get_value(intel_sdvo,
SDVO_CMD_GET_SUPPORTED_TV_FORMATS,
&format, sizeof(format)))
@@ -2455,7 +2639,7 @@ static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
uint16_t response;
} enhancements;
- CTASSERT(sizeof(enhancements) == 2);
+ BUILD_BUG_ON(sizeof(enhancements) != 2);
enhancements.response = 0;
intel_sdvo_get_value(intel_sdvo,
@@ -2503,14 +2687,10 @@ intel_sdvo_ddc_proxy_attach(device_t idev)
static int
intel_sdvo_ddc_proxy_detach(device_t idev)
{
- struct intel_sdvo_ddc_proxy_sc *sc;
- device_t port;
- sc = device_get_softc(idev);
- port = sc->port;
bus_generic_detach(idev);
- if (port != NULL)
- device_delete_child(idev, port);
+ device_delete_children(idev);
+
return (0);
}
@@ -2520,7 +2700,7 @@ intel_sdvo_ddc_proxy_reset(device_t idev, u_char speed, u_char addr,
{
struct intel_sdvo_ddc_proxy_sc *sc;
struct intel_sdvo *sdvo;
-
+
sc = device_get_softc(idev);
sdvo = sc->intel_sdvo;
@@ -2528,39 +2708,57 @@ intel_sdvo_ddc_proxy_reset(device_t idev, u_char speed, u_char addr,
oldaddr));
}
-static int
-intel_sdvo_ddc_proxy_transfer(device_t idev, struct iic_msg *msgs, uint32_t num)
+static int intel_sdvo_ddc_proxy_xfer(device_t adapter,
+ struct iic_msg *msgs,
+ uint32_t num)
{
struct intel_sdvo_ddc_proxy_sc *sc;
struct intel_sdvo *sdvo;
-
- sc = device_get_softc(idev);
+
+ sc = device_get_softc(adapter);
sdvo = sc->intel_sdvo;
if (!intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus))
- return (EIO);
+ return EIO;
return (iicbus_transfer(sdvo->i2c, msgs, num));
}
+static device_method_t intel_sdvo_ddc_proxy_methods[] = {
+ DEVMETHOD(device_probe, intel_sdvo_ddc_proxy_probe),
+ DEVMETHOD(device_attach, intel_sdvo_ddc_proxy_attach),
+ DEVMETHOD(device_detach, intel_sdvo_ddc_proxy_detach),
+ DEVMETHOD(iicbus_reset, intel_sdvo_ddc_proxy_reset),
+ DEVMETHOD(iicbus_transfer, intel_sdvo_ddc_proxy_xfer),
+ DEVMETHOD_END
+};
+static driver_t intel_sdvo_ddc_proxy_driver = {
+ "intel_sdvo_ddc_proxy",
+ intel_sdvo_ddc_proxy_methods,
+ sizeof(struct intel_sdvo_ddc_proxy_sc)
+};
+static devclass_t intel_sdvo_devclass;
+DRIVER_MODULE_ORDERED(intel_sdvo_ddc_proxy, drmn, intel_sdvo_ddc_proxy_driver,
+ intel_sdvo_devclass, 0, 0, SI_ORDER_FIRST);
+
static bool
-intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, struct drm_device *dev,
- int sdvo_reg)
+intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo,
+ struct drm_device *dev)
{
struct intel_sdvo_ddc_proxy_sc *sc;
int ret;
sdvo->ddc_iic_bus = device_add_child(dev->dev,
- "intel_sdvo_ddc_proxy", sdvo_reg);
+ "intel_sdvo_ddc_proxy", sdvo->sdvo_reg);
if (sdvo->ddc_iic_bus == NULL) {
- DRM_ERROR("cannot create ddc proxy bus %d\n", sdvo_reg);
+ DRM_ERROR("cannot create ddc proxy bus %d\n", sdvo->sdvo_reg);
return (false);
}
device_quiet(sdvo->ddc_iic_bus);
ret = device_probe_and_attach(sdvo->ddc_iic_bus);
if (ret != 0) {
DRM_ERROR("cannot attach proxy bus %d error %d\n",
- sdvo_reg, ret);
+ sdvo->sdvo_reg, ret);
device_delete_child(dev->dev, sdvo->ddc_iic_bus);
return (false);
}
@@ -2568,45 +2766,27 @@ intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, struct drm_device *dev,
sc->intel_sdvo = sdvo;
sdvo->ddc = sc->port;
- return (true);
-}
-
-static device_method_t intel_sdvo_ddc_proxy_methods[] = {
- DEVMETHOD(device_probe, intel_sdvo_ddc_proxy_probe),
- DEVMETHOD(device_attach, intel_sdvo_ddc_proxy_attach),
- DEVMETHOD(device_detach, intel_sdvo_ddc_proxy_detach),
- DEVMETHOD(iicbus_reset, intel_sdvo_ddc_proxy_reset),
- DEVMETHOD(iicbus_transfer, intel_sdvo_ddc_proxy_transfer),
- DEVMETHOD_END
-};
-static driver_t intel_sdvo_ddc_proxy_driver = {
- "intel_sdvo_ddc_proxy",
- intel_sdvo_ddc_proxy_methods,
- sizeof(struct intel_sdvo_ddc_proxy_sc)
-};
-static devclass_t intel_sdvo_devclass;
-DRIVER_MODULE_ORDERED(intel_sdvo_ddc_proxy, drmn, intel_sdvo_ddc_proxy_driver,
- intel_sdvo_devclass, 0, 0, SI_ORDER_FIRST);
+ return true;
+}
bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_encoder *intel_encoder;
struct intel_sdvo *intel_sdvo;
+ u32 hotplug_mask;
int i;
-
- intel_sdvo = malloc(sizeof(struct intel_sdvo), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ intel_sdvo = malloc(sizeof(struct intel_sdvo), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_sdvo)
+ return false;
intel_sdvo->sdvo_reg = sdvo_reg;
intel_sdvo->is_sdvob = is_sdvob;
intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(dev, intel_sdvo) >> 1;
intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo, sdvo_reg);
- if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev, sdvo_reg)) {
- free(intel_sdvo, DRM_MEM_KMS);
- return false;
- }
+ if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev))
+ goto err_i2c_bus;
/* encoder type will be decided later */
intel_encoder = &intel_sdvo->base;
@@ -2624,42 +2804,62 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
}
}
- if (intel_sdvo->is_sdvob)
- dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS;
- else
- dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS;
+ hotplug_mask = 0;
+ if (IS_G4X(dev)) {
+ hotplug_mask = intel_sdvo->is_sdvob ?
+ SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X;
+ } else if (IS_GEN4(dev)) {
+ hotplug_mask = intel_sdvo->is_sdvob ?
+ SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965;
+ } else {
+ hotplug_mask = intel_sdvo->is_sdvob ?
+ SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915;
+ }
drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);
+ intel_encoder->disable = intel_disable_sdvo;
+ intel_encoder->enable = intel_enable_sdvo;
+ intel_encoder->get_hw_state = intel_sdvo_get_hw_state;
+
/* In default case sdvo lvds is false */
if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps))
goto err;
- /* Set up hotplug command - note paranoia about contents of reply.
- * We assume that the hardware is in a sane state, and only touch
- * the bits we think we understand.
- */
- intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG,
- &intel_sdvo->hotplug_active, 2);
- intel_sdvo->hotplug_active[0] &= ~0x3;
-
- if (intel_sdvo_output_setup(intel_sdvo,
- intel_sdvo->caps.output_flags) != true) {
+ if (intel_sdvo_output_setup(intel_sdvo,
+ intel_sdvo->caps.output_flags) != true) {
DRM_DEBUG_KMS("SDVO output failed to setup on %s\n",
SDVO_NAME(intel_sdvo));
- goto err;
- }
+ /* Output_setup can leave behind connectors! */
+ goto err_output;
+ }
+
+ /*
+ * Cloning SDVO with anything is often impossible, since the SDVO
+ * encoder can request a special input timing mode. And even if that's
+ * not the case we have evidence that cloning a plain unscaled mode with
+ * VGA doesn't really work. Furthermore the cloning flags are way too
+ * simplistic anyway to express such constraints, so just give up on
+ * cloning for SDVO encoders.
+ */
+ intel_sdvo->base.cloneable = false;
+
+ /* Only enable the hotplug irq if we need it, to work around noisy
+ * hotplug lines.
+ */
+ if (intel_sdvo->hotplug_active)
+ dev_priv->hotplug_supported_mask |= hotplug_mask;
intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo, sdvo_reg);
/* Set the input timing to the screen. Assume always input 0. */
if (!intel_sdvo_set_target_input(intel_sdvo))
- goto err;
+ goto err_output;
if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,
&intel_sdvo->pixel_clock_min,
&intel_sdvo->pixel_clock_max))
- goto err;
+ goto err_output;
DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
"clock range %dMHz - %dMHz, "
@@ -2679,8 +2879,14 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
(SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');
return true;
+err_output:
+ intel_sdvo_output_cleanup(intel_sdvo);
+
err:
drm_encoder_cleanup(&intel_encoder->base);
+ device_delete_child(dev->dev, intel_sdvo->ddc_iic_bus);
+err_i2c_bus:
+ intel_sdvo_unselect_i2c_bus(intel_sdvo);
free(intel_sdvo, DRM_MEM_KMS);
return false;
diff --git a/sys/dev/drm2/i915/intel_sprite.c b/sys/dev/drm2/i915/intel_sprite.c
index 35f2baa..a8b218a 100644
--- a/sys/dev/drm2/i915/intel_sprite.c
+++ b/sys/dev/drm2/i915/intel_sprite.c
@@ -34,11 +34,11 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_fourcc.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
-#include <dev/drm2/drm_fourcc.h>
static void
ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
@@ -52,7 +52,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
struct intel_plane *intel_plane = to_intel_plane(plane);
int pipe = intel_plane->pipe;
u32 sprctl, sprscale = 0;
- int pixel_size;
+ unsigned long sprsurf_offset, linear_offset;
+ int pixel_size = drm_format_plane_cpp(fb->pixel_format, 0);
sprctl = I915_READ(SPRCTL(pipe));
@@ -60,37 +61,29 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
sprctl &= ~SPRITE_PIXFORMAT_MASK;
sprctl &= ~SPRITE_RGB_ORDER_RGBX;
sprctl &= ~SPRITE_YUV_BYTE_ORDER_MASK;
+ sprctl &= ~SPRITE_TILED;
switch (fb->pixel_format) {
case DRM_FORMAT_XBGR8888:
- sprctl |= SPRITE_FORMAT_RGBX888;
- pixel_size = 4;
+ sprctl |= SPRITE_FORMAT_RGBX888 | SPRITE_RGB_ORDER_RGBX;
break;
case DRM_FORMAT_XRGB8888:
- sprctl |= SPRITE_FORMAT_RGBX888 | SPRITE_RGB_ORDER_RGBX;
- pixel_size = 4;
+ sprctl |= SPRITE_FORMAT_RGBX888;
break;
case DRM_FORMAT_YUYV:
sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_YUYV;
- pixel_size = 2;
break;
case DRM_FORMAT_YVYU:
sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_YVYU;
- pixel_size = 2;
break;
case DRM_FORMAT_UYVY:
sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_UYVY;
- pixel_size = 2;
break;
case DRM_FORMAT_VYUY:
sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_VYUY;
- pixel_size = 2;
break;
default:
- DRM_DEBUG_DRIVER("bad pixel format, assuming RGBX888\n");
- sprctl |= DVS_FORMAT_RGBX888;
- pixel_size = 4;
- break;
+ BUG();
}
if (obj->tiling_mode != I915_TILING_NONE)
@@ -130,18 +123,27 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
I915_WRITE(SPRSTRIDE(pipe), fb->pitches[0]);
I915_WRITE(SPRPOS(pipe), (crtc_y << 16) | crtc_x);
- if (obj->tiling_mode != I915_TILING_NONE) {
+
+ linear_offset = y * fb->pitches[0] + x * pixel_size;
+ sprsurf_offset =
+ intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
+ pixel_size, fb->pitches[0]);
+ linear_offset -= sprsurf_offset;
+
+ /* HSW consolidates SPRTILEOFF and SPRLINOFF into a single SPROFFSET
+ * register */
+ if (IS_HASWELL(dev))
+ I915_WRITE(SPROFFSET(pipe), (y << 16) | x);
+ else if (obj->tiling_mode != I915_TILING_NONE)
I915_WRITE(SPRTILEOFF(pipe), (y << 16) | x);
- } else {
- unsigned long offset;
+ else
+ I915_WRITE(SPRLINOFF(pipe), linear_offset);
- offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
- I915_WRITE(SPRLINOFF(pipe), offset);
- }
I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
- I915_WRITE(SPRSCALE(pipe), sprscale);
+ if (intel_plane->can_scale)
+ I915_WRITE(SPRSCALE(pipe), sprscale);
I915_WRITE(SPRCTL(pipe), sprctl);
- I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
+ I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset + sprsurf_offset);
POSTING_READ(SPRSURF(pipe));
}
@@ -155,7 +157,8 @@ ivb_disable_plane(struct drm_plane *plane)
I915_WRITE(SPRCTL(pipe), I915_READ(SPRCTL(pipe)) & ~SPRITE_ENABLE);
/* Can't leave the scaler enabled... */
- I915_WRITE(SPRSCALE(pipe), 0);
+ if (intel_plane->can_scale)
+ I915_WRITE(SPRSCALE(pipe), 0);
/* Activate double buffered register update */
I915_MODIFY_DISPBASE(SPRSURF(pipe), 0);
POSTING_READ(SPRSURF(pipe));
@@ -228,8 +231,10 @@ ilk_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
struct drm_device *dev = plane->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_plane *intel_plane = to_intel_plane(plane);
- int pipe = intel_plane->pipe, pixel_size;
+ int pipe = intel_plane->pipe;
+ unsigned long dvssurf_offset, linear_offset;
u32 dvscntr, dvsscale;
+ int pixel_size = drm_format_plane_cpp(fb->pixel_format, 0);
dvscntr = I915_READ(DVSCNTR(pipe));
@@ -237,37 +242,29 @@ ilk_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
dvscntr &= ~DVS_PIXFORMAT_MASK;
dvscntr &= ~DVS_RGB_ORDER_XBGR;
dvscntr &= ~DVS_YUV_BYTE_ORDER_MASK;
+ dvscntr &= ~DVS_TILED;
switch (fb->pixel_format) {
case DRM_FORMAT_XBGR8888:
dvscntr |= DVS_FORMAT_RGBX888 | DVS_RGB_ORDER_XBGR;
- pixel_size = 4;
break;
case DRM_FORMAT_XRGB8888:
dvscntr |= DVS_FORMAT_RGBX888;
- pixel_size = 4;
break;
case DRM_FORMAT_YUYV:
dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_YUYV;
- pixel_size = 2;
break;
case DRM_FORMAT_YVYU:
dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_YVYU;
- pixel_size = 2;
break;
case DRM_FORMAT_UYVY:
dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_UYVY;
- pixel_size = 2;
break;
case DRM_FORMAT_VYUY:
dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_VYUY;
- pixel_size = 2;
break;
default:
- DRM_DEBUG_DRIVER("bad pixel format, assuming RGBX888\n");
- dvscntr |= DVS_FORMAT_RGBX888;
- pixel_size = 4;
- break;
+ BUG();
}
if (obj->tiling_mode != I915_TILING_NONE)
@@ -291,18 +288,22 @@ ilk_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
I915_WRITE(DVSSTRIDE(pipe), fb->pitches[0]);
I915_WRITE(DVSPOS(pipe), (crtc_y << 16) | crtc_x);
- if (obj->tiling_mode != I915_TILING_NONE) {
+
+ linear_offset = y * fb->pitches[0] + x * pixel_size;
+ dvssurf_offset =
+ intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
+ pixel_size, fb->pitches[0]);
+ linear_offset -= dvssurf_offset;
+
+ if (obj->tiling_mode != I915_TILING_NONE)
I915_WRITE(DVSTILEOFF(pipe), (y << 16) | x);
- } else {
- unsigned long offset;
+ else
+ I915_WRITE(DVSLINOFF(pipe), linear_offset);
- offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
- I915_WRITE(DVSLINOFF(pipe), offset);
- }
I915_WRITE(DVSSIZE(pipe), (crtc_h << 16) | crtc_w);
I915_WRITE(DVSSCALE(pipe), dvsscale);
I915_WRITE(DVSCNTR(pipe), dvscntr);
- I915_MODIFY_DISPBASE(DVSSURF(pipe), obj->gtt_offset);
+ I915_MODIFY_DISPBASE(DVSSURF(pipe), obj->gtt_offset + dvssurf_offset);
POSTING_READ(DVSSURF(pipe));
}
@@ -330,6 +331,12 @@ intel_enable_primary(struct drm_crtc *crtc)
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int reg = DSPCNTR(intel_crtc->plane);
+ if (!intel_crtc->primary_disabled)
+ return;
+
+ intel_crtc->primary_disabled = false;
+ intel_update_fbc(dev);
+
I915_WRITE(reg, I915_READ(reg) | DISPLAY_PLANE_ENABLE);
}
@@ -341,7 +348,13 @@ intel_disable_primary(struct drm_crtc *crtc)
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int reg = DSPCNTR(intel_crtc->plane);
+ if (intel_crtc->primary_disabled)
+ return;
+
I915_WRITE(reg, I915_READ(reg) & ~DISPLAY_PLANE_ENABLE);
+
+ intel_crtc->primary_disabled = true;
+ intel_update_fbc(dev);
}
static int
@@ -412,6 +425,8 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
struct intel_framebuffer *intel_fb;
struct drm_i915_gem_object *obj, *old_obj;
int pipe = intel_plane->pipe;
+ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
+ pipe);
int ret = 0;
int x = src_x >> 16, y = src_y >> 16;
int primary_w = crtc->mode.hdisplay, primary_h = crtc->mode.vdisplay;
@@ -426,7 +441,7 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
src_h = src_h >> 16;
/* Pipe must be running... */
- if (!(I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE))
+ if (!(I915_READ(PIPECONF(cpu_transcoder)) & PIPECONF_ENABLE))
return -EINVAL;
if (crtc_x >= primary_w || crtc_y >= primary_h)
@@ -436,6 +451,15 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if (intel_plane->pipe != intel_crtc->pipe)
return -EINVAL;
+ /* Sprite planes can be linear or x-tiled surfaces */
+ switch (obj->tiling_mode) {
+ case I915_TILING_NONE:
+ case I915_TILING_X:
+ break;
+ default:
+ return -EINVAL;
+ }
+
/*
* Clamp the width & height into the visible area. Note we don't
* try to scale the source if part of the visible region is offscreen.
@@ -463,6 +487,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
goto out;
/*
+ * We may not have a scaler, eg. HSW does not have it any more
+ */
+ if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
+ return -EINVAL;
+
+ /*
* We can take a larger source and scale it down, but
* only so much... 16x is the max on SNB.
*/
@@ -489,18 +519,14 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
* Be sure to re-enable the primary before the sprite is no longer
* covering it fully.
*/
- if (!disable_primary && intel_plane->primary_disabled) {
+ if (!disable_primary)
intel_enable_primary(crtc);
- intel_plane->primary_disabled = false;
- }
intel_plane->update_plane(plane, fb, obj, crtc_x, crtc_y,
crtc_w, crtc_h, x, y, src_w, src_h);
- if (disable_primary) {
+ if (disable_primary)
intel_disable_primary(crtc);
- intel_plane->primary_disabled = true;
- }
/* Unpin old obj after new one is active to avoid ugliness */
if (old_obj) {
@@ -531,11 +557,8 @@ intel_disable_plane(struct drm_plane *plane)
struct intel_plane *intel_plane = to_intel_plane(plane);
int ret = 0;
- if (intel_plane->primary_disabled) {
+ if (plane->crtc)
intel_enable_primary(plane->crtc);
- intel_plane->primary_disabled = false;
- }
-
intel_plane->disable_plane(plane);
if (!intel_plane->obj)
@@ -575,7 +598,7 @@ int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
return -EINVAL;
sx_xlock(&dev->mode_config.mutex);
-
+
obj = drm_mode_object_find(dev, set->plane_id, DRM_MODE_OBJECT_PLANE);
if (!obj) {
ret = -EINVAL;
@@ -655,12 +678,14 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
if (INTEL_INFO(dev)->gen < 5)
return -ENODEV;
- intel_plane = malloc(sizeof(struct intel_plane), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ intel_plane = malloc(sizeof(struct intel_plane), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_plane)
+ return -ENOMEM;
switch (INTEL_INFO(dev)->gen) {
case 5:
case 6:
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 16;
intel_plane->update_plane = ilk_update_plane;
intel_plane->disable_plane = ilk_disable_plane;
@@ -669,14 +694,18 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
if (IS_GEN6(dev)) {
plane_formats = snb_plane_formats;
- num_plane_formats = DRM_ARRAY_SIZE(snb_plane_formats);
+ num_plane_formats = ARRAY_SIZE(snb_plane_formats);
} else {
plane_formats = ilk_plane_formats;
- num_plane_formats = DRM_ARRAY_SIZE(ilk_plane_formats);
+ num_plane_formats = ARRAY_SIZE(ilk_plane_formats);
}
break;
case 7:
+ if (IS_HASWELL(dev) || IS_VALLEYVIEW(dev))
+ intel_plane->can_scale = false;
+ else
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 2;
intel_plane->update_plane = ivb_update_plane;
intel_plane->disable_plane = ivb_disable_plane;
@@ -684,10 +713,11 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
intel_plane->get_colorkey = ivb_get_colorkey;
plane_formats = snb_plane_formats;
- num_plane_formats = DRM_ARRAY_SIZE(snb_plane_formats);
+ num_plane_formats = ARRAY_SIZE(snb_plane_formats);
break;
default:
+ free(intel_plane, DRM_MEM_KMS);
return -ENODEV;
}
@@ -702,4 +732,3 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
return ret;
}
-
diff --git a/sys/dev/drm2/i915/intel_tv.c b/sys/dev/drm2/i915/intel_tv.c
index bc276d8..04b3ead 100644
--- a/sys/dev/drm2/i915/intel_tv.c
+++ b/sys/dev/drm2/i915/intel_tv.c
@@ -34,12 +34,11 @@
__FBSDID("$FreeBSD$");
#include <dev/drm2/drmP.h>
-#include <dev/drm2/drm.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/intel_drv.h>
#include <dev/drm2/i915/i915_drm.h>
#include <dev/drm2/i915/i915_drv.h>
-#include <dev/drm2/i915/intel_drv.h>
enum tv_margin {
TV_MARGIN_LEFT, TV_MARGIN_TOP,
@@ -677,6 +676,54 @@ static const struct tv_mode tv_modes[] = {
.filter_table = filter_table,
},
{
+ .name = "480p",
+ .clock = 107520,
+ .refresh = 59940,
+ .oversample = TV_OVERSAMPLE_4X,
+ .component_only = 1,
+
+ .hsync_end = 64, .hblank_end = 122,
+ .hblank_start = 842, .htotal = 857,
+
+ .progressive = true, .trilevel_sync = false,
+
+ .vsync_start_f1 = 12, .vsync_start_f2 = 12,
+ .vsync_len = 12,
+
+ .veq_ena = false,
+
+ .vi_end_f1 = 44, .vi_end_f2 = 44,
+ .nbr_end = 479,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "576p",
+ .clock = 107520,
+ .refresh = 50000,
+ .oversample = TV_OVERSAMPLE_4X,
+ .component_only = 1,
+
+ .hsync_end = 64, .hblank_end = 139,
+ .hblank_start = 859, .htotal = 863,
+
+ .progressive = true, .trilevel_sync = false,
+
+ .vsync_start_f1 = 10, .vsync_start_f2 = 10,
+ .vsync_len = 10,
+
+ .veq_ena = false,
+
+ .vi_end_f1 = 48, .vi_end_f2 = 48,
+ .nbr_end = 575,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ },
+ {
.name = "720p@60Hz",
.clock = 148800,
.refresh = 60000,
@@ -791,22 +838,37 @@ static struct intel_tv *intel_attached_tv(struct drm_connector *connector)
base);
}
+static bool
+intel_tv_get_hw_state(struct intel_encoder *encoder, enum pipe *pipe)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 tmp = I915_READ(TV_CTL);
+
+ if (!(tmp & TV_ENC_ENABLE))
+ return false;
+
+ *pipe = PORT_TO_PIPE(tmp);
+
+ return true;
+}
+
static void
-intel_tv_dpms(struct drm_encoder *encoder, int mode)
+intel_enable_tv(struct intel_encoder *encoder)
{
- struct drm_device *dev = encoder->dev;
+ struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- switch (mode) {
- case DRM_MODE_DPMS_ON:
- I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
- break;
- case DRM_MODE_DPMS_STANDBY:
- case DRM_MODE_DPMS_SUSPEND:
- case DRM_MODE_DPMS_OFF:
- I915_WRITE(TV_CTL, I915_READ(TV_CTL) & ~TV_ENC_ENABLE);
- break;
- }
+ I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
+}
+
+static void
+intel_disable_tv(struct intel_encoder *encoder)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(TV_CTL, I915_READ(TV_CTL) & ~TV_ENC_ENABLE);
}
static const struct tv_mode *
@@ -814,7 +876,7 @@ intel_tv_mode_lookup(const char *tv_format)
{
int i;
- for (i = 0; i < DRM_ARRAY_SIZE(tv_modes); i++) {
+ for (i = 0; i < ARRAY_SIZE(tv_modes); i++) {
const struct tv_mode *tv_mode = &tv_modes[i];
if (!strcmp(tv_format, tv_mode->name))
@@ -846,24 +908,18 @@ intel_tv_mode_valid(struct drm_connector *connector,
static bool
-intel_tv_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode,
+intel_tv_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
- struct drm_device *dev = encoder->dev;
- struct drm_mode_config *drm_config = &dev->mode_config;
struct intel_tv *intel_tv = enc_to_intel_tv(encoder);
const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
- struct drm_encoder *other_encoder;
if (!tv_mode)
return false;
- /* FIXME: lock encoder list */
- list_for_each_entry(other_encoder, &drm_config->encoder_list, head) {
- if (other_encoder != encoder &&
- other_encoder->crtc == encoder->crtc)
- return false;
- }
+ if (intel_encoder_check_is_cloned(&intel_tv->base))
+ return false;
adjusted_mode->clock = tv_mode->clock;
return true;
@@ -1035,13 +1091,11 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
int dspcntr_reg = DSPCNTR(intel_crtc->plane);
int pipeconf = I915_READ(pipeconf_reg);
int dspcntr = I915_READ(dspcntr_reg);
- int dspbase_reg = DSPADDR(intel_crtc->plane);
int xpos = 0x0, ypos = 0x0;
unsigned int xsize, ysize;
/* Pipe must be off here */
I915_WRITE(dspcntr_reg, dspcntr & ~DISPLAY_PLANE_ENABLE);
- /* Flush the plane changes */
- I915_WRITE(dspbase_reg, I915_READ(dspbase_reg));
+ intel_flush_display_plane(dev_priv, intel_crtc->plane);
/* Wait for vblank for the disable to take effect */
if (IS_GEN2(dev))
@@ -1070,8 +1124,7 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
I915_WRITE(pipeconf_reg, pipeconf);
I915_WRITE(dspcntr_reg, dspcntr);
- /* Flush the plane changes */
- I915_WRITE(dspbase_reg, I915_READ(dspbase_reg));
+ intel_flush_display_plane(dev_priv, intel_crtc->plane);
}
j = 0;
@@ -1196,6 +1249,11 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
I915_WRITE(TV_DAC, save_tv_dac & ~TVDAC_STATE_CHG_EN);
I915_WRITE(TV_CTL, save_tv_ctl);
+ POSTING_READ(TV_CTL);
+
+ /* For unknown reasons the hw barfs if we don't do this vblank wait. */
+ intel_wait_for_vblank(intel_tv->base.base.dev,
+ to_intel_crtc(intel_tv->base.base.crtc)->pipe);
/* Restore interrupt config */
if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
@@ -1251,17 +1309,13 @@ intel_tv_detect(struct drm_connector *connector, bool force)
int type;
mode = reported_modes[0];
- drm_mode_set_crtcinfo(&mode, 0);
if (force) {
struct intel_load_detect_pipe tmp;
- if (intel_get_load_detect_pipe(&intel_tv->base, connector,
- &mode, &tmp)) {
+ if (intel_get_load_detect_pipe(connector, &mode, &tmp)) {
type = intel_tv_detect_type(intel_tv, connector);
- intel_release_load_detect_pipe(&intel_tv->base,
- connector,
- &tmp);
+ intel_release_load_detect_pipe(connector, &tmp);
} else
return connector_status_unknown;
} else
@@ -1360,7 +1414,7 @@ intel_tv_get_modes(struct drm_connector *connector)
tmp = (u64) tv_mode->refresh * mode_ptr->vtotal;
tmp *= mode_ptr->htotal;
- tmp = tmp / 1000000;
+ tmp = div_u64(tmp, 1000000);
mode_ptr->clock = (int) tmp;
mode_ptr->type = DRM_MODE_TYPE_DRIVER;
@@ -1375,9 +1429,6 @@ intel_tv_get_modes(struct drm_connector *connector)
static void
intel_tv_destroy(struct drm_connector *connector)
{
-#if 0
- drm_sysfs_connector_remove(connector);
-#endif
drm_connector_cleanup(connector);
free(connector, DRM_MEM_KMS);
}
@@ -1429,22 +1480,20 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop
}
if (changed && crtc)
- drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x,
- crtc->y, crtc->fb);
+ intel_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
out:
return ret;
}
static const struct drm_encoder_helper_funcs intel_tv_helper_funcs = {
- .dpms = intel_tv_dpms,
.mode_fixup = intel_tv_mode_fixup,
- .prepare = intel_encoder_prepare,
.mode_set = intel_tv_mode_set,
- .commit = intel_encoder_commit,
+ .disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_tv_connector_funcs = {
- .dpms = drm_helper_connector_dpms,
+ .dpms = intel_connector_dpms,
.detect = intel_tv_detect,
.destroy = intel_tv_destroy,
.set_property = intel_tv_set_property,
@@ -1543,10 +1592,16 @@ intel_tv_init(struct drm_device *dev)
(tv_dac_off & TVDAC_STATE_CHG_EN) != 0)
return;
- intel_tv = malloc(sizeof(struct intel_tv), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
- intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
- M_WAITOK | M_ZERO);
+ intel_tv = malloc(sizeof(struct intel_tv), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_tv) {
+ return;
+ }
+
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_connector) {
+ free(intel_tv, DRM_MEM_KMS);
+ return;
+ }
intel_encoder = &intel_tv->base;
connector = &intel_connector->base;
@@ -1568,10 +1623,15 @@ intel_tv_init(struct drm_device *dev)
drm_encoder_init(dev, &intel_encoder->base, &intel_tv_enc_funcs,
DRM_MODE_ENCODER_TVDAC);
+ intel_encoder->enable = intel_enable_tv;
+ intel_encoder->disable = intel_disable_tv;
+ intel_encoder->get_hw_state = intel_tv_get_hw_state;
+ intel_connector->get_hw_state = intel_connector_get_hw_state;
+
intel_connector_attach_encoder(intel_connector, intel_encoder);
intel_encoder->type = INTEL_OUTPUT_TVOUT;
intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
- intel_encoder->clone_mask = (1 << INTEL_TV_CLONE_BIT);
+ intel_encoder->cloneable = false;
intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
intel_encoder->base.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
intel_tv->type = DRM_MODE_CONNECTOR_Unknown;
@@ -1610,7 +1670,4 @@ intel_tv_init(struct drm_device *dev)
drm_object_attach_property(&connector->base,
dev->mode_config.tv_bottom_margin_property,
intel_tv->margin[TV_MARGIN_BOTTOM]);
-#if 0
- drm_sysfs_connector_add(connector);
-#endif
}
diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c
index 5c5ffbe..a8a607f 100644
--- a/sys/dev/fdc/fdc.c
+++ b/sys/dev/fdc/fdc.c
@@ -155,6 +155,7 @@ static struct fd_type fd_searchlist_12m[] = {
{ FDF_5_1230 | FL_AUTO },
#else
{ FDF_5_1200 | FL_AUTO },
+ { FDF_5_400 | FL_AUTO },
{ FDF_5_360 | FL_2STEP | FL_AUTO},
#endif
{ 0 }
@@ -941,7 +942,7 @@ fdc_worker(struct fdc_data *fdc)
/* Disable ISADMA if we bailed while it was active */
if (fd != NULL && (fd->flags & FD_ISADMA)) {
isa_dmadone(
- bp->bio_cmd & BIO_READ ? ISADMA_READ : ISADMA_WRITE,
+ bp->bio_cmd == BIO_READ ? ISADMA_READ : ISADMA_WRITE,
fd->fd_ioptr, fd->fd_iosize, fdc->dmachan);
mtx_lock(&fdc->fdc_mtx);
fd->flags &= ~FD_ISADMA;
@@ -983,7 +984,7 @@ fdc_worker(struct fdc_data *fdc)
fd = fdc->fd = bp->bio_driver1;
fdc->retry = 0;
fd->fd_ioptr = bp->bio_data;
- if (bp->bio_cmd & BIO_FMT) {
+ if (bp->bio_cmd == BIO_FMT) {
i = offsetof(struct fd_formb, fd_formb_cylno(0));
fd->fd_ioptr += i;
fd->fd_iosize = bp->bio_length - i;
@@ -1021,7 +1022,7 @@ fdc_worker(struct fdc_data *fdc)
fdctl_wr(fdc, fd->ft->trans);
#endif
- if (bp->bio_cmd & BIO_PROBE) {
+ if (bp->bio_cmd == BIO_PROBE) {
if ((!(device_get_flags(fd->dev) & FD_NO_CHLINE) &&
#ifndef PC98
!(fdin_rd(fdc) & FDI_DCHG) &&
@@ -1059,7 +1060,7 @@ fdc_worker(struct fdc_data *fdc)
#endif
/* Check if the floppy is write-protected */
- if (bp->bio_cmd & (BIO_FMT | BIO_WRITE)) {
+ if (bp->bio_cmd == BIO_FMT || bp->bio_cmd == BIO_WRITE) {
retry_line = __LINE__;
if(fdc_sense_drive(fdc, &st3) != 0)
return (1);
@@ -1078,10 +1079,11 @@ fdc_worker(struct fdc_data *fdc)
sec = sec % fd->ft->sectrac + 1;
/* If everything is going swimmingly, use multisector xfer */
- if (fdc->retry == 0 && bp->bio_cmd & (BIO_READ|BIO_WRITE)) {
+ if (fdc->retry == 0 &&
+ (bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE)) {
fd->fd_iosize = imin(nsect * fd->sectorsize, bp->bio_resid);
nsect = fd->fd_iosize / fd->sectorsize;
- } else if (bp->bio_cmd & (BIO_READ|BIO_WRITE)) {
+ } else if (bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE) {
fd->fd_iosize = fd->sectorsize;
nsect = 1;
}
@@ -1141,10 +1143,12 @@ fdc_worker(struct fdc_data *fdc)
fd->fd_ioptr, fdc->retry);
/* Setup ISADMA if we need it and have it */
- if ((bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_FMT))
+ if ((bp->bio_cmd == BIO_READ ||
+ bp->bio_cmd == BIO_WRITE ||
+ bp->bio_cmd == BIO_FMT)
&& !(fdc->flags & FDC_NODMA)) {
isa_dmastart(
- bp->bio_cmd & BIO_READ ? ISADMA_READ : ISADMA_WRITE,
+ bp->bio_cmd == BIO_READ ? ISADMA_READ : ISADMA_WRITE,
fd->fd_ioptr, fd->fd_iosize, fdc->dmachan);
mtx_lock(&fdc->fdc_mtx);
fd->flags |= FD_ISADMA;
@@ -1153,9 +1157,12 @@ fdc_worker(struct fdc_data *fdc)
/* Do PIO if we have to */
if (fdc->flags & FDC_NODMA) {
- if (bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_FMT))
+ if (bp->bio_cmd == BIO_READ ||
+ bp->bio_cmd == BIO_WRITE ||
+ bp->bio_cmd == BIO_FMT)
fdbcdr_wr(fdc, 1, fd->fd_iosize);
- if (bp->bio_cmd & (BIO_WRITE|BIO_FMT))
+ if (bp->bio_cmd == BIO_WRITE ||
+ bp->bio_cmd == BIO_FMT)
fdc_pio(fdc);
}
@@ -1218,13 +1225,13 @@ fdc_worker(struct fdc_data *fdc)
i = tsleep(fdc, PRIBIO, "fddata", hz);
/* PIO if the read looks good */
- if (i == 0 && (fdc->flags & FDC_NODMA) && (bp->bio_cmd & BIO_READ))
+ if (i == 0 && (fdc->flags & FDC_NODMA) && (bp->bio_cmd == BIO_READ))
fdc_pio(fdc);
/* Finish DMA */
if (fd->flags & FD_ISADMA) {
isa_dmadone(
- bp->bio_cmd & BIO_READ ? ISADMA_READ : ISADMA_WRITE,
+ bp->bio_cmd == BIO_READ ? ISADMA_READ : ISADMA_WRITE,
fd->fd_ioptr, fd->fd_iosize, fdc->dmachan);
mtx_lock(&fdc->fdc_mtx);
fd->flags &= ~FD_ISADMA;
@@ -1668,7 +1675,7 @@ fd_start(struct bio *bp)
fd = bp->bio_to->geom->softc;
fdc = fd->fdc;
bp->bio_driver1 = fd;
- if (bp->bio_cmd & BIO_GETATTR) {
+ if (bp->bio_cmd == BIO_GETATTR) {
if (g_handleattr_int(bp, "GEOM::fwsectors", fd->ft->sectrac))
return;
if (g_handleattr_int(bp, "GEOM::fwheads", fd->ft->heads))
@@ -1676,7 +1683,7 @@ fd_start(struct bio *bp)
g_io_deliver(bp, ENOIOCTL);
return;
}
- if (!(bp->bio_cmd & (BIO_READ|BIO_WRITE))) {
+ if (!(bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE)) {
g_io_deliver(bp, EOPNOTSUPP);
return;
}
diff --git a/sys/dev/filemon/filemon.c b/sys/dev/filemon/filemon.c
index ed0ead5..cd40c5a 100644
--- a/sys/dev/filemon/filemon.c
+++ b/sys/dev/filemon/filemon.c
@@ -68,8 +68,6 @@ extern struct sysentvec elf64_freebsd_sysvec;
static d_close_t filemon_close;
static d_ioctl_t filemon_ioctl;
static d_open_t filemon_open;
-static int filemon_unload(void);
-static void filemon_load(void *);
static struct cdevsw filemon_cdevsw = {
.d_version = D_VERSION,
@@ -165,8 +163,10 @@ filemon_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag __unused,
switch (cmd) {
/* Set the output file descriptor. */
case FILEMON_SET_FD:
- if (filemon->fp != NULL)
- fdrop(filemon->fp, td);
+ if (filemon->fp != NULL) {
+ error = EEXIST;
+ break;
+ }
error = fget_write(td, *(int *)data,
cap_rights_init(&rights, CAP_PWRITE),
@@ -301,6 +301,14 @@ filemon_modevent(module_t mod __unused, int type, void *data)
error = filemon_unload();
break;
+ case MOD_QUIESCE:
+ /*
+ * The wrapper implementation is unsafe for reliable unload.
+ * Require forcing an unload.
+ */
+ error = EBUSY;
+ break;
+
case MOD_SHUTDOWN:
break;
diff --git a/sys/dev/filemon/filemon_wrapper.c b/sys/dev/filemon/filemon_wrapper.c
index b55e791..6911dc5 100644
--- a/sys/dev/filemon/filemon_wrapper.c
+++ b/sys/dev/filemon/filemon_wrapper.c
@@ -59,7 +59,8 @@ filemon_output(struct filemon *filemon, char *msg, size_t len)
auio.uio_td = curthread;
auio.uio_offset = (off_t) -1;
- bwillwrite();
+ if (filemon->fp->f_type == DTYPE_VNODE)
+ bwillwrite();
fo_write(filemon->fp, &auio, curthread->td_ucred, 0, curthread);
}
diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c
index 6498daa..9bdd97b 100644
--- a/sys/dev/firewire/fwmem.c
+++ b/sys/dev/firewire/fwmem.c
@@ -364,7 +364,7 @@ fwmem_strategy(struct bio *bp)
}
iolen = MIN(bp->bio_bcount, MAXLEN);
- if ((bp->bio_cmd & BIO_READ) == BIO_READ) {
+ if (bp->bio_cmd == BIO_READ) {
if (iolen == 4 && (bp->bio_offset & 3) == 0)
xfer = fwmem_read_quad(fwdev,
(void *)bp, fwmem_speed,
diff --git a/sys/dev/hyperv/netvsc/hv_net_vsc.h b/sys/dev/hyperv/netvsc/hv_net_vsc.h
index dd59641..19b910e 100644
--- a/sys/dev/hyperv/netvsc/hv_net_vsc.h
+++ b/sys/dev/hyperv/netvsc/hv_net_vsc.h
@@ -1167,12 +1167,15 @@ struct hn_rx_ring {
/* Rarely used stuffs */
struct sysctl_oid *hn_rx_sysctl_tree;
+ int hn_rx_flags;
} __aligned(CACHE_LINE_SIZE);
#define HN_TRUST_HCSUM_IP 0x0001
#define HN_TRUST_HCSUM_TCP 0x0002
#define HN_TRUST_HCSUM_UDP 0x0004
+#define HN_RX_FLAG_ATTACHED 0x1
+
struct hn_tx_ring {
#ifndef HN_USE_TXDESC_BUFRING
struct mtx hn_txlist_spin;
@@ -1214,8 +1217,11 @@ struct hn_tx_ring {
struct hn_txdesc *hn_txdesc;
bus_dma_tag_t hn_tx_rndis_dtag;
struct sysctl_oid *hn_tx_sysctl_tree;
+ int hn_tx_flags;
} __aligned(CACHE_LINE_SIZE);
+#define HN_TX_FLAG_ATTACHED 0x1
+
/*
* Device-specific softc structure
*/
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
index fcf8b4b..0cec9a7 100644
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -279,13 +279,14 @@ static int hn_use_if_start = 0;
SYSCTL_INT(_hw_hn, OID_AUTO, use_if_start, CTLFLAG_RDTUN,
&hn_use_if_start, 0, "Use if_start TX method");
-static int hn_ring_cnt = 1;
-SYSCTL_INT(_hw_hn, OID_AUTO, ring_cnt, CTLFLAG_RDTUN,
- &hn_ring_cnt, 0, "# of TX/RX rings to used");
+static int hn_chan_cnt = 1;
+SYSCTL_INT(_hw_hn, OID_AUTO, chan_cnt, CTLFLAG_RDTUN,
+ &hn_chan_cnt, 0,
+ "# of channels to use; each channel has one RX ring and one TX ring");
-static int hn_single_tx_ring = 1;
-SYSCTL_INT(_hw_hn, OID_AUTO, single_tx_ring, CTLFLAG_RDTUN,
- &hn_single_tx_ring, 0, "Use one TX ring");
+static int hn_tx_ring_cnt = 1;
+SYSCTL_INT(_hw_hn, OID_AUTO, tx_ring_cnt, CTLFLAG_RDTUN,
+ &hn_tx_ring_cnt, 0, "# of TX rings to use");
static u_int hn_cpu_index;
@@ -323,6 +324,7 @@ static int hn_encap(struct hn_tx_ring *, struct hn_txdesc *, struct mbuf **);
static void hn_create_rx_data(struct hn_softc *sc, int);
static void hn_destroy_rx_data(struct hn_softc *sc);
static void hn_set_tx_chimney_size(struct hn_softc *, int);
+static void hn_channel_attach(struct hn_softc *, struct hv_vmbus_channel *);
static int hn_transmit(struct ifnet *, struct mbuf *);
static void hn_xmit_qflush(struct ifnet *);
@@ -436,39 +438,46 @@ netvsc_attach(device_t dev)
ifp = sc->hn_ifp = if_alloc(IFT_ETHER);
ifp->if_softc = sc;
+ if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ring_cnt = hn_ring_cnt;
- if (ring_cnt <= 0 || ring_cnt >= mp_ncpus)
+ /*
+ * Figure out the # of RX rings (ring_cnt) and the # of TX rings
+ * to use (tx_ring_cnt).
+ *
+ * NOTE:
+ * The # of RX rings to use is same as the # of channels to use.
+ */
+ ring_cnt = hn_chan_cnt;
+ if (ring_cnt <= 0 || ring_cnt > mp_ncpus)
ring_cnt = mp_ncpus;
- sc->hn_cpu = atomic_fetchadd_int(&hn_cpu_index, ring_cnt) % mp_ncpus;
- tx_ring_cnt = ring_cnt;
- if (hn_single_tx_ring || hn_use_if_start) {
- /*
- * - Explicitly asked to use single TX ring.
- * - ifnet.if_start is used; ifnet.if_start only needs
- * one TX ring.
- */
+ tx_ring_cnt = hn_tx_ring_cnt;
+ if (tx_ring_cnt <= 0 || tx_ring_cnt > ring_cnt)
+ tx_ring_cnt = ring_cnt;
+ if (hn_use_if_start) {
+ /* ifnet.if_start only needs one TX ring. */
tx_ring_cnt = 1;
}
+
+ /*
+ * Set the leader CPU for channels.
+ */
+ sc->hn_cpu = atomic_fetchadd_int(&hn_cpu_index, ring_cnt) % mp_ncpus;
+
error = hn_create_tx_data(sc, tx_ring_cnt);
if (error)
goto failed;
-
hn_create_rx_data(sc, ring_cnt);
/*
* Associate the first TX/RX ring w/ the primary channel.
*/
chan = device_ctx->channel;
- chan->hv_chan_rxr = &sc->hn_rx_ring[0];
- chan->hv_chan_txr = &sc->hn_tx_ring[0];
- sc->hn_tx_ring[0].hn_chan = chan;
- vmbus_channel_cpu_set(chan, sc->hn_cpu);
-
- if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ifp->if_dunit = unit;
- ifp->if_dname = NETVSC_DEVNAME;
+ KASSERT(HV_VMBUS_CHAN_ISPRIMARY(chan), ("not primary channel"));
+ KASSERT(chan->offer_msg.offer.sub_channel_index == 0,
+ ("primary channel subidx %u",
+ chan->offer_msg.offer.sub_channel_index));
+ hn_channel_attach(sc, chan);
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
ifp->if_ioctl = hn_ioctl;
@@ -506,12 +515,13 @@ netvsc_attach(device_t dev)
error = hv_rf_on_device_add(device_ctx, &device_info, ring_cnt);
if (error)
goto failed;
- KASSERT(sc->net_dev->num_channel <= ring_cnt,
+ KASSERT(sc->net_dev->num_channel > 0 &&
+ sc->net_dev->num_channel <= sc->hn_rx_ring_inuse,
("invalid channel count %u, should be less than %d",
- sc->net_dev->num_channel, ring_cnt));
+ sc->net_dev->num_channel, sc->hn_rx_ring_inuse));
/*
- * Set # of TX/RX rings that could be used according to
+ * Set the # of TX/RX rings that could be used according to
* the # of channels that host offered.
*/
if (sc->hn_tx_ring_inuse > sc->net_dev->num_channel)
@@ -2769,30 +2779,53 @@ hn_xmit_txeof_taskfunc(void *xtxr, int pending __unused)
mtx_unlock(&txr->hn_tx_lock);
}
-void
-netvsc_subchan_callback(struct hn_softc *sc, struct hv_vmbus_channel *chan)
+static void
+hn_channel_attach(struct hn_softc *sc, struct hv_vmbus_channel *chan)
{
+ struct hn_rx_ring *rxr;
int idx;
- KASSERT(!HV_VMBUS_CHAN_ISPRIMARY(chan),
- ("subchannel callback on primary channel"));
-
idx = chan->offer_msg.offer.sub_channel_index;
- KASSERT(idx > 0 && idx < sc->hn_rx_ring_inuse,
+
+ KASSERT(idx >= 0 && idx < sc->hn_rx_ring_inuse,
("invalid channel index %d, should > 0 && < %d",
idx, sc->hn_rx_ring_inuse));
- vmbus_channel_cpu_set(chan, (sc->hn_cpu + idx) % mp_ncpus);
+ rxr = &sc->hn_rx_ring[idx];
+ KASSERT((rxr->hn_rx_flags & HN_RX_FLAG_ATTACHED) == 0,
+ ("RX ring %d already attached", idx));
+ rxr->hn_rx_flags |= HN_RX_FLAG_ATTACHED;
- chan->hv_chan_rxr = &sc->hn_rx_ring[idx];
+ chan->hv_chan_rxr = rxr;
if_printf(sc->hn_ifp, "link RX ring %d to channel%u\n",
idx, chan->offer_msg.child_rel_id);
if (idx < sc->hn_tx_ring_inuse) {
- chan->hv_chan_txr = &sc->hn_tx_ring[idx];
- sc->hn_tx_ring[idx].hn_chan = chan;
+ struct hn_tx_ring *txr = &sc->hn_tx_ring[idx];
+
+ KASSERT((txr->hn_tx_flags & HN_TX_FLAG_ATTACHED) == 0,
+ ("TX ring %d already attached", idx));
+ txr->hn_tx_flags |= HN_TX_FLAG_ATTACHED;
+
+ chan->hv_chan_txr = txr;
+ txr->hn_chan = chan;
if_printf(sc->hn_ifp, "link TX ring %d to channel%u\n",
idx, chan->offer_msg.child_rel_id);
}
+
+ /* Bind channel to a proper CPU */
+ vmbus_channel_cpu_set(chan, (sc->hn_cpu + idx) % mp_ncpus);
+}
+
+void
+netvsc_subchan_callback(struct hn_softc *sc, struct hv_vmbus_channel *chan)
+{
+
+ KASSERT(!HV_VMBUS_CHAN_ISPRIMARY(chan),
+ ("subchannel callback on primary channel"));
+ KASSERT(chan->offer_msg.offer.sub_channel_index > 0,
+ ("invalid channel subidx %u",
+ chan->offer_msg.offer.sub_channel_index));
+ hn_channel_attach(sc, chan);
}
static void
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index e38ae45..23ec42a 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -3944,6 +3944,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
xpt_done(ccb);
break;
}
+ case XPT_GET_SIM_KNOB_OLD: /* Get SIM knobs -- compat value */
case XPT_GET_SIM_KNOB: /* Get SIM knobs */
{
struct ccb_sim_knob *kp = &ccb->knob;
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 222bc40..de0a696 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -58,6 +58,7 @@
* From: src/sys/dev/vn/vn.c,v 1.122 2000/12/16 16:06:03
*/
+#include "opt_rootdevname.h"
#include "opt_geom.h"
#include "opt_md.h"
@@ -1732,7 +1733,7 @@ md_preloaded(u_char *image, size_t length, const char *name)
sc->pl_ptr = image;
sc->pl_len = length;
sc->start = mdstart_preload;
-#ifdef MD_ROOT
+#if defined(MD_ROOT) && !defined(ROOTDEVNAME)
if (sc->unit == 0)
rootdevnames[0] = MD_ROOT_FSTYPE ":/dev/md0";
#endif
diff --git a/sys/dev/nvd/nvd.c b/sys/dev/nvd/nvd.c
index e062f57..989ed92 100644
--- a/sys/dev/nvd/nvd.c
+++ b/sys/dev/nvd/nvd.c
@@ -311,7 +311,7 @@ nvd_new_disk(struct nvme_namespace *ns, void *ctrlr_arg)
disk->d_delmaxsize = (off_t)nvme_ns_get_size(ns);
if (disk->d_delmaxsize > nvd_delete_max)
disk->d_delmaxsize = nvd_delete_max;
- disk->d_stripesize = nvme_ns_get_optimal_sector_size(ns);
+ disk->d_stripesize = nvme_ns_get_stripesize(ns);
if (TAILQ_EMPTY(&disk_head))
disk->d_unit = 0;
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 19a63e8..7c65fbb 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -898,7 +898,6 @@ const char * nvme_ns_get_serial_number(struct nvme_namespace *ns);
const char * nvme_ns_get_model_number(struct nvme_namespace *ns);
const struct nvme_namespace_data *
nvme_ns_get_data(struct nvme_namespace *ns);
-uint32_t nvme_ns_get_optimal_sector_size(struct nvme_namespace *ns);
uint32_t nvme_ns_get_stripesize(struct nvme_namespace *ns);
int nvme_ns_bio_process(struct nvme_namespace *ns, struct bio *bp,
diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c
index 4580e66..754d074 100644
--- a/sys/dev/nvme/nvme_ns.c
+++ b/sys/dev/nvme/nvme_ns.c
@@ -45,8 +45,6 @@ __FBSDID("$FreeBSD$");
#include "nvme_private.h"
-extern int nvme_max_optimal_sectorsize;
-
static void nvme_bio_child_inbed(struct bio *parent, int bio_error);
static void nvme_bio_child_done(void *arg,
const struct nvme_completion *cpl);
@@ -219,22 +217,6 @@ nvme_ns_get_stripesize(struct nvme_namespace *ns)
return (ns->stripesize);
}
-uint32_t
-nvme_ns_get_optimal_sector_size(struct nvme_namespace *ns)
-{
- uint32_t stripesize;
-
- stripesize = nvme_ns_get_stripesize(ns);
-
- if (stripesize == 0)
- return nvme_ns_get_sector_size(ns);
-
- if (nvme_max_optimal_sectorsize == 0)
- return (stripesize);
-
- return (MIN(stripesize, nvme_max_optimal_sectorsize));
-}
-
static void
nvme_ns_bio_done(void *arg, const struct nvme_completion *status)
{
diff --git a/sys/dev/nvme/nvme_sysctl.c b/sys/dev/nvme/nvme_sysctl.c
index 08cd15e..44b0ab7 100644
--- a/sys/dev/nvme/nvme_sysctl.c
+++ b/sys/dev/nvme/nvme_sysctl.c
@@ -33,22 +33,6 @@ __FBSDID("$FreeBSD$");
#include "nvme_private.h"
-SYSCTL_NODE(_kern, OID_AUTO, nvme, CTLFLAG_RD, 0, "NVM Express");
-/*
- * Intel NVMe controllers have a slow path for I/Os that span a 128KB
- * stripe boundary but ZFS limits ashift, which is derived from
- * d_stripesize, to 13 (8KB) so we limit the stripesize reported to
- * geom(8) to 4KB by default.
- *
- * This may result in a small number of additional I/Os to require
- * splitting in nvme(4), however the NVMe I/O path is very efficient
- * so these additional I/Os will cause very minimal (if any) difference
- * in performance or CPU utilisation.
- */
-int nvme_max_optimal_sectorsize = 1<<12;
-SYSCTL_INT(_kern_nvme, OID_AUTO, max_optimal_sectorsize, CTLFLAG_RWTUN,
- &nvme_max_optimal_sectorsize, 0, "The maximum optimal sectorsize reported");
-
/*
* CTLTYPE_S64 and sysctl_handle_64 were added in r217616. Define these
* explicitly here for older kernels that don't include the r217616
diff --git a/sys/dev/vnic/nicvf_queues.c b/sys/dev/vnic/nicvf_queues.c
index 1da61ea..13ea636 100644
--- a/sys/dev/vnic/nicvf_queues.c
+++ b/sys/dev/vnic/nicvf_queues.c
@@ -722,10 +722,10 @@ nicvf_snd_pkt_handler(struct nicvf *nic, struct cmp_queue *cq,
if (mbuf != NULL) {
m_freem(mbuf);
sq->snd_buff[cqe_tx->sqe_ptr].mbuf = NULL;
+ nicvf_put_sq_desc(sq, hdr->subdesc_cnt + 1);
}
nicvf_check_cqe_tx_errs(nic, cq, cqe_tx);
- nicvf_put_sq_desc(sq, hdr->subdesc_cnt + 1);
NICVF_TX_UNLOCK(sq);
return (0);
@@ -889,7 +889,6 @@ nicvf_qs_err_task(void *arg, int pending)
static void
nicvf_cmp_task(void *arg, int pending)
{
- uint64_t cq_head;
struct cmp_queue *cq;
struct nicvf *nic;
int cmp_err;
@@ -899,11 +898,6 @@ nicvf_cmp_task(void *arg, int pending)
/* Handle CQ descriptors */
cmp_err = nicvf_cq_intr_handler(nic, cq->idx);
- /* Re-enable interrupts */
- cq_head = nicvf_queue_reg_read(nic, NIC_QSET_CQ_0_7_HEAD, cq->idx);
- nicvf_clear_intr(nic, NICVF_INTR_CQ, cq->idx);
- nicvf_queue_reg_write(nic, NIC_QSET_CQ_0_7_HEAD, cq->idx, cq_head);
-
if (__predict_false(cmp_err != 0)) {
/*
* Schedule another thread here since we did not
@@ -913,6 +907,7 @@ nicvf_cmp_task(void *arg, int pending)
}
+ nicvf_clear_intr(nic, NICVF_INTR_CQ, cq->idx);
/* Reenable interrupt (previously disabled in nicvf_intr_handler() */
nicvf_enable_intr(nic, NICVF_INTR_CQ, cq->idx);
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c
index afd1fde..d503f67 100644
--- a/sys/geom/geom_disk.c
+++ b/sys/geom/geom_disk.c
@@ -225,8 +225,16 @@ g_disk_done(struct bio *bp)
if (bp2->bio_error == 0)
bp2->bio_error = bp->bio_error;
bp2->bio_completed += bp->bio_completed;
- if ((bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_DELETE|BIO_FLUSH)) != 0)
+ switch (bp->bio_cmd) {
+ case BIO_READ:
+ case BIO_WRITE:
+ case BIO_DELETE:
+ case BIO_FLUSH:
devstat_end_transaction_bio_bt(sc->dp->d_devstat, bp, &now);
+ break;
+ default:
+ break;
+ }
bp2->bio_inbed++;
if (bp2->bio_children == bp2->bio_inbed) {
mtx_unlock(&sc->done_mtx);
diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c
index c233c33..61f70c1 100644
--- a/sys/geom/geom_io.c
+++ b/sys/geom/geom_io.c
@@ -479,6 +479,7 @@ g_io_request(struct bio *bp, struct g_consumer *cp)
struct g_provider *pp;
struct mtx *mtxp;
int direct, error, first;
+ uint8_t cmd;
KASSERT(cp != NULL, ("NULL cp in g_io_request"));
KASSERT(bp != NULL, ("NULL bp in g_io_request"));
@@ -500,16 +501,17 @@ g_io_request(struct bio *bp, struct g_consumer *cp)
bp->_bio_cflags = bp->bio_cflags;
#endif
- if (bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_GETATTR)) {
+ cmd = bp->bio_cmd;
+ if (cmd == BIO_READ || cmd == BIO_WRITE || cmd == BIO_GETATTR) {
KASSERT(bp->bio_data != NULL,
("NULL bp->data in g_io_request(cmd=%hhu)", bp->bio_cmd));
}
- if (bp->bio_cmd & (BIO_DELETE|BIO_FLUSH)) {
+ if (cmd == BIO_DELETE || cmd == BIO_FLUSH) {
KASSERT(bp->bio_data == NULL,
("non-NULL bp->data in g_io_request(cmd=%hhu)",
bp->bio_cmd));
}
- if (bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_DELETE)) {
+ if (cmd == BIO_READ || cmd == BIO_WRITE || cmd == BIO_DELETE) {
KASSERT(bp->bio_offset % cp->provider->sectorsize == 0,
("wrong offset %jd for sectorsize %u",
bp->bio_offset, cp->provider->sectorsize));
diff --git a/sys/geom/sched/g_sched.c b/sys/geom/sched/g_sched.c
index f1c9a3d..ea1fd41 100644
--- a/sys/geom/sched/g_sched.c
+++ b/sys/geom/sched/g_sched.c
@@ -269,7 +269,7 @@ g_sched_update_stats(struct bio *bio)
me.gs_done++;
me.gs_in_flight--;
me.gs_bytes_in_flight -= bio->bio_length;
- if (bio->bio_cmd & BIO_WRITE) {
+ if (bio->bio_cmd == BIO_WRITE) {
me.gs_writes_in_flight--;
me.gs_write_bytes_in_flight -= bio->bio_length;
}
@@ -754,9 +754,9 @@ static inline char
g_sched_type(struct bio *bp)
{
- if (0 != (bp->bio_cmd & BIO_READ))
+ if (bp->bio_cmd == BIO_READ)
return ('R');
- else if (0 != (bp->bio_cmd & BIO_WRITE))
+ else if (bp->bio_cmd == BIO_WRITE)
return ('W');
return ('U');
}
@@ -829,7 +829,7 @@ g_sched_start(struct bio *bp)
KASSERT(cbp->bio_to != NULL, ("NULL provider"));
/* We only schedule reads and writes. */
- if (0 == (bp->bio_cmd & (BIO_READ | BIO_WRITE)))
+ if (bp->bio_cmd != BIO_READ && bp->bio_cmd != BIO_WRITE)
goto bypass;
G_SCHED_LOGREQ(cbp, "Sending request.");
@@ -860,7 +860,7 @@ g_sched_start(struct bio *bp)
me.gs_in_flight++;
me.gs_requests++;
me.gs_bytes_in_flight += bp->bio_length;
- if (bp->bio_cmd & BIO_WRITE) {
+ if (bp->bio_cmd == BIO_WRITE) {
me.gs_writes_in_flight++;
me.gs_write_bytes_in_flight += bp->bio_length;
}
diff --git a/sys/geom/sched/gs_rr.c b/sys/geom/sched/gs_rr.c
index 7742ef6..2473c42 100644
--- a/sys/geom/sched/gs_rr.c
+++ b/sys/geom/sched/gs_rr.c
@@ -375,7 +375,7 @@ g_rr_should_anticipate(struct g_rr_queue *qp, struct bio *bp)
{
int wait = get_bounded(&me.wait_ms, 2);
- if (!me.w_anticipate && (bp->bio_cmd & BIO_WRITE))
+ if (!me.w_anticipate && (bp->bio_cmd == BIO_WRITE))
return (0);
if (g_savg_valid(&qp->q_thinktime) &&
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index 09ec05d..96c5229 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
+ * created from FreeBSD: head/sys/kern/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#include "opt_compat.h"
@@ -295,9 +295,9 @@ struct sysent sysent[] = {
{ AS(openbsd_poll_args), (sy_call_t *)sys_openbsd_poll, AUE_POLL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 252 = openbsd_poll */
{ 0, (sy_call_t *)sys_issetugid, AUE_ISSETUGID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 253 = issetugid */
{ AS(lchown_args), (sy_call_t *)sys_lchown, AUE_LCHOWN, NULL, 0, 0, 0, SY_THR_STATIC }, /* 254 = lchown */
- { AS(aio_read_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 255 = aio_read */
- { AS(aio_write_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 256 = aio_write */
- { AS(lio_listio_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 257 = lio_listio */
+ { AS(aio_read_args), (sy_call_t *)sys_aio_read, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 255 = aio_read */
+ { AS(aio_write_args), (sy_call_t *)sys_aio_write, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 256 = aio_write */
+ { AS(lio_listio_args), (sy_call_t *)sys_lio_listio, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 257 = lio_listio */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 258 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 259 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 260 = nosys */
@@ -354,13 +354,13 @@ struct sysent sysent[] = {
{ AS(setresuid_args), (sy_call_t *)sys_setresuid, AUE_SETRESUID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 311 = setresuid */
{ AS(setresgid_args), (sy_call_t *)sys_setresgid, AUE_SETRESGID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 312 = setresgid */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 313 = obsolete signanosleep */
- { AS(aio_return_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 314 = aio_return */
- { AS(aio_suspend_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 315 = aio_suspend */
- { AS(aio_cancel_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 316 = aio_cancel */
- { AS(aio_error_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 317 = aio_error */
- { AS(oaio_read_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 318 = oaio_read */
- { AS(oaio_write_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 319 = oaio_write */
- { AS(olio_listio_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 320 = olio_listio */
+ { AS(aio_return_args), (sy_call_t *)sys_aio_return, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 314 = aio_return */
+ { AS(aio_suspend_args), (sy_call_t *)sys_aio_suspend, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 315 = aio_suspend */
+ { AS(aio_cancel_args), (sy_call_t *)sys_aio_cancel, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 316 = aio_cancel */
+ { AS(aio_error_args), (sy_call_t *)sys_aio_error, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 317 = aio_error */
+ { compat6(AS(freebsd6_aio_read_args),aio_read), AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 318 = freebsd6 aio_read */
+ { compat6(AS(freebsd6_aio_write_args),aio_write), AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 319 = freebsd6 aio_write */
+ { compat6(AS(freebsd6_lio_listio_args),lio_listio), AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 320 = freebsd6 lio_listio */
{ 0, (sy_call_t *)sys_yield, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 321 = yield */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 322 = obsolete thr_sleep */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 323 = obsolete thr_wakeup */
@@ -399,7 +399,7 @@ struct sysent sysent[] = {
{ AS(extattr_set_file_args), (sy_call_t *)sys_extattr_set_file, AUE_EXTATTR_SET_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 356 = extattr_set_file */
{ AS(extattr_get_file_args), (sy_call_t *)sys_extattr_get_file, AUE_EXTATTR_GET_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 357 = extattr_get_file */
{ AS(extattr_delete_file_args), (sy_call_t *)sys_extattr_delete_file, AUE_EXTATTR_DELETE_FILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 358 = extattr_delete_file */
- { AS(aio_waitcomplete_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 359 = aio_waitcomplete */
+ { AS(aio_waitcomplete_args), (sy_call_t *)sys_aio_waitcomplete, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 359 = aio_waitcomplete */
{ AS(getresuid_args), (sy_call_t *)sys_getresuid, AUE_GETRESUID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 360 = getresuid */
{ AS(getresgid_args), (sy_call_t *)sys_getresgid, AUE_GETRESGID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 361 = getresgid */
{ 0, (sy_call_t *)sys_kqueue, AUE_KQUEUE, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 362 = kqueue */
@@ -505,7 +505,7 @@ struct sysent sysent[] = {
{ AS(kmq_unlink_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 462 = kmq_unlink */
{ AS(abort2_args), (sy_call_t *)sys_abort2, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 463 = abort2 */
{ AS(thr_set_name_args), (sy_call_t *)sys_thr_set_name, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 464 = thr_set_name */
- { AS(aio_fsync_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_ABSENT }, /* 465 = aio_fsync */
+ { AS(aio_fsync_args), (sy_call_t *)sys_aio_fsync, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 465 = aio_fsync */
{ AS(rtprio_thread_args), (sy_call_t *)sys_rtprio_thread, AUE_RTPRIO, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 466 = rtprio_thread */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 467 = nosys */
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 468 = nosys */
@@ -583,7 +583,7 @@ struct sysent sysent[] = {
{ AS(chflagsat_args), (sy_call_t *)sys_chflagsat, AUE_CHFLAGSAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 540 = chflagsat */
{ AS(accept4_args), (sy_call_t *)sys_accept4, AUE_ACCEPT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 541 = accept4 */
{ AS(pipe2_args), (sy_call_t *)sys_pipe2, AUE_PIPE, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 542 = pipe2 */
- { AS(aio_mlock_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 543 = aio_mlock */
+ { AS(aio_mlock_args), (sy_call_t *)sys_aio_mlock, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 543 = aio_mlock */
{ AS(procctl_args), (sy_call_t *)sys_procctl, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 544 = procctl */
{ AS(ppoll_args), (sy_call_t *)sys_ppoll, AUE_POLL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 545 = ppoll */
{ AS(futimens_args), (sy_call_t *)sys_futimens, AUE_FUTIMES, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 546 = futimens */
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index a74d27f..00bd54b 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -1395,9 +1395,8 @@ sys_fpathconf(struct thread *td, struct fpathconf_args *uap)
if (error != 0)
return (error);
- /* If asynchronous I/O is available, it works for all descriptors. */
if (uap->name == _PC_ASYNC_IO) {
- td->td_retval[0] = async_io_version;
+ td->td_retval[0] = _POSIX_ASYNCHRONOUS_IO;
goto out;
}
vp = fp->f_vnode;
diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
index dfbcdfe..012d5b7 100644
--- a/sys/kern/link_elf_obj.c
+++ b/sys/kern/link_elf_obj.c
@@ -140,7 +140,7 @@ static int link_elf_each_function_name(linker_file_t,
static int link_elf_each_function_nameval(linker_file_t,
linker_function_nameval_callback_t,
void *);
-static void link_elf_reloc_local(linker_file_t);
+static int link_elf_reloc_local(linker_file_t);
static long link_elf_symtab_get(linker_file_t, const Elf_Sym **);
static long link_elf_strtab_get(linker_file_t, caddr_t *);
@@ -405,15 +405,26 @@ link_elf_link_preload(linker_class_t cls, const char *filename,
break;
}
}
- if (pb != ef->nprogtab)
- panic("lost progbits");
- if (rl != ef->nreltab)
- panic("lost reltab");
- if (ra != ef->nrelatab)
- panic("lost relatab");
+ if (pb != ef->nprogtab) {
+ printf("%s: lost progbits\n", filename);
+ error = ENOEXEC;
+ goto out;
+ }
+ if (rl != ef->nreltab) {
+ printf("%s: lost reltab\n", filename);
+ error = ENOEXEC;
+ goto out;
+ }
+ if (ra != ef->nrelatab) {
+ printf("%s: lost relatab\n", filename);
+ error = ENOEXEC;
+ goto out;
+ }
/* Local intra-module relocations */
- link_elf_reloc_local(lf);
+ error = link_elf_reloc_local(lf);
+ if (error != 0)
+ goto out;
*result = lf;
return (0);
@@ -634,8 +645,11 @@ link_elf_load_file(linker_class_t cls, const char *filename,
ef->relatab = malloc(ef->nrelatab * sizeof(*ef->relatab),
M_LINKER, M_WAITOK | M_ZERO);
- if (symtabindex == -1)
- panic("lost symbol table index");
+ if (symtabindex == -1) {
+ link_elf_error(filename, "lost symbol table index");
+ error = ENOEXEC;
+ goto out;
+ }
/* Allocate space for and load the symbol table */
ef->ddbsymcnt = shdr[symtabindex].sh_size / sizeof(Elf_Sym);
ef->ddbsymtab = malloc(shdr[symtabindex].sh_size, M_LINKER, M_WAITOK);
@@ -650,8 +664,11 @@ link_elf_load_file(linker_class_t cls, const char *filename,
goto out;
}
- if (symstrindex == -1)
- panic("lost symbol string index");
+ if (symstrindex == -1) {
+ link_elf_error(filename, "lost symbol string index");
+ error = ENOEXEC;
+ goto out;
+ }
/* Allocate space for and load the symbol strings */
ef->ddbstrcnt = shdr[symstrindex].sh_size;
ef->ddbstrtab = malloc(shdr[symstrindex].sh_size, M_LINKER, M_WAITOK);
@@ -884,19 +901,35 @@ link_elf_load_file(linker_class_t cls, const char *filename,
break;
}
}
- if (pb != ef->nprogtab)
- panic("lost progbits");
- if (rl != ef->nreltab)
- panic("lost reltab");
- if (ra != ef->nrelatab)
- panic("lost relatab");
- if (mapbase != (vm_offset_t)ef->address + mapsize)
- panic("mapbase 0x%lx != address %p + mapsize 0x%lx (0x%lx)\n",
+ if (pb != ef->nprogtab) {
+ link_elf_error(filename, "lost progbits");
+ error = ENOEXEC;
+ goto out;
+ }
+ if (rl != ef->nreltab) {
+ link_elf_error(filename, "lost reltab");
+ error = ENOEXEC;
+ goto out;
+ }
+ if (ra != ef->nrelatab) {
+ link_elf_error(filename, "lost relatab");
+ error = ENOEXEC;
+ goto out;
+ }
+ if (mapbase != (vm_offset_t)ef->address + mapsize) {
+ printf(
+ "%s: mapbase 0x%lx != address %p + mapsize 0x%lx (0x%lx)\n",
+ filename != NULL ? filename : "<none>",
(u_long)mapbase, ef->address, (u_long)mapsize,
(u_long)(vm_offset_t)ef->address + mapsize);
+ error = ENOMEM;
+ goto out;
+ }
/* Local intra-module relocations */
- link_elf_reloc_local(lf);
+ error = link_elf_reloc_local(lf);
+ if (error != 0)
+ goto out;
/* Pull in dependencies */
VOP_UNLOCK(nd.ni_vp, 0);
@@ -1034,12 +1067,16 @@ relocate_file(elf_file_t ef)
/* Perform relocations without addend if there are any: */
for (i = 0; i < ef->nreltab; i++) {
rel = ef->reltab[i].rel;
- if (rel == NULL)
- panic("lost a reltab!");
+ if (rel == NULL) {
+ link_elf_error(ef->lf.filename, "lost a reltab!");
+ return (ENOEXEC);
+ }
rellim = rel + ef->reltab[i].nrel;
base = findbase(ef, ef->reltab[i].sec);
- if (base == 0)
- panic("lost base for reltab");
+ if (base == 0) {
+ link_elf_error(ef->lf.filename, "lost base for reltab");
+ return (ENOEXEC);
+ }
for ( ; rel < rellim; rel++) {
symidx = ELF_R_SYM(rel->r_info);
if (symidx >= ef->ddbsymcnt)
@@ -1053,7 +1090,7 @@ relocate_file(elf_file_t ef)
symname = symbol_name(ef, rel->r_info);
printf("link_elf_obj: symbol %s undefined\n",
symname);
- return ENOENT;
+ return (ENOENT);
}
}
}
@@ -1061,12 +1098,17 @@ relocate_file(elf_file_t ef)
/* Perform relocations with addend if there are any: */
for (i = 0; i < ef->nrelatab; i++) {
rela = ef->relatab[i].rela;
- if (rela == NULL)
- panic("lost a relatab!");
+ if (rela == NULL) {
+ link_elf_error(ef->lf.filename, "lost a relatab!");
+ return (ENOEXEC);
+ }
relalim = rela + ef->relatab[i].nrela;
base = findbase(ef, ef->relatab[i].sec);
- if (base == 0)
- panic("lost base for relatab");
+ if (base == 0) {
+ link_elf_error(ef->lf.filename,
+ "lost base for relatab");
+ return (ENOEXEC);
+ }
for ( ; rela < relalim; rela++) {
symidx = ELF_R_SYM(rela->r_info);
if (symidx >= ef->ddbsymcnt)
@@ -1080,7 +1122,7 @@ relocate_file(elf_file_t ef)
symname = symbol_name(ef, rela->r_info);
printf("link_elf_obj: symbol %s undefined\n",
symname);
- return ENOENT;
+ return (ENOENT);
}
}
}
@@ -1092,7 +1134,7 @@ relocate_file(elf_file_t ef)
*/
elf_obj_cleanup_globals_cache(ef);
- return 0;
+ return (0);
}
static int
@@ -1375,7 +1417,7 @@ link_elf_fix_link_set(elf_file_t ef)
}
}
-static void
+static int
link_elf_reloc_local(linker_file_t lf)
{
elf_file_t ef = (elf_file_t)lf;
@@ -1393,12 +1435,16 @@ link_elf_reloc_local(linker_file_t lf)
/* Perform relocations without addend if there are any: */
for (i = 0; i < ef->nreltab; i++) {
rel = ef->reltab[i].rel;
- if (rel == NULL)
- panic("lost a reltab!");
+ if (rel == NULL) {
+ link_elf_error(ef->lf.filename, "lost a reltab");
+ return (ENOEXEC);
+ }
rellim = rel + ef->reltab[i].nrel;
base = findbase(ef, ef->reltab[i].sec);
- if (base == 0)
- panic("lost base for reltab");
+ if (base == 0) {
+ link_elf_error(ef->lf.filename, "lost base for reltab");
+ return (ENOEXEC);
+ }
for ( ; rel < rellim; rel++) {
symidx = ELF_R_SYM(rel->r_info);
if (symidx >= ef->ddbsymcnt)
@@ -1415,12 +1461,16 @@ link_elf_reloc_local(linker_file_t lf)
/* Perform relocations with addend if there are any: */
for (i = 0; i < ef->nrelatab; i++) {
rela = ef->relatab[i].rela;
- if (rela == NULL)
- panic("lost a relatab!");
+ if (rela == NULL) {
+ link_elf_error(ef->lf.filename, "lost a relatab!");
+ return (ENOEXEC);
+ }
relalim = rela + ef->relatab[i].nrela;
base = findbase(ef, ef->relatab[i].sec);
- if (base == 0)
- panic("lost base for relatab");
+ if (base == 0) {
+ link_elf_error(ef->lf.filename, "lost base for reltab");
+ return (ENOEXEC);
+ }
for ( ; rela < relalim; rela++) {
symidx = ELF_R_SYM(rela->r_info);
if (symidx >= ef->ddbsymcnt)
@@ -1433,6 +1483,7 @@ link_elf_reloc_local(linker_file_t lf)
elf_obj_lookup);
}
}
+ return (0);
}
static long
diff --git a/sys/kern/posix4_mib.c b/sys/kern/posix4_mib.c
index e299787..a2be3ff 100644
--- a/sys/kern/posix4_mib.c
+++ b/sys/kern/posix4_mib.c
@@ -77,8 +77,7 @@ SYSCTL_NODE(_kern, OID_AUTO, p1003_1b, CTLFLAG_RW, 0, "P1003.1B");
#endif
-SYSCTL_INT(_p1003_1b, CTL_P1003_1B_ASYNCHRONOUS_IO, \
- asynchronous_io, CTLFLAG_RD, &async_io_version, 0, "");
+P1B_SYSCTL(CTL_P1003_1B_ASYNCHRONOUS_IO, asynchronous_io);
P1B_SYSCTL(CTL_P1003_1B_MAPPED_FILES, mapped_files);
P1B_SYSCTL(CTL_P1003_1B_MEMLOCK, memlock);
P1B_SYSCTL(CTL_P1003_1B_MEMLOCK_RANGE, memlock_range);
@@ -170,12 +169,6 @@ p31b_set_standard(void *dummy)
p31b_setcfg(CTL_P1003_1B_MAPPED_FILES, 200112L);
p31b_setcfg(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, 200112L);
p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
- if (!p31b_iscfg(CTL_P1003_1B_AIO_LISTIO_MAX))
- p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, -1);
- if (!p31b_iscfg(CTL_P1003_1B_AIO_MAX))
- p31b_setcfg(CTL_P1003_1B_AIO_MAX, -1);
- if (!p31b_iscfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX))
- p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, -1);
}
SYSINIT(p31b_set_standard, SI_SUB_P1003_1B, SI_ORDER_ANY, p31b_set_standard,
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index 1edb193..44ddd81 100644
--- a/sys/kern/syscalls.c
+++ b/sys/kern/syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
+ * created from FreeBSD: head/sys/kern/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
const char *syscallnames[] = {
@@ -325,9 +325,9 @@ const char *syscallnames[] = {
"aio_suspend", /* 315 = aio_suspend */
"aio_cancel", /* 316 = aio_cancel */
"aio_error", /* 317 = aio_error */
- "oaio_read", /* 318 = oaio_read */
- "oaio_write", /* 319 = oaio_write */
- "olio_listio", /* 320 = olio_listio */
+ "compat6.aio_read", /* 318 = freebsd6 aio_read */
+ "compat6.aio_write", /* 319 = freebsd6 aio_write */
+ "compat6.lio_listio", /* 320 = freebsd6 lio_listio */
"yield", /* 321 = yield */
"obs_thr_sleep", /* 322 = obsolete thr_sleep */
"obs_thr_wakeup", /* 323 = obsolete thr_wakeup */
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index 6e6fb38..f08f5e3 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -475,9 +475,9 @@
u_int nfds, int timeout); }
253 AUE_ISSETUGID STD { int issetugid(void); }
254 AUE_LCHOWN STD { int lchown(char *path, int uid, int gid); }
-255 AUE_NULL NOSTD { int aio_read(struct aiocb *aiocbp); }
-256 AUE_NULL NOSTD { int aio_write(struct aiocb *aiocbp); }
-257 AUE_NULL NOSTD { int lio_listio(int mode, \
+255 AUE_NULL STD { int aio_read(struct aiocb *aiocbp); }
+256 AUE_NULL STD { int aio_write(struct aiocb *aiocbp); }
+257 AUE_NULL STD { int lio_listio(int mode, \
struct aiocb * const *acb_list, \
int nent, struct sigevent *sig); }
258 AUE_NULL UNIMPL nosys
@@ -554,16 +554,16 @@
312 AUE_SETRESGID STD { int setresgid(gid_t rgid, gid_t egid, \
gid_t sgid); }
313 AUE_NULL OBSOL signanosleep
-314 AUE_NULL NOSTD { int aio_return(struct aiocb *aiocbp); }
-315 AUE_NULL NOSTD { int aio_suspend( \
+314 AUE_NULL STD { int aio_return(struct aiocb *aiocbp); }
+315 AUE_NULL STD { int aio_suspend( \
struct aiocb * const * aiocbp, int nent, \
const struct timespec *timeout); }
-316 AUE_NULL NOSTD { int aio_cancel(int fd, \
+316 AUE_NULL STD { int aio_cancel(int fd, \
struct aiocb *aiocbp); }
-317 AUE_NULL NOSTD { int aio_error(struct aiocb *aiocbp); }
-318 AUE_NULL NOSTD { int oaio_read(struct oaiocb *aiocbp); }
-319 AUE_NULL NOSTD { int oaio_write(struct oaiocb *aiocbp); }
-320 AUE_NULL NOSTD { int olio_listio(int mode, \
+317 AUE_NULL STD { int aio_error(struct aiocb *aiocbp); }
+318 AUE_NULL COMPAT6 { int aio_read(struct oaiocb *aiocbp); }
+319 AUE_NULL COMPAT6 { int aio_write(struct oaiocb *aiocbp); }
+320 AUE_NULL COMPAT6 { int lio_listio(int mode, \
struct oaiocb * const *acb_list, \
int nent, struct osigevent *sig); }
321 AUE_NULL STD { int yield(void); }
@@ -643,7 +643,7 @@
358 AUE_EXTATTR_DELETE_FILE STD { int extattr_delete_file(const char *path, \
int attrnamespace, \
const char *attrname); }
-359 AUE_NULL NOSTD { int aio_waitcomplete( \
+359 AUE_NULL STD { int aio_waitcomplete( \
struct aiocb **aiocbp, \
struct timespec *timeout); }
360 AUE_GETRESUID STD { int getresuid(uid_t *ruid, uid_t *euid, \
@@ -830,7 +830,7 @@
462 AUE_NULL NOSTD { int kmq_unlink(const char *path); }
463 AUE_NULL STD { int abort2(const char *why, int nargs, void **args); }
464 AUE_NULL STD { int thr_set_name(long id, const char *name); }
-465 AUE_NULL NOSTD { int aio_fsync(int op, struct aiocb *aiocbp); }
+465 AUE_NULL STD { int aio_fsync(int op, struct aiocb *aiocbp); }
466 AUE_RTPRIO STD { int rtprio_thread(int function, \
lwpid_t lwpid, struct rtprio *rtp); }
467 AUE_NULL UNIMPL nosys
@@ -977,7 +977,7 @@
__socklen_t * __restrict anamelen, \
int flags); }
542 AUE_PIPE STD { int pipe2(int *fildes, int flags); }
-543 AUE_NULL NOSTD { int aio_mlock(struct aiocb *aiocbp); }
+543 AUE_NULL STD { int aio_mlock(struct aiocb *aiocbp); }
544 AUE_NULL STD { int procctl(idtype_t idtype, id_t id, \
int com, void *data); }
545 AUE_POLL STD { int ppoll(struct pollfd *fds, u_int nfds, \
diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c
index 00a050f..6fd03f1 100644
--- a/sys/kern/systrace_args.c
+++ b/sys/kern/systrace_args.c
@@ -1605,30 +1605,6 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 1;
break;
}
- /* oaio_read */
- case 318: {
- struct oaio_read_args *p = params;
- uarg[0] = (intptr_t) p->aiocbp; /* struct oaiocb * */
- *n_args = 1;
- break;
- }
- /* oaio_write */
- case 319: {
- struct oaio_write_args *p = params;
- uarg[0] = (intptr_t) p->aiocbp; /* struct oaiocb * */
- *n_args = 1;
- break;
- }
- /* olio_listio */
- case 320: {
- struct olio_listio_args *p = params;
- iarg[0] = p->mode; /* int */
- uarg[1] = (intptr_t) p->acb_list; /* struct oaiocb *const * */
- iarg[2] = p->nent; /* int */
- uarg[3] = (intptr_t) p->sig; /* struct osigevent * */
- *n_args = 4;
- break;
- }
/* yield */
case 321: {
*n_args = 0;
@@ -5899,45 +5875,6 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
- /* oaio_read */
- case 318:
- switch(ndx) {
- case 0:
- p = "struct oaiocb *";
- break;
- default:
- break;
- };
- break;
- /* oaio_write */
- case 319:
- switch(ndx) {
- case 0:
- p = "struct oaiocb *";
- break;
- default:
- break;
- };
- break;
- /* olio_listio */
- case 320:
- switch(ndx) {
- case 0:
- p = "int";
- break;
- case 1:
- p = "struct oaiocb *const *";
- break;
- case 2:
- p = "int";
- break;
- case 3:
- p = "struct osigevent *";
- break;
- default:
- break;
- };
- break;
/* yield */
case 321:
break;
@@ -9876,21 +9813,6 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
- /* oaio_read */
- case 318:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
- /* oaio_write */
- case 319:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
- /* olio_listio */
- case 320:
- if (ndx == 0 || ndx == 1)
- p = "int";
- break;
/* yield */
case 321:
/* mlockall */
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 59dd57c..27fa239 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -161,6 +161,7 @@ static int max_buf_aio = MAX_BUF_AIO;
SYSCTL_INT(_vfs_aio, OID_AUTO, max_buf_aio, CTLFLAG_RW, &max_buf_aio, 0,
"Maximum buf aio requests per process (stored in the process)");
+#ifdef COMPAT_FREEBSD6
typedef struct oaiocb {
int aio_fildes; /* File descriptor */
off_t aio_offset; /* File offset for I/O */
@@ -171,6 +172,7 @@ typedef struct oaiocb {
int aio_reqprio; /* Request priority -- ignored */
struct __aiocb_private _aiocb_private;
} oaiocb_t;
+#endif
/*
* Below is a key of locks used to protect each member of struct kaiocb
@@ -368,52 +370,7 @@ static moduledata_t aio_mod = {
NULL
};
-static struct syscall_helper_data aio_syscalls[] = {
- SYSCALL_INIT_HELPER(aio_cancel),
- SYSCALL_INIT_HELPER(aio_error),
- SYSCALL_INIT_HELPER(aio_fsync),
- SYSCALL_INIT_HELPER(aio_mlock),
- SYSCALL_INIT_HELPER(aio_read),
- SYSCALL_INIT_HELPER(aio_return),
- SYSCALL_INIT_HELPER(aio_suspend),
- SYSCALL_INIT_HELPER(aio_waitcomplete),
- SYSCALL_INIT_HELPER(aio_write),
- SYSCALL_INIT_HELPER(lio_listio),
- SYSCALL_INIT_HELPER(oaio_read),
- SYSCALL_INIT_HELPER(oaio_write),
- SYSCALL_INIT_HELPER(olio_listio),
- SYSCALL_INIT_LAST
-};
-
-#ifdef COMPAT_FREEBSD32
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <compat/freebsd32/freebsd32.h>
-#include <compat/freebsd32/freebsd32_proto.h>
-#include <compat/freebsd32/freebsd32_signal.h>
-#include <compat/freebsd32/freebsd32_syscall.h>
-#include <compat/freebsd32/freebsd32_util.h>
-
-static struct syscall_helper_data aio32_syscalls[] = {
- SYSCALL32_INIT_HELPER(freebsd32_aio_return),
- SYSCALL32_INIT_HELPER(freebsd32_aio_suspend),
- SYSCALL32_INIT_HELPER(freebsd32_aio_cancel),
- SYSCALL32_INIT_HELPER(freebsd32_aio_error),
- SYSCALL32_INIT_HELPER(freebsd32_aio_fsync),
- SYSCALL32_INIT_HELPER(freebsd32_aio_mlock),
- SYSCALL32_INIT_HELPER(freebsd32_aio_read),
- SYSCALL32_INIT_HELPER(freebsd32_aio_write),
- SYSCALL32_INIT_HELPER(freebsd32_aio_waitcomplete),
- SYSCALL32_INIT_HELPER(freebsd32_lio_listio),
- SYSCALL32_INIT_HELPER(freebsd32_oaio_read),
- SYSCALL32_INIT_HELPER(freebsd32_oaio_write),
- SYSCALL32_INIT_HELPER(freebsd32_olio_listio),
- SYSCALL_INIT_LAST
-};
-#endif
-
-DECLARE_MODULE(aio, aio_mod,
- SI_SUB_VFS, SI_ORDER_ANY);
+DECLARE_MODULE(aio, aio_mod, SI_SUB_VFS, SI_ORDER_ANY);
MODULE_VERSION(aio, 1);
/*
@@ -422,7 +379,6 @@ MODULE_VERSION(aio, 1);
static int
aio_onceonly(void)
{
- int error;
exit_tag = EVENTHANDLER_REGISTER(process_exit, aio_proc_rundown, NULL,
EVENTHANDLER_PRI_ANY);
@@ -447,19 +403,11 @@ aio_onceonly(void)
NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
aiod_lifetime = AIOD_LIFETIME_DEFAULT;
jobrefid = 1;
- async_io_version = _POSIX_VERSION;
+ p31b_setcfg(CTL_P1003_1B_ASYNCHRONOUS_IO, _POSIX_ASYNCHRONOUS_IO);
p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, AIO_LISTIO_MAX);
p31b_setcfg(CTL_P1003_1B_AIO_MAX, MAX_AIO_QUEUE);
p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, 0);
- error = syscall_helper_register(aio_syscalls, SY_THR_STATIC_KLD);
- if (error)
- return (error);
-#ifdef COMPAT_FREEBSD32
- error = syscall32_helper_register(aio32_syscalls, SY_THR_STATIC_KLD);
- if (error)
- return (error);
-#endif
return (0);
}
@@ -1340,6 +1288,7 @@ unref:
return (error);
}
+#ifdef COMPAT_FREEBSD6
static int
convert_old_sigevent(struct osigevent *osig, struct sigevent *nsig)
{
@@ -1379,6 +1328,7 @@ aiocb_copyin_old_sigevent(struct aiocb *ujob, struct aiocb *kjob)
ojob = (struct oaiocb *)kjob;
return (convert_old_sigevent(&ojob->aio_sigevent, &kjob->aio_sigevent));
}
+#endif
static int
aiocb_copyin(struct aiocb *ujob, struct aiocb *kjob)
@@ -1439,6 +1389,7 @@ static struct aiocb_ops aiocb_ops = {
.store_aiocb = aiocb_store_aiocb,
};
+#ifdef COMPAT_FREEBSD6
static struct aiocb_ops aiocb_ops_osigevent = {
.copyin = aiocb_copyin_old_sigevent,
.fetch_status = aiocb_fetch_status,
@@ -1448,6 +1399,7 @@ static struct aiocb_ops aiocb_ops_osigevent = {
.store_kernelinfo = aiocb_store_kernelinfo,
.store_aiocb = aiocb_store_aiocb,
};
+#endif
/*
* Queue a new AIO request. Choosing either the threaded or direct physio VCHR
@@ -2094,13 +2046,15 @@ sys_aio_error(struct thread *td, struct aio_error_args *uap)
}
/* syscall - asynchronous read from a file (REALTIME) */
+#ifdef COMPAT_FREEBSD6
int
-sys_oaio_read(struct thread *td, struct oaio_read_args *uap)
+freebsd6_aio_read(struct thread *td, struct freebsd6_aio_read_args *uap)
{
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
&aiocb_ops_osigevent));
}
+#endif
int
sys_aio_read(struct thread *td, struct aio_read_args *uap)
@@ -2110,13 +2064,15 @@ sys_aio_read(struct thread *td, struct aio_read_args *uap)
}
/* syscall - asynchronous write to a file (REALTIME) */
+#ifdef COMPAT_FREEBSD6
int
-sys_oaio_write(struct thread *td, struct oaio_write_args *uap)
+freebsd6_aio_write(struct thread *td, struct freebsd6_aio_write_args *uap)
{
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
&aiocb_ops_osigevent));
}
+#endif
int
sys_aio_write(struct thread *td, struct aio_write_args *uap)
@@ -2268,8 +2224,9 @@ kern_lio_listio(struct thread *td, int mode, struct aiocb * const *uacb_list,
}
/* syscall - list directed I/O (REALTIME) */
+#ifdef COMPAT_FREEBSD6
int
-sys_olio_listio(struct thread *td, struct olio_listio_args *uap)
+freebsd6_lio_listio(struct thread *td, struct freebsd6_lio_listio_args *uap)
{
struct aiocb **acb_list;
struct sigevent *sigp, sig;
@@ -2303,6 +2260,7 @@ sys_olio_listio(struct thread *td, struct olio_listio_args *uap)
free(acb_list, M_LIO);
return (error);
}
+#endif
/* syscall - list directed I/O (REALTIME) */
int
@@ -2582,6 +2540,13 @@ filt_lio(struct knote *kn, long hint)
}
#ifdef COMPAT_FREEBSD32
+#include <sys/mount.h>
+#include <sys/socket.h>
+#include <compat/freebsd32/freebsd32.h>
+#include <compat/freebsd32/freebsd32_proto.h>
+#include <compat/freebsd32/freebsd32_signal.h>
+#include <compat/freebsd32/freebsd32_syscall.h>
+#include <compat/freebsd32/freebsd32_util.h>
struct __aiocb_private32 {
int32_t status;
@@ -2589,6 +2554,7 @@ struct __aiocb_private32 {
uint32_t kernelinfo;
};
+#ifdef COMPAT_FREEBSD6
typedef struct oaiocb32 {
int aio_fildes; /* File descriptor */
uint64_t aio_offset __packed; /* File offset for I/O */
@@ -2599,6 +2565,7 @@ typedef struct oaiocb32 {
int aio_reqprio; /* Request priority -- ignored */
struct __aiocb_private32 _aiocb_private;
} oaiocb32_t;
+#endif
typedef struct aiocb32 {
int32_t aio_fildes; /* File descriptor */
@@ -2613,6 +2580,7 @@ typedef struct aiocb32 {
struct sigevent32 aio_sigevent; /* Signal to deliver */
} aiocb32_t;
+#ifdef COMPAT_FREEBSD6
static int
convert_old_sigevent32(struct osigevent32 *osig, struct sigevent *nsig)
{
@@ -2662,6 +2630,7 @@ aiocb32_copyin_old_sigevent(struct aiocb *ujob, struct aiocb *kjob)
return (convert_old_sigevent32(&job32.aio_sigevent,
&kjob->aio_sigevent));
}
+#endif
static int
aiocb32_copyin(struct aiocb *ujob, struct aiocb *kjob)
@@ -2746,6 +2715,7 @@ static struct aiocb_ops aiocb32_ops = {
.store_aiocb = aiocb32_store_aiocb,
};
+#ifdef COMPAT_FREEBSD6
static struct aiocb_ops aiocb32_ops_osigevent = {
.copyin = aiocb32_copyin_old_sigevent,
.fetch_status = aiocb32_fetch_status,
@@ -2755,6 +2725,7 @@ static struct aiocb_ops aiocb32_ops_osigevent = {
.store_kernelinfo = aiocb32_store_kernelinfo,
.store_aiocb = aiocb32_store_aiocb,
};
+#endif
int
freebsd32_aio_return(struct thread *td, struct freebsd32_aio_return_args *uap)
@@ -2800,26 +2771,22 @@ freebsd32_aio_suspend(struct thread *td, struct freebsd32_aio_suspend_args *uap)
}
int
-freebsd32_aio_cancel(struct thread *td, struct freebsd32_aio_cancel_args *uap)
-{
-
- return (sys_aio_cancel(td, (struct aio_cancel_args *)uap));
-}
-
-int
freebsd32_aio_error(struct thread *td, struct freebsd32_aio_error_args *uap)
{
return (kern_aio_error(td, (struct aiocb *)uap->aiocbp, &aiocb32_ops));
}
+#ifdef COMPAT_FREEBSD6
int
-freebsd32_oaio_read(struct thread *td, struct freebsd32_oaio_read_args *uap)
+freebsd6_freebsd32_aio_read(struct thread *td,
+ struct freebsd6_freebsd32_aio_read_args *uap)
{
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
&aiocb32_ops_osigevent));
}
+#endif
int
freebsd32_aio_read(struct thread *td, struct freebsd32_aio_read_args *uap)
@@ -2829,13 +2796,16 @@ freebsd32_aio_read(struct thread *td, struct freebsd32_aio_read_args *uap)
&aiocb32_ops));
}
+#ifdef COMPAT_FREEBSD6
int
-freebsd32_oaio_write(struct thread *td, struct freebsd32_oaio_write_args *uap)
+freebsd6_freebsd32_aio_write(struct thread *td,
+ struct freebsd6_freebsd32_aio_write_args *uap)
{
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
&aiocb32_ops_osigevent));
}
+#endif
int
freebsd32_aio_write(struct thread *td, struct freebsd32_aio_write_args *uap)
@@ -2884,8 +2854,10 @@ freebsd32_aio_fsync(struct thread *td, struct freebsd32_aio_fsync_args *uap)
&aiocb32_ops));
}
+#ifdef COMPAT_FREEBSD6
int
-freebsd32_olio_listio(struct thread *td, struct freebsd32_olio_listio_args *uap)
+freebsd6_freebsd32_lio_listio(struct thread *td,
+ struct freebsd6_freebsd32_lio_listio_args *uap)
{
struct aiocb **acb_list;
struct sigevent *sigp, sig;
@@ -2928,6 +2900,7 @@ freebsd32_olio_listio(struct thread *td, struct freebsd32_olio_listio_args *uap)
free(acb_list, M_LIO);
return (error);
}
+#endif
int
freebsd32_lio_listio(struct thread *td, struct freebsd32_lio_listio_args *uap)
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index 3da8618..a7977bf 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -472,6 +472,9 @@ vop_stdpathconf(ap)
{
switch (ap->a_name) {
+ case _PC_ASYNC_IO:
+ *ap->a_retval = _POSIX_ASYNCHRONOUS_IO;
+ return (0);
case _PC_NAME_MAX:
*ap->a_retval = NAME_MAX;
return (0);
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 26bcfa0..11813fc 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -106,14 +106,6 @@ static int vn_access(struct vnode *vp, int user_flags, struct ucred *cred,
struct thread *td);
/*
- * The module initialization routine for POSIX asynchronous I/O will
- * set this to the version of AIO that it implements. (Zero means
- * that it is not implemented.) This value is used here by pathconf()
- * and in kern_descrip.c by fpathconf().
- */
-int async_io_version;
-
-/*
* Sync each mounted filesystem.
*/
#ifndef _SYS_SYSPROTO_H_
@@ -2347,11 +2339,7 @@ kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg, int name,
return (error);
NDFREE(&nd, NDF_ONLY_PNBUF);
- /* If asynchronous I/O is available, it works for all files. */
- if (name == _PC_ASYNC_IO)
- td->td_retval[0] = async_io_version;
- else
- error = VOP_PATHCONF(nd.ni_vp, name, td->td_retval);
+ error = VOP_PATHCONF(nd.ni_vp, name, td->td_retval);
vput(nd.ni_vp);
return (error);
}
diff --git a/sys/mips/cavium/octeon_ebt3000_cf.c b/sys/mips/cavium/octeon_ebt3000_cf.c
index 18db10f..8d2b9ed 100644
--- a/sys/mips/cavium/octeon_ebt3000_cf.c
+++ b/sys/mips/cavium/octeon_ebt3000_cf.c
@@ -215,37 +215,38 @@ static void cf_start (struct bio *bp)
* the bio struct.
*/
- if(bp->bio_cmd & BIO_GETATTR) {
+ switch (bp->bio_cmd) {
+ case BIO_GETATTR:
if (g_handleattr_int(bp, "GEOM::fwsectors", cf_priv->drive_param.sec_track))
return;
if (g_handleattr_int(bp, "GEOM::fwheads", cf_priv->drive_param.heads))
return;
g_io_deliver(bp, ENOIOCTL);
return;
- }
- if ((bp->bio_cmd & (BIO_READ | BIO_WRITE))) {
-
- if (bp->bio_cmd & BIO_READ) {
- error = cf_cmd_read(bp->bio_length / cf_priv->drive_param.sector_size,
- bp->bio_offset / cf_priv->drive_param.sector_size, bp->bio_data);
- } else if (bp->bio_cmd & BIO_WRITE) {
- error = cf_cmd_write(bp->bio_length / cf_priv->drive_param.sector_size,
- bp->bio_offset/cf_priv->drive_param.sector_size, bp->bio_data);
- } else {
- printf("%s: unrecognized bio_cmd %x.\n", __func__, bp->bio_cmd);
- error = ENOTSUP;
- }
+ case BIO_READ:
+ error = cf_cmd_read(bp->bio_length / cf_priv->drive_param.sector_size,
+ bp->bio_offset / cf_priv->drive_param.sector_size, bp->bio_data);
+ break;
+ case BIO_WRITE:
+ error = cf_cmd_write(bp->bio_length / cf_priv->drive_param.sector_size,
+ bp->bio_offset/cf_priv->drive_param.sector_size, bp->bio_data);
+ break;
- if (error != 0) {
- g_io_deliver(bp, error);
- return;
- }
+ default:
+ printf("%s: unrecognized bio_cmd %x.\n", __func__, bp->bio_cmd);
+ error = ENOTSUP;
+ break;
+ }
- bp->bio_resid = 0;
- bp->bio_completed = bp->bio_length;
- g_io_deliver(bp, 0);
+ if (error != 0) {
+ g_io_deliver(bp, error);
+ return;
}
+
+ bp->bio_resid = 0;
+ bp->bio_completed = bp->bio_length;
+ g_io_deliver(bp, 0);
}
diff --git a/sys/mips/rt305x/rt305x_machdep.c b/sys/mips/rt305x/rt305x_machdep.c
index 54e7906..edeb40c 100644
--- a/sys/mips/rt305x/rt305x_machdep.c
+++ b/sys/mips/rt305x/rt305x_machdep.c
@@ -203,5 +203,5 @@ platform_start(__register_t a0 __unused, __register_t a1 __unused,
mips_init();
- mips_timer_init_params(platform_counter_freq, 2);
+ mips_timer_init_params(platform_counter_freq, 1);
}
diff --git a/sys/modules/drm2/i915kms/Makefile b/sys/modules/drm2/i915kms/Makefile
index 8886be8..c42066a 100644
--- a/sys/modules/drm2/i915kms/Makefile
+++ b/sys/modules/drm2/i915kms/Makefile
@@ -3,23 +3,31 @@
.PATH: ${.CURDIR}/../../../dev/drm2/i915
KMOD = i915kms
SRCS = \
+ dvo_ch7017.c \
+ dvo_ch7xxx.c \
+ dvo_ivch.c \
+ dvo_ns2501.c \
+ dvo_sil164.c \
+ dvo_tfp410.c \
i915_debug.c \
i915_dma.c \
i915_drv.c \
i915_gem.c \
i915_gem_context.c \
- i915_gem_execbuffer.c \
i915_gem_evict.c \
+ i915_gem_execbuffer.c \
i915_gem_gtt.c \
i915_gem_stolen.c \
i915_gem_tiling.c \
i915_irq.c \
i915_suspend.c \
+ intel_acpi.c \
intel_bios.c \
intel_crt.c \
intel_ddi.c \
intel_display.c \
intel_dp.c \
+ intel_dvo.c \
intel_fb.c \
intel_hdmi.c \
intel_iic.c \
diff --git a/sys/modules/md/Makefile b/sys/modules/md/Makefile
index 19851e6..db2cd67 100644
--- a/sys/modules/md/Makefile
+++ b/sys/modules/md/Makefile
@@ -3,6 +3,6 @@
.PATH: ${.CURDIR}/../../dev/md
KMOD= geom_md
-SRCS= md.c opt_md.h opt_geom.h vnode_if.h
+SRCS= md.c opt_md.h opt_geom.h opt_rootdevname.h vnode_if.h
.include <bsd.kmod.mk>
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c
index 2ea4eed..d11bf20 100644
--- a/sys/netinet/sctp_usrreq.c
+++ b/sys/netinet/sctp_usrreq.c
@@ -5862,6 +5862,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
error = EINVAL;
}
+ sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_SOCKOPT, SCTP_SO_LOCKED);
out_of_it:
SCTP_TCB_UNLOCK(stcb);
} else {
diff --git a/sys/netinet/tcp_stacks/fastpath.c b/sys/netinet/tcp_stacks/fastpath.c
index d4a9ee0..5eddccf 100644
--- a/sys/netinet/tcp_stacks/fastpath.c
+++ b/sys/netinet/tcp_stacks/fastpath.c
@@ -124,7 +124,7 @@ __FBSDID("$FreeBSD$");
#include <security/mac/mac_framework.h>
-const int tcprexmtthresh;
+extern const int tcprexmtthresh;
VNET_DECLARE(int, tcp_autorcvbuf_inc);
#define V_tcp_autorcvbuf_inc VNET(tcp_autorcvbuf_inc)
diff --git a/sys/riscv/conf/GENERIC b/sys/riscv/conf/GENERIC
index d8c6fdb..e909fc8 100644
--- a/sys/riscv/conf/GENERIC
+++ b/sys/riscv/conf/GENERIC
@@ -79,10 +79,10 @@ options SMP
# options ROOTDEVNAME=\"ufs:/dev/md0\"
# Debugging support. Always need this:
-# options KDB # Enable kernel debugger support.
-# options KDB_TRACE # Print a stack trace for a panic.
+options KDB # Enable kernel debugger support.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use (turn off in stable branch):
-# options DDB # Support DDB.
+options DDB # Support DDB.
# options GDB # Support remote GDB.
options DEADLKRES # Enable the deadlock resolver
options INVARIANTS # Enable calls of extra sanity checking
diff --git a/sys/riscv/htif/htif_console.c b/sys/riscv/htif/htif_console.c
index 10e4349..200ad9e 100644
--- a/sys/riscv/htif/htif_console.c
+++ b/sys/riscv/htif/htif_console.c
@@ -267,10 +267,37 @@ riscv_cnungrab(struct consdev *cp)
static int
riscv_cngetc(struct consdev *cp)
{
+#if defined(KDB)
+ uint64_t devcmd;
+ uint64_t entry;
+ uint64_t devid;
+#endif
uint8_t data;
int ch;
- ch = htif_getc();
+ htif_getc();
+
+#if defined(KDB)
+ if (kdb_active) {
+ entry = machine_command(ECALL_HTIF_GET_ENTRY, 0);
+ while (entry) {
+ devid = HTIF_DEV_ID(entry);
+ devcmd = HTIF_DEV_CMD(entry);
+ data = HTIF_DEV_DATA(entry);
+
+ if (devid == CONSOLE_DEFAULT_ID && devcmd == 0) {
+ entry_last->data = data;
+ entry_last->used = 1;
+ entry_last = entry_last->next;
+ } else {
+ printf("Lost interrupt: devid %d\n",
+ devid);
+ }
+
+ entry = machine_command(ECALL_HTIF_GET_ENTRY, 0);
+ }
+ }
+#endif
if (entry_served->used == 1) {
data = entry_served->data;
diff --git a/sys/riscv/include/db_machdep.h b/sys/riscv/include/db_machdep.h
index a9890d9..7dfd902 100644
--- a/sys/riscv/include/db_machdep.h
+++ b/sys/riscv/include/db_machdep.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
+ * Copyright (c) 2015-2016 Ruslan Bukin <br@bsdpad.com>
* All rights reserved.
*
* Portions of this software were developed by SRI International and the
@@ -41,7 +41,51 @@
#include <machine/frame.h>
#include <machine/trap.h>
+#define T_BREAKPOINT (EXCP_INSTR_BREAKPOINT)
+#define T_WATCHPOINT (0)
+
typedef vm_offset_t db_addr_t;
typedef long db_expr_t;
+#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_sepc)
+
+#define BKPT_INST (0x00100073)
+#define BKPT_SIZE (INSN_SIZE)
+#define BKPT_SET(inst) (BKPT_INST)
+
+#define BKPT_SKIP do { \
+ kdb_frame->tf_sepc += BKPT_SIZE; \
+} while (0)
+
+#define db_clear_single_step kdb_cpu_clear_singlestep
+#define db_set_single_step kdb_cpu_set_singlestep
+
+#define IS_BREAKPOINT_TRAP(type, code) (type == T_BREAKPOINT)
+#define IS_WATCHPOINT_TRAP(type, code) (type == T_WATCHPOINT)
+
+#define inst_trap_return(ins) (ins == 0x10000073) /* eret */
+#define inst_return(ins) (ins == 0x00008067) /* ret */
+#define inst_call(ins) (((ins) & 0x7f) == 111 || \
+ ((ins) & 0x7f) == 103) /* jal, jalr */
+
+#define inst_load(ins) ({ \
+ uint32_t tmp_instr = db_get_value(PC_REGS(), sizeof(uint32_t), FALSE); \
+ is_load_instr(tmp_instr); \
+})
+
+#define inst_store(ins) ({ \
+ uint32_t tmp_instr = db_get_value(PC_REGS(), sizeof(uint32_t), FALSE); \
+ is_store_instr(tmp_instr); \
+})
+
+#define is_load_instr(ins) (((ins) & 0x7f) == 3)
+#define is_store_instr(ins) (((ins) & 0x7f) == 35)
+
+#define next_instr_address(pc, bd) ((bd) ? (pc) : ((pc) + 4))
+
+#define DB_SMALL_VALUE_MAX (0x7fffffff)
+#define DB_SMALL_VALUE_MIN (-0x40001)
+
+#define DB_ELFSIZE 64
+
#endif /* !_MACHINE_DB_MACHDEP_H_ */
diff --git a/sys/riscv/include/riscv_opcode.h b/sys/riscv/include/riscv_opcode.h
new file mode 100644
index 0000000..b346588
--- /dev/null
+++ b/sys/riscv/include/riscv_opcode.h
@@ -0,0 +1,116 @@
+/*-
+ * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_RISCV_OPCODE_H_
+#define _MACHINE_RISCV_OPCODE_H_
+
+/*
+ * Define the instruction formats and opcode values for the
+ * RISC-V instruction set.
+ */
+#include <machine/endian.h>
+
+/*
+ * Define the instruction formats.
+ */
+typedef union {
+ unsigned word;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned rd: 5;
+ unsigned funct3: 3;
+ unsigned rs1: 5;
+ unsigned rs2: 5;
+ unsigned funct7: 7;
+ } RType;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned rd: 5;
+ unsigned funct3: 3;
+ unsigned rs1: 5;
+ unsigned rs2: 6;
+ unsigned funct7: 6;
+ } R2Type;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned rd: 5;
+ unsigned funct3: 3;
+ unsigned rs1: 5;
+ unsigned imm: 12;
+ } IType;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned imm0_4: 5;
+ unsigned funct3: 3;
+ unsigned rs1: 5;
+ unsigned rs2: 5;
+ unsigned imm5_11: 7;
+ } SType;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned imm11: 1;
+ unsigned imm1_4: 4;
+ unsigned funct3: 3;
+ unsigned rs1: 5;
+ unsigned rs2: 5;
+ unsigned imm5_10: 6;
+ unsigned imm12: 1;
+ } SBType;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned rd: 5;
+ unsigned imm12_31: 20;
+ } UType;
+
+ struct {
+ unsigned opcode: 7;
+ unsigned rd: 5;
+ unsigned imm12_19: 8;
+ unsigned imm11: 1;
+ unsigned imm1_10: 10;
+ unsigned imm20: 1;
+ } UJType;
+} InstFmt;
+
+#define RISCV_OPCODE(r) (r & 0x7f)
+
+#endif /* !_MACHINE_RISCV_OPCODE_H_ */
diff --git a/sys/riscv/include/riscvreg.h b/sys/riscv/include/riscvreg.h
index 76cba49..b411e18 100644
--- a/sys/riscv/include/riscvreg.h
+++ b/sys/riscv/include/riscvreg.h
@@ -117,9 +117,10 @@
#define SIP_SSIP (1 << 1)
#define SIP_STIP (1 << 5)
-#define NCSRS 4096
-#define CSR_IPI 0x783
-#define XLEN 8
+#define NCSRS 4096
+#define CSR_IPI 0x783
+#define XLEN 8
+#define INSN_SIZE 4
#define CSR_ZIMM(val) \
(__builtin_constant_p(val) && ((u_long)(val) < 32))
diff --git a/sys/riscv/include/stack.h b/sys/riscv/include/stack.h
new file mode 100644
index 0000000..7f4be068
--- /dev/null
+++ b/sys/riscv/include/stack.h
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_STACK_H_
+#define _MACHINE_STACK_H_
+
+#define INKERNEL(va) ((va) >= VM_MIN_KERNEL_ADDRESS && \
+ (va) <= VM_MAX_KERNEL_ADDRESS)
+
+struct unwind_state {
+ uint64_t fp;
+ uint64_t sp;
+ uint64_t pc;
+};
+
+int unwind_frame(struct unwind_state *);
+
+#endif /* !_MACHINE_STACK_H_ */
diff --git a/sys/riscv/riscv/db_disasm.c b/sys/riscv/riscv/db_disasm.c
new file mode 100644
index 0000000..4be3114
--- /dev/null
+++ b/sys/riscv/riscv/db_disasm.c
@@ -0,0 +1,475 @@
+/*-
+ * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <ddb/ddb.h>
+#include <ddb/db_access.h>
+#include <ddb/db_sym.h>
+
+#include <machine/riscvreg.h>
+#include <machine/riscv_opcode.h>
+
+struct riscv_op {
+ char *name;
+ char *type;
+ char *fmt;
+ int opcode;
+ int funct3;
+ int funct7; /* Or imm, depending on type. */
+};
+
+/*
+ * Keep sorted by opcode, funct3, funct7 so some instructions
+ * aliases will be supported (e.g. "mv" instruction alias)
+ * Use same print format as binutils do.
+ */
+static struct riscv_op riscv_opcodes[] = {
+ { "lb", "I", "d,o(s)", 3, 0, -1 },
+ { "lh", "I", "d,o(s)", 3, 1, -1 },
+ { "lw", "I", "d,o(s)", 3, 2, -1 },
+ { "ld", "I", "d,o(s)", 3, 3, -1 },
+ { "lbu", "I", "d,o(s)", 3, 4, -1 },
+ { "lhu", "I", "d,o(s)", 3, 5, -1 },
+ { "lwu", "I", "d,o(s)", 3, 6, -1 },
+ { "ldu", "I", "d,o(s)", 3, 7, -1 },
+ { "fence", "I", "", 15, 0, -1 },
+ { "fence.i", "I", "", 15, 1, -1 },
+ { "mv", "I", "d,s", 19, 0, 0 },
+ { "addi", "I", "d,s,j", 19, 0, -1 },
+ { "slli", "R2", "d,s,>", 19, 1, 0 },
+ { "slti", "I", "d,s,j", 19, 2, -1 },
+ { "sltiu", "I", "d,s,j", 19, 3, -1 },
+ { "xori", "I", "d,s,j", 19, 4, -1 },
+ { "srli", "R2", "d,s,>", 19, 5, 0 },
+ { "srai", "R2", "d,s,>", 19, 5, 0b010000 },
+ { "ori", "I", "d,s,j", 19, 6, -1 },
+ { "andi", "I", "d,s,j", 19, 7, -1 },
+ { "auipc", "U", "d,u", 23, -1, -1 },
+ { "sext.w", "I", "d,s", 27, 0, 0 },
+ { "addiw", "I", "d,s,j", 27, 0, -1 },
+ { "slliw", "R", "d,s,<", 27, 1, 0 },
+ { "srliw", "R", "d,s,<", 27, 5, 0 },
+ { "sraiw", "R", "d,s,<", 27, 5, 0b0100000 },
+ { "sb", "S", "t,q(s)", 35, 0, -1 },
+ { "sh", "S", "t,q(s)", 35, 1, -1 },
+ { "sw", "S", "t,q(s)", 35, 2, -1 },
+ { "sd", "S", "t,q(s)", 35, 3, -1 },
+ { "sbu", "S", "t,q(s)", 35, 4, -1 },
+ { "shu", "S", "t,q(s)", 35, 5, -1 },
+ { "swu", "S", "t,q(s)", 35, 6, -1 },
+ { "sdu", "S", "t,q(s)", 35, 7, -1 },
+ { "lr.w", "R", "d,t,0(s)", 47, 2, 0b0001000 },
+ { "sc.w", "R", "d,t,0(s)", 47, 2, 0b0001100 },
+ { "amoswap.w", "R", "d,t,0(s)", 47, 2, 0b0000100 },
+ { "amoadd.w", "R", "d,t,0(s)", 47, 2, 0b0000000 },
+ { "amoxor.w", "R", "d,t,0(s)", 47, 2, 0b0010000 },
+ { "amoand.w", "R", "d,t,0(s)", 47, 2, 0b0110000 },
+ { "amoor.w", "R", "d,t,0(s)", 47, 2, 0b0100000 },
+ { "amomin.w", "R", "d,t,0(s)", 47, 2, 0b1000000 },
+ { "amomax.w", "R", "d,t,0(s)", 47, 2, 0b1010000 },
+ { "amominu.w", "R", "d,t,0(s)", 47, 2, 0b1100000 },
+ { "amomaxu.w", "R", "d,t,0(s)", 47, 2, 0b1110000 },
+ { "lr.w.aq", "R", "d,t,0(s)", 47, 2, 0b0001000 },
+ { "sc.w.aq", "R", "d,t,0(s)", 47, 2, 0b0001100 },
+ { "amoswap.w.aq","R", "d,t,0(s)", 47, 2, 0b0000110 },
+ { "amoadd.w.aq","R", "d,t,0(s)", 47, 2, 0b0000010 },
+ { "amoxor.w.aq","R", "d,t,0(s)", 47, 2, 0b0010010 },
+ { "amoand.w.aq","R", "d,t,0(s)", 47, 2, 0b0110010 },
+ { "amoor.w.aq", "R", "d,t,0(s)", 47, 2, 0b0100010 },
+ { "amomin.w.aq","R", "d,t,0(s)", 47, 2, 0b1000010 },
+ { "amomax.w.aq","R", "d,t,0(s)", 47, 2, 0b1010010 },
+ { "amominu.w.aq","R", "d,t,0(s)", 47, 2, 0b1100010 },
+ { "amomaxu.w.aq","R", "d,t,0(s)", 47, 2, 0b1110010 },
+ { "amoswap.w.rl","R", "d,t,0(s)", 47, 2, 0b0000110 },
+ { "amoadd.w.rl","R", "d,t,0(s)", 47, 2, 0b0000001 },
+ { "amoxor.w.rl","R", "d,t,0(s)", 47, 2, 0b0010001 },
+ { "amoand.w.rl","R", "d,t,0(s)", 47, 2, 0b0110001 },
+ { "amoor.w.rl", "R", "d,t,0(s)", 47, 2, 0b0100001 },
+ { "amomin.w.rl","R", "d,t,0(s)", 47, 2, 0b1000001 },
+ { "amomax.w.rl","R", "d,t,0(s)", 47, 2, 0b1010001 },
+ { "amominu.w.rl","R", "d,t,0(s)", 47, 2, 0b1100001 },
+ { "amomaxu.w.rl","R", "d,t,0(s)", 47, 2, 0b1110001 },
+ { "amoswap.d", "R", "d,t,0(s)", 47, 3, 0b0000100 },
+ { "amoadd.d", "R", "d,t,0(s)", 47, 3, 0b0000000 },
+ { "amoxor.d", "R", "d,t,0(s)", 47, 3, 0b0010000 },
+ { "amoand.d", "R", "d,t,0(s)", 47, 3, 0b0110000 },
+ { "amoor.d", "R", "d,t,0(s)", 47, 3, 0b0100000 },
+ { "amomin.d", "R", "d,t,0(s)", 47, 3, 0b1000000 },
+ { "amomax.d", "R", "d,t,0(s)", 47, 3, 0b1010000 },
+ { "amominu.d", "R", "d,t,0(s)", 47, 3, 0b1100000 },
+ { "amomaxu.d", "R", "d,t,0(s)", 47, 3, 0b1110000 },
+ { "lr.d.aq", "R", "d,t,0(s)", 47, 3, 0b0001000 },
+ { "sc.d.aq", "R", "d,t,0(s)", 47, 3, 0b0001100 },
+ { "amoswap.d.aq","R", "d,t,0(s)", 47, 3, 0b0000110 },
+ { "amoadd.d.aq","R", "d,t,0(s)", 47, 3, 0b0000010 },
+ { "amoxor.d.aq","R", "d,t,0(s)", 47, 3, 0b0010010 },
+ { "amoand.d.aq","R", "d,t,0(s)", 47, 3, 0b0110010 },
+ { "amoor.d.aq", "R", "d,t,0(s)", 47, 3, 0b0100010 },
+ { "amomin.d.aq","R", "d,t,0(s)", 47, 3, 0b1000010 },
+ { "amomax.d.aq","R", "d,t,0(s)", 47, 3, 0b1010010 },
+ { "amominu.d.aq","R", "d,t,0(s)", 47, 3, 0b1100010 },
+ { "amomaxu.d.aq","R", "d,t,0(s)", 47, 3, 0b1110010 },
+ { "amoswap.d.rl","R", "d,t,0(s)", 47, 3, 0b0000110 },
+ { "amoadd.d.rl","R", "d,t,0(s)", 47, 3, 0b0000001 },
+ { "amoxor.d.rl","R", "d,t,0(s)", 47, 3, 0b0010001 },
+ { "amoand.d.rl","R", "d,t,0(s)", 47, 3, 0b0110001 },
+ { "amoor.d.rl", "R", "d,t,0(s)", 47, 3, 0b0100001 },
+ { "amomin.d.rl","R", "d,t,0(s)", 47, 3, 0b1000001 },
+ { "amomax.d.rl","R", "d,t,0(s)", 47, 3, 0b1010001 },
+ { "amominu.d.rl","R", "d,t,0(s)", 47, 3, 0b1100001 },
+ { "amomaxu.d.rl","R", "d,t,0(s)", 47, 3, 0b1110001 },
+ { "add", "R", "d,s,t", 51, 0, 0 },
+ { "sub", "R", "d,s,t", 51, 0, 0b0100000 },
+ { "mul", "R", "d,s,t", 51, 0, 0b0000001 },
+ { "sll", "R", "d,s,t", 51, 1, 0 },
+ { "slt", "R", "d,s,t", 51, 2, 0 },
+ { "sltu", "R", "d,s,t", 51, 3, 0 },
+ { "xor", "R", "d,s,t", 51, 4, 0 },
+ { "srl", "R", "d,s,t", 51, 5, 0 },
+ { "sra", "R", "d,s,t", 51, 5, 0b0100000 },
+ { "or", "R", "d,s,t", 51, 6, 0 },
+ { "and", "R", "d,s,t", 51, 7, 0 },
+ { "lui", "U", "d,u", 55, -1, -1 },
+ { "addw", "R", "d,s,t", 59, 0, 0 },
+ { "subw", "R", "d,s,t", 59, 0, 0b0100000 },
+ { "mulw", "R", "d,s,t", 59, 0, 1 },
+ { "sllw", "R", "d,s,t", 59, 1, 0 },
+ { "srlw", "R", "d,s,t", 59, 5, 0 },
+ { "sraw", "R", "d,s,t", 59, 5, 0b0100000 },
+ { "beq", "SB", "s,t,p", 99, 0, -1 },
+ { "bne", "SB", "s,t,p", 99, 1, -1 },
+ { "blt", "SB", "s,t,p", 99, 4, -1 },
+ { "bge", "SB", "s,t,p", 99, 5, -1 },
+ { "bltu", "SB", "s,t,p", 99, 6, -1 },
+ { "bgeu", "SB", "s,t,p", 99, 7, -1 },
+ { "jalr", "I", "d,s,j", 103, 0, -1 },
+ { "jal", "UJ", "a", 111, -1, -1 },
+ { "eret", "I", "", 115, 0, 0b000100000000 },
+ { "sfence.vm", "I", "", 115, 0, 0b000100000001 },
+ { "wfi", "I", "", 115, 0, 0b000100000010 },
+ { "csrrw", "I", "d,E,s", 115, 1, -1},
+ { "csrrs", "I", "d,E,s", 115, 2, -1},
+ { "csrrc", "I", "d,E,s", 115, 3, -1},
+ { "csrrwi", "I", "d,E,Z", 115, 5, -1},
+ { "csrrsi", "I", "d,E,Z", 115, 6, -1},
+ { "csrrci", "I", "d,E,Z", 115, 7, -1},
+ { NULL, NULL, NULL, 0, 0, 0 }
+};
+
+struct csr_op {
+ char *name;
+ int imm;
+};
+
+static struct csr_op csr_name[] = {
+ { "fflags", 0x001 },
+ { "frm", 0x002 },
+ { "fcsr", 0x003 },
+ { "cycle", 0xc00 },
+ { "time", 0xc01 },
+ { "instret", 0xc02 },
+ { "stats", 0x0c0 },
+ { "uarch0", 0xcc0 },
+ { "uarch1", 0xcc1 },
+ { "uarch2", 0xcc2 },
+ { "uarch3", 0xcc3 },
+ { "uarch4", 0xcc4 },
+ { "uarch5", 0xcc5 },
+ { "uarch6", 0xcc6 },
+ { "uarch7", 0xcc7 },
+ { "uarch8", 0xcc8 },
+ { "uarch9", 0xcc9 },
+ { "uarch10", 0xcca },
+ { "uarch11", 0xccb },
+ { "uarch12", 0xccc },
+ { "uarch13", 0xccd },
+ { "uarch14", 0xcce },
+ { "uarch15", 0xccf },
+ { "sstatus", 0x100 },
+ { "stvec", 0x101 },
+ { "sie", 0x104 },
+ { "sscratch", 0x140 },
+ { "sepc", 0x141 },
+ { "sip", 0x144 },
+ { "sptbr", 0x180 },
+ { "sasid", 0x181 },
+ { "cyclew", 0x900 },
+ { "timew", 0x901 },
+ { "instretw", 0x902 },
+ { "stime", 0xd01 },
+ { "scause", 0xd42 },
+ { "sbadaddr", 0xd43 },
+ { "stimew", 0xa01 },
+ { "mstatus", 0x300 },
+ { "mtvec", 0x301 },
+ { "mtdeleg", 0x302 },
+ { "mie", 0x304 },
+ { "mtimecmp", 0x321 },
+ { "mscratch", 0x340 },
+ { "mepc", 0x341 },
+ { "mcause", 0x342 },
+ { "mbadaddr", 0x343 },
+ { "mip", 0x344 },
+ { "mtime", 0x701 },
+ { "mcpuid", 0xf00 },
+ { "mimpid", 0xf01 },
+ { "mhartid", 0xf10 },
+ { "mtohost", 0x780 },
+ { "mfromhost", 0x781 },
+ { "mreset", 0x782 },
+ { "send_ipi", 0x783 },
+ { "miobase", 0x784 },
+ { "cycleh", 0xc80 },
+ { "timeh", 0xc81 },
+ { "instreth", 0xc82 },
+ { "cyclehw", 0x980 },
+ { "timehw", 0x981 },
+ { "instrethw", 0x982 },
+ { "stimeh", 0xd81 },
+ { "stimehw", 0xa81 },
+ { "mtimecmph", 0x361 },
+ { "mtimeh", 0x741 },
+ { NULL, 0 }
+};
+
+static char *reg_name[32] = {
+ "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2",
+ "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5",
+ "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7",
+ "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6"
+};
+
+static int32_t
+get_imm(InstFmt i, char *type, uint32_t *val)
+{
+ int imm;
+
+ imm = 0;
+
+ if (strcmp(type, "I") == 0) {
+ imm = i.IType.imm;
+ *val = imm;
+ if (imm & (1 << 11))
+ imm |= (0xfffff << 12); /* sign extend */
+
+ } else if (strcmp(type, "S") == 0) {
+ imm = i.SType.imm0_4;
+ imm |= (i.SType.imm5_11 << 5);
+ *val = imm;
+ if (imm & (1 << 11))
+ imm |= (0xfffff << 12); /* sign extend */
+
+ } else if (strcmp(type, "U") == 0) {
+ imm = i.UType.imm12_31;
+ *val = imm;
+
+ } else if (strcmp(type, "UJ") == 0) {
+ imm = i.UJType.imm12_19 << 12;
+ imm |= i.UJType.imm11 << 11;
+ imm |= i.UJType.imm1_10 << 1;
+ imm |= i.UJType.imm20 << 20;
+ *val = imm;
+ if (imm & (1 << 20))
+ imm |= (0xfff << 21); /* sign extend */
+
+ } else if (strcmp(type, "SB") == 0) {
+ imm = i.SBType.imm11 << 11;
+ imm |= i.SBType.imm1_4 << 1;
+ imm |= i.SBType.imm5_10 << 5;
+ imm |= i.SBType.imm12 << 12;
+ *val = imm;
+ if (imm & (1 << 12))
+ imm |= (0xfffff << 12); /* sign extend */
+ }
+
+ return (imm);
+}
+
+static int
+oprint(struct riscv_op *op, vm_offset_t loc, int rd,
+ int rs1, int rs2, uint32_t val, vm_offset_t imm)
+{
+ char *p;
+ int i;
+
+ p = op->fmt;
+
+ db_printf("%s\t", op->name);
+
+ while (*p) {
+ if (strncmp("d", p, 1) == 0)
+ db_printf("%s", reg_name[rd]);
+
+ else if (strncmp("s", p, 1) == 0)
+ db_printf("%s", reg_name[rs1]);
+
+ else if (strncmp("t", p, 1) == 0)
+ db_printf("%s", reg_name[rs2]);
+
+ else if (strncmp(">", p, 1) == 0)
+ db_printf("0x%x", rs2);
+
+ else if (strncmp("E", p, 1) == 0) {
+ for (i = 0; csr_name[i].name != NULL; i++)
+ if (csr_name[i].imm == val)
+ db_printf("%s",
+ csr_name[i].name);
+ } else if (strncmp("Z", p, 1) == 0)
+ db_printf("%d", rs1);
+
+ else if (strncmp("<", p, 1) == 0)
+ db_printf("0x%x", rs2);
+
+ else if (strncmp("j", p, 1) == 0)
+ db_printf("%d", imm);
+
+ else if (strncmp("u", p, 1) == 0)
+ db_printf("0x%x", imm);
+
+ else if (strncmp("a", p, 1) == 0)
+ db_printf("0x%016lx", imm);
+
+ else if (strncmp("p", p, 1) == 0)
+ db_printf("0x%016lx", (loc + imm));
+
+ else if (strlen(p) >= 4) {
+ if (strncmp("o(s)", p, 4) == 0)
+ db_printf("%d(%s)", imm, reg_name[rs1]);
+ else if (strncmp("q(s)", p, 4) == 0)
+ db_printf("%d(%s)", imm, reg_name[rs1]);
+ else if (strncmp("0(s)", p, 4) == 0)
+ db_printf("(%s)", reg_name[rs1]);
+ }
+
+ while (*p && strncmp(p, ",", 1) != 0)
+ p++;
+
+ if (*p) {
+ db_printf(", ");
+ p++;
+ }
+ }
+
+
+ return (0);
+}
+
+static int
+match_type(InstFmt i, struct riscv_op *op, vm_offset_t loc)
+{
+ uint32_t val;
+ int found;
+ int imm;
+
+ val = 0;
+ imm = get_imm(i, op->type, &val);
+
+ if (strcmp(op->type, "U") == 0) {
+ oprint(op, loc, i.UType.rd, 0, 0, val, imm);
+ return (1);
+ }
+ if (strcmp(op->type, "UJ") == 0) {
+ oprint(op, loc, 0, 0, 0, val, (loc + imm));
+ return (1);
+ }
+ if ((strcmp(op->type, "I") == 0) && \
+ (op->funct3 == i.IType.funct3)) {
+ found = 0;
+ if (op->funct7 != -1) {
+ if (op->funct7 == i.IType.imm)
+ found = 1;
+ } else
+ found = 1;
+
+ if (found) {
+ oprint(op, loc, i.IType.rd,
+ i.IType.rs1, 0, val, imm);
+ return (1);
+ }
+ }
+ if ((strcmp(op->type, "S") == 0) && \
+ (op->funct3 == i.SType.funct3)) {
+ oprint(op, loc, 0, i.SType.rs1, i.SType.rs2,
+ val, imm);
+ return (1);
+ }
+ if ((strcmp(op->type, "SB") == 0) && \
+ (op->funct3 == i.SBType.funct3)) {
+ oprint(op, loc, 0, i.SBType.rs1, i.SBType.rs2,
+ val, imm);
+ return (1);
+ }
+ if ((strcmp(op->type, "R2") == 0) && \
+ (op->funct3 == i.R2Type.funct3) && \
+ (op->funct7 == i.R2Type.funct7)) {
+ oprint(op, loc, i.R2Type.rd, i.R2Type.rs1,
+ i.R2Type.rs2, val, imm);
+ return (1);
+ }
+ if ((strcmp(op->type, "R") == 0) && \
+ (op->funct3 == i.RType.funct3) && \
+ (op->funct7 == i.RType.funct7)) {
+ oprint(op, loc, i.RType.rd, i.RType.rs1,
+ val, i.RType.rs2, imm);
+ return (1);
+ }
+
+ return (0);
+}
+
+vm_offset_t
+db_disasm(vm_offset_t loc, bool altfmt)
+{
+ struct riscv_op *op;
+ InstFmt i;
+ int j;
+
+ i.word = db_get_value(loc, INSN_SIZE, 0);
+
+ /* First match opcode */
+ for (j = 0; riscv_opcodes[j].name != NULL; j++) {
+ op = &riscv_opcodes[j];
+ if (op->opcode == i.RType.opcode) {
+ if (match_type(i, op, loc))
+ break;
+ }
+ }
+
+ db_printf("\n");
+ return(loc + INSN_SIZE);
+}
diff --git a/sys/riscv/riscv/db_interface.c b/sys/riscv/riscv/db_interface.c
new file mode 100644
index 0000000..b9f391a
--- /dev/null
+++ b/sys/riscv/riscv/db_interface.c
@@ -0,0 +1,163 @@
+/*-
+ * Copyright (c) 2015 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf under
+ * the sponsorship of the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+#include <sys/proc.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <vm/vm_map.h>
+
+#ifdef KDB
+#include <sys/kdb.h>
+#endif
+
+#include <ddb/ddb.h>
+#include <ddb/db_variables.h>
+
+#include <machine/cpu.h>
+#include <machine/pcb.h>
+#include <machine/stack.h>
+#include <machine/vmparam.h>
+
+static int
+db_frame(struct db_variable *vp, db_expr_t *valuep, int op)
+{
+ long *reg;
+
+ if (kdb_frame == NULL)
+ return (0);
+
+ reg = (long *)((uintptr_t)kdb_frame + (db_expr_t)vp->valuep);
+ if (op == DB_VAR_GET)
+ *valuep = *reg;
+ else
+ *reg = *valuep;
+ return (1);
+}
+
+#define DB_OFFSET(x) (db_expr_t *)offsetof(struct trapframe, x)
+struct db_variable db_regs[] = {
+ { "ra", DB_OFFSET(tf_ra), db_frame },
+ { "sp", DB_OFFSET(tf_sp), db_frame },
+ { "gp", DB_OFFSET(tf_gp), db_frame },
+ { "tp", DB_OFFSET(tf_tp), db_frame },
+ { "t0", DB_OFFSET(tf_t[0]), db_frame },
+ { "t1", DB_OFFSET(tf_t[1]), db_frame },
+ { "t2", DB_OFFSET(tf_t[2]), db_frame },
+ { "t3", DB_OFFSET(tf_t[3]), db_frame },
+ { "t4", DB_OFFSET(tf_t[4]), db_frame },
+ { "t5", DB_OFFSET(tf_t[5]), db_frame },
+ { "t6", DB_OFFSET(tf_t[6]), db_frame },
+ { "s0", DB_OFFSET(tf_s[0]), db_frame },
+ { "s1", DB_OFFSET(tf_s[1]), db_frame },
+ { "s2", DB_OFFSET(tf_s[2]), db_frame },
+ { "s3", DB_OFFSET(tf_s[3]), db_frame },
+ { "s4", DB_OFFSET(tf_s[4]), db_frame },
+ { "s5", DB_OFFSET(tf_s[5]), db_frame },
+ { "s6", DB_OFFSET(tf_s[6]), db_frame },
+ { "s7", DB_OFFSET(tf_s[7]), db_frame },
+ { "s8", DB_OFFSET(tf_s[8]), db_frame },
+ { "s9", DB_OFFSET(tf_s[9]), db_frame },
+ { "s10", DB_OFFSET(tf_s[10]), db_frame },
+ { "s11", DB_OFFSET(tf_s[11]), db_frame },
+ { "a0", DB_OFFSET(tf_a[0]), db_frame },
+ { "a1", DB_OFFSET(tf_a[1]), db_frame },
+ { "a2", DB_OFFSET(tf_a[2]), db_frame },
+ { "a3", DB_OFFSET(tf_a[3]), db_frame },
+ { "a4", DB_OFFSET(tf_a[4]), db_frame },
+ { "a5", DB_OFFSET(tf_a[5]), db_frame },
+ { "a6", DB_OFFSET(tf_a[6]), db_frame },
+ { "a7", DB_OFFSET(tf_a[7]), db_frame },
+ { "sepc", DB_OFFSET(tf_sepc), db_frame },
+ { "sstatus", DB_OFFSET(tf_sstatus), db_frame },
+ { "sbadaddr", DB_OFFSET(tf_sbadaddr), db_frame },
+ { "scause", DB_OFFSET(tf_scause), db_frame },
+};
+
+struct db_variable *db_eregs = db_regs + nitems(db_regs);
+
+void
+db_show_mdpcpu(struct pcpu *pc)
+{
+}
+
+/*
+ * Read bytes from kernel address space for debugger.
+ */
+int
+db_read_bytes(vm_offset_t addr, size_t size, char *data)
+{
+ jmp_buf jb;
+ void *prev_jb;
+ const char *src;
+ int ret;
+
+ prev_jb = kdb_jmpbuf(jb);
+ ret = setjmp(jb);
+
+ if (ret == 0) {
+ src = (const char *)addr;
+ while (size-- > 0)
+ *data++ = *src++;
+ }
+ (void)kdb_jmpbuf(prev_jb);
+
+ return (ret);
+}
+
+/*
+ * Write bytes to kernel address space for debugger.
+ */
+int
+db_write_bytes(vm_offset_t addr, size_t size, char *data)
+{
+ jmp_buf jb;
+ void *prev_jb;
+ char *dst;
+ int ret;
+
+ prev_jb = kdb_jmpbuf(jb);
+ ret = setjmp(jb);
+ if (ret == 0) {
+ dst = (char *)addr;
+ while (size-- > 0)
+ *dst++ = *data++;
+
+ fence();
+
+ /* Clean D-cache and invalidate I-cache */
+ cpu_dcache_wb_range(addr, (vm_size_t)size);
+ cpu_icache_sync_range(addr, (vm_size_t)size);
+ }
+ (void)kdb_jmpbuf(prev_jb);
+
+ return (ret);
+}
diff --git a/sys/riscv/riscv/db_trace.c b/sys/riscv/riscv/db_trace.c
new file mode 100644
index 0000000..6c45e07
--- /dev/null
+++ b/sys/riscv/riscv/db_trace.c
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 2015 The FreeBSD Foundation
+ * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by Semihalf under
+ * the sponsorship of the FreeBSD Foundation.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+#include <sys/proc.h>
+#include <sys/kdb.h>
+#include <machine/pcb.h>
+#include <ddb/ddb.h>
+#include <ddb/db_sym.h>
+
+#include <machine/riscvreg.h>
+#include <machine/stack.h>
+
+void
+db_md_list_watchpoints()
+{
+
+}
+
+int
+db_md_clr_watchpoint(db_expr_t addr, db_expr_t size)
+{
+
+ return (0);
+}
+
+int
+db_md_set_watchpoint(db_expr_t addr, db_expr_t size)
+{
+
+ return (0);
+}
+
+static void
+db_stack_trace_cmd(struct unwind_state *frame)
+{
+ const char *name;
+ db_expr_t offset;
+ db_expr_t value;
+ c_db_sym_t sym;
+ uint64_t pc;
+
+ while (1) {
+ pc = frame->pc;
+
+ if (unwind_frame(frame) < 0)
+ break;
+
+ sym = db_search_symbol(pc, DB_STGY_ANY, &offset);
+ if (sym == C_DB_SYM_NULL) {
+ value = 0;
+ name = "(null)";
+ } else
+ db_symbol_values(sym, &name, &value);
+
+ db_printf("%s() at ", name);
+ db_printsym(frame->pc, DB_STGY_PROC);
+ db_printf("\n");
+
+ db_printf("\t pc = 0x%016lx ra = 0x%016lx\n",
+ pc, frame->pc);
+ db_printf("\t sp = 0x%016lx fp = 0x%016lx\n",
+ frame->sp, frame->fp);
+ db_printf("\n");
+ }
+}
+
+int
+db_trace_thread(struct thread *thr, int count)
+{
+ struct unwind_state frame;
+ struct pcb *ctx;
+
+ if (thr != curthread) {
+ ctx = kdb_thr_ctx(thr);
+
+ frame.sp = (uint64_t)ctx->pcb_sp;
+ frame.fp = (uint64_t)ctx->pcb_s[0];
+ frame.pc = (uint64_t)ctx->pcb_ra;
+ db_stack_trace_cmd(&frame);
+ } else
+ db_trace_self();
+ return (0);
+}
+
+void
+db_trace_self(void)
+{
+ struct unwind_state frame;
+ uint64_t sp;
+
+ __asm __volatile("mv %0, sp" : "=&r" (sp));
+
+ frame.sp = sp;
+ frame.fp = (uint64_t)__builtin_frame_address(0);
+ frame.pc = (uint64_t)db_trace_self;
+ db_stack_trace_cmd(&frame);
+}
diff --git a/sys/riscv/riscv/stack_machdep.c b/sys/riscv/riscv/stack_machdep.c
index 2c1a6a3..6bb7f1c 100644
--- a/sys/riscv/riscv/stack_machdep.c
+++ b/sys/riscv/riscv/stack_machdep.c
@@ -42,11 +42,39 @@ __FBSDID("$FreeBSD$");
#include <machine/vmparam.h>
#include <machine/pcb.h>
+#include <machine/stack.h>
+
+static void
+stack_capture(struct stack *st, struct unwind_state *frame)
+{
+
+ stack_zero(st);
+
+ while (1) {
+ unwind_frame(frame);
+ if (!INKERNEL((vm_offset_t)frame->fp) ||
+ !INKERNEL((vm_offset_t)frame->pc))
+ break;
+ if (stack_put(st, frame->pc) == -1)
+ break;
+ }
+}
void
stack_save_td(struct stack *st, struct thread *td)
{
+ struct unwind_state frame;
+ if (TD_IS_SWAPPED(td))
+ panic("stack_save_td: swapped");
+ if (TD_IS_RUNNING(td))
+ panic("stack_save_td: running");
+
+ frame.sp = td->td_pcb->pcb_sp;
+ frame.fp = td->td_pcb->pcb_s[0];
+ frame.pc = td->td_pcb->pcb_ra;
+
+ stack_capture(st, &frame);
}
int
@@ -59,5 +87,14 @@ stack_save_td_running(struct stack *st, struct thread *td)
void
stack_save(struct stack *st)
{
+ struct unwind_state frame;
+ uint64_t sp;
+
+ __asm __volatile("mv %0, sp" : "=&r" (sp));
+
+ frame.sp = sp;
+ frame.fp = (uint64_t)__builtin_frame_address(0);
+ frame.pc = (uint64_t)stack_save;
+ stack_capture(st, &frame);
}
diff --git a/sys/riscv/riscv/trap.c b/sys/riscv/riscv/trap.c
index d560bc6..6327204 100644
--- a/sys/riscv/riscv/trap.c
+++ b/sys/riscv/riscv/trap.c
@@ -46,6 +46,9 @@ __FBSDID("$FreeBSD$");
#include <sys/ptrace.h>
#include <sys/syscall.h>
#include <sys/sysent.h>
+#ifdef KDB
+#include <sys/kdb.h>
+#endif
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -167,6 +170,13 @@ data_abort(struct trapframe *frame, int lower)
int error;
int sig;
+#ifdef KDB
+ if (kdb_active) {
+ kdb_reenter();
+ return;
+ }
+#endif
+
td = curthread;
pcb = td->td_pcb;
@@ -277,6 +287,7 @@ do_trap_supervisor(struct trapframe *frame)
dump_regs(frame);
panic("No debugger in kernel.\n");
#endif
+ break;
case EXCP_INSTR_ILLEGAL:
dump_regs(frame);
panic("Illegal instruction at %x\n", frame->tf_sepc);
diff --git a/sys/riscv/riscv/unwind.c b/sys/riscv/riscv/unwind.c
new file mode 100644
index 0000000..18fc1e2
--- /dev/null
+++ b/sys/riscv/riscv/unwind.c
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+
+#include <machine/stack.h>
+#include <machine/vmparam.h>
+
+int
+unwind_frame(struct unwind_state *frame)
+{
+ uint64_t fp;
+
+ fp = frame->fp;
+
+ if (!INKERNEL(fp))
+ return (-1);
+
+ frame->sp = fp;
+ frame->fp = *(uint64_t *)(fp - 16);
+ frame->pc = *(uint64_t *)(fp - 8) - 4;
+
+ return (0);
+}
diff --git a/sys/sys/fdcio.h b/sys/sys/fdcio.h
index c4d39c2..341bbd0 100644
--- a/sys/sys/fdcio.h
+++ b/sys/sys/fdcio.h
@@ -209,6 +209,7 @@ enum fd_drivetype {
#define FDF_5_800 10,2,0xFF,0x10,80,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
#define FDF_5_720 9,2,0xFF,0x20,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
#define FDF_5_640 8,2,0xFF,0x2A,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
+#define FDF_5_400 10,2,0xFF,0x10,80,0,FDC_300KBPS,1,0x2e,1,0,FL_MFM /* RX50 */
#define FDF_5_360 9,2,0xFF,0x23,40,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
/* XXX: 0x2a ? */
#endif
diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h
index f033702..e574ec3 100644
--- a/sys/sys/signalvar.h
+++ b/sys/sys/signalvar.h
@@ -199,6 +199,7 @@ __sigseteq(sigset_t *set1, sigset_t *set2)
return (1);
}
+#ifdef COMPAT_FREEBSD6
struct osigevent {
int sigev_notify; /* Notification type */
union {
@@ -207,6 +208,7 @@ struct osigevent {
} __sigev_u;
union sigval sigev_value; /* Signal value */
};
+#endif
typedef struct ksiginfo {
TAILQ_ENTRY(ksiginfo) ksi_link;
diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h
index bc72345..ff2e219 100644
--- a/sys/sys/syscall.h
+++ b/sys/sys/syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
+ * created from FreeBSD: head/sys/kern/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#define SYS_syscall 0
@@ -260,9 +260,9 @@
#define SYS_aio_suspend 315
#define SYS_aio_cancel 316
#define SYS_aio_error 317
-#define SYS_oaio_read 318
-#define SYS_oaio_write 319
-#define SYS_olio_listio 320
+#define SYS_freebsd6_aio_read 318
+#define SYS_freebsd6_aio_write 319
+#define SYS_freebsd6_lio_listio 320
#define SYS_yield 321
/* 322 is obsolete thr_sleep */
/* 323 is obsolete thr_wakeup */
diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk
index fe2cb35..379dee5 100644
--- a/sys/sys/syscall.mk
+++ b/sys/sys/syscall.mk
@@ -1,7 +1,7 @@
# FreeBSD system call names.
# DO NOT EDIT-- this file is automatically generated.
# $FreeBSD$
-# created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
+# created from FreeBSD: head/sys/kern/syscalls.master 296572 2016-03-09 19:05:11Z jhb
MIASM = \
syscall.o \
exit.o \
@@ -211,9 +211,9 @@ MIASM = \
aio_suspend.o \
aio_cancel.o \
aio_error.o \
- oaio_read.o \
- oaio_write.o \
- olio_listio.o \
+ freebsd6_aio_read.o \
+ freebsd6_aio_write.o \
+ freebsd6_lio_listio.o \
yield.o \
mlockall.o \
munlockall.o \
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index 143f81d..e3151f6 100644
--- a/sys/sys/sysproto.h
+++ b/sys/sys/sysproto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
+ * created from FreeBSD: head/sys/kern/syscalls.master 296572 2016-03-09 19:05:11Z jhb
*/
#ifndef _SYS_SYSPROTO_H_
@@ -844,18 +844,6 @@ struct aio_cancel_args {
struct aio_error_args {
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
};
-struct oaio_read_args {
- char aiocbp_l_[PADL_(struct oaiocb *)]; struct oaiocb * aiocbp; char aiocbp_r_[PADR_(struct oaiocb *)];
-};
-struct oaio_write_args {
- char aiocbp_l_[PADL_(struct oaiocb *)]; struct oaiocb * aiocbp; char aiocbp_r_[PADR_(struct oaiocb *)];
-};
-struct olio_listio_args {
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
- char acb_list_l_[PADL_(struct oaiocb *const *)]; struct oaiocb *const * acb_list; char acb_list_r_[PADR_(struct oaiocb *const *)];
- char nent_l_[PADL_(int)]; int nent; char nent_r_[PADR_(int)];
- char sig_l_[PADL_(struct osigevent *)]; struct osigevent * sig; char sig_r_[PADR_(struct osigevent *)];
-};
struct yield_args {
register_t dummy;
};
@@ -1989,9 +1977,6 @@ int sys_aio_return(struct thread *, struct aio_return_args *);
int sys_aio_suspend(struct thread *, struct aio_suspend_args *);
int sys_aio_cancel(struct thread *, struct aio_cancel_args *);
int sys_aio_error(struct thread *, struct aio_error_args *);
-int sys_oaio_read(struct thread *, struct oaio_read_args *);
-int sys_oaio_write(struct thread *, struct oaio_write_args *);
-int sys_olio_listio(struct thread *, struct olio_listio_args *);
int sys_yield(struct thread *, struct yield_args *);
int sys_mlockall(struct thread *, struct mlockall_args *);
int sys_munlockall(struct thread *, struct munlockall_args *);
@@ -2465,12 +2450,27 @@ struct freebsd6_ftruncate_args {
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)];
};
+struct freebsd6_aio_read_args {
+ char aiocbp_l_[PADL_(struct oaiocb *)]; struct oaiocb * aiocbp; char aiocbp_r_[PADR_(struct oaiocb *)];
+};
+struct freebsd6_aio_write_args {
+ char aiocbp_l_[PADL_(struct oaiocb *)]; struct oaiocb * aiocbp; char aiocbp_r_[PADR_(struct oaiocb *)];
+};
+struct freebsd6_lio_listio_args {
+ char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char acb_list_l_[PADL_(struct oaiocb *const *)]; struct oaiocb *const * acb_list; char acb_list_r_[PADR_(struct oaiocb *const *)];
+ char nent_l_[PADL_(int)]; int nent; char nent_r_[PADR_(int)];
+ char sig_l_[PADL_(struct osigevent *)]; struct osigevent * sig; char sig_r_[PADR_(struct osigevent *)];
+};
int freebsd6_pread(struct thread *, struct freebsd6_pread_args *);
int freebsd6_pwrite(struct thread *, struct freebsd6_pwrite_args *);
int freebsd6_mmap(struct thread *, struct freebsd6_mmap_args *);
int freebsd6_lseek(struct thread *, struct freebsd6_lseek_args *);
int freebsd6_truncate(struct thread *, struct freebsd6_truncate_args *);
int freebsd6_ftruncate(struct thread *, struct freebsd6_ftruncate_args *);
+int freebsd6_aio_read(struct thread *, struct freebsd6_aio_read_args *);
+int freebsd6_aio_write(struct thread *, struct freebsd6_aio_write_args *);
+int freebsd6_lio_listio(struct thread *, struct freebsd6_lio_listio_args *);
#endif /* COMPAT_FREEBSD6 */
@@ -2741,9 +2741,9 @@ int freebsd7_shmctl(struct thread *, struct freebsd7_shmctl_args *);
#define SYS_AUE_aio_suspend AUE_NULL
#define SYS_AUE_aio_cancel AUE_NULL
#define SYS_AUE_aio_error AUE_NULL
-#define SYS_AUE_oaio_read AUE_NULL
-#define SYS_AUE_oaio_write AUE_NULL
-#define SYS_AUE_olio_listio AUE_NULL
+#define SYS_AUE_freebsd6_aio_read AUE_NULL
+#define SYS_AUE_freebsd6_aio_write AUE_NULL
+#define SYS_AUE_freebsd6_lio_listio AUE_NULL
#define SYS_AUE_yield AUE_NULL
#define SYS_AUE_mlockall AUE_MLOCKALL
#define SYS_AUE_munlockall AUE_MUNLOCKALL
diff --git a/sys/sys/unistd.h b/sys/sys/unistd.h
index d6d92ab..2429134 100644
--- a/sys/sys/unistd.h
+++ b/sys/sys/unistd.h
@@ -50,7 +50,7 @@
* returns -1, the functions may be stubbed out.
*/
#define _POSIX_ADVISORY_INFO 200112L
-#define _POSIX_ASYNCHRONOUS_IO 0
+#define _POSIX_ASYNCHRONOUS_IO 200112L
#define _POSIX_CHOWN_RESTRICTED 1
#define _POSIX_CLOCK_SELECTION (-1)
#define _POSIX_CPUTIME 200112L
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index c941fe8..f3ae773 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -422,7 +422,6 @@ extern int vttoif_tab[];
*/
extern struct vnode *rootvnode; /* root (i.e. "/") vnode */
extern struct mount *rootdevmp; /* "/dev" mount */
-extern int async_io_version; /* 0 or POSIX version of AIO i'face */
extern int desiredvnodes; /* number of vnodes desired */
extern struct uma_zone *namei_zone;
extern struct vattr va_null; /* predefined null vattr structure */
diff --git a/targets/pseudo/clang/Makefile.depend b/targets/pseudo/clang/Makefile.depend
index 20a379f..10ee921 100644
--- a/targets/pseudo/clang/Makefile.depend
+++ b/targets/pseudo/clang/Makefile.depend
@@ -11,7 +11,7 @@ DIRDEPS = \
share/doc/llvm/clang \
usr.bin/clang/clang \
usr.bin/clang/clang-tblgen \
- usr.bin/clang/tblgen \
+ usr.bin/clang/llvm-tblgen \
.if ${MK_LLDB} == "yes"
DIRDEPS+= \
@@ -41,7 +41,6 @@ DIRDEPS+= \
usr.bin/clang/llvm-profdata \
usr.bin/clang/llvm-rtdyld \
usr.bin/clang/llvm-symbolizer \
- usr.bin/clang/macho-dump \
usr.bin/clang/opt \
.endif
diff --git a/targets/pseudo/hosttools/Makefile.depend b/targets/pseudo/hosttools/Makefile.depend
index e8dd16c..d39e91e 100644
--- a/targets/pseudo/hosttools/Makefile.depend
+++ b/targets/pseudo/hosttools/Makefile.depend
@@ -13,7 +13,7 @@ DIRDEPS = \
share/doc/llvm/clang.host \
usr.bin/clang/clang-tblgen.host \
usr.bin/clang/clang.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
usr.bin/lex/lib.host \
usr.bin/localedef.host \
usr.bin/mkcsmapper_static.host \
diff --git a/targets/pseudo/tests/Makefile b/targets/pseudo/tests/Makefile
new file mode 100644
index 0000000..265f86d
--- /dev/null
+++ b/targets/pseudo/tests/Makefile
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+.include "../Makefile.inc"
diff --git a/targets/pseudo/tests/Makefile.depend b/targets/pseudo/tests/Makefile.depend
new file mode 100644
index 0000000..0417dda
--- /dev/null
+++ b/targets/pseudo/tests/Makefile.depend
@@ -0,0 +1,337 @@
+# $FreeBSD$
+
+# This file is not autogenerated - take care!
+
+.include <src.opts.mk>
+
+# find . -name Makefile -exec grep -l '^\.include.*\.test.mk' {} + | grep -v '^\./contrib' | sed -e 's,/Makefile,,' -e 's,^\./,,' -e 's,^, ,' -e 's,$, \\,' | sort
+DIRDEPS= \
+ bin/cat/tests \
+ bin/date/tests \
+ bin/dd/tests \
+ bin/expr/tests \
+ bin/ls/tests \
+ bin/mv/tests \
+ bin/pax/tests \
+ bin/pkill/tests \
+ bin/sh/tests \
+ bin/sh/tests/builtins \
+ bin/sh/tests/errors \
+ bin/sh/tests/execution \
+ bin/sh/tests/expansion \
+ bin/sh/tests/parameters \
+ bin/sh/tests/parser \
+ bin/sh/tests/set-e \
+ bin/sleep/tests \
+ bin/test/tests \
+ bin/tests \
+ cddl/lib/tests \
+ cddl/sbin/tests \
+ cddl/tests \
+ cddl/usr.bin/tests \
+ cddl/usr.sbin/dtrace/tests \
+ cddl/usr.sbin/dtrace/tests/common \
+ cddl/usr.sbin/dtrace/tests/common/aggs \
+ cddl/usr.sbin/dtrace/tests/common/arithmetic \
+ cddl/usr.sbin/dtrace/tests/common/arrays \
+ cddl/usr.sbin/dtrace/tests/common/assocs \
+ cddl/usr.sbin/dtrace/tests/common/begin \
+ cddl/usr.sbin/dtrace/tests/common/bitfields \
+ cddl/usr.sbin/dtrace/tests/common/buffering \
+ cddl/usr.sbin/dtrace/tests/common/builtinvar \
+ cddl/usr.sbin/dtrace/tests/common/cg \
+ cddl/usr.sbin/dtrace/tests/common/clauses \
+ cddl/usr.sbin/dtrace/tests/common/cpc \
+ cddl/usr.sbin/dtrace/tests/common/decls \
+ cddl/usr.sbin/dtrace/tests/common/docsExamples \
+ cddl/usr.sbin/dtrace/tests/common/drops \
+ cddl/usr.sbin/dtrace/tests/common/dtraceUtil \
+ cddl/usr.sbin/dtrace/tests/common/end \
+ cddl/usr.sbin/dtrace/tests/common/enum \
+ cddl/usr.sbin/dtrace/tests/common/error \
+ cddl/usr.sbin/dtrace/tests/common/exit \
+ cddl/usr.sbin/dtrace/tests/common/fbtprovider \
+ cddl/usr.sbin/dtrace/tests/common/funcs \
+ cddl/usr.sbin/dtrace/tests/common/grammar \
+ cddl/usr.sbin/dtrace/tests/common/include \
+ cddl/usr.sbin/dtrace/tests/common/inline \
+ cddl/usr.sbin/dtrace/tests/common/io \
+ cddl/usr.sbin/dtrace/tests/common/ip \
+ cddl/usr.sbin/dtrace/tests/common/java_api \
+ cddl/usr.sbin/dtrace/tests/common/json \
+ cddl/usr.sbin/dtrace/tests/common/lexer \
+ cddl/usr.sbin/dtrace/tests/common/llquantize \
+ cddl/usr.sbin/dtrace/tests/common/mdb \
+ cddl/usr.sbin/dtrace/tests/common/mib \
+ cddl/usr.sbin/dtrace/tests/common/misc \
+ cddl/usr.sbin/dtrace/tests/common/multiaggs \
+ cddl/usr.sbin/dtrace/tests/common/nfs \
+ cddl/usr.sbin/dtrace/tests/common/offsetof \
+ cddl/usr.sbin/dtrace/tests/common/operators \
+ cddl/usr.sbin/dtrace/tests/common/pid \
+ cddl/usr.sbin/dtrace/tests/common/plockstat \
+ cddl/usr.sbin/dtrace/tests/common/pointers \
+ cddl/usr.sbin/dtrace/tests/common/pragma \
+ cddl/usr.sbin/dtrace/tests/common/predicates \
+ cddl/usr.sbin/dtrace/tests/common/preprocessor \
+ cddl/usr.sbin/dtrace/tests/common/print \
+ cddl/usr.sbin/dtrace/tests/common/printa \
+ cddl/usr.sbin/dtrace/tests/common/printf \
+ cddl/usr.sbin/dtrace/tests/common/privs \
+ cddl/usr.sbin/dtrace/tests/common/probes \
+ cddl/usr.sbin/dtrace/tests/common/proc \
+ cddl/usr.sbin/dtrace/tests/common/profile-n \
+ cddl/usr.sbin/dtrace/tests/common/providers \
+ cddl/usr.sbin/dtrace/tests/common/raise \
+ cddl/usr.sbin/dtrace/tests/common/rates \
+ cddl/usr.sbin/dtrace/tests/common/safety \
+ cddl/usr.sbin/dtrace/tests/common/scalars \
+ cddl/usr.sbin/dtrace/tests/common/sched \
+ cddl/usr.sbin/dtrace/tests/common/scripting \
+ cddl/usr.sbin/dtrace/tests/common/sdt \
+ cddl/usr.sbin/dtrace/tests/common/sizeof \
+ cddl/usr.sbin/dtrace/tests/common/speculation \
+ cddl/usr.sbin/dtrace/tests/common/stability \
+ cddl/usr.sbin/dtrace/tests/common/stack \
+ cddl/usr.sbin/dtrace/tests/common/stackdepth \
+ cddl/usr.sbin/dtrace/tests/common/stop \
+ cddl/usr.sbin/dtrace/tests/common/strlen \
+ cddl/usr.sbin/dtrace/tests/common/strtoll \
+ cddl/usr.sbin/dtrace/tests/common/struct \
+ cddl/usr.sbin/dtrace/tests/common/syscall \
+ cddl/usr.sbin/dtrace/tests/common/sysevent \
+ cddl/usr.sbin/dtrace/tests/common/tick-n \
+ cddl/usr.sbin/dtrace/tests/common/trace \
+ cddl/usr.sbin/dtrace/tests/common/tracemem \
+ cddl/usr.sbin/dtrace/tests/common/translators \
+ cddl/usr.sbin/dtrace/tests/common/typedef \
+ cddl/usr.sbin/dtrace/tests/common/types \
+ cddl/usr.sbin/dtrace/tests/common/uctf \
+ cddl/usr.sbin/dtrace/tests/common/union \
+ cddl/usr.sbin/dtrace/tests/common/usdt \
+ cddl/usr.sbin/dtrace/tests/common/ustack \
+ cddl/usr.sbin/dtrace/tests/common/vars \
+ cddl/usr.sbin/dtrace/tests/common/version \
+ cddl/usr.sbin/tests \
+ gnu/lib/tests \
+ gnu/tests \
+ gnu/usr.bin/diff/tests \
+ gnu/usr.bin/tests \
+ lib/atf/libatf-c++/tests \
+ lib/atf/libatf-c++/tests/detail \
+ lib/atf/libatf-c/tests \
+ lib/atf/libatf-c/tests/detail \
+ lib/atf/tests \
+ lib/atf/tests/test-programs \
+ lib/libarchive/tests \
+ lib/libc/tests \
+ lib/libc/tests/c063 \
+ lib/libc/tests/db \
+ lib/libc/tests/gen \
+ lib/libc/tests/gen/execve \
+ lib/libc/tests/gen/posix_spawn \
+ lib/libc/tests/hash \
+ lib/libc/tests/inet \
+ lib/libc/tests/locale \
+ lib/libc/tests/net \
+ lib/libc/tests/net/getaddrinfo \
+ lib/libc/tests/nss \
+ lib/libc/tests/regex \
+ lib/libc/tests/resolv \
+ lib/libc/tests/rpc \
+ lib/libc/tests/setjmp \
+ lib/libc/tests/ssp \
+ lib/libc/tests/stdio \
+ lib/libc/tests/stdlib \
+ lib/libc/tests/string \
+ lib/libc/tests/sys \
+ lib/libc/tests/termios \
+ lib/libc/tests/time \
+ lib/libc/tests/tls \
+ lib/libc/tests/ttyio \
+ lib/libcrypt/tests \
+ lib/libmp/tests \
+ lib/libnv/tests \
+ lib/libpam/libpam/tests \
+ lib/libproc/tests \
+ lib/librt/tests \
+ lib/libthr/tests \
+ lib/libthr/tests/dlopen \
+ lib/libthr/tests/dlopen/dso \
+ lib/libutil/tests \
+ lib/libxo/tests \
+ lib/msun/tests \
+ lib/tests \
+ libexec/atf/atf-check/tests \
+ libexec/atf/atf-sh/tests \
+ libexec/atf/tests \
+ libexec/rtld-elf/tests \
+ libexec/tests \
+ sbin/devd/tests \
+ sbin/dhclient/tests \
+ sbin/growfs/tests \
+ sbin/ifconfig/tests \
+ sbin/mdconfig/tests \
+ sbin/tests \
+ secure/lib/tests \
+ secure/libexec/tests \
+ secure/tests \
+ secure/usr.bin/tests \
+ secure/usr.sbin/tests \
+ share/examples/tests \
+ share/examples/tests/tests \
+ share/examples/tests/tests/atf \
+ share/examples/tests/tests/plain \
+ share/tests \
+ tests \
+ tests/etc \
+ tests/etc/rc.d \
+ tests/sys \
+ tests/sys/acl \
+ tests/sys/aio \
+ tests/sys/fifo \
+ tests/sys/file \
+ tests/sys/geom \
+ tests/sys/geom/class \
+ tests/sys/geom/class/concat \
+ tests/sys/geom/class/eli \
+ tests/sys/geom/class/gate \
+ tests/sys/geom/class/mirror \
+ tests/sys/geom/class/nop \
+ tests/sys/geom/class/raid3 \
+ tests/sys/geom/class/shsec \
+ tests/sys/geom/class/stripe \
+ tests/sys/geom/class/uzip \
+ tests/sys/kern \
+ tests/sys/kern/acct \
+ tests/sys/kern/execve \
+ tests/sys/kern/pipe \
+ tests/sys/kqueue \
+ tests/sys/mac \
+ tests/sys/mac/bsdextended \
+ tests/sys/mac/portacl \
+ tests/sys/mqueue \
+ tests/sys/netinet \
+ tests/sys/opencrypto \
+ tests/sys/pjdfstest/tests \
+ tests/sys/pjdfstest/tests/chflags \
+ tests/sys/pjdfstest/tests/chmod \
+ tests/sys/pjdfstest/tests/chown \
+ tests/sys/pjdfstest/tests/ftruncate \
+ tests/sys/pjdfstest/tests/granular \
+ tests/sys/pjdfstest/tests/link \
+ tests/sys/pjdfstest/tests/mkdir \
+ tests/sys/pjdfstest/tests/mkfifo \
+ tests/sys/pjdfstest/tests/mknod \
+ tests/sys/pjdfstest/tests/open \
+ tests/sys/pjdfstest/tests/rename \
+ tests/sys/pjdfstest/tests/rmdir \
+ tests/sys/pjdfstest/tests/symlink \
+ tests/sys/pjdfstest/tests/truncate \
+ tests/sys/pjdfstest/tests/unlink \
+ tests/sys/posixshm \
+ tests/sys/vfs \
+ tests/sys/vm \
+ usr.bin/apply/tests \
+ usr.bin/basename/tests \
+ usr.bin/bmake/tests \
+ usr.bin/bmake/tests/archives \
+ usr.bin/bmake/tests/archives/fmt_44bsd \
+ usr.bin/bmake/tests/archives/fmt_44bsd_mod \
+ usr.bin/bmake/tests/archives/fmt_oldbsd \
+ usr.bin/bmake/tests/basic \
+ usr.bin/bmake/tests/basic/t0 \
+ usr.bin/bmake/tests/basic/t1 \
+ usr.bin/bmake/tests/basic/t2 \
+ usr.bin/bmake/tests/basic/t3 \
+ usr.bin/bmake/tests/execution \
+ usr.bin/bmake/tests/execution/ellipsis \
+ usr.bin/bmake/tests/execution/empty \
+ usr.bin/bmake/tests/execution/joberr \
+ usr.bin/bmake/tests/execution/plus \
+ usr.bin/bmake/tests/shell \
+ usr.bin/bmake/tests/shell/builtin \
+ usr.bin/bmake/tests/shell/meta \
+ usr.bin/bmake/tests/shell/path \
+ usr.bin/bmake/tests/shell/path_select \
+ usr.bin/bmake/tests/shell/replace \
+ usr.bin/bmake/tests/shell/select \
+ usr.bin/bmake/tests/suffixes \
+ usr.bin/bmake/tests/suffixes/basic \
+ usr.bin/bmake/tests/suffixes/src_wild1 \
+ usr.bin/bmake/tests/suffixes/src_wild2 \
+ usr.bin/bmake/tests/syntax \
+ usr.bin/bmake/tests/syntax/directive-t0 \
+ usr.bin/bmake/tests/syntax/enl \
+ usr.bin/bmake/tests/syntax/funny-targets \
+ usr.bin/bmake/tests/syntax/semi \
+ usr.bin/bmake/tests/sysmk \
+ usr.bin/bmake/tests/sysmk/t0 \
+ usr.bin/bmake/tests/sysmk/t0/2 \
+ usr.bin/bmake/tests/sysmk/t0/2/1 \
+ usr.bin/bmake/tests/sysmk/t0/mk \
+ usr.bin/bmake/tests/sysmk/t1 \
+ usr.bin/bmake/tests/sysmk/t1/2 \
+ usr.bin/bmake/tests/sysmk/t1/2/1 \
+ usr.bin/bmake/tests/sysmk/t1/mk \
+ usr.bin/bmake/tests/sysmk/t2 \
+ usr.bin/bmake/tests/sysmk/t2/2 \
+ usr.bin/bmake/tests/sysmk/t2/2/1 \
+ usr.bin/bmake/tests/sysmk/t2/mk \
+ usr.bin/bmake/tests/variables \
+ usr.bin/bmake/tests/variables/modifier_M \
+ usr.bin/bmake/tests/variables/modifier_t \
+ usr.bin/bmake/tests/variables/opt_V \
+ usr.bin/bmake/tests/variables/t0 \
+ usr.bin/calendar/tests \
+ usr.bin/cmp/tests \
+ usr.bin/col/tests \
+ usr.bin/comm/tests \
+ usr.bin/cpio/tests \
+ usr.bin/cut/tests \
+ usr.bin/dirname/tests \
+ usr.bin/file2c/tests \
+ usr.bin/grep/tests \
+ usr.bin/gzip/tests \
+ usr.bin/ident/tests \
+ usr.bin/join/tests \
+ usr.bin/jot/tests \
+ usr.bin/lastcomm/tests \
+ usr.bin/limits/tests \
+ usr.bin/m4/tests \
+ usr.bin/mkimg/tests \
+ usr.bin/ncal/tests \
+ usr.bin/printf/tests \
+ usr.bin/sed/tests \
+ usr.bin/sed/tests/regress.multitest.out \
+ usr.bin/soelim/tests \
+ usr.bin/tar/tests \
+ usr.bin/tests \
+ usr.bin/timeout/tests \
+ usr.bin/tr/tests \
+ usr.bin/truncate/tests \
+ usr.bin/units/tests \
+ usr.bin/uudecode/tests \
+ usr.bin/uuencode/tests \
+ usr.bin/xargs/tests \
+ usr.bin/xo/tests \
+ usr.bin/yacc/tests \
+ usr.sbin/chown/tests \
+ usr.sbin/etcupdate/tests \
+ usr.sbin/fstyp/tests \
+ usr.sbin/makefs/tests \
+ usr.sbin/newsyslog/tests \
+ usr.sbin/nmtree/tests \
+ usr.sbin/pw/tests \
+ usr.sbin/rpcbind/tests \
+ usr.sbin/sa/tests \
+ usr.sbin/tests \
+
+
+# Remove some known to be broken
+DIRDEPS:= ${DIRDEPS:Ncddl/usr.sbin/dtrace/tests/common/nfs}
+DIRDEPS:= ${DIRDEPS:Ncddl/usr.sbin/dtrace/tests/common/sysevent}
+DIRDEPS:= ${DIRDEPS:Ncddl/usr.sbin/dtrace/tests/common/docsExamples}
+DIRDEPS:= ${DIRDEPS:Nlib/libc/tests/net/getaddrinfo}
+
+.include <dirdeps.mk>
diff --git a/targets/pseudo/the-lot/Makefile.depend b/targets/pseudo/the-lot/Makefile.depend
index 3e10558..9909bfa 100644
--- a/targets/pseudo/the-lot/Makefile.depend
+++ b/targets/pseudo/the-lot/Makefile.depend
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <src.opts.mk>
+
# This file is not autogenerated - take care!
DIRDEPS = \
@@ -7,4 +9,8 @@ DIRDEPS = \
targets/pseudo/toolchain \
targets/pseudo/userland \
+.if ${MK_TESTS} != "no"
+DIRDEPS+= targes/pseudo/tests
+.endif
+
.include <dirdeps.mk>
diff --git a/tests/Makefile.depend b/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/etc/Makefile.depend b/tests/etc/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/etc/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/etc/rc.d/Makefile.depend b/tests/etc/rc.d/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/etc/rc.d/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/Makefile.depend b/tests/sys/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/acl/Makefile.depend b/tests/sys/acl/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/acl/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/aio/Makefile.depend b/tests/sys/aio/Makefile.depend
new file mode 100644
index 0000000..5915a38
--- /dev/null
+++ b/tests/sys/aio/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/fifo/Makefile.depend b/tests/sys/fifo/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/tests/sys/fifo/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/file/Makefile.depend b/tests/sys/file/Makefile.depend
new file mode 100644
index 0000000..1c2cb19
--- /dev/null
+++ b/tests/sys/file/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libthr \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/Makefile.depend b/tests/sys/geom/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/Makefile.depend b/tests/sys/geom/class/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/concat/Makefile.depend b/tests/sys/geom/class/concat/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/concat/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/eli/Makefile.depend b/tests/sys/geom/class/eli/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/eli/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/gate/Makefile.depend b/tests/sys/geom/class/gate/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/gate/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/mirror/Makefile.depend b/tests/sys/geom/class/mirror/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/mirror/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/nop/Makefile.depend b/tests/sys/geom/class/nop/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/nop/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/raid3/Makefile.depend b/tests/sys/geom/class/raid3/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/raid3/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/shsec/Makefile.depend b/tests/sys/geom/class/shsec/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/shsec/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/stripe/Makefile.depend b/tests/sys/geom/class/stripe/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/stripe/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/geom/class/uzip/Makefile.depend b/tests/sys/geom/class/uzip/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/geom/class/uzip/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kern/Makefile.depend b/tests/sys/kern/Makefile.depend
new file mode 100644
index 0000000..e2d637c
--- /dev/null
+++ b/tests/sys/kern/Makefile.depend
@@ -0,0 +1,22 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnetbsd \
+ lib/librt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kern/acct/Makefile.depend b/tests/sys/kern/acct/Makefile.depend
new file mode 100644
index 0000000..1e94e70
--- /dev/null
+++ b/tests/sys/kern/acct/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/msun \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kern/execve/Makefile.depend b/tests/sys/kern/execve/Makefile.depend
new file mode 100644
index 0000000..9cb890b
--- /dev/null
+++ b/tests/sys/kern/execve/Makefile.depend
@@ -0,0 +1,17 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kern/pipe/Makefile.depend b/tests/sys/kern/pipe/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/tests/sys/kern/pipe/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kqueue/Makefile.depend b/tests/sys/kqueue/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/tests/sys/kqueue/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/mac/Makefile.depend b/tests/sys/mac/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/mac/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/mac/bsdextended/Makefile.depend b/tests/sys/mac/bsdextended/Makefile.depend
new file mode 100644
index 0000000..24a1de9
--- /dev/null
+++ b/tests/sys/mac/bsdextended/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libugidfw \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/mac/portacl/Makefile.depend b/tests/sys/mac/portacl/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/mac/portacl/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/mqueue/Makefile.depend b/tests/sys/mqueue/Makefile.depend
new file mode 100644
index 0000000..24e69ea
--- /dev/null
+++ b/tests/sys/mqueue/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/librt \
+ lib/libthr \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/netinet/Makefile.depend b/tests/sys/netinet/Makefile.depend
new file mode 100644
index 0000000..54c1f6f
--- /dev/null
+++ b/tests/sys/netinet/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/opencrypto/Makefile.depend b/tests/sys/opencrypto/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/opencrypto/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/Makefile.depend b/tests/sys/pjdfstest/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/chflags/Makefile.depend b/tests/sys/pjdfstest/tests/chflags/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/chflags/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/chmod/Makefile.depend b/tests/sys/pjdfstest/tests/chmod/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/chmod/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/chown/Makefile.depend b/tests/sys/pjdfstest/tests/chown/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/chown/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/ftruncate/Makefile.depend b/tests/sys/pjdfstest/tests/ftruncate/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/ftruncate/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/granular/Makefile.depend b/tests/sys/pjdfstest/tests/granular/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/granular/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/link/Makefile.depend b/tests/sys/pjdfstest/tests/link/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/link/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/mkdir/Makefile.depend b/tests/sys/pjdfstest/tests/mkdir/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/mkdir/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/mkfifo/Makefile.depend b/tests/sys/pjdfstest/tests/mkfifo/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/mkfifo/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/mknod/Makefile.depend b/tests/sys/pjdfstest/tests/mknod/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/mknod/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/open/Makefile.depend b/tests/sys/pjdfstest/tests/open/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/open/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/rename/Makefile.depend b/tests/sys/pjdfstest/tests/rename/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/rename/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/rmdir/Makefile.depend b/tests/sys/pjdfstest/tests/rmdir/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/rmdir/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/symlink/Makefile.depend b/tests/sys/pjdfstest/tests/symlink/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/symlink/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/truncate/Makefile.depend b/tests/sys/pjdfstest/tests/truncate/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/truncate/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/pjdfstest/tests/unlink/Makefile.depend b/tests/sys/pjdfstest/tests/unlink/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/pjdfstest/tests/unlink/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/posixshm/Makefile.depend b/tests/sys/posixshm/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/tests/sys/posixshm/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/vfs/Makefile.depend b/tests/sys/vfs/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/tests/sys/vfs/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/vm/Makefile.depend b/tests/sys/vm/Makefile.depend
new file mode 100644
index 0000000..74074b9
--- /dev/null
+++ b/tests/sys/vm/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/regression/filemon/Makefile b/tools/regression/filemon/Makefile
deleted file mode 100644
index 3911d33..0000000
--- a/tools/regression/filemon/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-# $FreeBSD$
-
-.if ${MACHINE_ARCH} == "amd64"
-BI_BITS=
-.endif
-
-_BINS= \
- filemontest \
- timed-forkb \
- sizeof_long
-
-BINS= ${_BINS}
-.if defined(BI_BITS)
-BINS+= ${_BINS:C/$/32/g}
-.endif
-
-bins: ${BINS}
-all: bins
-
-MAN=
-
-WARNS?= 6
-CFLAGS+= -I${.CURDIR}/../../../sys
-
-# We don't want to genreate CTF files. Force that here.
-MK_CTF=no
-
-CLEANFILES+= ${BINS}
-
-
-.for f32 in ${BINS}
-${f32}32: ${f32}.c
- ${CC} -m32 -DBIT=\"32\" -o ${.TARGET} ${CFLAGS} ${.ALLSRC}
-.endfor
-
-tests:
- kldstat | grep filemon
- @echo ""
- ${MAKE} test01
- ${MAKE} test02
-.if defined(BI_BITS)
- ${MAKE} test32
-.endif
- @echo "filemon(4) tests passed."
-
-# Cannot use .OBJDIR -- 'filemontest' expects 'test_script.sh' in .
-test01: ${BINS:Mfilemontest*} ${BINS:Msizeof_long*} clean-test
-.for BIN in ${BINS:Mfilemontest}
- cd ${.CURDIR} ; \
- for A in 1 2 3 4 5 6 7 8 9 0; do \
- for B in 1 2 3 4 5 6 7 8 9 0; do \
- for C in 1 2 3 4 5 6 7 8 9 0; do \
- test -x ${BIN} && ${.OBJDIR}/${BIN} ;\
- done ;\
- done ;\
- done
- @cd ${.CURDIR} ; set +e ; egrep '(Start|Stop) .*\.' filemon_log.* | \
- grep -q -v '\.[0-9][0-9][0-9][0-9][0-9][0-9]$$' || printf "Time stamp format OK\n\n"
-.endfor
- @cd ${.CURDIR} ; set +e ; for F in filemon_log.* ; do \
- tail -1 $$F | grep -q '# Bye bye' || echo "$$F missing filemon bye-bye" ; \
- NL=`wc -l $$F | awk '{print $$1}'` ; \
- if [ "$${NL}" != 97 ]; then echo "$$F BAD, contains $${NL} lines" ; exit 1 ; fi ; done
-
-test02: ${BINS:Mtimed-forkb*}
- @echo "Without filemon(4) active:"
- ./timed-forkb
- @echo "With filemon(4) active:"
- script -f typescript-timed-forkb ./timed-forkb
- ls -l typescript-timed-forkb.filemon
-
-test32: ${BINS:M*32*}
- script -f typescript.${.TARGET} ./sizeof_long32 >/dev/null
- @tail -1 typescript.test32.filemon | grep -q '# Bye bye' || (echo '32-bit comapt filemon Missing "bye-bye"' ; exit 1)
- @egrep -q '^X [0-9]+ 0$$' typescript.test32.filemon || (echo "32-bit binary exit ERROR" ; exit 1)
- @printf "filemon(4) 32bit FreeBSD support passed.\n\n"
-
-CLEANFILES+= typescript-timed-forkb typescript-timed-forkb.filemon
-
-clean-test:
- cd ${.CURDIR} ; rm -f filemon_log*.*
-
-clean-tests: clean-test
-
-.include <bsd.prog.mk>
diff --git a/tools/regression/filemon/filemontest.c b/tools/regression/filemon/filemontest.c
deleted file mode 100644
index 03b53e2..0000000
--- a/tools/regression/filemon/filemontest.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*-
- * Copyright (c) 2009-2011, Juniper Networks, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JUNIPER NETWORKS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL JUNIPER NETWORKS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/wait.h>
-#include <sys/ioctl.h>
-
-#include <dev/filemon/filemon.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <err.h>
-
-/*
- * This simple test of filemon expects a test script called
- * "test_script.sh" in the cwd.
- */
-
-#ifndef BIT
-#define BIT ""
-#endif
-
-int
-main(void) {
- char log_name[] = "filemon_log" BIT ".XXXXXX";
- pid_t child;
- int fm_fd, fm_log;
-
- if ((fm_fd = open("/dev/filemon", O_RDWR)) == -1)
- err(1, "open(\"/dev/filemon\", O_RDWR)");
- if ((fm_log = mkstemp(log_name)) == -1)
- err(1, "mkstemp(%s)", log_name);
-
- if (ioctl(fm_fd, FILEMON_SET_FD, &fm_log) == -1)
- err(1, "Cannot set filemon log file descriptor");
-
- /* Set up these two fd's to close on exec. */
- (void)fcntl(fm_fd, F_SETFD, FD_CLOEXEC);
- (void)fcntl(fm_log, F_SETFD, FD_CLOEXEC);
-
- switch (child = fork()) {
- case 0:
- child = getpid();
- if (ioctl(fm_fd, FILEMON_SET_PID, &child) == -1)
- err(1, "Cannot set filemon PID to %d", child);
- system("env BIT=" BIT " ./test_script.sh");
- break;
- case -1:
- err(1, "Cannot fork");
- default:
- wait(&child);
- close(fm_fd);
-// printf("Results in %s\n", log_name);
- break;
- }
- return 0;
-}
diff --git a/tools/regression/filemon/test_script.sh b/tools/regression/filemon/test_script.sh
deleted file mode 100755
index b69c238..0000000
--- a/tools/regression/filemon/test_script.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /bin/sh
-#
-# Copyright (c) 2011, Juniper Networks, Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY JUNIPER NETWORKS AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL JUNIPER NETWORKS OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-# $FreeBSD$
-
-trap 'rm -f $f1 $f2; exit 1' 1 2 3 13 15
-echo shazbot > /dev/null
-f1=`mktemp /tmp/filemon_test.XXXXXX`
-f2=`mktemp /tmp/ed-script.XXXXXX`
-> $f1
-echo "One line to rule them all" >> $f1
-wc -l $f1 > /dev/null
-# ed(1)'s /tmp/ed.* buffer file will be opened RW
-echo ',s/$/./g' > $f2
-echo 'wq' >>$f2
-ed -s $f1 < $f2
-#echo ",s/$/./\
-#w" | ed -s $f1
-#rm $f1 $f2
-uptime > /dev/null
-sizeof_long${BIT} > /dev/null
diff --git a/tools/regression/filemon/timed-forkb.c b/tools/regression/filemon/timed-forkb.c
deleted file mode 100644
index b7a0221..0000000
--- a/tools/regression/filemon/timed-forkb.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*-
- * Copyright (c) 2012 David O'Brien
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#include <sys/types.h>
-#include <sys/resource.h>
-#include <sys/sysctl.h>
-#include <sys/wait.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <err.h>
-#include <assert.h>
-
-#ifndef SLEEP
-#define SLEEP 20 /* seconds */
-#endif
-
-static int verbose;
-
-static void
-usage(void)
-{
- fprintf(stderr, "usage: %s\n", getprogname());
- fprintf(stderr, "\t\t-n : length of fork(2) chain\n");
- fprintf(stderr, "\t\t-t : limit run-time seconds\n");
- exit(1);
- /* NOTREACHED */
-}
-
-void term(int);
-void
-term(int signum)
-{
-
- if (getpid() == getpgrp() || verbose) {
- fprintf(stderr,
- "pid %d pgroup %d (ppid %d): Received SIGTERM(%d), exiting...\n",
- getpid(), getpgrp(), getppid(), signum);
- }
- exit(1);
-}
-
-void angel_of_mercy(int);
-void
-angel_of_mercy(int sig __unused)
-{
-
- signal(SIGALRM, SIG_IGN); /* ignore this signal */
- printf("Master process: alarmed waking up\n");
- killpg(0, SIGTERM);
- return;
-}
-
-int bombing_run(unsigned, int);
-int
-bombing_run(unsigned chainlen, int stime)
-{
- struct rusage ru;
- pid_t pid, cpid;
- int status;
-
- if (chainlen) {
- switch (pid = fork()) {
- case -1:
- errx(1, "%s: can't fork", __func__);
-
- case 0:
- /* This is the code the child runs. */
- bombing_run(--chainlen, stime);
- break;
-
- default:
- /* This is the code the parent runs. */
- if (getpid() == getpgrp()) {
- signal(SIGALRM, angel_of_mercy);
- alarm(stime); // time for bombing run...
- cpid = wait4(pid, &status, 0, &ru);
- alarm(0);
- printf(
- "Cleanly shutting down - pid %d pgroup %d (ppid %d)\n",
- getpid(), getpgrp(), getppid());
- } else {
- cpid = wait4(pid, &status, 0, &ru);
- }
- }
- }
-
- return 0;
-}
-
-int
-main(int argc, char *argv[])
-{
- time_t start /*,tvec*/;
- char *endptr, *ctm;
- size_t len;
- int nflag, tflag;
- int ch, k, maxprocperuid;
-
- (void)signal(SIGTERM, term);
-
- nflag = 0;
- tflag = SLEEP;
-
- start = time(NULL);
- ctm = ctime(&start);
- ctm[24] = '\0'; // see: man 3 ctime
- fprintf(stderr, "*** fork() generation started on \"%s\" ***\n", ctm);
-
- while ((ch = getopt(argc, argv, "n:t:v")) != -1)
- switch (ch) {
- case 'n':
- nflag = strtol(optarg, &endptr, 10);
- if (nflag <= 0 || *endptr != '\0')
- errx(1, "illegal number, -n argument -- %s",
- optarg);
- break;
- case 't':
- tflag = strtol(optarg, &endptr, 10);
- if (tflag <= 0 || *endptr != '\0')
- errx(1, "illegal number, -t argument -- %s",
- optarg);
- break;
- case 'v':
- ++verbose;
- break;
- default:
- usage();
- }
- argv += optind;
-
- if (!nflag) {
- len = sizeof(maxprocperuid);
- k = sysctlbyname("kern.maxprocperuid", &maxprocperuid, &len,
- NULL, 0);
- assert(k != ENOMEM);
- /* Try to allow a shell to still be started. */
- nflag = maxprocperuid - 10;
- }
-
- // Ensure a unique process group to make killing all children easier.
- setpgrp(0,0);
- printf(" pid %d pgroup %d (ppid %d), %d fork chain over %d sec\n",
- getpid(), getpgrp(), getppid(), nflag - 1, tflag);
-
- return bombing_run(nflag, tflag);
-}
diff --git a/tools/tools/cxgbetool/cxgbetool.c b/tools/tools/cxgbetool/cxgbetool.c
index d634af2..4f78802 100644
--- a/tools/tools/cxgbetool/cxgbetool.c
+++ b/tools/tools/cxgbetool/cxgbetool.c
@@ -79,8 +79,9 @@ struct field_desc {
};
#include "reg_defs_t4.c"
-#include "reg_defs_t4vf.c"
#include "reg_defs_t5.c"
+#include "reg_defs_t6.c"
+#include "reg_defs_t4vf.c"
static void
usage(FILE *fp)
@@ -350,20 +351,6 @@ dump_regs_t4(int argc, const char *argv[], const uint32_t *regs)
}
#undef T4_MODREGS
-static int
-dump_regs_t4vf(int argc, const char *argv[], const uint32_t *regs)
-{
- static struct mod_regs t4vf_mod[] = {
- { "sge", t4vf_sge_regs },
- { "mps", t4vf_mps_regs },
- { "pl", t4vf_pl_regs },
- { "mbdata", t4vf_mbdata_regs },
- { "cim", t4vf_cim_regs },
- };
-
- return dump_regs_table(argc, argv, regs, t4vf_mod, nitems(t4vf_mod));
-}
-
#define T5_MODREGS(name) { #name, t5_##name##_regs }
static int
dump_regs_t5(int argc, const char *argv[], const uint32_t *regs)
@@ -402,6 +389,85 @@ dump_regs_t5(int argc, const char *argv[], const uint32_t *regs)
}
#undef T5_MODREGS
+#define T6_MODREGS(name) { #name, t6_##name##_regs }
+static int
+dump_regs_t6(int argc, const char *argv[], const uint32_t *regs)
+{
+ static struct mod_regs t6_mod[] = {
+ T6_MODREGS(sge),
+ { "pci", t6_pcie_regs },
+ T6_MODREGS(dbg),
+ { "mc0", t6_mc_0_regs },
+ T6_MODREGS(ma),
+ { "edc0", t6_edc_t60_regs },
+ { "edc1", t6_edc_t61_regs },
+ T6_MODREGS(cim),
+ T6_MODREGS(tp),
+ { "ulprx", t6_ulp_rx_regs },
+ { "ulptx", t6_ulp_tx_regs },
+ { "pmrx", t6_pm_rx_regs },
+ { "pmtx", t6_pm_tx_regs },
+ T6_MODREGS(mps),
+ { "cplsw", t6_cpl_switch_regs },
+ T6_MODREGS(smb),
+ { "i2c", t6_i2cm_regs },
+ T6_MODREGS(mi),
+ T6_MODREGS(uart),
+ T6_MODREGS(pmu),
+ T6_MODREGS(sf),
+ T6_MODREGS(pl),
+ T6_MODREGS(le),
+ T6_MODREGS(ncsi),
+ T6_MODREGS(mac),
+ { "hma", t6_hma_t6_regs }
+ };
+
+ return dump_regs_table(argc, argv, regs, t6_mod, nitems(t6_mod));
+}
+#undef T6_MODREGS
+
+static int
+dump_regs_t4vf(int argc, const char *argv[], const uint32_t *regs)
+{
+ static struct mod_regs t4vf_mod[] = {
+ { "sge", t4vf_sge_regs },
+ { "mps", t4vf_mps_regs },
+ { "pl", t4vf_pl_regs },
+ { "mbdata", t4vf_mbdata_regs },
+ { "cim", t4vf_cim_regs },
+ };
+
+ return dump_regs_table(argc, argv, regs, t4vf_mod, nitems(t4vf_mod));
+}
+
+static int
+dump_regs_t5vf(int argc, const char *argv[], const uint32_t *regs)
+{
+ static struct mod_regs t5vf_mod[] = {
+ { "sge", t5vf_sge_regs },
+ { "mps", t4vf_mps_regs },
+ { "pl", t5vf_pl_regs },
+ { "mbdata", t4vf_mbdata_regs },
+ { "cim", t4vf_cim_regs },
+ };
+
+ return dump_regs_table(argc, argv, regs, t5vf_mod, nitems(t5vf_mod));
+}
+
+static int
+dump_regs_t6vf(int argc, const char *argv[], const uint32_t *regs)
+{
+ static struct mod_regs t6vf_mod[] = {
+ { "sge", t5vf_sge_regs },
+ { "mps", t4vf_mps_regs },
+ { "pl", t6vf_pl_regs },
+ { "mbdata", t4vf_mbdata_regs },
+ { "cim", t4vf_cim_regs },
+ };
+
+ return dump_regs_table(argc, argv, regs, t6vf_mod, nitems(t6vf_mod));
+}
+
static int
dump_regs(int argc, const char *argv[])
{
@@ -429,9 +495,17 @@ dump_regs(int argc, const char *argv[])
rc = dump_regs_t4vf(argc, argv, regs.data);
else
rc = dump_regs_t4(argc, argv, regs.data);
- } else if (vers == 5)
- rc = dump_regs_t5(argc, argv, regs.data);
- else {
+ } else if (vers == 5) {
+ if (revision == 0x3f)
+ rc = dump_regs_t5vf(argc, argv, regs.data);
+ else
+ rc = dump_regs_t5(argc, argv, regs.data);
+ } else if (vers == 6) {
+ if (revision == 0x3f)
+ rc = dump_regs_t6vf(argc, argv, regs.data);
+ else
+ rc = dump_regs_t6(argc, argv, regs.data);
+ } else {
warnx("%s (type %d, rev %d) is not a known card.",
nexus, vers, revision);
return (ENOTSUP);
@@ -458,7 +532,10 @@ do_show_info_header(uint32_t mode)
break;
case T4_FILTER_VNIC:
- printf(" vld:VNIC");
+ if (mode & T4_FILTER_IC_VNIC)
+ printf(" VFvld:PF:VF");
+ else
+ printf(" vld:oVLAN");
break;
case T4_FILTER_VLAN:
@@ -715,11 +792,19 @@ do_show_one_filter_info(struct t4_filter *t, uint32_t mode)
break;
case T4_FILTER_VNIC:
- printf(" %1d:%1x:%02x/%1d:%1x:%02x",
- t->fs.val.vnic_vld, (t->fs.val.vnic >> 7) & 0x7,
- t->fs.val.vnic & 0x7f, t->fs.mask.vnic_vld,
- (t->fs.mask.vnic >> 7) & 0x7,
- t->fs.mask.vnic & 0x7f);
+ if (mode & T4_FILTER_IC_VNIC) {
+ printf(" %1d:%1x:%02x/%1d:%1x:%02x",
+ t->fs.val.pfvf_vld,
+ (t->fs.val.vnic >> 13) & 0x7,
+ t->fs.val.vnic & 0x1fff,
+ t->fs.mask.pfvf_vld,
+ (t->fs.mask.vnic >> 13) & 0x7,
+ t->fs.mask.vnic & 0x1fff);
+ } else {
+ printf(" %1d:%04x/%1d:%04x",
+ t->fs.val.ovlan_vld, t->fs.val.vnic,
+ t->fs.mask.ovlan_vld, t->fs.mask.vnic);
+ }
break;
case T4_FILTER_VLAN:
@@ -897,8 +982,12 @@ get_filter_mode(void)
if (mode & T4_FILTER_VLAN)
printf("vlan ");
- if (mode & T4_FILTER_VNIC)
- printf("vnic/ovlan ");
+ if (mode & T4_FILTER_VNIC) {
+ if (mode & T4_FILTER_IC_VNIC)
+ printf("vnic_id ");
+ else
+ printf("ovlan ");
+ }
if (mode & T4_FILTER_PORT)
printf("iport ");
@@ -915,6 +1004,7 @@ static int
set_filter_mode(int argc, const char *argv[])
{
uint32_t mode = 0;
+ int vnic = 0, ovlan = 0;
for (; argc; argc--, argv++) {
if (!strcmp(argv[0], "frag"))
@@ -938,9 +1028,16 @@ set_filter_mode(int argc, const char *argv[])
if (!strcmp(argv[0], "vlan"))
mode |= T4_FILTER_VLAN;
- if (!strcmp(argv[0], "ovlan") ||
- !strcmp(argv[0], "vnic"))
+ if (!strcmp(argv[0], "ovlan")) {
mode |= T4_FILTER_VNIC;
+ ovlan++;
+ }
+
+ if (!strcmp(argv[0], "vnic_id")) {
+ mode |= T4_FILTER_VNIC;
+ mode |= T4_FILTER_IC_VNIC;
+ vnic++;
+ }
if (!strcmp(argv[0], "iport"))
mode |= T4_FILTER_PORT;
@@ -949,6 +1046,11 @@ set_filter_mode(int argc, const char *argv[])
mode |= T4_FILTER_FCoE;
}
+ if (vnic > 0 && ovlan > 0) {
+ warnx("\"vnic_id\" and \"ovlan\" are mutually exclusive.");
+ return (EINVAL);
+ }
+
return doit(CHELSIO_T4_SET_FILTER_MODE, &mode);
}
@@ -1007,18 +1109,27 @@ set_filter(uint32_t idx, int argc, const char *argv[])
} else if (!parse_val_mask("ovlan", args, &val, &mask)) {
t.fs.val.vnic = val;
t.fs.mask.vnic = mask;
- t.fs.val.vnic_vld = 1;
- t.fs.mask.vnic_vld = 1;
- } else if (!parse_val_mask("vnic", args, &val, &mask)) {
- t.fs.val.vnic = val;
- t.fs.mask.vnic = mask;
- t.fs.val.vnic_vld = 1;
- t.fs.mask.vnic_vld = 1;
+ t.fs.val.ovlan_vld = 1;
+ t.fs.mask.ovlan_vld = 1;
} else if (!parse_val_mask("ivlan", args, &val, &mask)) {
t.fs.val.vlan = val;
t.fs.mask.vlan = mask;
t.fs.val.vlan_vld = 1;
t.fs.mask.vlan_vld = 1;
+ } else if (!parse_val_mask("pf", args, &val, &mask)) {
+ t.fs.val.vnic &= 0x1fff;
+ t.fs.val.vnic |= (val & 0x7) << 13;
+ t.fs.mask.vnic &= 0x1fff;
+ t.fs.mask.vnic |= (mask & 0x7) << 13;
+ t.fs.val.pfvf_vld = 1;
+ t.fs.mask.pfvf_vld = 1;
+ } else if (!parse_val_mask("vf", args, &val, &mask)) {
+ t.fs.val.vnic &= 0xe000;
+ t.fs.val.vnic |= val & 0x1fff;
+ t.fs.mask.vnic &= 0xe000;
+ t.fs.mask.vnic |= mask & 0x1fff;
+ t.fs.val.pfvf_vld = 1;
+ t.fs.mask.pfvf_vld = 1;
} else if (!parse_val_mask("tos", args, &val, &mask)) {
t.fs.val.tos = val;
t.fs.mask.tos = mask;
@@ -1154,6 +1265,10 @@ set_filter(uint32_t idx, int argc, const char *argv[])
" action \"drop\" or \"switch\"");
return (EINVAL);
}
+ if (t.fs.val.ovlan_vld && t.fs.val.pfvf_vld) {
+ warnx("ovlan and vnic_id (pf/vf) are mutually exclusive");
+ return (EINVAL);
+ }
t.fs.type = (af == AF_INET6 ? 1 : 0); /* default IPv4 */
return doit(CHELSIO_T4_SET_FILTER, &t);
diff --git a/tools/tools/cxgbetool/reg_defs_t4.c b/tools/tools/cxgbetool/reg_defs_t4.c
index d838fe5..5207073 100644
--- a/tools/tools/cxgbetool/reg_defs_t4.c
+++ b/tools/tools/cxgbetool/reg_defs_t4.c
@@ -1,4 +1,6 @@
/* This file is automatically generated --- changes will be lost */
+/* Generation Date : Tue Dec 8 09:33:01 IST 2015 */
+/* Directory name: t4_reg.txt, Changeset: */
__FBSDID("$FreeBSD$");
struct reg_info t4_sge_regs[] = {
@@ -1742,7 +1744,7 @@ struct reg_info t4_sge_regs[] = {
{ "SGE_LA_RDDATA_15", 0x18f4, 0 },
{ "SGE_LA_WRPTR_15", 0x18f8, 0 },
{ "SGE_LA_RESERVED_15", 0x18fc, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_pcie_regs[] = {
@@ -13810,7 +13812,7 @@ struct reg_info t4_pcie_regs[] = {
{ "PCIE_PF_GEN_MSG", 0x1fc48, 0 },
{ "PCIE_PF_EXPROM_OFST", 0x1fc4c, 0 },
{ "Offset", 10, 14 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_dbg_regs[] = {
@@ -14159,7 +14161,7 @@ struct reg_info t4_dbg_regs[] = {
{ "DRVN_B_HISTORY", 4, 4 },
{ "DRVN_A_HISTORY", 0, 4 },
{ "DBG_PVT_REG_SAMPLE_WAIT_CLKS", 0x6150, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_mc_regs[] = {
@@ -15134,7 +15136,7 @@ struct reg_info t4_mc_regs[] = {
{ "MC_BIST_STATUS_RDATA", 0x76c4, 0 },
{ "MC_BIST_STATUS_RDATA", 0x76c8, 0 },
{ "MC_BIST_STATUS_RDATA", 0x76cc, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_ma_regs[] = {
@@ -15439,7 +15441,7 @@ struct reg_info t4_ma_regs[] = {
{ "COHERANCY_THREAD_NUM", 1, 3 },
{ "COHERANCY_ENABLE", 0, 1 },
{ "MA_ERROR_ENABLE", 0x77fc, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_edc_0_regs[] = {
@@ -15496,7 +15498,7 @@ struct reg_info t4_edc_0_regs[] = {
{ "EDC_ECC_STATUS", 0x797c, 0 },
{ "ECC_CECNT", 16, 16 },
{ "ECC_UECNT", 0, 16 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_edc_1_regs[] = {
@@ -15553,11 +15555,11 @@ struct reg_info t4_edc_1_regs[] = {
{ "EDC_ECC_STATUS", 0x79fc, 0 },
{ "ECC_CECNT", 16, 16 },
{ "ECC_UECNT", 0, 16 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_hma_regs[] = {
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_cim_regs[] = {
@@ -16152,7 +16154,7 @@ struct reg_info t4_cim_regs[] = {
{ "MBMsgRdyIntEn", 19, 1 },
{ "CIM_PF_HOST_INT_CAUSE", 0x1fe8c, 0 },
{ "MBMsgRdyInt", 19, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_tp_regs[] = {
@@ -16879,7 +16881,7 @@ struct reg_info t4_tp_regs[] = {
{ "TP_PROTOCOL_DATA2", 0x7ef4, 0 },
{ "TP_PROTOCOL_DATA3", 0x7ef8, 0 },
{ "TP_PROTOCOL_DATA4", 0x7efc, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_ulp_tx_regs[] = {
@@ -17125,7 +17127,7 @@ struct reg_info t4_ulp_tx_regs[] = {
{ "ULP_TX_LA_RDDATA_10", 0x8f64, 0 },
{ "ULP_TX_LA_WRPTR_10", 0x8f68, 0 },
{ "ULP_TX_LA_RESERVED_10", 0x8f6c, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_pm_rx_regs[] = {
@@ -17193,7 +17195,7 @@ struct reg_info t4_pm_rx_regs[] = {
{ "db_options_par_error", 2, 1 },
{ "iespi_par_error", 1, 1 },
{ "e_pcmd_par_error", 0, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_pm_tx_regs[] = {
@@ -17284,7 +17286,7 @@ struct reg_info t4_pm_tx_regs[] = {
{ "db_options_par_error", 2, 1 },
{ "icspi_par_error", 1, 1 },
{ "c_pcmd_par_error", 0, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_mps_regs[] = {
@@ -17339,8 +17341,7 @@ struct reg_info t4_mps_regs[] = {
{ "MPS_DEBUG_DATA_REG_L", 0x906c, 0 },
{ "MPS_DEBUG_DATA_REG_H", 0x9070, 0 },
{ "MPS_TOP_SPARE", 0x9074, 0 },
- { "TopSpare", 12, 20 },
- { "Chikn_14463", 8, 4 },
+ { "TopSpare", 8, 24 },
{ "oVlanSelLpbk3", 7, 1 },
{ "oVlanSelLpbk2", 6, 1 },
{ "oVlanSelLpbk1", 5, 1 },
@@ -30521,7 +30522,7 @@ struct reg_info t4_mps_regs[] = {
{ "MPS_CLS_TCAM_X_H", 0x10fdc, 0 },
{ "MPS_CLS_TCAM_X_H", 0x10fec, 0 },
{ "MPS_CLS_TCAM_X_H", 0x10ffc, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_cpl_switch_regs[] = {
@@ -30554,7 +30555,7 @@ struct reg_info t4_cpl_switch_regs[] = {
{ "zero_switch_error", 0, 1 },
{ "CPL_MAP_TBL_IDX", 0x19058, 0 },
{ "CPL_MAP_TBL_DATA", 0x1905c, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_smb_regs[] = {
@@ -30689,7 +30690,7 @@ struct reg_info t4_smb_regs[] = {
{ "SMB_MICRO_CNT_CLK_CFG", 0x190e4, 0 },
{ "MacroCntClkCfg", 8, 5 },
{ "MicroCntClkCfg", 0, 8 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_i2cm_regs[] = {
@@ -30700,7 +30701,7 @@ struct reg_info t4_i2cm_regs[] = {
{ "Ack", 30, 1 },
{ "Cont", 1, 1 },
{ "Op", 0, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_mi_regs[] = {
@@ -30720,7 +30721,7 @@ struct reg_info t4_mi_regs[] = {
{ "St", 3, 2 },
{ "Inc", 2, 1 },
{ "Op", 0, 2 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_uart_regs[] = {
@@ -30729,7 +30730,7 @@ struct reg_info t4_uart_regs[] = {
{ "Parity", 20, 2 },
{ "DataBits", 16, 4 },
{ "ClkDiv", 0, 12 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_pmu_regs[] = {
@@ -30749,7 +30750,7 @@ struct reg_info t4_pmu_regs[] = {
{ "Port1SleepMode", 2, 1 },
{ "Port0SleepMode", 1, 1 },
{ "WakeUp", 0, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_ulp_rx_regs[] = {
@@ -30776,24 +30777,24 @@ struct reg_info t4_ulp_rx_regs[] = {
{ "ENABLE_APF_0", 20, 1 },
{ "ENABLE_AF_1", 19, 1 },
{ "ENABLE_AF_0", 18, 1 },
- { "ENABLE_PCMDF_1", 17, 1 },
- { "ENABLE_MPARC_1", 16, 1 },
- { "ENABLE_MPARF_1", 15, 1 },
- { "ENABLE_DDPCF_1", 14, 1 },
- { "ENABLE_TPTCF_1", 13, 1 },
- { "ENABLE_PCMDF_0", 12, 1 },
- { "ENABLE_MPARC_0", 11, 1 },
- { "ENABLE_MPARF_0", 10, 1 },
- { "ENABLE_DDPCF_0", 9, 1 },
- { "ENABLE_TPTCF_0", 8, 1 },
- { "ENABLE_DDPDF_1", 7, 1 },
- { "ENABLE_DDPMF_1", 6, 1 },
- { "ENABLE_MEMRF_1", 5, 1 },
- { "ENABLE_PRSDF_1", 4, 1 },
- { "ENABLE_DDPDF_0", 3, 1 },
- { "ENABLE_DDPMF_0", 2, 1 },
- { "ENABLE_MEMRF_0", 1, 1 },
- { "ENABLE_PRSDF_0", 0, 1 },
+ { "ENABLE_DDPDF_1", 17, 1 },
+ { "ENABLE_DDPMF_1", 16, 1 },
+ { "ENABLE_MEMRF_1", 15, 1 },
+ { "ENABLE_PRSDF_1", 14, 1 },
+ { "ENABLE_DDPDF_0", 13, 1 },
+ { "ENABLE_DDPMF_0", 12, 1 },
+ { "ENABLE_MEMRF_0", 11, 1 },
+ { "ENABLE_PRSDF_0", 10, 1 },
+ { "ENABLE_PCMDF_1", 9, 1 },
+ { "ENABLE_TPTCF_1", 8, 1 },
+ { "ENABLE_DDPCF_1", 7, 1 },
+ { "ENABLE_MPARF_1", 6, 1 },
+ { "ENABLE_MPARC_1", 5, 1 },
+ { "ENABLE_PCMDF_0", 4, 1 },
+ { "ENABLE_TPTCF_0", 3, 1 },
+ { "ENABLE_DDPCF_0", 2, 1 },
+ { "ENABLE_MPARF_0", 1, 1 },
+ { "ENABLE_MPARC_0", 0, 1 },
{ "ULP_RX_INT_CAUSE", 0x19158, 0 },
{ "CAUSE_CTX_1", 24, 1 },
{ "CAUSE_CTX_0", 23, 1 },
@@ -30802,24 +30803,24 @@ struct reg_info t4_ulp_rx_regs[] = {
{ "CAUSE_APF_0", 20, 1 },
{ "CAUSE_AF_1", 19, 1 },
{ "CAUSE_AF_0", 18, 1 },
- { "CAUSE_PCMDF_1", 17, 1 },
- { "CAUSE_MPARC_1", 16, 1 },
- { "CAUSE_MPARF_1", 15, 1 },
- { "CAUSE_DDPCF_1", 14, 1 },
- { "CAUSE_TPTCF_1", 13, 1 },
- { "CAUSE_PCMDF_0", 12, 1 },
- { "CAUSE_MPARC_0", 11, 1 },
- { "CAUSE_MPARF_0", 10, 1 },
- { "CAUSE_DDPCF_0", 9, 1 },
- { "CAUSE_TPTCF_0", 8, 1 },
- { "CAUSE_DDPDF_1", 7, 1 },
- { "CAUSE_DDPMF_1", 6, 1 },
- { "CAUSE_MEMRF_1", 5, 1 },
- { "CAUSE_PRSDF_1", 4, 1 },
- { "CAUSE_DDPDF_0", 3, 1 },
- { "CAUSE_DDPMF_0", 2, 1 },
- { "CAUSE_MEMRF_0", 1, 1 },
- { "CAUSE_PRSDF_0", 0, 1 },
+ { "CAUSE_DDPDF_1", 17, 1 },
+ { "CAUSE_DDPMF_1", 16, 1 },
+ { "CAUSE_MEMRF_1", 15, 1 },
+ { "CAUSE_PRSDF_1", 14, 1 },
+ { "CAUSE_DDPDF_0", 13, 1 },
+ { "CAUSE_DDPMF_0", 12, 1 },
+ { "CAUSE_MEMRF_0", 11, 1 },
+ { "CAUSE_PRSDF_0", 10, 1 },
+ { "CAUSE_PCMDF_1", 9, 1 },
+ { "CAUSE_TPTCF_1", 8, 1 },
+ { "CAUSE_DDPCF_1", 7, 1 },
+ { "CAUSE_MPARF_1", 6, 1 },
+ { "CAUSE_MPARC_1", 5, 1 },
+ { "CAUSE_PCMDF_0", 4, 1 },
+ { "CAUSE_TPTCF_0", 3, 1 },
+ { "CAUSE_DDPCF_0", 2, 1 },
+ { "CAUSE_MPARF_0", 1, 1 },
+ { "CAUSE_MPARC_0", 0, 1 },
{ "ULP_RX_ISCSI_LLIMIT", 0x1915c, 0 },
{ "IscsiLlimit", 6, 26 },
{ "ULP_RX_ISCSI_ULIMIT", 0x19160, 0 },
@@ -30850,29 +30851,29 @@ struct reg_info t4_ulp_rx_regs[] = {
{ "ULP_RX_PBL_ULIMIT", 0x19190, 0 },
{ "ULP_RX_CTX_BASE", 0x19194, 0 },
{ "ULP_RX_PERR_ENABLE", 0x1919c, 0 },
- { "ENABLE_FF", 22, 1 },
- { "ENABLE_APF_1", 21, 1 },
- { "ENABLE_APF_0", 20, 1 },
- { "ENABLE_AF_1", 19, 1 },
- { "ENABLE_AF_0", 18, 1 },
- { "ENABLE_PCMDF_1", 17, 1 },
- { "ENABLE_MPARC_1", 16, 1 },
- { "ENABLE_MPARF_1", 15, 1 },
- { "ENABLE_DDPCF_1", 14, 1 },
- { "ENABLE_TPTCF_1", 13, 1 },
- { "ENABLE_PCMDF_0", 12, 1 },
- { "ENABLE_MPARC_0", 11, 1 },
- { "ENABLE_MPARF_0", 10, 1 },
- { "ENABLE_DDPCF_0", 9, 1 },
- { "ENABLE_TPTCF_0", 8, 1 },
- { "ENABLE_DDPDF_1", 7, 1 },
- { "ENABLE_DDPMF_1", 6, 1 },
- { "ENABLE_MEMRF_1", 5, 1 },
- { "ENABLE_PRSDF_1", 4, 1 },
- { "ENABLE_DDPDF_0", 3, 1 },
- { "ENABLE_DDPMF_0", 2, 1 },
- { "ENABLE_MEMRF_0", 1, 1 },
- { "ENABLE_PRSDF_0", 0, 1 },
+ { "PERR_ENABLE_FF", 22, 1 },
+ { "PERR_ENABLE_APF_1", 21, 1 },
+ { "PERR_ENABLE_APF_0", 20, 1 },
+ { "PERR_ENABLE_AF_1", 19, 1 },
+ { "PERR_ENABLE_AF_0", 18, 1 },
+ { "PERR_ENABLE_DDPDF_1", 17, 1 },
+ { "PERR_ENABLE_DDPMF_1", 16, 1 },
+ { "PERR_ENABLE_MEMRF_1", 15, 1 },
+ { "PERR_ENABLE_PRSDF_1", 14, 1 },
+ { "PERR_ENABLE_DDPDF_0", 13, 1 },
+ { "PERR_ENABLE_DDPMF_0", 12, 1 },
+ { "PERR_ENABLE_MEMRF_0", 11, 1 },
+ { "PERR_ENABLE_PRSDF_0", 10, 1 },
+ { "PERR_ENABLE_PCMDF_1", 9, 1 },
+ { "PERR_ENABLE_TPTCF_1", 8, 1 },
+ { "PERR_ENABLE_DDPCF_1", 7, 1 },
+ { "PERR_ENABLE_MPARF_1", 6, 1 },
+ { "PERR_ENABLE_MPARC_1", 5, 1 },
+ { "PERR_ENABLE_PCMDF_0", 4, 1 },
+ { "PERR_ENABLE_TPTCF_0", 3, 1 },
+ { "PERR_ENABLE_DDPCF_0", 2, 1 },
+ { "PERR_ENABLE_MPARF_0", 1, 1 },
+ { "PERR_ENABLE_MPARC_0", 0, 1 },
{ "ULP_RX_PERR_INJECT", 0x191a0, 0 },
{ "MemSel", 1, 5 },
{ "InjectDataErr", 0, 1 },
@@ -30923,7 +30924,7 @@ struct reg_info t4_ulp_rx_regs[] = {
{ "ULP_RX_LA_RDDATA", 0x19244, 0 },
{ "ULP_RX_LA_WRPTR", 0x19248, 0 },
{ "ULP_RX_LA_RESERVED", 0x1924c, 0 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_sf_regs[] = {
@@ -30934,7 +30935,7 @@ struct reg_info t4_sf_regs[] = {
{ "Cont", 3, 1 },
{ "ByteCnt", 1, 2 },
{ "Op", 0, 1 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_pl_regs[] = {
@@ -32072,7 +32073,7 @@ struct reg_info t4_pl_regs[] = {
{ "PL_VFID_MAP", 0x19bfc, 0 },
{ "Valid", 7, 1 },
{ "VFID", 0, 7 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_le_regs[] = {
@@ -32351,7 +32352,14 @@ struct reg_info t4_le_regs[] = {
{ "LE_REQ_DEBUG_LA_WRPTR", 0x19f28, 0 },
{ "LE_RSP_DEBUG_LA_DATA", 0x19f2c, 0 },
{ "LE_RSP_DEBUG_LA_WRPTR", 0x19f30, 0 },
- { NULL, 0, 0 }
+ { "LE_DEBUG_LA_SELECTOR", 0x19f34, 0 },
+ { "LE_DEBUG_LA_CAPTURED_DATA", 0x19f38, 0 },
+ { "LE_MA_DEBUG_LA_DATA", 0x19f3c, 0 },
+ { "LE_RSP_DEBUG_LA_HASH_WRPTR", 0x19f40, 0 },
+ { "LE_HASH_DEBUG_LA_DATA", 0x19f44, 0 },
+ { "LE_RSP_DEBUG_LA_TCAM_WRPTR", 0x19f48, 0 },
+ { "LE_TCAM_DEBUG_LA_DATA", 0x19f4c, 0 },
+ { NULL }
};
struct reg_info t4_ncsi_regs[] = {
@@ -32622,7 +32630,7 @@ struct reg_info t4_ncsi_regs[] = {
{ "NCSI_MACB_REV_STATUS", 0x1a1fc, 0 },
{ "PartRef", 16, 16 },
{ "DesRev", 0, 16 },
- { NULL, 0, 0 }
+ { NULL }
};
struct reg_info t4_xgmac_regs[] = {
@@ -40390,5 +40398,5 @@ struct reg_info t4_xgmac_regs[] = {
{ "PRST", 4, 1 },
{ "PCHKEN", 3, 1 },
{ "PRBSSEL", 0, 3 },
- { NULL, 0, 0 }
+ { NULL }
};
diff --git a/tools/tools/cxgbetool/reg_defs_t4vf.c b/tools/tools/cxgbetool/reg_defs_t4vf.c
index 6ebd731..3490903 100644
--- a/tools/tools/cxgbetool/reg_defs_t4vf.c
+++ b/tools/tools/cxgbetool/reg_defs_t4vf.c
@@ -19,6 +19,21 @@ struct reg_info t4vf_sge_regs[] = {
{ NULL, 0, 0 }
};
+struct reg_info t5vf_sge_regs[] = {
+ { "SGE_VF_KDOORBELL", 0x000, 0 },
+ { "QID", 15, 17 },
+ { "Priority", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_VF_GTS", 0x004, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+
+ { NULL, 0, 0 }
+};
+
struct reg_info t4vf_mps_regs[] = {
{ "MPS_VF_CTL", 0x100, 0 },
{ "TxEn", 1, 1 },
@@ -70,9 +85,41 @@ struct reg_info t4vf_mps_regs[] = {
struct reg_info t4vf_pl_regs[] = {
{ "PL_VF_WHOAMI", 0x200, 0 },
- { "PortxMap", 5, 3 },
- { "SourceBus", 3, 2 },
- { "SourcePF", 0, 3 },
+ { "PortxMap", 24, 3 },
+ { "SourceBus", 16, 2 },
+ { "SourcePF", 8, 3 },
+ { "IsVF", 7, 1 },
+ { "VFID", 0, 7 },
+
+ { NULL, 0, 0 }
+};
+
+struct reg_info t5vf_pl_regs[] = {
+ { "PL_WHOAMI", 0x200, 0 },
+ { "PortxMap", 24, 3 },
+ { "SourceBus", 16, 2 },
+ { "SourcePF", 8, 3 },
+ { "IsVF", 7, 1 },
+ { "VFID", 0, 7 },
+ { "PL_VF_REV", 0x204, 0 },
+ { "ChipID", 4, 4 },
+ { "Rev", 0, 4 },
+ { "PL_VF_REVISION", 0x208, 0 },
+
+ { NULL, 0, 0 }
+};
+
+struct reg_info t6vf_pl_regs[] = {
+ { "PL_WHOAMI", 0x200, 0 },
+ { "PortxMap", 24, 3 },
+ { "SourceBus", 16, 2 },
+ { "SourcePF", 9, 3 },
+ { "IsVF", 8, 1 },
+ { "VFID", 0, 8 },
+ { "PL_VF_REV", 0x204, 0 },
+ { "ChipID", 4, 4 },
+ { "Rev", 0, 4 },
+ { "PL_VF_REVISION", 0x208, 0 },
{ NULL, 0, 0 }
};
@@ -85,7 +132,7 @@ struct reg_info t4vf_cim_regs[] = {
{ "CIM_VF_EXT_MAILBOX_CTRL", 0x300, 0 },
{ "MBGeneric", 4, 4 },
{ "MBMsgValid", 3, 1 },
- { "MBIntReq", 3, 1 },
+ { "MBIntReq", 2, 1 },
{ "MBOwner", 0, 2 },
{ "CIM_VF_EXT_MAILBOX_STATUS", 0x304, 0 },
{ "MBVFReady", 0, 1 },
diff --git a/tools/tools/cxgbetool/reg_defs_t5.c b/tools/tools/cxgbetool/reg_defs_t5.c
index adc1ece..ff84f00 100644
--- a/tools/tools/cxgbetool/reg_defs_t5.c
+++ b/tools/tools/cxgbetool/reg_defs_t5.c
@@ -1,4 +1,6 @@
/* This file is automatically generated --- changes will be lost */
+/* Generation Date : Mon Dec 7 19:40:45 IST 2015 */
+/* Directory name: t5_reg.txt, Changeset: 6934:86d3c0167c2c */
__FBSDID("$FreeBSD$");
struct reg_info t5_sge_regs[] = {
@@ -20516,10 +20518,10 @@ struct reg_info t5_dbg_regs[] = {
{ "GPIO17_CHG_DET", 6, 1 },
{ "GPIO18_CHG_DET", 5, 1 },
{ "GPIO19_CHG_DET", 4, 1 },
- { "GPIO16_IN", 3, 1 },
- { "GPIO17_IN", 2, 1 },
- { "GPIO18_IN", 1, 1 },
- { "GPIO19_IN", 0, 1 },
+ { "GPIO19_IN", 3, 1 },
+ { "GPIO18_IN", 2, 1 },
+ { "GPIO17_IN", 1, 1 },
+ { "GPIO16_IN", 0, 1 },
{ "DBG_INT_ENABLE", 0x6018, 0 },
{ "GPIO19", 29, 1 },
{ "GPIO18", 28, 1 },
@@ -24446,63 +24448,63 @@ struct reg_info t5_mps_regs[] = {
{ "MPS_TX_DEBUG_REG_TP2TX_10", 0x9444, 0 },
{ "SOPCh1", 31, 1 },
{ "EOPCh1", 30, 1 },
- { "SizeCh1", 27, 3 },
- { "ErrCh1", 26, 1 },
- { "FullCh1", 25, 1 },
- { "ValidCh1", 24, 1 },
- { "DataCh1", 16, 8 },
+ { "SizeCh1", 26, 4 },
+ { "ErrCh1", 25, 1 },
+ { "FullCh1", 24, 1 },
+ { "ValidCh1", 23, 1 },
+ { "DataCh1", 16, 7 },
{ "SOPCh0", 15, 1 },
{ "EOPCh0", 14, 1 },
- { "SizeCh0", 11, 3 },
- { "ErrCh0", 10, 1 },
- { "FullCh0", 9, 1 },
- { "ValidCh0", 8, 1 },
- { "DataCh0", 0, 8 },
+ { "SizeCh0", 10, 4 },
+ { "ErrCh0", 9, 1 },
+ { "FullCh0", 8, 1 },
+ { "ValidCh0", 7, 1 },
+ { "DataCh0", 0, 7 },
{ "MPS_TX_DEBUG_REG_TP2TX_32", 0x9448, 0 },
{ "SOPCh3", 31, 1 },
{ "EOPCh3", 30, 1 },
- { "SizeCh3", 27, 3 },
- { "ErrCh3", 26, 1 },
- { "FullCh3", 25, 1 },
- { "ValidCh3", 24, 1 },
- { "DataCh3", 16, 8 },
+ { "SizeCh3", 26, 4 },
+ { "ErrCh3", 25, 1 },
+ { "FullCh3", 24, 1 },
+ { "ValidCh3", 23, 1 },
+ { "DataCh3", 16, 7 },
{ "SOPCh2", 15, 1 },
{ "EOPCh2", 14, 1 },
- { "SizeCh2", 11, 3 },
- { "ErrCh2", 10, 1 },
- { "FullCh2", 9, 1 },
- { "ValidCh2", 8, 1 },
- { "DataCh2", 0, 8 },
+ { "SizeCh2", 10, 4 },
+ { "ErrCh2", 9, 1 },
+ { "FullCh2", 8, 1 },
+ { "ValidCh2", 7, 1 },
+ { "DataCh2", 0, 7 },
{ "MPS_TX_DEBUG_REG_TX2MAC_10", 0x944c, 0 },
{ "SOPPt1", 31, 1 },
{ "EOPPt1", 30, 1 },
- { "SizePt1", 27, 3 },
- { "ErrPt1", 26, 1 },
- { "FullPt1", 25, 1 },
- { "ValidPt1", 24, 1 },
- { "DataPt1", 16, 8 },
+ { "SizePt1", 26, 4 },
+ { "ErrPt1", 25, 1 },
+ { "FullPt1", 24, 1 },
+ { "ValidPt1", 23, 1 },
+ { "DataPt1", 16, 7 },
{ "SOPPt0", 15, 1 },
{ "EOPPt0", 14, 1 },
- { "SizePt0", 11, 3 },
- { "ErrPt0", 10, 1 },
- { "FullPt0", 9, 1 },
- { "ValidPt0", 8, 1 },
- { "DataPt0", 0, 8 },
+ { "SizePt0", 10, 4 },
+ { "ErrPt0", 9, 1 },
+ { "FullPt0", 8, 1 },
+ { "ValidPt0", 7, 1 },
+ { "DataPt0", 0, 7 },
{ "MPS_TX_DEBUG_REG_TX2MAC_32", 0x9450, 0 },
{ "SOPPt3", 31, 1 },
{ "EOPPt3", 30, 1 },
- { "SizePt3", 27, 3 },
- { "ErrPt3", 26, 1 },
- { "FullPt3", 25, 1 },
- { "ValidPt3", 24, 1 },
- { "DataPt3", 16, 8 },
+ { "SizePt3", 26, 4 },
+ { "ErrPt3", 25, 1 },
+ { "FullPt3", 24, 1 },
+ { "ValidPt3", 23, 1 },
+ { "DataPt3", 16, 7 },
{ "SOPPt2", 15, 1 },
{ "EOPPt2", 14, 1 },
- { "SizePt2", 11, 3 },
- { "ErrPt2", 10, 1 },
- { "FullPt2", 9, 1 },
- { "ValidPt2", 8, 1 },
- { "DataPt2", 0, 8 },
+ { "SizePt2", 10, 4 },
+ { "ErrPt2", 9, 1 },
+ { "FullPt2", 8, 1 },
+ { "ValidPt2", 7, 1 },
+ { "DataPt2", 0, 7 },
{ "MPS_TX_SGE_CH_PAUSE_IGNR", 0x9454, 0 },
{ "MPS_TX_DEBUG_SUBPART_SEL", 0x9458, 0 },
{ "SubPrtH", 11, 5 },
@@ -58429,13 +58431,14 @@ struct reg_info t5_mc_0_regs[] = {
{ "PER_ENA_RANK_PAIR", 12, 4 },
{ "PER_ENA_ZCAL", 11, 1 },
{ "PER_ENA_SYSCLK_ALIGN", 10, 1 },
- { "ENA_PER_RDCLK_ALIGN", 9, 1 },
- { "ENA_PER_DQS_ALIGN", 8, 1 },
- { "ENA_PER_READ_CTR", 7, 1 },
+ { "ENA_PER_READ_CTR", 9, 1 },
+ { "ENA_PER_RDCLK_ALIGN", 8, 1 },
+ { "ENA_PER_DQS_ALIGN", 7, 1 },
{ "PER_NEXT_RANK_PAIR", 5, 2 },
{ "FAST_SIM_PER_CNTR", 4, 1 },
{ "START_INIT_CAL", 3, 1 },
{ "START_PER_CAL", 2, 1 },
+ { "ABORT_ON_ERR_EN", 1, 1 },
{ "MC_DDRPHY_PC_PER_ZCAL_CONFIG", 0x4703c, 0 },
{ "PER_ZCAL_ENA_RANK", 8, 8 },
{ "PER_ZCAL_NEXT_RANK", 5, 3 },
@@ -59284,6 +59287,8 @@ struct reg_info t5_mc_0_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44078, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x440d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x440d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x441b4, 0 },
@@ -59298,10 +59303,13 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x441fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44048, 0 },
@@ -59711,6 +59719,8 @@ struct reg_info t5_mc_0_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44278, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x442d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x442d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x443b4, 0 },
@@ -59725,10 +59735,13 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x443fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44248, 0 },
@@ -60138,6 +60151,8 @@ struct reg_info t5_mc_0_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44478, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x444d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x444d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x445b4, 0 },
@@ -60152,10 +60167,13 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x445fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44448, 0 },
@@ -60565,6 +60583,8 @@ struct reg_info t5_mc_0_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44678, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x446d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x446d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x447b4, 0 },
@@ -60579,10 +60599,13 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x447fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44648, 0 },
@@ -60992,6 +61015,8 @@ struct reg_info t5_mc_0_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44878, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x448d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x448d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x449b4, 0 },
@@ -61006,10 +61031,13 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x449fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44848, 0 },
@@ -61091,6 +61119,7 @@ struct reg_info t5_mc_0_regs[] = {
{ "MC_DDRPHY_WC_CONFIG2", 0x47608, 0 },
{ "NUM_VALID_SAMPLES", 12, 4 },
{ "FW_RD_WR", 6, 6 },
+ { "EN_RESET_WR_DELAY_WL", 0, 1 },
{ "MC_DDRPHY_WC_CONFIG3", 0x47614, 0 },
{ "DDR4_MRS_CMD_DQ_EN", 15, 1 },
{ "MRS_CMD_DQ_ON", 9, 6 },
@@ -61660,13 +61689,14 @@ struct reg_info t5_mc_1_regs[] = {
{ "PER_ENA_RANK_PAIR", 12, 4 },
{ "PER_ENA_ZCAL", 11, 1 },
{ "PER_ENA_SYSCLK_ALIGN", 10, 1 },
- { "ENA_PER_RDCLK_ALIGN", 9, 1 },
- { "ENA_PER_DQS_ALIGN", 8, 1 },
- { "ENA_PER_READ_CTR", 7, 1 },
+ { "ENA_PER_READ_CTR", 9, 1 },
+ { "ENA_PER_RDCLK_ALIGN", 8, 1 },
+ { "ENA_PER_DQS_ALIGN", 7, 1 },
{ "PER_NEXT_RANK_PAIR", 5, 2 },
{ "FAST_SIM_PER_CNTR", 4, 1 },
{ "START_INIT_CAL", 3, 1 },
{ "START_PER_CAL", 2, 1 },
+ { "ABORT_ON_ERR_EN", 1, 1 },
{ "MC_DDRPHY_PC_PER_ZCAL_CONFIG", 0x4f03c, 0 },
{ "PER_ZCAL_ENA_RANK", 8, 8 },
{ "PER_ZCAL_NEXT_RANK", 5, 3 },
@@ -62515,6 +62545,8 @@ struct reg_info t5_mc_1_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x4c078, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x4c0d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x4c0d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x4c1b4, 0 },
@@ -62529,10 +62561,13 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x4c1fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x4c048, 0 },
@@ -62942,6 +62977,8 @@ struct reg_info t5_mc_1_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x4c278, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x4c2d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x4c2d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x4c3b4, 0 },
@@ -62956,10 +62993,13 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x4c3fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x4c248, 0 },
@@ -63369,6 +63409,8 @@ struct reg_info t5_mc_1_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x4c478, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x4c4d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x4c4d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x4c5b4, 0 },
@@ -63383,10 +63425,13 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x4c5fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x4c448, 0 },
@@ -63796,6 +63841,8 @@ struct reg_info t5_mc_1_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x4c678, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x4c6d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x4c6d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x4c7b4, 0 },
@@ -63810,10 +63857,13 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x4c7fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x4c648, 0 },
@@ -64223,6 +64273,8 @@ struct reg_info t5_mc_1_regs[] = {
{ "MEMINTD22_POS", 2, 2 },
{ "MEMINTD23_POS", 0, 2 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x4c878, 0 },
+ { "SYSCLK_RDCLK_OFFSET", 8, 7 },
+ { "SYSCLK_DQSCLK_OFFSET", 0, 7 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x4c8d4, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x4c8d8, 0 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x4c9b4, 0 },
@@ -64237,10 +64289,13 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_DP18_POWERDOWN_1", 0x4c9fc, 0 },
{ "MASTER_PD_CNTL", 15, 1 },
{ "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
{ "ANALOG_INPUT_STAB1", 8, 1 },
{ "SYSCLK_CLK_GATE", 6, 2 },
{ "WR_FIFO_STAB", 5, 1 },
{ "ADR_RX_PD", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
{ "TX_TRISTATE_CNTL", 1, 1 },
{ "DVCC_REG_PD", 0, 1 },
{ "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x4c848, 0 },
@@ -64322,6 +64377,7 @@ struct reg_info t5_mc_1_regs[] = {
{ "MC_DDRPHY_WC_CONFIG2", 0x4f608, 0 },
{ "NUM_VALID_SAMPLES", 12, 4 },
{ "FW_RD_WR", 6, 6 },
+ { "EN_RESET_WR_DELAY_WL", 0, 1 },
{ "MC_DDRPHY_WC_CONFIG3", 0x4f614, 0 },
{ "DDR4_MRS_CMD_DQ_EN", 15, 1 },
{ "MRS_CMD_DQ_ON", 9, 6 },
@@ -64906,6 +64962,9 @@ struct reg_info t5_edc_t50_regs[] = {
{ "ECC_CE_INT_ENABLE", 1, 1 },
{ "PERR_INT_ENABLE", 0, 1 },
{ "EDC_H_INT_CAUSE", 0x50078, 0 },
+ { "ECC_UE_INT0_CAUSE", 5, 1 },
+ { "ECC_CE_INT0_CAUSE", 4, 1 },
+ { "PERR_INT0_CAUSE", 3, 1 },
{ "ECC_UE_INT_CAUSE", 2, 1 },
{ "ECC_CE_INT_CAUSE", 1, 1 },
{ "PERR_INT_CAUSE", 0, 1 },
@@ -64985,6 +65044,9 @@ struct reg_info t5_edc_t51_regs[] = {
{ "ECC_CE_INT_ENABLE", 1, 1 },
{ "PERR_INT_ENABLE", 0, 1 },
{ "EDC_H_INT_CAUSE", 0x50878, 0 },
+ { "ECC_UE_INT0_CAUSE", 5, 1 },
+ { "ECC_CE_INT0_CAUSE", 4, 1 },
+ { "PERR_INT0_CAUSE", 3, 1 },
{ "ECC_UE_INT_CAUSE", 2, 1 },
{ "ECC_CE_INT_CAUSE", 1, 1 },
{ "PERR_INT_CAUSE", 0, 1 },
diff --git a/tools/tools/cxgbetool/reg_defs_t6.c b/tools/tools/cxgbetool/reg_defs_t6.c
new file mode 100644
index 0000000..f8a353b
--- /dev/null
+++ b/tools/tools/cxgbetool/reg_defs_t6.c
@@ -0,0 +1,57337 @@
+/* This file is automatically generated --- changes will be lost */
+/* Generation Date : Wed Jan 27 10:58:12 IST 2016 */
+/* Directory name: t6_reg.txt, Changeset: 4191:ce3ccd95c109 */
+__FBSDID("$FreeBSD$");
+
+struct reg_info t6_sge_regs[] = {
+ { "SGE_PF_KDOORBELL", 0x1e000, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1e004, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1e008, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1e00c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1e400, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1e404, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1e408, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1e40c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1e800, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1e804, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1e808, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1e80c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1ec00, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1ec04, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1ec08, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1ec0c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1f000, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1f004, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1f008, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1f00c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1f400, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1f404, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1f408, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1f40c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1f800, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1f804, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1f808, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1f80c, 0 },
+ { "SGE_PF_KDOORBELL", 0x1fc00, 0 },
+ { "QID", 15, 17 },
+ { "Sync", 14, 1 },
+ { "Type", 13, 1 },
+ { "PIDX", 0, 13 },
+ { "SGE_PF_GTS", 0x1fc04, 0 },
+ { "IngressQID", 16, 16 },
+ { "TimerReg", 13, 3 },
+ { "SEIntArm", 12, 1 },
+ { "CIDXInc", 0, 12 },
+ { "SGE_PF_KTIMESTAMP_LO", 0x1fc08, 0 },
+ { "SGE_PF_KTIMESTAMP_HI", 0x1fc0c, 0 },
+ { "SGE_CONTROL", 0x1008, 0 },
+ { "IgrAllCPLtoFL", 31, 1 },
+ { "FLSplitMin", 22, 9 },
+ { "RxPktCPLMode", 18, 1 },
+ { "EgrStatusPageSize", 17, 1 },
+ { "IngHintEnable1", 15, 1 },
+ { "IngHintEnable0", 14, 1 },
+ { "IngIntCompareIDX", 13, 1 },
+ { "PktShift", 10, 3 },
+ { "IngPCIeBoundary", 7, 3 },
+ { "IngPadBoundary", 4, 3 },
+ { "GlobalEnable", 0, 1 },
+ { "SGE_HOST_PAGE_SIZE", 0x100c, 0 },
+ { "HostPageSizePF7", 28, 4 },
+ { "HostPageSizePF6", 24, 4 },
+ { "HostPageSizePF5", 20, 4 },
+ { "HostPageSizePF4", 16, 4 },
+ { "HostPageSizePF3", 12, 4 },
+ { "HostPageSizePF2", 8, 4 },
+ { "HostPageSizePF1", 4, 4 },
+ { "HostPageSizePF0", 0, 4 },
+ { "SGE_EGRESS_QUEUES_PER_PAGE_PF", 0x1010, 0 },
+ { "QueuesPerPagePF7", 28, 4 },
+ { "QueuesPerPagePF6", 24, 4 },
+ { "QueuesPerPagePF5", 20, 4 },
+ { "QueuesPerPagePF4", 16, 4 },
+ { "QueuesPerPagePF3", 12, 4 },
+ { "QueuesPerPagePF2", 8, 4 },
+ { "QueuesPerPagePF1", 4, 4 },
+ { "QueuesPerPagePF0", 0, 4 },
+ { "SGE_EGRESS_QUEUES_PER_PAGE_VF", 0x1014, 0 },
+ { "QueuesPerPageVFPF7", 28, 4 },
+ { "QueuesPerPageVFPF6", 24, 4 },
+ { "QueuesPerPageVFPF5", 20, 4 },
+ { "QueuesPerPageVFPF4", 16, 4 },
+ { "QueuesPerPageVFPF3", 12, 4 },
+ { "QueuesPerPageVFPF2", 8, 4 },
+ { "QueuesPerPageVFPF1", 4, 4 },
+ { "QueuesPerPageVFPF0", 0, 4 },
+ { "SGE_USER_MODE_LIMITS", 0x1018, 0 },
+ { "Opcode_Min", 24, 8 },
+ { "Opcode_Max", 16, 8 },
+ { "Length_Min", 8, 8 },
+ { "Length_Max", 0, 8 },
+ { "SGE_WR_ERROR", 0x101c, 0 },
+ { "SGE_INT_CAUSE1", 0x1024, 0 },
+ { "perr_flm_CreditFifo", 30, 1 },
+ { "perr_imsg_hint_fifo", 29, 1 },
+ { "perr_pc_rsp", 23, 1 },
+ { "perr_pc_req", 22, 1 },
+ { "perr_dbp_pc_rsp_fifo3", 21, 1 },
+ { "perr_dbp_pc_rsp_fifo2", 20, 1 },
+ { "perr_dbp_pc_rsp_fifo1", 19, 1 },
+ { "perr_dbp_pc_rsp_fifo0", 18, 1 },
+ { "perr_dmarbt", 17, 1 },
+ { "perr_flm_DbpFifo", 16, 1 },
+ { "perr_flm_MCReq_fifo", 15, 1 },
+ { "perr_flm_HintFifo", 14, 1 },
+ { "perr_align_ctl_fifo3", 13, 1 },
+ { "perr_align_ctl_fifo2", 12, 1 },
+ { "perr_align_ctl_fifo1", 11, 1 },
+ { "perr_align_ctl_fifo0", 10, 1 },
+ { "perr_edma_fifo3", 9, 1 },
+ { "perr_edma_fifo2", 8, 1 },
+ { "perr_edma_fifo1", 7, 1 },
+ { "perr_edma_fifo0", 6, 1 },
+ { "perr_pd_fifo3", 5, 1 },
+ { "perr_pd_fifo2", 4, 1 },
+ { "perr_pd_fifo1", 3, 1 },
+ { "perr_pd_fifo0", 2, 1 },
+ { "perr_ing_ctxt_mifrsp", 1, 1 },
+ { "perr_egr_ctxt_mifrsp", 0, 1 },
+ { "SGE_INT_ENABLE1", 0x1028, 0 },
+ { "perr_flm_CreditFifo", 30, 1 },
+ { "perr_imsg_hint_fifo", 29, 1 },
+ { "perr_pc_rsp", 23, 1 },
+ { "perr_pc_req", 22, 1 },
+ { "perr_dbp_pc_rsp_fifo3", 21, 1 },
+ { "perr_dbp_pc_rsp_fifo2", 20, 1 },
+ { "perr_dbp_pc_rsp_fifo1", 19, 1 },
+ { "perr_dbp_pc_rsp_fifo0", 18, 1 },
+ { "perr_dmarbt", 17, 1 },
+ { "perr_flm_DbpFifo", 16, 1 },
+ { "perr_flm_MCReq_fifo", 15, 1 },
+ { "perr_flm_HintFifo", 14, 1 },
+ { "perr_align_ctl_fifo3", 13, 1 },
+ { "perr_align_ctl_fifo2", 12, 1 },
+ { "perr_align_ctl_fifo1", 11, 1 },
+ { "perr_align_ctl_fifo0", 10, 1 },
+ { "perr_edma_fifo3", 9, 1 },
+ { "perr_edma_fifo2", 8, 1 },
+ { "perr_edma_fifo1", 7, 1 },
+ { "perr_edma_fifo0", 6, 1 },
+ { "perr_pd_fifo3", 5, 1 },
+ { "perr_pd_fifo2", 4, 1 },
+ { "perr_pd_fifo1", 3, 1 },
+ { "perr_pd_fifo0", 2, 1 },
+ { "perr_ing_ctxt_mifrsp", 1, 1 },
+ { "perr_egr_ctxt_mifrsp", 0, 1 },
+ { "SGE_PERR_ENABLE1", 0x102c, 0 },
+ { "perr_flm_CreditFifo", 30, 1 },
+ { "perr_imsg_hint_fifo", 29, 1 },
+ { "perr_pc_rsp", 23, 1 },
+ { "perr_pc_req", 22, 1 },
+ { "perr_dbp_pc_rsp_fifo3", 21, 1 },
+ { "perr_dbp_pc_rsp_fifo2", 20, 1 },
+ { "perr_dbp_pc_rsp_fifo1", 19, 1 },
+ { "perr_dbp_pc_rsp_fifo0", 18, 1 },
+ { "perr_dmarbt", 17, 1 },
+ { "perr_flm_DbpFifo", 16, 1 },
+ { "perr_flm_MCReq_fifo", 15, 1 },
+ { "perr_flm_HintFifo", 14, 1 },
+ { "perr_align_ctl_fifo3", 13, 1 },
+ { "perr_align_ctl_fifo2", 12, 1 },
+ { "perr_align_ctl_fifo1", 11, 1 },
+ { "perr_align_ctl_fifo0", 10, 1 },
+ { "perr_edma_fifo3", 9, 1 },
+ { "perr_edma_fifo2", 8, 1 },
+ { "perr_edma_fifo1", 7, 1 },
+ { "perr_edma_fifo0", 6, 1 },
+ { "perr_pd_fifo3", 5, 1 },
+ { "perr_pd_fifo2", 4, 1 },
+ { "perr_pd_fifo1", 3, 1 },
+ { "perr_pd_fifo0", 2, 1 },
+ { "perr_ing_ctxt_mifrsp", 1, 1 },
+ { "perr_egr_ctxt_mifrsp", 0, 1 },
+ { "SGE_INT_CAUSE2", 0x1030, 0 },
+ { "perr_dbp_hint_fl_fifo", 24, 1 },
+ { "perr_egr_dbp_tx_coal", 23, 1 },
+ { "perr_dbp_fl_fifo", 22, 1 },
+ { "deq_ll_perr", 21, 1 },
+ { "enq_perr", 20, 1 },
+ { "deq_out_perr", 19, 1 },
+ { "buf_perr", 18, 1 },
+ { "perr_conm_sram", 14, 1 },
+ { "perr_isw_idma0_fifo", 12, 1 },
+ { "perr_isw_idma1_fifo", 11, 1 },
+ { "perr_isw_dbp_fifo", 10, 1 },
+ { "perr_isw_gts_fifo", 9, 1 },
+ { "perr_itp_evr", 8, 1 },
+ { "perr_flm_cntxmem", 7, 1 },
+ { "perr_flm_l1Cache", 6, 1 },
+ { "perr_dbp_hint_fifo", 5, 1 },
+ { "perr_dbp_hp_fifo", 4, 1 },
+ { "perr_db_fifo", 3, 1 },
+ { "perr_ing_ctxt_cache", 2, 1 },
+ { "perr_egr_ctxt_cache", 1, 1 },
+ { "perr_base_size", 0, 1 },
+ { "SGE_INT_ENABLE2", 0x1034, 0 },
+ { "perr_dbp_hint_fl_fifo", 24, 1 },
+ { "perr_egr_dbp_tx_coal", 23, 1 },
+ { "perr_dbp_fl_fifo", 22, 1 },
+ { "deq_ll_perr", 21, 1 },
+ { "enq_perr", 20, 1 },
+ { "deq_out_perr", 19, 1 },
+ { "buf_perr", 18, 1 },
+ { "perr_conm_sram", 14, 1 },
+ { "perr_isw_idma0_fifo", 12, 1 },
+ { "perr_isw_idma1_fifo", 11, 1 },
+ { "perr_isw_dbp_fifo", 10, 1 },
+ { "perr_isw_gts_fifo", 9, 1 },
+ { "perr_itp_evr", 8, 1 },
+ { "perr_flm_cntxmem", 7, 1 },
+ { "perr_flm_l1Cache", 6, 1 },
+ { "perr_dbp_hint_fifo", 5, 1 },
+ { "perr_dbp_hp_fifo", 4, 1 },
+ { "perr_db_fifo", 3, 1 },
+ { "perr_ing_ctxt_cache", 2, 1 },
+ { "perr_egr_ctxt_cache", 1, 1 },
+ { "perr_base_size", 0, 1 },
+ { "SGE_PERR_ENABLE2", 0x1038, 0 },
+ { "perr_dbp_hint_fl_fifo", 24, 1 },
+ { "perr_egr_dbp_tx_coal", 23, 1 },
+ { "perr_dbp_fl_fifo", 22, 1 },
+ { "deq_ll_perr", 21, 1 },
+ { "enq_perr", 20, 1 },
+ { "deq_out_perr", 19, 1 },
+ { "buf_perr", 18, 1 },
+ { "perr_conm_sram", 14, 1 },
+ { "perr_isw_idma0_fifo", 12, 1 },
+ { "perr_isw_idma1_fifo", 11, 1 },
+ { "perr_isw_dbp_fifo", 10, 1 },
+ { "perr_isw_gts_fifo", 9, 1 },
+ { "perr_itp_evr", 8, 1 },
+ { "perr_flm_cntxmem", 7, 1 },
+ { "perr_flm_l1Cache", 6, 1 },
+ { "perr_dbp_hint_fifo", 5, 1 },
+ { "perr_dbp_hp_fifo", 4, 1 },
+ { "perr_dbp_lp_fifo", 3, 1 },
+ { "perr_ing_ctxt_cache", 2, 1 },
+ { "perr_egr_ctxt_cache", 1, 1 },
+ { "perr_base_size", 0, 1 },
+ { "SGE_INT_CAUSE3", 0x103c, 0 },
+ { "err_flm_dbp", 31, 1 },
+ { "err_flm_idma1", 30, 1 },
+ { "err_flm_idma0", 29, 1 },
+ { "err_flm_hint", 28, 1 },
+ { "err_pcie_error3", 27, 1 },
+ { "err_pcie_error2", 26, 1 },
+ { "err_pcie_error1", 25, 1 },
+ { "err_pcie_error0", 24, 1 },
+ { "err_timer_above_max_qid", 23, 1 },
+ { "err_cpl_exceed_iqe_size", 22, 1 },
+ { "err_invalid_cidx_inc", 21, 1 },
+ { "err_itp_time_paused", 20, 1 },
+ { "err_cpl_opcode_0", 19, 1 },
+ { "err_dropped_db", 18, 1 },
+ { "err_data_cpl_on_high_qid1", 17, 1 },
+ { "err_data_cpl_on_high_qid0", 16, 1 },
+ { "err_bad_db_pidx3", 15, 1 },
+ { "err_bad_db_pidx2", 14, 1 },
+ { "err_bad_db_pidx1", 13, 1 },
+ { "err_bad_db_pidx0", 12, 1 },
+ { "err_ing_pcie_chan", 11, 1 },
+ { "err_ing_ctxt_prio", 10, 1 },
+ { "err_egr_ctxt_prio", 9, 1 },
+ { "dbp_tbuf_full", 8, 1 },
+ { "fatal_wre_len", 7, 1 },
+ { "reg_address_err", 6, 1 },
+ { "ingress_size_err", 5, 1 },
+ { "egress_size_err", 4, 1 },
+ { "err_inv_ctxt3", 3, 1 },
+ { "err_inv_ctxt2", 2, 1 },
+ { "err_inv_ctxt1", 1, 1 },
+ { "err_inv_ctxt0", 0, 1 },
+ { "SGE_INT_ENABLE3", 0x1040, 0 },
+ { "err_flm_dbp", 31, 1 },
+ { "err_flm_idma1", 30, 1 },
+ { "err_flm_idma0", 29, 1 },
+ { "err_flm_hint", 28, 1 },
+ { "err_pcie_error3", 27, 1 },
+ { "err_pcie_error2", 26, 1 },
+ { "err_pcie_error1", 25, 1 },
+ { "err_pcie_error0", 24, 1 },
+ { "err_timer_above_max_qid", 23, 1 },
+ { "err_cpl_exceed_iqe_size", 22, 1 },
+ { "err_invalid_cidx_inc", 21, 1 },
+ { "err_itp_time_paused", 20, 1 },
+ { "err_cpl_opcode_0", 19, 1 },
+ { "err_dropped_db", 18, 1 },
+ { "err_data_cpl_on_high_qid1", 17, 1 },
+ { "err_data_cpl_on_high_qid0", 16, 1 },
+ { "err_bad_db_pidx3", 15, 1 },
+ { "err_bad_db_pidx2", 14, 1 },
+ { "err_bad_db_pidx1", 13, 1 },
+ { "err_bad_db_pidx0", 12, 1 },
+ { "err_ing_pcie_chan", 11, 1 },
+ { "err_ing_ctxt_prio", 10, 1 },
+ { "err_egr_ctxt_prio", 9, 1 },
+ { "dbp_tbuf_full", 8, 1 },
+ { "fatal_wre_len", 7, 1 },
+ { "reg_address_err", 6, 1 },
+ { "ingress_size_err", 5, 1 },
+ { "egress_size_err", 4, 1 },
+ { "err_inv_ctxt3", 3, 1 },
+ { "err_inv_ctxt2", 2, 1 },
+ { "err_inv_ctxt1", 1, 1 },
+ { "err_inv_ctxt0", 0, 1 },
+ { "SGE_FL_BUFFER_SIZE0", 0x1044, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE1", 0x1048, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE2", 0x104c, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE3", 0x1050, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE4", 0x1054, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE5", 0x1058, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE6", 0x105c, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE7", 0x1060, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE8", 0x1064, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE9", 0x1068, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE10", 0x106c, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE11", 0x1070, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE12", 0x1074, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE13", 0x1078, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE14", 0x107c, 0 },
+ { "Size", 4, 20 },
+ { "SGE_FL_BUFFER_SIZE15", 0x1080, 0 },
+ { "Size", 4, 20 },
+ { "SGE_DBQ_CTXT_BADDR", 0x1084, 0 },
+ { "BaseAddr", 3, 29 },
+ { "SGE_IMSG_CTXT_BADDR", 0x1088, 0 },
+ { "BaseAddr", 3, 29 },
+ { "SGE_FLM_CACHE_BADDR", 0x108c, 0 },
+ { "BaseAddr", 3, 29 },
+ { "SGE_FLM_CFG", 0x1090, 0 },
+ { "OpMode", 26, 6 },
+ { "NullPtr", 20, 4 },
+ { "NullPtrEn", 19, 1 },
+ { "NoHdr", 18, 1 },
+ { "CachePtrCnt", 16, 2 },
+ { "EDRAMPtrCnt", 14, 2 },
+ { "HdrStartFLQ", 11, 3 },
+ { "FetchThresh", 6, 5 },
+ { "CreditCnt", 4, 2 },
+ { "CreditCntPacking", 2, 2 },
+ { "NoEDRAM", 0, 1 },
+ { "SGE_CONM_CTRL", 0x1094, 0 },
+ { "EgrThresholdPacking", 16, 8 },
+ { "EgrThreshold", 8, 8 },
+ { "IngThreshold", 2, 6 },
+ { "SGE_TIMESTAMP_LO", 0x1098, 0 },
+ { "SGE_TIMESTAMP_HI", 0x109c, 0 },
+ { "Opcode", 28, 2 },
+ { "Value", 0, 28 },
+ { "SGE_INGRESS_RX_THRESHOLD", 0x10a0, 0 },
+ { "Threshold_0", 24, 6 },
+ { "Threshold_1", 16, 6 },
+ { "Threshold_2", 8, 6 },
+ { "Threshold_3", 0, 6 },
+ { "SGE_DBFIFO_STATUS", 0x10a4, 0 },
+ { "vfifo_cnt", 15, 17 },
+ { "coal_ctl_fifo_cnt", 8, 6 },
+ { "merge_fifo_cnt", 0, 6 },
+ { "SGE_DOORBELL_CONTROL", 0x10a8, 0 },
+ { "HintDepthCtl", 27, 5 },
+ { "NoCoalesce", 26, 1 },
+ { "HP_Weight", 24, 2 },
+ { "HP_Disable", 23, 1 },
+ { "ForceUserDBtoLP", 22, 1 },
+ { "ForceVFPF0DBtoLP", 21, 1 },
+ { "ForceVFPF1DBtoLP", 20, 1 },
+ { "ForceVFPF2DBtoLP", 19, 1 },
+ { "ForceVFPF3DBtoLP", 18, 1 },
+ { "ForceVFPF4DBtoLP", 17, 1 },
+ { "ForceVFPF5DBtoLP", 16, 1 },
+ { "ForceVFPF6DBtoLP", 15, 1 },
+ { "ForceVFPF7DBtoLP", 14, 1 },
+ { "Enable_Drop", 13, 1 },
+ { "Drop_Timeout", 7, 6 },
+ { "InvOnDBSync", 6, 1 },
+ { "InvOnGTSSync", 5, 1 },
+ { "db_dbg_en", 4, 1 },
+ { "gts_dbg_timer_reg", 1, 3 },
+ { "gts_dbg_en", 0, 1 },
+ { "SGE_ITP_CONTROL", 0x10b4, 0 },
+ { "TScale", 28, 4 },
+ { "Critical_Time", 10, 15 },
+ { "LL_Empty", 4, 6 },
+ { "LL_Read_Wait_Disable", 0, 1 },
+ { "SGE_TIMER_VALUE_0_AND_1", 0x10b8, 0 },
+ { "TimerValue0", 16, 16 },
+ { "TimerValue1", 0, 16 },
+ { "SGE_TIMER_VALUE_2_AND_3", 0x10bc, 0 },
+ { "TimerValue2", 16, 16 },
+ { "TimerValue3", 0, 16 },
+ { "SGE_TIMER_VALUE_4_AND_5", 0x10c0, 0 },
+ { "TimerValue4", 16, 16 },
+ { "TimerValue5", 0, 16 },
+ { "SGE_GK_CONTROL", 0x10c4, 0 },
+ { "en_flm_fifth", 29, 1 },
+ { "fl_prog_thresh", 20, 9 },
+ { "coal_all_thread", 19, 1 },
+ { "en_pshb", 18, 1 },
+ { "en_db_fifth", 17, 1 },
+ { "db_prog_thresh", 8, 9 },
+ { "100ns_timer", 0, 8 },
+ { "SGE_GK_CONTROL2", 0x10c8, 0 },
+ { "dbq_timer_tick", 16, 16 },
+ { "fl_merge_cnt_thresh", 8, 4 },
+ { "merge_cnt_thresh", 0, 6 },
+ { "SGE_DEBUG_INDEX", 0x10cc, 0 },
+ { "SGE_DEBUG_DATA_HIGH", 0x10d0, 0 },
+ { "SGE_DEBUG_DATA_LOW", 0x10d4, 0 },
+ { "SGE_REVISION", 0x10d8, 0 },
+ { "SGE_INT_CAUSE4", 0x10dc, 0 },
+ { "err_ishift_ur1", 31, 1 },
+ { "err_ishift_ur0", 30, 1 },
+ { "bar2_egress_len_or_addr_err", 29, 1 },
+ { "err_cpl_exceed_max_iqe_size1", 28, 1 },
+ { "err_cpl_exceed_max_iqe_size0", 27, 1 },
+ { "err_wr_len_too_large3", 26, 1 },
+ { "err_wr_len_too_large2", 25, 1 },
+ { "err_wr_len_too_large1", 24, 1 },
+ { "err_wr_len_too_large0", 23, 1 },
+ { "err_large_minfetch_with_txcoal3", 22, 1 },
+ { "err_large_minfetch_with_txcoal2", 21, 1 },
+ { "err_large_minfetch_with_txcoal1", 20, 1 },
+ { "err_large_minfetch_with_txcoal0", 19, 1 },
+ { "coal_with_hp_disable_err", 18, 1 },
+ { "bar2_egress_coal0_err", 17, 1 },
+ { "bar2_egress_size_err", 16, 1 },
+ { "flm_pc_rsp_err", 15, 1 },
+ { "err_th3_max_fetch", 14, 1 },
+ { "err_th2_max_fetch", 13, 1 },
+ { "err_th1_max_fetch", 12, 1 },
+ { "err_th0_max_fetch", 11, 1 },
+ { "err_rx_cpl_packet_size1", 10, 1 },
+ { "err_rx_cpl_packet_size0", 9, 1 },
+ { "err_bad_upfl_inc_credit3", 8, 1 },
+ { "err_bad_upfl_inc_credit2", 7, 1 },
+ { "err_bad_upfl_inc_credit1", 6, 1 },
+ { "err_bad_upfl_inc_credit0", 5, 1 },
+ { "err_physaddr_len0_idma1", 4, 1 },
+ { "err_physaddr_len0_idma0", 3, 1 },
+ { "err_flm_invalid_pkt_drop1", 2, 1 },
+ { "err_flm_invalid_pkt_drop0", 1, 1 },
+ { "err_unexpected_timer", 0, 1 },
+ { "SGE_INT_ENABLE4", 0x10e0, 0 },
+ { "err_ishift_ur1", 31, 1 },
+ { "err_ishift_ur0", 30, 1 },
+ { "bar2_egress_len_or_addr_err", 29, 1 },
+ { "err_cpl_exceed_max_iqe_size1", 28, 1 },
+ { "err_cpl_exceed_max_iqe_size0", 27, 1 },
+ { "err_wr_len_too_large3", 26, 1 },
+ { "err_wr_len_too_large2", 25, 1 },
+ { "err_wr_len_too_large1", 24, 1 },
+ { "err_wr_len_too_large0", 23, 1 },
+ { "err_large_minfetch_with_txcoal3", 22, 1 },
+ { "err_large_minfetch_with_txcoal2", 21, 1 },
+ { "err_large_minfetch_with_txcoal1", 20, 1 },
+ { "err_large_minfetch_with_txcoal0", 19, 1 },
+ { "coal_with_hp_disable_err", 18, 1 },
+ { "bar2_egress_coal0_err", 17, 1 },
+ { "bar2_egress_size_err", 16, 1 },
+ { "flm_pc_rsp_err", 15, 1 },
+ { "err_th3_max_fetch", 14, 1 },
+ { "err_th2_max_fetch", 13, 1 },
+ { "err_th1_max_fetch", 12, 1 },
+ { "err_th0_max_fetch", 11, 1 },
+ { "err_rx_cpl_packet_size1", 10, 1 },
+ { "err_rx_cpl_packet_size0", 9, 1 },
+ { "err_bad_upfl_inc_credit3", 8, 1 },
+ { "err_bad_upfl_inc_credit2", 7, 1 },
+ { "err_bad_upfl_inc_credit1", 6, 1 },
+ { "err_bad_upfl_inc_credit0", 5, 1 },
+ { "err_physaddr_len0_idma1", 4, 1 },
+ { "err_physaddr_len0_idma0", 3, 1 },
+ { "err_flm_invalid_pkt_drop1", 2, 1 },
+ { "err_flm_invalid_pkt_drop0", 1, 1 },
+ { "err_unexpected_timer", 0, 1 },
+ { "SGE_STAT_TOTAL", 0x10e4, 0 },
+ { "SGE_STAT_MATCH", 0x10e8, 0 },
+ { "SGE_STAT_CFG", 0x10ec, 0 },
+ { "StatSource", 9, 4 },
+ { "ITPOpMode", 8, 1 },
+ { "EgrCtxtOpMode", 6, 2 },
+ { "IngCtxtOpMode", 4, 2 },
+ { "StatMode", 0, 4 },
+ { "SGE_HINT_CFG", 0x10f0, 0 },
+ { "uPCutoffThreshLp", 12, 11 },
+ { "HintsAllowedNoHdr", 6, 6 },
+ { "HintsAllowedHdr", 0, 6 },
+ { "SGE_INGRESS_QUEUES_PER_PAGE_PF", 0x10f4, 0 },
+ { "QueuesPerPagePF7", 28, 4 },
+ { "QueuesPerPagePF6", 24, 4 },
+ { "QueuesPerPagePF5", 20, 4 },
+ { "QueuesPerPagePF4", 16, 4 },
+ { "QueuesPerPagePF3", 12, 4 },
+ { "QueuesPerPagePF2", 8, 4 },
+ { "QueuesPerPagePF1", 4, 4 },
+ { "QueuesPerPagePF0", 0, 4 },
+ { "SGE_INGRESS_QUEUES_PER_PAGE_VF", 0x10f8, 0 },
+ { "QueuesPerPageVFPF7", 28, 4 },
+ { "QueuesPerPageVFPF6", 24, 4 },
+ { "QueuesPerPageVFPF5", 20, 4 },
+ { "QueuesPerPageVFPF4", 16, 4 },
+ { "QueuesPerPageVFPF3", 12, 4 },
+ { "QueuesPerPageVFPF2", 8, 4 },
+ { "QueuesPerPageVFPF1", 4, 4 },
+ { "QueuesPerPageVFPF0", 0, 4 },
+ { "SGE_ERROR_STATS", 0x1100, 0 },
+ { "Cause_Register", 24, 3 },
+ { "Cause_Bit", 19, 5 },
+ { "Uncaptured_Error", 18, 1 },
+ { "Error_QID_Valid", 17, 1 },
+ { "Error_QID", 0, 17 },
+ { "SGE_IDMA0_DROP_CNT", 0x1104, 0 },
+ { "SGE_IDMA1_DROP_CNT", 0x1108, 0 },
+ { "SGE_INT_CAUSE5", 0x110c, 0 },
+ { "err_T_RxCRC", 31, 1 },
+ { "perr_MC_RspData", 30, 1 },
+ { "perr_PC_RspData", 29, 1 },
+ { "perr_PD_RdRspData", 28, 1 },
+ { "perr_U_RxData", 27, 1 },
+ { "perr_UD_RxData", 26, 1 },
+ { "perr_uP_Data", 25, 1 },
+ { "perr_CIM2SGE_RxData", 24, 1 },
+ { "perr_hint_delay_fifo1", 23, 1 },
+ { "perr_hint_delay_fifo0", 22, 1 },
+ { "perr_imsg_pd_fifo", 21, 1 },
+ { "perr_ulptx_fifo1", 20, 1 },
+ { "perr_ulptx_fifo0", 19, 1 },
+ { "perr_idma2imsg_fifo1", 18, 1 },
+ { "perr_idma2imsg_fifo0", 17, 1 },
+ { "perr_pointer_data_fifo0", 16, 1 },
+ { "perr_pointer_data_fifo1", 15, 1 },
+ { "perr_pointer_hdr_fifo0", 14, 1 },
+ { "perr_pointer_hdr_fifo1", 13, 1 },
+ { "perr_payload_fifo0", 12, 1 },
+ { "perr_payload_fifo1", 11, 1 },
+ { "perr_edma_input_fifo3", 10, 1 },
+ { "perr_edma_input_fifo2", 9, 1 },
+ { "perr_edma_input_fifo1", 8, 1 },
+ { "perr_edma_input_fifo0", 7, 1 },
+ { "perr_mgt_bar2_fifo", 6, 1 },
+ { "perr_headersplit_fifo1", 5, 1 },
+ { "perr_headersplit_fifo0", 4, 1 },
+ { "perr_cim_fifo1", 3, 1 },
+ { "perr_cim_fifo0", 2, 1 },
+ { "perr_idma_switch_output_fifo1", 1, 1 },
+ { "perr_idma_switch_output_fifo0", 0, 1 },
+ { "SGE_INT_ENABLE5", 0x1110, 0 },
+ { "err_T_RxCRC", 31, 1 },
+ { "perr_MC_RspData", 30, 1 },
+ { "perr_PC_RspData", 29, 1 },
+ { "perr_PD_RdRspData", 28, 1 },
+ { "perr_U_RxData", 27, 1 },
+ { "perr_UD_RxData", 26, 1 },
+ { "perr_uP_Data", 25, 1 },
+ { "perr_CIM2SGE_RxData", 24, 1 },
+ { "perr_hint_delay_fifo1", 23, 1 },
+ { "perr_hint_delay_fifo0", 22, 1 },
+ { "perr_imsg_pd_fifo", 21, 1 },
+ { "perr_ulptx_fifo1", 20, 1 },
+ { "perr_ulptx_fifo0", 19, 1 },
+ { "perr_idma2imsg_fifo1", 18, 1 },
+ { "perr_idma2imsg_fifo0", 17, 1 },
+ { "perr_pointer_data_fifo0", 16, 1 },
+ { "perr_pointer_data_fifo1", 15, 1 },
+ { "perr_pointer_hdr_fifo0", 14, 1 },
+ { "perr_pointer_hdr_fifo1", 13, 1 },
+ { "perr_payload_fifo0", 12, 1 },
+ { "perr_payload_fifo1", 11, 1 },
+ { "perr_edma_input_fifo3", 10, 1 },
+ { "perr_edma_input_fifo2", 9, 1 },
+ { "perr_edma_input_fifo1", 8, 1 },
+ { "perr_edma_input_fifo0", 7, 1 },
+ { "perr_mgt_bar2_fifo", 6, 1 },
+ { "perr_headersplit_fifo1", 5, 1 },
+ { "perr_headersplit_fifo0", 4, 1 },
+ { "perr_cim_fifo1", 3, 1 },
+ { "perr_cim_fifo0", 2, 1 },
+ { "perr_idma_switch_output_fifo1", 1, 1 },
+ { "perr_idma_switch_output_fifo0", 0, 1 },
+ { "SGE_PERR_ENABLE5", 0x1114, 0 },
+ { "err_T_RxCRC", 31, 1 },
+ { "perr_MC_RspData", 30, 1 },
+ { "perr_PC_RspData", 29, 1 },
+ { "perr_PD_RdRspData", 28, 1 },
+ { "perr_U_RxData", 27, 1 },
+ { "perr_UD_RxData", 26, 1 },
+ { "perr_uP_Data", 25, 1 },
+ { "perr_CIM2SGE_RxData", 24, 1 },
+ { "perr_hint_delay_fifo1", 23, 1 },
+ { "perr_hint_delay_fifo0", 22, 1 },
+ { "perr_imsg_pd_fifo", 21, 1 },
+ { "perr_ulptx_fifo1", 20, 1 },
+ { "perr_ulptx_fifo0", 19, 1 },
+ { "perr_idma2imsg_fifo1", 18, 1 },
+ { "perr_idma2imsg_fifo0", 17, 1 },
+ { "perr_pointer_data_fifo0", 16, 1 },
+ { "perr_pointer_data_fifo1", 15, 1 },
+ { "perr_pointer_hdr_fifo0", 14, 1 },
+ { "perr_pointer_hdr_fifo1", 13, 1 },
+ { "perr_payload_fifo0", 12, 1 },
+ { "perr_payload_fifo1", 11, 1 },
+ { "perr_edma_input_fifo3", 10, 1 },
+ { "perr_edma_input_fifo2", 9, 1 },
+ { "perr_edma_input_fifo1", 8, 1 },
+ { "perr_edma_input_fifo0", 7, 1 },
+ { "perr_mgt_bar2_fifo", 6, 1 },
+ { "perr_headersplit_fifo1", 5, 1 },
+ { "perr_headersplit_fifo0", 4, 1 },
+ { "perr_cim_fifo1", 3, 1 },
+ { "perr_cim_fifo0", 2, 1 },
+ { "perr_idma_switch_output_fifo1", 1, 1 },
+ { "perr_idma_switch_output_fifo0", 0, 1 },
+ { "SGE_FETCH_BURST_MAX_0_AND_1", 0x111c, 0 },
+ { "FetchBurstMax0", 16, 10 },
+ { "FetchBurstMax1", 0, 10 },
+ { "SGE_FETCH_BURST_MAX_2_AND_3", 0x1120, 0 },
+ { "FetchBurstMax2", 16, 10 },
+ { "FetchBurstMax3", 0, 10 },
+ { "SGE_CONTROL2", 0x1124, 0 },
+ { "uPFLCutoffDis", 21, 1 },
+ { "RxCplSizeAutocorrect", 20, 1 },
+ { "IdmaArbRoundRobin", 19, 1 },
+ { "IngPackBoundary", 16, 3 },
+ { "CGEN_Egress_Context", 15, 1 },
+ { "CGEN_Ingress_Context", 14, 1 },
+ { "CGEN_IDMA", 13, 1 },
+ { "CGEN_DBP", 12, 1 },
+ { "CGEN_EDMA", 11, 1 },
+ { "VFIFO_Enable", 10, 1 },
+ { "FLM_Reschedule_Mode", 9, 1 },
+ { "HintDepthCtlFL", 4, 5 },
+ { "Force_Ordering", 3, 1 },
+ { "TX_Coalesce_Size", 2, 1 },
+ { "Coal_Strict_CIM_Pri", 1, 1 },
+ { "TX_Coalesce_Pri", 0, 1 },
+ { "SGE_INT_CAUSE6", 0x1128, 0 },
+ { "err_db_sync", 21, 1 },
+ { "err_gts_sync", 20, 1 },
+ { "fatal_large_coal", 19, 1 },
+ { "pl_bar2_frm_err", 18, 1 },
+ { "silent_drop_tx_coal", 17, 1 },
+ { "err_inv_ctxt4", 16, 1 },
+ { "err_bad_db_pidx4", 15, 1 },
+ { "err_bad_upfl_inc_credit4", 14, 1 },
+ { "fatal_tag_mismatch", 13, 1 },
+ { "fatal_enq_ctl_rdy", 12, 1 },
+ { "err_pc_rsp_len3", 11, 1 },
+ { "err_pc_rsp_len2", 10, 1 },
+ { "err_pc_rsp_len1", 9, 1 },
+ { "err_pc_rsp_len0", 8, 1 },
+ { "fatal_enq2ll_vld", 7, 1 },
+ { "fatal_ll_empty", 6, 1 },
+ { "fatal_off_wdenq", 5, 1 },
+ { "fatal_deq_drdy", 3, 2 },
+ { "fatal_outp_drdy", 1, 2 },
+ { "fatal_deq", 0, 1 },
+ { "SGE_INT_ENABLE6", 0x112c, 0 },
+ { "err_db_sync", 21, 1 },
+ { "err_gts_sync", 20, 1 },
+ { "fatal_large_coal", 19, 1 },
+ { "pl_bar2_frm_err", 18, 1 },
+ { "silent_drop_tx_coal", 17, 1 },
+ { "err_inv_ctxt4", 16, 1 },
+ { "err_bad_db_pidx4", 15, 1 },
+ { "err_bad_upfl_inc_credit4", 14, 1 },
+ { "fatal_tag_mismatch", 13, 1 },
+ { "fatal_enq_ctl_rdy", 12, 1 },
+ { "err_pc_rsp_len3", 11, 1 },
+ { "err_pc_rsp_len2", 10, 1 },
+ { "err_pc_rsp_len1", 9, 1 },
+ { "err_pc_rsp_len0", 8, 1 },
+ { "fatal_enq2ll_vld", 7, 1 },
+ { "fatal_ll_empty", 6, 1 },
+ { "fatal_off_wdenq", 5, 1 },
+ { "fatal_deq_drdy", 3, 2 },
+ { "fatal_outp_drdy", 1, 2 },
+ { "fatal_deq", 0, 1 },
+ { "SGE_DBVFIFO_BADDR", 0x1138, 0 },
+ { "BaseAddr", 3, 29 },
+ { "SGE_DBVFIFO_SIZE", 0x113c, 0 },
+ { "SGE_CHANGESET", 0x1144, 0 },
+ { "SGE_PC_RSP_ERROR", 0x1148, 0 },
+ { "SGE_TBUF_CONTROL", 0x114c, 0 },
+ { "DbpTbufRsv1", 9, 9 },
+ { "DbpTbufRsv0", 0, 9 },
+ { "SGE_PC0_REQ_BIST_CMD", 0x1180, 0 },
+ { "SGE_PC0_REQ_BIST_ERROR_CNT", 0x1184, 0 },
+ { "SGE_PC1_REQ_BIST_CMD", 0x1190, 0 },
+ { "SGE_PC1_REQ_BIST_ERROR_CNT", 0x1194, 0 },
+ { "SGE_PC0_RSP_BIST_CMD", 0x11a0, 0 },
+ { "SGE_PC0_RSP_BIST_ERROR_CNT", 0x11a4, 0 },
+ { "SGE_PC1_RSP_BIST_CMD", 0x11b0, 0 },
+ { "SGE_PC1_RSP_BIST_ERROR_CNT", 0x11b4, 0 },
+ { "SGE_CTXT_CMD", 0x11fc, 0 },
+ { "Busy", 31, 1 },
+ { "Opcode", 28, 2 },
+ { "CtxtType", 24, 2 },
+ { "QID", 0, 17 },
+ { "SGE_CTXT_DATA0", 0x1200, 0 },
+ { "SGE_CTXT_DATA1", 0x1204, 0 },
+ { "SGE_CTXT_DATA2", 0x1208, 0 },
+ { "SGE_CTXT_DATA3", 0x120c, 0 },
+ { "SGE_CTXT_DATA4", 0x1210, 0 },
+ { "SGE_CTXT_DATA5", 0x1214, 0 },
+ { "SGE_CTXT_DATA6", 0x1218, 0 },
+ { "SGE_CTXT_DATA7", 0x121c, 0 },
+ { "SGE_CTXT_MASK0", 0x1220, 0 },
+ { "SGE_CTXT_MASK1", 0x1224, 0 },
+ { "SGE_CTXT_MASK2", 0x1228, 0 },
+ { "SGE_CTXT_MASK3", 0x122c, 0 },
+ { "SGE_CTXT_MASK4", 0x1230, 0 },
+ { "SGE_CTXT_MASK5", 0x1234, 0 },
+ { "SGE_CTXT_MASK6", 0x1238, 0 },
+ { "SGE_CTXT_MASK7", 0x123c, 0 },
+ { "SGE_QBASE_MAP0", 0x1240, 0 },
+ { "Egress0_Size", 24, 5 },
+ { "Egress1_Size", 16, 5 },
+ { "Ingress0_Size", 8, 5 },
+ { "Ingress1_Size", 0, 5 },
+ { "SGE_QBASE_MAP1", 0x1244, 0 },
+ { "SGE_QBASE_MAP2", 0x1248, 0 },
+ { "SGE_QBASE_MAP3", 0x124c, 0 },
+ { "Ingress1_Base", 16, 16 },
+ { "Ingress0_Base", 0, 16 },
+ { "SGE_QBASE_INDEX", 0x1250, 0 },
+ { "SGE_CONM_CTRL2", 0x1254, 0 },
+ { "FlmThreshPack", 8, 7 },
+ { "FlmThresh", 0, 7 },
+ { "SGE_DEBUG_CONM", 0x1258, 0 },
+ { "mps_ch_cng", 16, 16 },
+ { "tp_ch_cng", 14, 2 },
+ { "st_cong", 12, 2 },
+ { "last_xoff", 10, 1 },
+ { "last_qid", 0, 10 },
+ { "SGE_DBG_QUEUE_STAT0_CTRL", 0x125c, 0 },
+ { "imsg_gts_sel", 18, 1 },
+ { "mgt_sel", 17, 1 },
+ { "db_gts_qid", 0, 17 },
+ { "SGE_DBG_QUEUE_STAT1_CTRL", 0x1260, 0 },
+ { "imsg_gts_sel", 18, 1 },
+ { "mgt_sel", 17, 1 },
+ { "db_gts_qid", 0, 17 },
+ { "SGE_DBG_QUEUE_STAT0", 0x1264, 0 },
+ { "SGE_DBG_QUEUE_STAT1", 0x1268, 0 },
+ { "SGE_DBG_BAR2_PKT_CNT", 0x126c, 0 },
+ { "SGE_DBG_DB_PKT_CNT", 0x1270, 0 },
+ { "SGE_DBG_GTS_PKT_CNT", 0x1274, 0 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_0", 0x1280, 0 },
+ { "debug_bar2_sop_cnt", 28, 4 },
+ { "debug_bar2_eop_cnt", 24, 4 },
+ { "debug_uP_SOP_cnt", 20, 4 },
+ { "debug_uP_EOP_cnt", 16, 4 },
+ { "debug_CIM_SOP1_cnt", 12, 4 },
+ { "debug_CIM_EOP1_cnt", 8, 4 },
+ { "debug_CIM_SOP0_cnt", 4, 4 },
+ { "debug_CIM_EOP0_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_1", 0x1284, 0 },
+ { "debug_T_Rx_SOP1_cnt", 28, 4 },
+ { "debug_T_Rx_EOP1_cnt", 24, 4 },
+ { "debug_T_Rx_SOP0_cnt", 20, 4 },
+ { "debug_T_Rx_EOP0_cnt", 16, 4 },
+ { "debug_U_Rx_SOP1_cnt", 12, 4 },
+ { "debug_U_Rx_EOP1_cnt", 8, 4 },
+ { "debug_U_Rx_SOP0_cnt", 4, 4 },
+ { "debug_U_Rx_EOP0_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_2", 0x1288, 0 },
+ { "dbg_tbuf_used1", 9, 9 },
+ { "dbg_tbuf_used0", 0, 9 },
+ { "SGE_DEBUG1_DBP_THREAD", 0x128c, 0 },
+ { "wr_deq_cnt", 12, 4 },
+ { "wr_enq_cnt", 8, 4 },
+ { "fl_deq_cnt", 4, 4 },
+ { "fl_enq_cnt", 0, 4 },
+ { "SGE_DEBUG1_DBP_THREAD", 0x1290, 0 },
+ { "wr_deq_cnt", 12, 4 },
+ { "wr_enq_cnt", 8, 4 },
+ { "fl_deq_cnt", 4, 4 },
+ { "fl_enq_cnt", 0, 4 },
+ { "SGE_DEBUG1_DBP_THREAD", 0x1294, 0 },
+ { "wr_deq_cnt", 12, 4 },
+ { "wr_enq_cnt", 8, 4 },
+ { "fl_deq_cnt", 4, 4 },
+ { "fl_enq_cnt", 0, 4 },
+ { "SGE_DEBUG1_DBP_THREAD", 0x1298, 0 },
+ { "wr_deq_cnt", 12, 4 },
+ { "wr_enq_cnt", 8, 4 },
+ { "fl_deq_cnt", 4, 4 },
+ { "fl_enq_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_7", 0x129c, 0 },
+ { "debug_PC_Rsp_SOP_cnt", 28, 4 },
+ { "debug_PC_Rsp_EOP_cnt", 24, 4 },
+ { "debug_PC_Req_SOP_cnt", 20, 4 },
+ { "debug_PC_Req_EOP_cnt", 16, 4 },
+ { "debug_PD_WrReq_SOP1_cnt", 12, 4 },
+ { "debug_PD_WrReq_EOP1_cnt", 8, 4 },
+ { "debug_PD_WrReq_SOP0_cnt", 4, 4 },
+ { "debug_PD_WrReq_EOP0_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_8", 0x12a0, 0 },
+ { "debug_PL_BAR2_ReqVld", 31, 1 },
+ { "debug_PL_BAR2_ReqFull", 30, 1 },
+ { "GlobalEnable_Off", 29, 1 },
+ { "debug_CIM2SGE_RxAFull_d", 27, 2 },
+ { "debug_CPLSW_CIM_TxAFull_d", 25, 2 },
+ { "debug_uP_Full", 24, 1 },
+ { "debug_M_rd_req_outstanding_PC", 23, 1 },
+ { "debug_M_rd_req_outstanding_VFIFO", 22, 1 },
+ { "debug_M_rd_req_outstanding_IMSG", 21, 1 },
+ { "debug_M_rd_req_outstanding_CMARB", 20, 1 },
+ { "debug_M_rd_req_outstanding_FLM", 19, 1 },
+ { "debug_M_ReqVld", 18, 1 },
+ { "debug_M_ReqRdy", 17, 1 },
+ { "debug_M_RspVld", 16, 1 },
+ { "debug_PD_WrReq_Int3_cnt", 12, 4 },
+ { "debug_PD_WrReq_Int2_cnt", 8, 4 },
+ { "debug_PD_WrReq_Int1_cnt", 4, 4 },
+ { "debug_PD_WrReq_Int0_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_9", 0x12a4, 0 },
+ { "debug_CPLSW_TP_Rx_SOP1_cnt", 28, 4 },
+ { "debug_CPLSW_TP_Rx_EOP1_cnt", 24, 4 },
+ { "debug_CPLSW_TP_Rx_SOP0_cnt", 20, 4 },
+ { "debug_CPLSW_TP_Rx_EOP0_cnt", 16, 4 },
+ { "debug_CPLSW_CIM_SOP0_cnt", 4, 4 },
+ { "debug_CPLSW_CIM_EOP0_cnt", 0, 4 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_10", 0x12a8, 0 },
+ { "debug_idma1_s_cpl_flit_remaining", 28, 4 },
+ { "debug_idma1_idma2imsg_cmp_out_srdy", 27, 1 },
+ { "debug_idma1_idma2imsg_cmp_out_rss", 26, 1 },
+ { "debug_idma1_idma2imsg_cmp_out_nocpl", 25, 1 },
+ { "debug_idma1_IDMA2IMSG_Full", 24, 1 },
+ { "debug_idma1_IDMA2IMSG_EOP", 23, 1 },
+ { "debug_idma1_idma2imsg_fifo_in_drdy", 22, 1 },
+ { "debug_idma1_idma2imsg_cmp_in_drdy", 21, 1 },
+ { "debug_idma0_s_cpl_flit_remaining", 17, 4 },
+ { "debug_idma0_idma2imsg_cmp_out_srdy", 16, 1 },
+ { "debug_idma0_idma2imsg_cmp_out_rss", 15, 1 },
+ { "debug_idma0_idma2imsg_cmp_out_nocpl", 14, 1 },
+ { "debug_idma0_IDMA2IMSG_Full", 13, 1 },
+ { "debug_idma0_IDMA2IMSG_EOP", 12, 1 },
+ { "debug_idma0_idma2imsg_cmp_in_drdy", 11, 1 },
+ { "debug_idma0_idma2imsg_fifo_in_drdy", 10, 1 },
+ { "debug_T_RxAFull_d", 8, 2 },
+ { "debug_PD_WrReqAFull_d", 6, 2 },
+ { "debug_PC_RspAFull_d", 5, 1 },
+ { "debug_PC_ReqAFull_d", 4, 1 },
+ { "debug_U_RxAFull_d", 2, 2 },
+ { "debug_CIM_AFull_d", 0, 1 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_11", 0x12ac, 0 },
+ { "debug_flm_idma1_cache_data_active", 24, 1 },
+ { "debug_flm_idma1_cache_hdr_active", 23, 1 },
+ { "debug_flm_idma1_ctxt_data_active", 22, 1 },
+ { "debug_flm_idma1_ctxt_hdr_active", 21, 1 },
+ { "debug_st_flm_idma1_cache", 19, 2 },
+ { "debug_st_flm_idma1_ctxt", 16, 3 },
+ { "debug_flm_idma0_cache_data_active", 8, 1 },
+ { "debug_flm_idma0_cache_hdr_active", 7, 1 },
+ { "debug_flm_idma0_ctxt_data_active", 6, 1 },
+ { "debug_flm_idma0_ctxt_hdr_active", 5, 1 },
+ { "debug_st_flm_idma0_cache", 3, 2 },
+ { "debug_st_flm_idma0_ctxt", 0, 3 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_12", 0x12b0, 0 },
+ { "debug_CPLSW_SOP1_cnt", 28, 4 },
+ { "debug_CPLSW_EOP1_cnt", 24, 4 },
+ { "debug_CPLSW_SOP0_cnt", 20, 4 },
+ { "debug_CPLSW_EOP0_cnt", 16, 4 },
+ { "debug_idma1_ishift_tx_size", 8, 7 },
+ { "debug_idma0_ishift_tx_size", 0, 7 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_13", 0x12b4, 0 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_14", 0x12b8, 0 },
+ { "SGE_DEBUG_DATA_HIGH_INDEX_15", 0x12bc, 0 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_0", 0x12c0, 0 },
+ { "debug_st_idma1_flm_req", 29, 3 },
+ { "debug_st_idma0_flm_req", 26, 3 },
+ { "debug_st_imsg_ctxt", 23, 3 },
+ { "debug_st_imsg", 18, 5 },
+ { "debug_st_idma1_ialn", 16, 2 },
+ { "debug_st_idma1_idma2imsg", 15, 1 },
+ { "debug_st_idma1_idma_sm", 9, 6 },
+ { "debug_st_idma0_ialn", 7, 2 },
+ { "debug_st_idma0_idma2imsg", 6, 1 },
+ { "debug_st_idma0_idma_sm", 0, 6 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_1", 0x12c4, 0 },
+ { "debug_itp_empty", 12, 6 },
+ { "debug_itp_expired", 6, 6 },
+ { "debug_itp_pause", 5, 1 },
+ { "debug_itp_del_done", 4, 1 },
+ { "debug_itp_add_done", 3, 1 },
+ { "debug_itp_evr_state", 0, 3 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_2", 0x12c8, 0 },
+ { "debug_st_dbp_upcp_main", 14, 3 },
+ { "debug_st_dbp_dbfifo_main", 13, 1 },
+ { "debug_st_dbp_ctxt", 10, 3 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_3", 0x12cc, 0 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_4", 0x12d0, 0 },
+ { "debug_st_flm_dbptr", 30, 2 },
+ { "debug_flm_cache_locked_count", 23, 7 },
+ { "debug_flm_cache_agent", 20, 3 },
+ { "debug_st_flm_cache", 16, 4 },
+ { "debug_flm_dbptr_cidx_stall", 12, 1 },
+ { "debug_flm_dbptr_qid", 0, 12 },
+ { "SGE_DEBUG0_DBP_THREAD", 0x12d4, 0 },
+ { "thread_st_main", 25, 6 },
+ { "thread_st_cimfl", 21, 4 },
+ { "thread_cmdop", 17, 4 },
+ { "thread_qid", 0, 17 },
+ { "SGE_DEBUG0_DBP_THREAD", 0x12d8, 0 },
+ { "thread_st_main", 25, 6 },
+ { "thread_st_cimfl", 21, 4 },
+ { "thread_cmdop", 17, 4 },
+ { "thread_qid", 0, 17 },
+ { "SGE_DEBUG0_DBP_THREAD", 0x12dc, 0 },
+ { "thread_st_main", 25, 6 },
+ { "thread_st_cimfl", 21, 4 },
+ { "thread_cmdop", 17, 4 },
+ { "thread_qid", 0, 17 },
+ { "SGE_DEBUG0_DBP_THREAD", 0x12e0, 0 },
+ { "thread_st_main", 25, 6 },
+ { "thread_st_cimfl", 21, 4 },
+ { "thread_cmdop", 17, 4 },
+ { "thread_qid", 0, 17 },
+ { "SGE_DEBUG0_DBP_THREAD", 0x12e4, 0 },
+ { "thread_st_main", 25, 6 },
+ { "thread_st_cimfl", 21, 4 },
+ { "thread_cmdop", 17, 4 },
+ { "thread_qid", 0, 17 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_10", 0x12e8, 0 },
+ { "debug_imsg_cpl", 16, 8 },
+ { "debug_imsg_qid", 0, 16 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_11", 0x12ec, 0 },
+ { "debug_idma1_qid", 16, 16 },
+ { "debug_idma0_qid", 0, 16 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_12", 0x12f0, 0 },
+ { "debug_idma1_flm_req_qid", 16, 16 },
+ { "debug_idma0_flm_req_qid", 0, 16 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_13", 0x12f4, 0 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_14", 0x12f8, 0 },
+ { "SGE_DEBUG_DATA_LOW_INDEX_15", 0x12fc, 0 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1300, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1304, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1308, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x130c, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1310, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1314, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x1318, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_PF", 0x131c, 0 },
+ { "PfIQsPerPage", 28, 4 },
+ { "PfEQsPerPage", 24, 4 },
+ { "PfWCQsPerPage", 20, 4 },
+ { "PfWCOffEn", 19, 1 },
+ { "PfMaxWCSize", 17, 2 },
+ { "PfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1320, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1324, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1328, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x132c, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1330, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1334, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x1338, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_WC_EGRS_BAR2_OFF_VF", 0x133c, 0 },
+ { "VfIQsPerPage", 28, 4 },
+ { "VfEQsPerPage", 24, 4 },
+ { "VfWCQsPerPage", 20, 4 },
+ { "VfWCOffEn", 19, 1 },
+ { "VfMaxWCSize", 17, 2 },
+ { "VfWCOffset", 0, 17 },
+ { "SGE_LA_RDPTR_0", 0x1800, 0 },
+ { "SGE_LA_RDDATA_0", 0x1804, 0 },
+ { "SGE_LA_WRPTR_0", 0x1808, 0 },
+ { "SGE_LA_RESERVED_0", 0x180c, 0 },
+ { "SGE_LA_RDPTR_1", 0x1810, 0 },
+ { "SGE_LA_RDDATA_1", 0x1814, 0 },
+ { "SGE_LA_WRPTR_1", 0x1818, 0 },
+ { "SGE_LA_RESERVED_1", 0x181c, 0 },
+ { "SGE_LA_RDPTR_2", 0x1820, 0 },
+ { "SGE_LA_RDDATA_2", 0x1824, 0 },
+ { "SGE_LA_WRPTR_2", 0x1828, 0 },
+ { "SGE_LA_RESERVED_2", 0x182c, 0 },
+ { "SGE_LA_RDPTR_3", 0x1830, 0 },
+ { "SGE_LA_RDDATA_3", 0x1834, 0 },
+ { "SGE_LA_WRPTR_3", 0x1838, 0 },
+ { "SGE_LA_RESERVED_3", 0x183c, 0 },
+ { "SGE_LA_RDPTR_4", 0x1840, 0 },
+ { "SGE_LA_RDDATA_4", 0x1844, 0 },
+ { "SGE_LA_WRPTR_4", 0x1848, 0 },
+ { "SGE_LA_RESERVED_4", 0x184c, 0 },
+ { "SGE_LA_RDPTR_5", 0x1850, 0 },
+ { "SGE_LA_RDDATA_5", 0x1854, 0 },
+ { "SGE_LA_WRPTR_5", 0x1858, 0 },
+ { "SGE_LA_RESERVED_5", 0x185c, 0 },
+ { "SGE_LA_RDPTR_6", 0x1860, 0 },
+ { "SGE_LA_RDDATA_6", 0x1864, 0 },
+ { "SGE_LA_WRPTR_6", 0x1868, 0 },
+ { "SGE_LA_RESERVED_6", 0x186c, 0 },
+ { "SGE_LA_RDPTR_7", 0x1870, 0 },
+ { "SGE_LA_RDDATA_7", 0x1874, 0 },
+ { "SGE_LA_WRPTR_7", 0x1878, 0 },
+ { "SGE_LA_RESERVED_7", 0x187c, 0 },
+ { "SGE_LA_RDPTR_8", 0x1880, 0 },
+ { "SGE_LA_RDDATA_8", 0x1884, 0 },
+ { "SGE_LA_WRPTR_8", 0x1888, 0 },
+ { "SGE_LA_RESERVED_8", 0x188c, 0 },
+ { "SGE_LA_RDPTR_9", 0x1890, 0 },
+ { "SGE_LA_RDDATA_9", 0x1894, 0 },
+ { "SGE_LA_WRPTR_9", 0x1898, 0 },
+ { "SGE_LA_RESERVED_9", 0x189c, 0 },
+ { "SGE_LA_RDPTR_10", 0x18a0, 0 },
+ { "SGE_LA_RDDATA_10", 0x18a4, 0 },
+ { "SGE_LA_WRPTR_10", 0x18a8, 0 },
+ { "SGE_LA_RESERVED_10", 0x18ac, 0 },
+ { "SGE_LA_RDPTR_11", 0x18b0, 0 },
+ { "SGE_LA_RDDATA_11", 0x18b4, 0 },
+ { "SGE_LA_WRPTR_11", 0x18b8, 0 },
+ { "SGE_LA_RESERVED_11", 0x18bc, 0 },
+ { "SGE_LA_RDPTR_12", 0x18c0, 0 },
+ { "SGE_LA_RDDATA_12", 0x18c4, 0 },
+ { "SGE_LA_WRPTR_12", 0x18c8, 0 },
+ { "SGE_LA_RESERVED_12", 0x18cc, 0 },
+ { "SGE_LA_RDPTR_13", 0x18d0, 0 },
+ { "SGE_LA_RDDATA_13", 0x18d4, 0 },
+ { "SGE_LA_WRPTR_13", 0x18d8, 0 },
+ { "SGE_LA_RESERVED_13", 0x18dc, 0 },
+ { "SGE_LA_RDPTR_14", 0x18e0, 0 },
+ { "SGE_LA_RDDATA_14", 0x18e4, 0 },
+ { "SGE_LA_WRPTR_14", 0x18e8, 0 },
+ { "SGE_LA_RESERVED_14", 0x18ec, 0 },
+ { "SGE_LA_RDPTR_15", 0x18f0, 0 },
+ { "SGE_LA_RDDATA_15", 0x18f4, 0 },
+ { "SGE_LA_WRPTR_15", 0x18f8, 0 },
+ { "SGE_LA_RESERVED_15", 0x18fc, 0 },
+ { NULL }
+};
+
+struct reg_info t6_pcie_regs[] = {
+ { "PCIE_INT_ENABLE", 0x3000, 0 },
+ { "IPGrpPerr", 31, 1 },
+ { "NonFatalErr", 30, 1 },
+ { "RdRspErr", 29, 1 },
+ { "TRGT1GrpPerr", 28, 1 },
+ { "IPSOTPerr", 27, 1 },
+ { "IPRetryPerr", 26, 1 },
+ { "IPRxDataGrpPerr", 25, 1 },
+ { "IPRxHdrGrpPerr", 24, 1 },
+ { "PIOTagQPerr", 23, 1 },
+ { "MAGrpPerr", 22, 1 },
+ { "VFIDPerr", 21, 1 },
+ { "FIDPerr", 20, 1 },
+ { "CfgSnpPerr", 19, 1 },
+ { "HRspPerr", 18, 1 },
+ { "HReqRdPerr", 17, 1 },
+ { "HReqWrPerr", 16, 1 },
+ { "DRspPerr", 15, 1 },
+ { "DReqRdPerr", 14, 1 },
+ { "DReqWrPerr", 13, 1 },
+ { "CRspPerr", 12, 1 },
+ { "CReqRdPerr", 11, 1 },
+ { "MstTagQPerr", 10, 1 },
+ { "TgtTagQPerr", 9, 1 },
+ { "PIOReqGrpPerr", 8, 1 },
+ { "PIOCplGrpPerr", 7, 1 },
+ { "MSIXDIPerr", 6, 1 },
+ { "MSIXDataPerr", 5, 1 },
+ { "MSIXAddrHPerr", 4, 1 },
+ { "MSIXAddrLPerr", 3, 1 },
+ { "MSIXStiPerr", 2, 1 },
+ { "MstTimeoutPerr", 1, 1 },
+ { "MstGrpPerr", 0, 1 },
+ { "PCIE_INT_CAUSE", 0x3004, 0 },
+ { "IPGrpPerr", 31, 1 },
+ { "NonFatalErr", 30, 1 },
+ { "RdRspErr", 29, 1 },
+ { "TRGT1GrpPerr", 28, 1 },
+ { "IPSOTPerr", 27, 1 },
+ { "IPRetryPerr", 26, 1 },
+ { "IPRxDataGrpPerr", 25, 1 },
+ { "IPRxHdrGrpPerr", 24, 1 },
+ { "PIOTagQPerr", 23, 1 },
+ { "MAGrpPerr", 22, 1 },
+ { "VFIDPerr", 21, 1 },
+ { "FIDPerr", 20, 1 },
+ { "CfgSnpPerr", 19, 1 },
+ { "HRspPerr", 18, 1 },
+ { "HReqRdPerr", 17, 1 },
+ { "HReqWrPerr", 16, 1 },
+ { "DRspPerr", 15, 1 },
+ { "DReqRdPerr", 14, 1 },
+ { "DReqWrPerr", 13, 1 },
+ { "CRspPerr", 12, 1 },
+ { "CReqRdPerr", 11, 1 },
+ { "MstTagQPerr", 10, 1 },
+ { "TgtTagQPerr", 9, 1 },
+ { "PIOReqGrpPerr", 8, 1 },
+ { "PIOCplGrpPerr", 7, 1 },
+ { "MSIXDIPerr", 6, 1 },
+ { "MSIXDataPerr", 5, 1 },
+ { "MSIXAddrHPerr", 4, 1 },
+ { "MSIXAddrLPerr", 3, 1 },
+ { "MSIXStiPerr", 2, 1 },
+ { "MstTimeoutPerr", 1, 1 },
+ { "MstGrpPerr", 0, 1 },
+ { "PCIE_PERR_ENABLE", 0x3008, 0 },
+ { "IPGrpPerr", 31, 1 },
+ { "TRGT1GrpPerr", 28, 1 },
+ { "IPSOTPerr", 27, 1 },
+ { "IPRetryPerr", 26, 1 },
+ { "IPRxDataGrpPerr", 25, 1 },
+ { "IPRxHdrGrpPerr", 24, 1 },
+ { "PIOTagQPerr", 23, 1 },
+ { "MAGrpPerr", 22, 1 },
+ { "VFIDPerr", 21, 1 },
+ { "FIDPerr", 20, 1 },
+ { "CfgSnpPerr", 19, 1 },
+ { "HRspPerr", 18, 1 },
+ { "HReqRdPerr", 17, 1 },
+ { "HReqWrPerr", 16, 1 },
+ { "DRspPerr", 15, 1 },
+ { "DReqRdPerr", 14, 1 },
+ { "DReqWrPerr", 13, 1 },
+ { "CRspPerr", 12, 1 },
+ { "CReqRdPerr", 11, 1 },
+ { "MstTagQPerr", 10, 1 },
+ { "TgtTagQPerr", 9, 1 },
+ { "PIOReqGrpPerr", 8, 1 },
+ { "PIOCplGrpPerr", 7, 1 },
+ { "MSIXDIPerr", 6, 1 },
+ { "MSIXDataPerr", 5, 1 },
+ { "MSIXAddrHPerr", 4, 1 },
+ { "MSIXAddrLPerr", 3, 1 },
+ { "MSIXStiPerr", 2, 1 },
+ { "MstTimeoutPerr", 1, 1 },
+ { "MstGrpPerr", 0, 1 },
+ { "PCIE_PERR_INJECT", 0x300c, 0 },
+ { "MemSel", 1, 5 },
+ { "IDE", 0, 1 },
+ { "PCIE_NONFAT_ERR", 0x3010, 0 },
+ { "MARspUE", 30, 1 },
+ { "MAReqTimeout", 29, 1 },
+ { "TRGT1BARTypeErr", 28, 1 },
+ { "MAExtraRspErr", 27, 1 },
+ { "MARspTimeout", 26, 1 },
+ { "INTVFAllMSIDisErr", 25, 1 },
+ { "INTVFRangeErr", 24, 1 },
+ { "INTPLIRspErr", 23, 1 },
+ { "MEMReqRdTagErr", 22, 1 },
+ { "CFGInitDoneErr", 21, 1 },
+ { "BAR2Timeout", 20, 1 },
+ { "VPDTimeout", 19, 1 },
+ { "MEMRspRdTagErr", 18, 1 },
+ { "MEMRspWrTagErr", 17, 1 },
+ { "PIORspRdTagErr", 16, 1 },
+ { "PIORspWrTagErr", 15, 1 },
+ { "DBITimeout", 14, 1 },
+ { "PIOUnAlindWr", 13, 1 },
+ { "BAR2RdErr", 12, 1 },
+ { "MAWrEOPErr", 11, 1 },
+ { "MARdEOPErr", 10, 1 },
+ { "RdRspErr", 9, 1 },
+ { "VPDRspErr", 8, 1 },
+ { "KDBEOPErr", 7, 1 },
+ { "MemReq", 4, 1 },
+ { "PIOReq", 3, 1 },
+ { "BAR2Req", 2, 1 },
+ { "CfgSnp", 0, 1 },
+ { "PCIE_CFG", 0x3014, 0 },
+ { "PIOStopEn", 31, 1 },
+ { "DiagCtrlBus", 28, 3 },
+ { "IPPerrEn", 27, 1 },
+ { "CfgdExtTagEn", 26, 1 },
+ { "CfgdMaxPyldSz", 23, 3 },
+ { "CfgdMaxRdReqSz", 20, 3 },
+ { "DCAEn", 17, 1 },
+ { "CMDReqPriority", 16, 1 },
+ { "VPDReqProtect", 14, 2 },
+ { "DroppedRdRspData", 12, 1 },
+ { "AI_INTX_ReAssertEn", 11, 1 },
+ { "AutoTxnDisable", 10, 1 },
+ { "TC0_Stamp", 9, 1 },
+ { "AI_TCVal", 6, 3 },
+ { "DMAStopEn", 5, 1 },
+ { "DevStateRstMode", 4, 1 },
+ { "LinkReqRstPCIeCRstMode", 3, 1 },
+ { "LinkDnRstEn", 0, 1 },
+ { "PCIE_CFG2", 0x3018, 0 },
+ { "BAR2Timer", 4, 12 },
+ { "MstReqRdRRASimple", 3, 1 },
+ { "TotMaxTag", 0, 3 },
+ { "PCIE_CFG3", 0x301c, 0 },
+ { "AutoPIOCookieMatch", 6, 1 },
+ { "FLRPndCplMode", 4, 2 },
+ { "HMADCASTFirstOnly", 2, 1 },
+ { "CMDDCASTFirstOnly", 1, 1 },
+ { "DMADCASTFirstOnly", 0, 1 },
+ { "PCIE_CFG4", 0x3020, 0 },
+ { "L1ClkRemovalEn", 17, 1 },
+ { "ReadyEnterL23", 16, 1 },
+ { "ExitL1", 12, 1 },
+ { "EnterL1", 8, 1 },
+ { "GenPME", 0, 8 },
+ { "PCIE_CFG5", 0x3024, 0 },
+ { "EnableSKPParityFix", 2, 1 },
+ { "EnableL2EntryInL1", 1, 1 },
+ { "HoldCplEnteringL1", 0, 1 },
+ { "PCIE_CFG6", 0x3028, 0 },
+ { "PERstTimerCount", 12, 14 },
+ { "PERstTimeout", 8, 1 },
+ { "PERstTimer", 0, 4 },
+ { "PCIE_CFG7", 0x302c, 0 },
+ { "PCIE_CFG_SPACE_REQ", 0x3060, 0 },
+ { "Enable", 31, 1 },
+ { "AI", 30, 1 },
+ { "CS2", 29, 1 },
+ { "WrBE", 25, 4 },
+ { "VFVld", 24, 1 },
+ { "RVF", 16, 8 },
+ { "PF", 12, 3 },
+ { "ExtRegister", 8, 4 },
+ { "Register", 0, 8 },
+ { "PCIE_CFG_SPACE_DATA", 0x3064, 0 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3068, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x306c, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3070, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x3074, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3078, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x307c, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3080, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x3084, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3088, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x308c, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3090, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x3094, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x3098, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x309c, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MEM_ACCESS_BASE_WIN", 0x30a0, 0 },
+ { "PCIEOfst", 10, 22 },
+ { "BIR", 8, 2 },
+ { "Window", 0, 8 },
+ { "PCIE_MEM_ACCESS_OFFSET", 0x30a4, 0 },
+ { "MemOfst", 7, 25 },
+ { "PFNum", 0, 3 },
+ { "PCIE_MAILBOX_BASE_WIN", 0x30a8, 0 },
+ { "PCIEOfst", 6, 26 },
+ { "BIR", 4, 2 },
+ { "Window", 0, 2 },
+ { "PCIE_MAILBOX_OFFSET", 0x30ac, 0 },
+ { "MemOfst", 7, 25 },
+ { "PCIE_MA_CTRL", 0x30b0, 0 },
+ { "TagFree", 29, 1 },
+ { "MaxRspCnt", 24, 5 },
+ { "MaxReqCnt", 16, 7 },
+ { "MaxReqSize", 8, 3 },
+ { "MaxTag", 0, 5 },
+ { "PCIE_FW", 0x30b8, 0 },
+ { "PCIE_FW_PF", 0x30bc, 0 },
+ { "PCIE_FW_PF", 0x30c0, 0 },
+ { "PCIE_FW_PF", 0x30c4, 0 },
+ { "PCIE_FW_PF", 0x30c8, 0 },
+ { "PCIE_FW_PF", 0x30cc, 0 },
+ { "PCIE_FW_PF", 0x30d0, 0 },
+ { "PCIE_FW_PF", 0x30d4, 0 },
+ { "PCIE_FW_PF", 0x30d8, 0 },
+ { "PCIE_PIO_PAUSE", 0x30dc, 0 },
+ { "PIOPauseDone", 31, 1 },
+ { "MSTPauseDone", 30, 1 },
+ { "PauseTime", 4, 24 },
+ { "MSTPause", 1, 1 },
+ { "PIOPause", 0, 1 },
+ { "PCIE_MA_STAT", 0x30e0, 0 },
+ { "PCIE_STATIC_CFG1", 0x30e4, 0 },
+ { "AUXPOWER_DETECTED", 27, 1 },
+ { "PCIE_STATIC_CFG2", 0x30e8, 0 },
+ { "PL_CONTROL", 16, 16 },
+ { "STATIC_SPARE3", 0, 14 },
+ { "PCIE_DBG_INDIR_REQ", 0x30ec, 0 },
+ { "Enable", 31, 1 },
+ { "AI", 30, 1 },
+ { "Pointer", 8, 16 },
+ { "Select", 0, 4 },
+ { "PCIE_DBG_INDIR_DATA_0", 0x30f0, 0 },
+ { "PCIE_DBG_INDIR_DATA_1", 0x30f4, 0 },
+ { "PCIE_DBG_INDIR_DATA_2", 0x30f8, 0 },
+ { "PCIE_DBG_INDIR_DATA_3", 0x30fc, 0 },
+ { "PCIE_PF_INT_CFG", 0x3140, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x3144, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3148, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x314c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3150, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x3154, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3158, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x315c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3160, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x3164, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3168, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x316c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3170, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x3174, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_INT_CFG", 0x3178, 0 },
+ { "PBAOfst", 28, 4 },
+ { "TABOfst", 24, 4 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_PF_INT_CFG2", 0x317c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3180, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3184, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3188, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x318c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3190, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3194, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3198, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x319c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31a0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31a4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31a8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31ac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31b0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31b4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31b8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31bc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31c0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31c4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31c8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31cc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31d0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31d4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31d8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31dc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31e0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31e4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31e8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31ec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31f0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31f4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x31f8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x31fc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3200, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3204, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3208, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x320c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3210, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3214, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3218, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x321c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3220, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3224, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3228, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x322c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3230, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3234, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3238, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x323c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3240, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3244, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3248, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x324c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3250, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3254, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3258, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x325c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3260, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3264, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3268, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x326c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3270, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3274, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3278, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x327c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3280, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3284, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3288, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x328c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3290, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3294, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3298, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x329c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32a0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32a4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32a8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32ac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32b0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32b4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32b8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32bc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32c0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32c4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32c8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32cc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32d0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32d4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32d8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32dc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32e0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32e4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32e8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32ec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32f0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32f4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x32f8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x32fc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3300, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3304, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3308, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x330c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3310, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3314, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3318, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x331c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3320, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3324, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3328, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x332c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3330, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3334, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3338, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x333c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3340, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3344, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3348, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x334c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3350, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3354, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3358, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x335c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3360, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3364, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3368, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x336c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3370, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3374, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3378, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x337c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3380, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3384, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3388, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x338c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3390, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3394, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3398, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x339c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33a0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33a4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33a8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33ac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33b0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33b4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33b8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33bc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33c0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33c4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33c8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33cc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33d0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33d4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33d8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33dc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33e0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33e4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33e8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33ec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33f0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33f4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x33f8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x33fc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3400, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3404, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3408, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x340c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3410, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3414, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3418, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x341c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3420, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3424, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3428, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x342c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3430, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3434, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3438, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x343c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3440, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3444, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3448, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x344c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3450, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3454, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3458, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x345c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3460, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3464, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3468, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x346c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3470, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3474, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3478, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x347c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3480, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3484, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3488, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x348c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3490, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3494, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3498, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x349c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34a0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34a4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34a8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34ac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34b0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34b4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34b8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34bc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34c0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34c4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34c8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34cc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34d0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34d4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34d8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34dc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34e0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34e4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34e8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34ec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34f0, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34f4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x34f8, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x34fc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3500, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3504, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3508, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x350c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3510, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3514, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3518, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x351c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3520, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3524, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3528, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x352c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3530, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3534, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3538, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x353c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3540, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3544, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3548, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x354c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3550, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3554, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3558, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x355c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3560, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3564, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3568, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x356c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3570, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x3574, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_INT_CFG", 0x3578, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_INT_CFG2", 0x357c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_PF_MSI_EN", 0x35a8, 0 },
+ { "PCIE_VF_MSI_EN_0", 0x35ac, 0 },
+ { "PCIE_VF_MSI_EN_1", 0x35b0, 0 },
+ { "PCIE_VF_MSI_EN_2", 0x35b4, 0 },
+ { "PCIE_VF_MSI_EN_3", 0x35b8, 0 },
+ { "PCIE_PF_MSIX_EN", 0x35bc, 0 },
+ { "PCIE_VF_MSIX_EN_0", 0x35c0, 0 },
+ { "PCIE_VF_MSIX_EN_1", 0x35c4, 0 },
+ { "PCIE_VF_MSIX_EN_2", 0x35c8, 0 },
+ { "PCIE_VF_MSIX_EN_3", 0x35cc, 0 },
+ { "PCIE_FID_VFID_SEL", 0x35ec, 0 },
+ { "PCIE_FID_VFID", 0x3600, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3604, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3608, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x360c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3610, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3614, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3618, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x361c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3620, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3624, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3628, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x362c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3630, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3634, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3638, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x363c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3640, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3644, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3648, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x364c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3650, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3654, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3658, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x365c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3660, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3664, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3668, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x366c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3670, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3674, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3678, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x367c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3680, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3684, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3688, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x368c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3690, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3694, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3698, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x369c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x36fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3700, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3704, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3708, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x370c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3710, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3714, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3718, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x371c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3720, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3724, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3728, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x372c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3730, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3734, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3738, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x373c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3740, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3744, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3748, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x374c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3750, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3754, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3758, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x375c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3760, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3764, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3768, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x376c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3770, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3774, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3778, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x377c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3780, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3784, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3788, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x378c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3790, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3794, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3798, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x379c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x37fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3800, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3804, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3808, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x380c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3810, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3814, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3818, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x381c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3820, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3824, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3828, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x382c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3830, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3834, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3838, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x383c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3840, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3844, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3848, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x384c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3850, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3854, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3858, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x385c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3860, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3864, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3868, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x386c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3870, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3874, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3878, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x387c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3880, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3884, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3888, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x388c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3890, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3894, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3898, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x389c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x38fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3900, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3904, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3908, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x390c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3910, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3914, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3918, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x391c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3920, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3924, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3928, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x392c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3930, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3934, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3938, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x393c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3940, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3944, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3948, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x394c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3950, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3954, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3958, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x395c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3960, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3964, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3968, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x396c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3970, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3974, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3978, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x397c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3980, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3984, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3988, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x398c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3990, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3994, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3998, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x399c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x39fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3a9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3aa0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3aa4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3aa8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3aac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ab0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ab4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ab8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3abc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ac0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ac4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ac8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3acc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ad0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ad4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ad8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3adc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ae0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ae4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ae8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3aec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3af0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3af4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3af8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3afc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3b9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ba0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ba4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ba8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3be0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3be4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3be8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bf0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bf4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bf8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3bfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3c9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ca0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ca4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ca8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ccc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ce0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ce4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ce8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cf0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cf4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cf8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3cfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3d9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3da0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3da4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3da8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3db0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3db4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3db8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ddc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3de0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3de4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3de8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3df0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3df4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3df8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3dfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3e9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ea0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ea4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ea8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3eac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3eb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3eb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3eb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ebc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ec0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ec4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ec8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ecc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ed0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ed4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ed8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3edc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ee0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ee4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ee8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3eec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ef0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ef4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ef8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3efc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3f9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fa0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fa4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fa8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fe0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fe4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fe8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3fec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ff0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ff4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ff8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x3ffc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4000, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4004, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4008, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x400c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4010, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4014, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4018, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x401c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4020, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4024, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4028, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x402c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4030, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4034, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4038, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x403c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4040, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4044, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4048, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x404c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4050, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4054, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4058, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x405c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4060, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4064, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4068, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x406c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4070, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4074, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4078, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x407c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4080, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4084, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4088, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x408c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4090, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4094, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4098, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x409c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x40fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4100, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4104, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4108, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x410c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4110, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4114, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4118, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x411c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4120, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4124, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4128, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x412c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4130, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4134, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4138, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x413c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4140, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4144, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4148, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x414c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4150, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4154, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4158, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x415c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4160, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4164, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4168, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x416c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4170, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4174, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4178, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x417c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4180, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4184, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4188, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x418c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4190, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4194, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4198, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x419c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x41fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4200, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4204, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4208, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x420c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4210, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4214, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4218, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x421c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4220, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4224, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4228, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x422c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4230, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4234, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4238, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x423c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4240, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4244, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4248, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x424c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4250, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4254, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4258, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x425c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4260, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4264, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4268, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x426c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4270, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4274, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4278, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x427c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4280, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4284, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4288, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x428c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4290, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4294, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4298, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x429c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x42fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4300, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4304, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4308, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x430c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4310, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4314, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4318, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x431c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4320, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4324, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4328, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x432c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4330, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4334, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4338, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x433c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4340, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4344, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4348, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x434c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4350, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4354, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4358, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x435c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4360, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4364, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4368, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x436c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4370, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4374, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4378, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x437c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4380, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4384, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4388, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x438c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4390, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4394, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4398, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x439c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x43fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4400, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4404, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4408, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x440c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4410, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4414, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4418, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x441c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4420, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4424, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4428, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x442c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4430, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4434, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4438, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x443c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4440, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4444, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4448, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x444c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4450, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4454, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4458, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x445c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4460, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4464, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4468, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x446c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4470, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4474, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4478, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x447c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4480, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4484, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4488, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x448c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4490, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4494, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4498, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x449c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x44fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4500, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4504, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4508, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x450c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4510, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4514, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4518, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x451c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4520, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4524, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4528, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x452c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4530, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4534, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4538, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x453c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4540, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4544, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4548, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x454c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4550, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4554, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4558, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x455c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4560, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4564, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4568, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x456c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4570, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4574, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4578, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x457c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4580, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4584, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4588, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x458c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4590, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4594, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4598, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x459c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x45fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4600, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4604, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4608, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x460c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4610, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4614, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4618, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x461c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4620, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4624, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4628, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x462c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4630, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4634, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4638, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x463c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4640, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4644, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4648, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x464c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4650, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4654, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4658, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x465c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4660, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4664, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4668, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x466c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4670, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4674, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4678, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x467c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4680, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4684, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4688, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x468c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4690, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4694, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4698, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x469c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x46fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4700, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4704, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4708, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x470c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4710, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4714, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4718, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x471c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4720, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4724, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4728, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x472c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4730, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4734, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4738, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x473c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4740, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4744, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4748, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x474c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4750, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4754, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4758, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x475c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4760, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4764, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4768, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x476c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4770, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4774, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4778, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x477c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4780, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4784, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4788, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x478c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4790, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4794, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4798, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x479c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x47fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4800, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4804, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4808, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x480c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4810, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4814, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4818, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x481c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4820, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4824, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4828, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x482c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4830, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4834, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4838, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x483c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4840, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4844, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4848, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x484c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4850, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4854, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4858, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x485c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4860, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4864, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4868, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x486c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4870, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4874, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4878, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x487c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4880, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4884, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4888, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x488c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4890, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4894, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4898, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x489c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x48fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4900, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4904, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4908, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x490c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4910, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4914, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4918, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x491c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4920, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4924, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4928, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x492c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4930, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4934, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4938, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x493c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4940, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4944, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4948, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x494c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4950, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4954, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4958, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x495c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4960, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4964, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4968, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x496c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4970, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4974, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4978, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x497c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4980, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4984, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4988, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x498c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4990, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4994, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4998, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x499c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x49fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4a9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4aa0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4aa4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4aa8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4aac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ab0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ab4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ab8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4abc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ac0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ac4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ac8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4acc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ad0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ad4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ad8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4adc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ae0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ae4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ae8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4aec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4af0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4af4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4af8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4afc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4b9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ba0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ba4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ba8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4be0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4be4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4be8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bf0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bf4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bf8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4bfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4c9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ca0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ca4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ca8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ccc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ce0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ce4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ce8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cf0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cf4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cf8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4cfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4d9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4da0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4da4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4da8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4db0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4db4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4db8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ddc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4de0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4de4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4de8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4df0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4df4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4df8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4dfc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4e9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ea0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ea4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ea8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4eac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4eb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4eb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4eb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ebc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ec0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ec4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ec8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ecc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ed0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ed4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ed8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4edc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ee0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ee4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ee8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4eec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ef0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ef4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ef8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4efc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f00, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f04, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f08, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f0c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f10, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f14, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f18, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f1c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f20, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f24, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f28, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f2c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f30, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f34, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f38, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f3c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f40, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f44, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f48, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f4c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f50, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f54, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f58, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f5c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f60, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f64, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f68, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f6c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f70, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f74, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f78, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f7c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f80, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f84, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f88, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f8c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f90, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f94, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f98, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4f9c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fa0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fa4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fa8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fb0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fb4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fb8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fbc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fc0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fc4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fc8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fcc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fd0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fd4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fd8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fdc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fe0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fe4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fe8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4fec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ff0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ff4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ff8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x4ffc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5000, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5004, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5008, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x500c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5010, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5014, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5018, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x501c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5020, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5024, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5028, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x502c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5030, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5034, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5038, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x503c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5040, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5044, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5048, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x504c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5050, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5054, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5058, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x505c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5060, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5064, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5068, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x506c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5070, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5074, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5078, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x507c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5080, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5084, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5088, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x508c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5090, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5094, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5098, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x509c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x50fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5100, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5104, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5108, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x510c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5110, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5114, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5118, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x511c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5120, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5124, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5128, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x512c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5130, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5134, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5138, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x513c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5140, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5144, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5148, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x514c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5150, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5154, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5158, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x515c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5160, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5164, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5168, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x516c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5170, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5174, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5178, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x517c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5180, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5184, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5188, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x518c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5190, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5194, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5198, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x519c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x51fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5200, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5204, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5208, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x520c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5210, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5214, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5218, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x521c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5220, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5224, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5228, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x522c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5230, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5234, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5238, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x523c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5240, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5244, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5248, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x524c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5250, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5254, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5258, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x525c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5260, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5264, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5268, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x526c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5270, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5274, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5278, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x527c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5280, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5284, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5288, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x528c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5290, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5294, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5298, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x529c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x52fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5300, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5304, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5308, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x530c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5310, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5314, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5318, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x531c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5320, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5324, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5328, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x532c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5330, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5334, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5338, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x533c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5340, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5344, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5348, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x534c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5350, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5354, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5358, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x535c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5360, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5364, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5368, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x536c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5370, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5374, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5378, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x537c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5380, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5384, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5388, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x538c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5390, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5394, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5398, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x539c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x53fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5400, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5404, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5408, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x540c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5410, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5414, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5418, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x541c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5420, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5424, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5428, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x542c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5430, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5434, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5438, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x543c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5440, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5444, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5448, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x544c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5450, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5454, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5458, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x545c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5460, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5464, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5468, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x546c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5470, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5474, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5478, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x547c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5480, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5484, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5488, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x548c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5490, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5494, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5498, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x549c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x54fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5500, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5504, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5508, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x550c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5510, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5514, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5518, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x551c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5520, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5524, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5528, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x552c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5530, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5534, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5538, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x553c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5540, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5544, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5548, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x554c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5550, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5554, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5558, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x555c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5560, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5564, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5568, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x556c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5570, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5574, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5578, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x557c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5580, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5584, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5588, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x558c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5590, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5594, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x5598, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x559c, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55a0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55a4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55a8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55ac, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55b0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55b4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55b8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55bc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55c0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55c4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55c8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55cc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55d0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55d4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55d8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55dc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55e0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55e4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55e8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55ec, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55f0, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55f4, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55f8, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_FID_VFID", 0x55fc, 0 },
+ { "Select", 30, 2 },
+ { "IDO", 24, 1 },
+ { "VFID", 15, 9 },
+ { "TC", 12, 3 },
+ { "VFVld", 11, 1 },
+ { "PF", 8, 3 },
+ { "RVF", 0, 8 },
+ { "PCIE_COOKIE_STAT", 0x5600, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x5604, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x5608, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x560c, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x5610, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x5614, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x5618, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_COOKIE_STAT", 0x561c, 0 },
+ { "CookieB", 16, 10 },
+ { "CookieA", 0, 10 },
+ { "PCIE_FLR_PIO", 0x5620, 0 },
+ { "RcvdBAR2Cookie", 24, 8 },
+ { "RcvdMARspCookie", 16, 8 },
+ { "RcvdPIORspCookie", 8, 8 },
+ { "ExpdCookie", 0, 8 },
+ { "PCIE_FLR_PIO2", 0x5624, 0 },
+ { "RcvdVDMRxCookie", 24, 8 },
+ { "RcvdVDMTxCookie", 16, 8 },
+ { "RcvdMAReqCookie", 8, 8 },
+ { "RcvdPIOReqCookie", 0, 8 },
+ { "PCIE_VC0_CDTS0", 0x56cc, 0 },
+ { "CPLD0", 20, 12 },
+ { "PH0", 12, 8 },
+ { "PD0", 0, 12 },
+ { "PCIE_VC0_CDTS1", 0x56d0, 0 },
+ { "CPLH0", 20, 8 },
+ { "NPH0", 12, 8 },
+ { "NPD0", 0, 12 },
+ { "PCIE_VC1_CDTS0", 0x56d4, 0 },
+ { "CPLD1", 20, 12 },
+ { "PH1", 12, 8 },
+ { "PD1", 0, 12 },
+ { "PCIE_VC1_CDTS1", 0x56d8, 0 },
+ { "CPLH1", 20, 8 },
+ { "NPH1", 12, 8 },
+ { "NPD1", 0, 12 },
+ { "PCIE_FLR_PF_STATUS", 0x56dc, 0 },
+ { "PCIE_FLR_VF0_STATUS", 0x56e0, 0 },
+ { "PCIE_FLR_VF1_STATUS", 0x56e4, 0 },
+ { "PCIE_FLR_VF2_STATUS", 0x56e8, 0 },
+ { "PCIE_FLR_VF3_STATUS", 0x56ec, 0 },
+ { "PCIE_STAT", 0x56f4, 0 },
+ { "PM_Status", 24, 8 },
+ { "PM_CurrentState", 20, 3 },
+ { "LTSSMEnable", 12, 1 },
+ { "StateCfgInitF", 4, 8 },
+ { "StateCfgInit", 0, 4 },
+ { "PCIE_CRS", 0x56f8, 0 },
+ { "PCIE_LTSSM", 0x56fc, 0 },
+ { "Stall_Disable", 1, 1 },
+ { "Enable", 0, 1 },
+ { "PCIE_PF_CFG", 0x1e040, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1e044, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1e04c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1e440, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1e444, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1e44c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1e840, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1e844, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1e84c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1ec40, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1ec44, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1ec4c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1f040, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1f044, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1f04c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1f440, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1f444, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1f44c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1f840, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1f844, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1f84c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_PF_CFG", 0x1fc40, 0 },
+ { "INTXStat", 16, 1 },
+ { "AIVec", 4, 10 },
+ { "D3HotEn", 1, 1 },
+ { "CLIDecEn", 0, 1 },
+ { "PCIE_PF_CLI", 0x1fc44, 0 },
+ { "PCIE_PF_EXPROM_OFST", 0x1fc4c, 0 },
+ { "Offset", 10, 14 },
+ { "PCIE_CORE_ACK_LATENCY_TIMER_REPLAY_TIMER", 0x5700, 0 },
+ { "Replay_Time_Limit", 16, 16 },
+ { "Ack_Latency_Timer_Limit", 0, 16 },
+ { "PCIE_CORE_VENDOR_SPECIFIC_DLLP", 0x5704, 0 },
+ { "PCIE_CORE_PORT_FORCE_LINK", 0x5708, 0 },
+ { "Low_Power_Entrance_Count", 24, 8 },
+ { "Link_State", 16, 6 },
+ { "Force_Link", 15, 1 },
+ { "Link_Number", 0, 8 },
+ { "PCIE_CORE_ACK_FREQUENCY_L0L1_ASPM_CONTROL", 0x570c, 0 },
+ { "Enter_ASPM_L1_wo_L0s", 30, 1 },
+ { "L1_Entrance_Latency", 27, 3 },
+ { "L0s_Entrance_Latency", 24, 3 },
+ { "Common_Clock_N_FTS", 16, 8 },
+ { "N_FTS", 8, 8 },
+ { "Ack_Frequency", 0, 8 },
+ { "PCIE_CORE_PORT_LINK_CONTROL", 0x5710, 0 },
+ { "Crosslink_Active", 23, 1 },
+ { "Crosslink_Enable", 22, 1 },
+ { "Link_Mode_Enable", 16, 6 },
+ { "Fast_Link_Mode", 7, 1 },
+ { "DLL_Link_Enable", 5, 1 },
+ { "Reset_Assert", 3, 1 },
+ { "Loopback_Enable", 2, 1 },
+ { "Scramble_Disable", 1, 1 },
+ { "Vendor_Specific_DLLP_Request", 0, 1 },
+ { "PCIE_CORE_LANE_SKEW", 0x5714, 0 },
+ { "Disable_DeSkew", 31, 1 },
+ { "Ack_Nak_Disable", 25, 1 },
+ { "Flow_Control_Disable", 24, 1 },
+ { "Insert_TxSkew", 0, 24 },
+ { "PCIE_CORE_SYMBOL_NUMBER", 0x5718, 0 },
+ { "Ack_Nak_Timer_Modifier", 19, 5 },
+ { "Replay_Timer_Modifier", 14, 5 },
+ { "MaxFunc", 0, 3 },
+ { "PCIE_CORE_SYMBOL_TIMER_FILTER_MASK1", 0x571c, 0 },
+ { "Mask_RADM_Filter", 16, 16 },
+ { "Disable_FC_Watchdog", 15, 1 },
+ { "SKP_Interval", 0, 11 },
+ { "PCIE_CORE_FILTER_MASK2", 0x5720, 0 },
+ { "PCIE_CORE_DEBUG_0", 0x5728, 0 },
+ { "PCIE_CORE_DEBUG_1", 0x572c, 0 },
+ { "PCIE_CORE_TRANSMIT_POSTED_FC_CREDIT_STATUS", 0x5730, 0 },
+ { "TxPH_FC", 12, 8 },
+ { "TxPD_FC", 0, 12 },
+ { "PCIE_CORE_TRANSMIT_NONPOSTED_FC_CREDIT_STATUS", 0x5734, 0 },
+ { "TxNPH_FC", 12, 8 },
+ { "TxNPD_FC", 0, 12 },
+ { "PCIE_CORE_TRANSMIT_COMPLETION_FC_CREDIT_STATUS", 0x5738, 0 },
+ { "TxCPLH_FC", 12, 8 },
+ { "TxCPLD_FC", 0, 12 },
+ { "PCIE_CORE_QUEUE_STATUS", 0x573c, 0 },
+ { "RxQueue_Not_Empty", 2, 1 },
+ { "TxRetryBuf_Not_Empty", 1, 1 },
+ { "RxTLP_FC_Not_Returned", 0, 1 },
+ { "PCIE_CORE_VC_TRANSMIT_ARBITRATION_1", 0x5740, 0 },
+ { "VC3_WRR", 24, 8 },
+ { "VC2_WRR", 16, 8 },
+ { "VC1_WRR", 8, 8 },
+ { "VC0_WRR", 0, 8 },
+ { "PCIE_CORE_VC_TRANSMIT_ARBITRATION_2", 0x5744, 0 },
+ { "VC7_WRR", 24, 8 },
+ { "VC6_WRR", 16, 8 },
+ { "VC5_WRR", 8, 8 },
+ { "VC4_WRR", 0, 8 },
+ { "PCIE_CORE_VC0_POSTED_RECEIVE_QUEUE_CONTROL", 0x5748, 0 },
+ { "VC0_Rx_Ordering", 31, 1 },
+ { "VC0_TLP_Ordering", 30, 1 },
+ { "VC0_PTLP_Queue_Mode", 21, 3 },
+ { "VC0_PH_Credits", 12, 8 },
+ { "VC0_PD_Credits", 0, 12 },
+ { "PCIE_CORE_VC0_NONPOSTED_RECEIVE_QUEUE_CONTROL", 0x574c, 0 },
+ { "VC0_NPTLP_Queue_Mode", 21, 3 },
+ { "VC0_NPH_Credits", 12, 8 },
+ { "VC0_NPD_Credits", 0, 12 },
+ { "PCIE_CORE_VC0_COMPLETION_RECEIVE_QUEUE_CONTROL", 0x5750, 0 },
+ { "VC0_CPLTLP_Queue_Mode", 21, 3 },
+ { "VC0_CPLH_Credits", 12, 8 },
+ { "VC0_CPLD_Credits", 0, 12 },
+ { "PCIE_CORE_VC1_POSTED_RECEIVE_QUEUE_CONTROL", 0x5754, 0 },
+ { "VC1_TLP_Ordering", 30, 1 },
+ { "VC1_PTLP_Queue_Mode", 21, 3 },
+ { "VC1_PH_Credits", 12, 8 },
+ { "VC1_PD_Credits", 0, 12 },
+ { "PCIE_CORE_VC1_NONPOSTED_RECEIVE_QUEUE_CONTROL", 0x5758, 0 },
+ { "VC1_NPTLP_Queue_Mode", 21, 3 },
+ { "VC1_NPH_Credits", 12, 8 },
+ { "VC1_NPD_Credits", 0, 12 },
+ { "PCIE_CORE_VC1_COMPLETION_RECEIVE_QUEUE_CONTROL", 0x575c, 0 },
+ { "VC1_CPLTLP_Queue_Mode", 21, 3 },
+ { "VC1_CPLH_Credits", 12, 8 },
+ { "VC1_CPLD_Credits", 0, 12 },
+ { "PCIE_CORE_LINK_WIDTH_SPEED_CHANGE", 0x580c, 0 },
+ { "Sel_DeEmphasis", 20, 1 },
+ { "TxCmplRcv", 19, 1 },
+ { "PhyTxSwing", 18, 1 },
+ { "DirSpdChange", 17, 1 },
+ { "Auto_Lane_Flip_Ctrl_En", 16, 1 },
+ { "Num_Lanes", 8, 5 },
+ { "NFTS_Gen2_3", 0, 8 },
+ { "PCIE_CORE_PHY_STATUS", 0x5810, 0 },
+ { "PCIE_CORE_PHY_CONTROL", 0x5814, 0 },
+ { "PCIE_CORE_GEN3_CONTROL", 0x5890, 0 },
+ { "DC_Balance_Disable", 18, 1 },
+ { "DLLP_Delay_Disable", 17, 1 },
+ { "Eql_Disable", 16, 1 },
+ { "Eql_Redo_Disable", 11, 1 },
+ { "Eql_EIEOS_CntRst_Disable", 10, 1 },
+ { "Eql_PH2_PH3_Disable", 9, 1 },
+ { "Disable_Scrambler", 8, 1 },
+ { "PCIE_CORE_GEN3_EQ_FS_LF", 0x5894, 0 },
+ { "Full_Swing", 6, 6 },
+ { "Low_Frequency", 0, 6 },
+ { "PCIE_CORE_GEN3_EQ_PRESET_COEFF", 0x5898, 0 },
+ { "PostCursor", 12, 6 },
+ { "Cursor", 6, 6 },
+ { "PreCursor", 0, 6 },
+ { "PCIE_CORE_GEN3_EQ_PRESET_INDEX", 0x589c, 0 },
+ { "PCIE_CORE_GEN3_EQ_STATUS", 0x58a4, 0 },
+ { "PCIE_CORE_GEN3_EQ_CONTROL", 0x58a8, 0 },
+ { "Include_Initial_FOM", 24, 1 },
+ { "Preset_Request_Vector", 8, 16 },
+ { "Phase23_2ms_Timeout_Disable", 5, 1 },
+ { "After24ms", 4, 1 },
+ { "Feedback_Mode", 0, 4 },
+ { "PCIE_CORE_GEN3_EQ_DIRCHANGE_FEEDBACK", 0x58ac, 0 },
+ { "WinAperture_CPlus1", 14, 4 },
+ { "WinAperture_CMins1", 10, 4 },
+ { "Convergence_WinDepth", 5, 5 },
+ { "EQMasterPhase_MinTime", 0, 5 },
+ { "PCIE_CORE_PIPE_CONTROL", 0x58b8, 0 },
+ { "Loopback_Enable", 31, 1 },
+ { "PCIE_CORE_DBI_RO_WE", 0x58bc, 0 },
+ { "PCIE_DMA_CFG", 0x5940, 0 },
+ { "MaxPyldSize", 28, 3 },
+ { "MaxReqCnt", 20, 7 },
+ { "MaxRdReqSize", 17, 3 },
+ { "MaxRspCnt", 9, 8 },
+ { "SeqChkDis", 8, 1 },
+ { "MinTag", 0, 8 },
+ { "PCIE_DMA_STAT", 0x5944, 0 },
+ { "RspCnt", 20, 10 },
+ { "RdReqCnt", 12, 6 },
+ { "WrReqCnt", 0, 9 },
+ { "PCIE_DMA_STAT2", 0x5948, 0 },
+ { "CookieCnt", 24, 4 },
+ { "RdSeqNumUpdCnt", 20, 4 },
+ { "SIReqCnt", 16, 4 },
+ { "WrEOPMatchSOP", 12, 1 },
+ { "WrSOPCnt", 8, 4 },
+ { "RdSOPCnt", 0, 8 },
+ { "PCIE_DMA_STAT3", 0x594c, 0 },
+ { "AtmReqSOPCnt", 24, 8 },
+ { "AtmEOPMatchSOP", 17, 1 },
+ { "RspEOPMatchSOP", 16, 1 },
+ { "RspErrCnt", 8, 8 },
+ { "RspSOPCnt", 0, 8 },
+ { "PCIE_DMA_CFG", 0x5950, 0 },
+ { "MaxPyldSize", 28, 3 },
+ { "MaxReqCnt", 20, 7 },
+ { "MaxRdReqSize", 17, 3 },
+ { "MaxRspCnt", 9, 8 },
+ { "SeqChkDis", 8, 1 },
+ { "MinTag", 0, 8 },
+ { "PCIE_DMA_STAT", 0x5954, 0 },
+ { "RspCnt", 20, 10 },
+ { "RdReqCnt", 12, 6 },
+ { "WrReqCnt", 0, 9 },
+ { "PCIE_DMA_STAT2", 0x5958, 0 },
+ { "CookieCnt", 24, 4 },
+ { "RdSeqNumUpdCnt", 20, 4 },
+ { "SIReqCnt", 16, 4 },
+ { "WrEOPMatchSOP", 12, 1 },
+ { "WrSOPCnt", 8, 4 },
+ { "RdSOPCnt", 0, 8 },
+ { "PCIE_DMA_STAT3", 0x595c, 0 },
+ { "AtmReqSOPCnt", 24, 8 },
+ { "AtmEOPMatchSOP", 17, 1 },
+ { "RspEOPMatchSOP", 16, 1 },
+ { "RspErrCnt", 8, 8 },
+ { "RspSOPCnt", 0, 8 },
+ { "PCIE_CMD_CFG", 0x5980, 0 },
+ { "MaxRdReqSize", 17, 3 },
+ { "MaxRspCnt", 9, 6 },
+ { "UseCmdPool", 8, 1 },
+ { "MinTag", 0, 8 },
+ { "PCIE_CMD_STAT", 0x5984, 0 },
+ { "RspCnt", 20, 8 },
+ { "RdReqCnt", 12, 4 },
+ { "PCIE_CMD_STAT2", 0x5988, 0 },
+ { "PCIE_CMD_STAT3", 0x598c, 0 },
+ { "RspEOPMatchSOP", 16, 1 },
+ { "RspErrCnt", 8, 8 },
+ { "RspSOPCnt", 0, 8 },
+ { "PCIE_HMA_CFG", 0x59b0, 0 },
+ { "MaxPyldSize", 28, 3 },
+ { "MaxReqCnt", 20, 7 },
+ { "MaxRdReqSize", 17, 3 },
+ { "MaxRspCnt", 9, 8 },
+ { "SeqChkDis", 8, 1 },
+ { "MinTag", 0, 8 },
+ { "PCIE_HMA_STAT", 0x59b4, 0 },
+ { "RspCnt", 20, 10 },
+ { "RdReqCnt", 12, 6 },
+ { "WrReqCnt", 0, 9 },
+ { "PCIE_HMA_STAT2", 0x59b8, 0 },
+ { "CookieCnt", 24, 4 },
+ { "RdSeqNumUpdCnt", 20, 4 },
+ { "WrEOPMatchSOP", 12, 1 },
+ { "WrSOPCnt", 8, 4 },
+ { "RdSOPCnt", 0, 8 },
+ { "PCIE_HMA_STAT3", 0x59bc, 0 },
+ { "RspEOPMatchSOP", 16, 1 },
+ { "RspErrCnt", 8, 8 },
+ { "RspSOPCnt", 0, 8 },
+ { "PCIE_CGEN", 0x59c0, 0 },
+ { "VPD_Dynamic_CGEN", 26, 1 },
+ { "MA_Dynamic_CGEN", 25, 1 },
+ { "Tagq_Dynamic_CGEN", 24, 1 },
+ { "ReqCtl_Dynamic_CGEN", 23, 1 },
+ { "RspDataProc_Dynamic_CGEN", 22, 1 },
+ { "RspRdq_Dynamic_CGEN", 21, 1 },
+ { "RspIPif_Dynamic_CGEN", 20, 1 },
+ { "HMA_Static_CGEN", 19, 1 },
+ { "HMA_Dynamic_CGEN", 18, 1 },
+ { "CMD_Static_CGEN", 16, 1 },
+ { "CMD_Dynamic_CGEN", 15, 1 },
+ { "DMA_Static_CGEN", 13, 1 },
+ { "DMA_Dynamic_CGEN", 12, 1 },
+ { "VFID_SleepStatus", 10, 1 },
+ { "VC1_SleepStatus", 9, 1 },
+ { "STI_SleepStatus", 8, 1 },
+ { "VFID_SleepReq", 2, 1 },
+ { "VC1_SleepReq", 1, 1 },
+ { "STI_SleepReq", 0, 1 },
+ { "PCIE_MA_RSP", 0x59c4, 0 },
+ { "TimerValue", 8, 24 },
+ { "MAReqTimerEn", 1, 1 },
+ { "TimerEn", 0, 1 },
+ { "PCIE_HPRD", 0x59c8, 0 },
+ { "NPH_CreditsAvailVC0", 19, 2 },
+ { "NPD_CreditsAvailVC0", 17, 2 },
+ { "NPH_CreditsAvailVC1", 15, 2 },
+ { "NPD_CreditsAvailVC1", 13, 2 },
+ { "NPH_CreditsRequired", 11, 2 },
+ { "NPD_CreditsRequired", 9, 2 },
+ { "ReqBurstCount", 5, 4 },
+ { "ReqBurstFrequency", 1, 4 },
+ { "EnableVC1", 0, 1 },
+ { "PCIE_PERR_GROUP", 0x59d0, 0 },
+ { "MA_RspCtlPerr", 26, 1 },
+ { "MST_DataPathPerr", 25, 1 },
+ { "MST_RspRdQPerr", 24, 1 },
+ { "TRGT1_FIDLkUpHdrPerr", 20, 1 },
+ { "TRGT1_AlindDataPerr", 19, 1 },
+ { "TRGT1_UnAlinDataPerr", 18, 1 },
+ { "TRGT1_ReqDataPerr", 17, 1 },
+ { "TRGT1_ReqHdrPerr", 16, 1 },
+ { "IPRxData_VC0Perr", 15, 1 },
+ { "IPRxHdr_VC0Perr", 14, 1 },
+ { "PIOCpl_VDMTxCtlPerr", 13, 1 },
+ { "PIOCpl_VDMTxDataPerr", 12, 1 },
+ { "MA_RspDataPerr", 11, 1 },
+ { "MA_CplTagQPerr", 10, 1 },
+ { "MA_ReqTagQPerr", 9, 1 },
+ { "PIOReq_BAR2CtlPerr", 8, 1 },
+ { "PIOReq_MEMCtlPerr", 7, 1 },
+ { "PIOReq_PLMCtlPerr", 6, 1 },
+ { "PIOReq_BAR2DataPerr", 5, 1 },
+ { "PIOReq_MEMDataPerr", 4, 1 },
+ { "PIOReq_PLMDataPerr", 3, 1 },
+ { "PIOCpl_CtlPerr", 2, 1 },
+ { "PIOCpl_DataPerr", 1, 1 },
+ { "PIOCpl_PLMRspPerr", 0, 1 },
+ { "PCIE_RSP_ERR_INT_LOG_EN", 0x59d4, 0 },
+ { "CplStatusIntEn", 12, 1 },
+ { "TimeoutIntEn", 11, 1 },
+ { "DisabledIntEn", 10, 1 },
+ { "RspDropFLRIntEn", 9, 1 },
+ { "ReqUnderFLRIntEn", 8, 1 },
+ { "CplStatusLogEn", 4, 1 },
+ { "TimeoutLogEn", 3, 1 },
+ { "DisabledLogEn", 2, 1 },
+ { "RspDropFLRLogEn", 1, 1 },
+ { "ReqUnderFLRLogEn", 0, 1 },
+ { "PCIE_RSP_ERR_LOG1", 0x59d8, 0 },
+ { "Tag", 25, 7 },
+ { "CID", 22, 3 },
+ { "ChNum", 19, 3 },
+ { "ByteLen", 6, 13 },
+ { "Reason", 3, 3 },
+ { "CplStatus", 0, 3 },
+ { "PCIE_RSP_ERR_LOG2", 0x59dc, 0 },
+ { "Valid", 31, 1 },
+ { "Addr10b", 9, 10 },
+ { "VFID", 0, 9 },
+ { "PCIE_REVISION", 0x5a00, 0 },
+ { "PCIE_PDEBUG_INDEX", 0x5a04, 0 },
+ { "PDEBUGSelH", 16, 7 },
+ { "PDEBUGSelL", 0, 7 },
+ { "PCIE_PDEBUG_DATA_HIGH", 0x5a08, 0 },
+ { "PCIE_PDEBUG_DATA_LOW", 0x5a0c, 0 },
+ { "PCIE_CDEBUG_INDEX", 0x5a10, 0 },
+ { "CDEBUGSelH", 16, 8 },
+ { "CDEBUGSelL", 0, 8 },
+ { "PCIE_CDEBUG_DATA_HIGH", 0x5a14, 0 },
+ { "PCIE_CDEBUG_DATA_LOW", 0x5a18, 0 },
+ { "PCIE_BUS_MST_STAT_0", 0x5a60, 0 },
+ { "PCIE_BUS_MST_STAT_1", 0x5a64, 0 },
+ { "PCIE_BUS_MST_STAT_2", 0x5a68, 0 },
+ { "PCIE_BUS_MST_STAT_3", 0x5a6c, 0 },
+ { "PCIE_RSP_ERR_STAT_0", 0x5a80, 0 },
+ { "PCIE_RSP_ERR_STAT_1", 0x5a84, 0 },
+ { "PCIE_RSP_ERR_STAT_2", 0x5a88, 0 },
+ { "PCIE_RSP_ERR_STAT_3", 0x5a8c, 0 },
+ { "PCIE_DBI_TIMEOUT_CTL", 0x5a94, 0 },
+ { "PCIE_DBI_TIMEOUT_STATUS0", 0x5a98, 0 },
+ { "PCIE_DBI_TIMEOUT_STATUS1", 0x5a9c, 0 },
+ { "Valid", 31, 1 },
+ { "Source", 17, 2 },
+ { "Write", 13, 4 },
+ { "CS2", 12, 1 },
+ { "PF", 9, 3 },
+ { "VFVld", 8, 1 },
+ { "VF", 0, 8 },
+ { "PCIE_PB_CTL", 0x5b94, 0 },
+ { "PB_Sel", 16, 8 },
+ { "PB_SelReg", 8, 8 },
+ { "PB_Func", 0, 3 },
+ { "PCIE_PB_DATA", 0x5b98, 0 },
+ { "PCIE_CHANGESET", 0x59fc, 0 },
+ { "PCIE_CUR_LINK", 0x5b9c, 0 },
+ { "CfgInitCoeffDoneSeen", 22, 1 },
+ { "CfgInitCoeffDone", 21, 1 },
+ { "xmlh_link_up", 20, 1 },
+ { "pm_linkst_in_l0s", 19, 1 },
+ { "pm_linkst_in_l1", 18, 1 },
+ { "pm_linkst_in_l2", 17, 1 },
+ { "pm_linkst_l2_exit", 16, 1 },
+ { "xmlh_in_rl0s", 15, 1 },
+ { "xmlh_ltssm_state_rcvry_eq", 14, 1 },
+ { "NegotiatedWidth", 8, 6 },
+ { "ActiveLanes", 0, 8 },
+ { "PCIE_PHY_REQRXPWR", 0x5ba0, 0 },
+ { "Req_LnH_RxStateDone", 31, 1 },
+ { "Req_LnH_RxStateReq", 30, 1 },
+ { "Req_LnH_RxPwrState", 28, 2 },
+ { "Req_LnG_RxStateDone", 27, 1 },
+ { "Req_LnG_RxStateReq", 26, 1 },
+ { "Req_LnG_RxPwrState", 24, 2 },
+ { "Req_LnF_RxStateDone", 23, 1 },
+ { "Req_LnF_RxStateReq", 22, 1 },
+ { "Req_LnF_RxPwrState", 20, 2 },
+ { "Req_LnE_RxStateDone", 19, 1 },
+ { "Req_LnE_RxStateReq", 18, 1 },
+ { "Req_LnE_RxPwrState", 16, 2 },
+ { "Req_LnD_RxStateDone", 15, 1 },
+ { "Req_LnD_RxStateReq", 14, 1 },
+ { "Req_LnD_RxPwrState", 12, 2 },
+ { "Req_LnC_RxStateDone", 11, 1 },
+ { "Req_LnC_RxStateReq", 10, 1 },
+ { "Req_LnC_RxPwrState", 8, 2 },
+ { "Req_LnB_RxStateDone", 7, 1 },
+ { "Req_LnB_RxStateReq", 6, 1 },
+ { "Req_LnB_RxPwrState", 4, 2 },
+ { "Req_LnA_RxStateDone", 3, 1 },
+ { "Req_LnA_RxStateReq", 2, 1 },
+ { "Req_LnA_RxPwrState", 0, 2 },
+ { "PCIE_PHY_CURRXPWR", 0x5ba4, 0 },
+ { "Cur_LnH_RxPwrState", 28, 3 },
+ { "Cur_LnG_RxPwrState", 24, 3 },
+ { "Cur_LnF_RxPwrState", 20, 3 },
+ { "Cur_LnE_RxPwrState", 16, 3 },
+ { "Cur_LnD_RxPwrState", 12, 3 },
+ { "Cur_LnC_RxPwrState", 8, 3 },
+ { "Cur_LnB_RxPwrState", 4, 3 },
+ { "Cur_LnA_RxPwrState", 0, 3 },
+ { "PCIE_PHY_GEN3_AE0", 0x5ba8, 0 },
+ { "LnD_STAT", 28, 3 },
+ { "LnD_CMD", 24, 3 },
+ { "LnC_STAT", 20, 3 },
+ { "LnC_CMD", 16, 3 },
+ { "LnB_STAT", 12, 3 },
+ { "LnB_CMD", 8, 3 },
+ { "LnA_STAT", 4, 3 },
+ { "LnA_CMD", 0, 3 },
+ { "PCIE_PHY_GEN3_AE1", 0x5bac, 0 },
+ { "LnH_STAT", 28, 3 },
+ { "LnH_CMD", 24, 3 },
+ { "LnG_STAT", 20, 3 },
+ { "LnG_CMD", 16, 3 },
+ { "LnF_STAT", 12, 3 },
+ { "LnF_CMD", 8, 3 },
+ { "LnE_STAT", 4, 3 },
+ { "LnE_CMD", 0, 3 },
+ { "PCIE_PHY_FS_LF0", 0x5bb0, 0 },
+ { "Lane1LF", 24, 6 },
+ { "Lane1FS", 16, 6 },
+ { "Lane0LF", 8, 6 },
+ { "Lane0FS", 0, 6 },
+ { "PCIE_PHY_FS_LF1", 0x5bb4, 0 },
+ { "Lane3LF", 24, 6 },
+ { "Lane3FS", 16, 6 },
+ { "Lane2LF", 8, 6 },
+ { "Lane2FS", 0, 6 },
+ { "PCIE_PHY_FS_LF2", 0x5bb8, 0 },
+ { "Lane5LF", 24, 6 },
+ { "Lane5FS", 16, 6 },
+ { "Lane4LF", 8, 6 },
+ { "Lane4FS", 0, 6 },
+ { "PCIE_PHY_FS_LF3", 0x5bbc, 0 },
+ { "Lane7LF", 24, 6 },
+ { "Lane7FS", 16, 6 },
+ { "Lane6LF", 8, 6 },
+ { "Lane6FS", 0, 6 },
+ { "PCIE_PHY_PRESET_REQ", 0x5bc0, 0 },
+ { "CoeffDone", 16, 1 },
+ { "CoeffLane", 8, 4 },
+ { "CoeffStart", 0, 1 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bc4, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bc8, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bcc, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bd0, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bd4, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bd8, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bdc, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5be0, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5be4, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5be8, 0 },
+ { "PCIE_PHY_PRESET_COEFF", 0x5bec, 0 },
+ { "PCIE_PHY_INDIR_REQ", 0x5bf0, 0 },
+ { "Enable", 31, 1 },
+ { "RegAddr", 0, 16 },
+ { "PCIE_PHY_INDIR_DATA", 0x5bf4, 0 },
+ { "PCIE_STATIC_SPARE1", 0x5bf8, 0 },
+ { "PCIE_STATIC_SPARE2", 0x5bfc, 0 },
+ { "PCIE_KDOORBELL_GTS_PF_BASE_LEN", 0x5c10, 0 },
+ { "KDB_PF_Len", 24, 5 },
+ { "KDB_PF_BaseAddr", 0, 20 },
+ { "PCIE_KDOORBELL_GTS_VF_BASE_LEN", 0x5c14, 0 },
+ { "KDB_VF_Len", 24, 5 },
+ { "KDB_VF_BaseAddr", 0, 20 },
+ { "PCIE_KDOORBELL_GTS_VF_OFFSET", 0x5c18, 0 },
+ { "PCIE_PHY_REQRXPWR1", 0x5c1c, 0 },
+ { "Req_LnP_RxStateDone", 31, 1 },
+ { "Req_LnP_RxStateReq", 30, 1 },
+ { "Req_LnP_RxPwrState", 28, 2 },
+ { "Req_LnO_RxStateDone", 27, 1 },
+ { "Req_LnO_RxStateReq", 26, 1 },
+ { "Req_LnO_RxPwrState", 24, 2 },
+ { "Req_LnN_RxStateDone", 23, 1 },
+ { "Req_LnN_RxStateReq", 22, 1 },
+ { "Req_LnN_RxPwrState", 20, 2 },
+ { "Req_LnM_RxStateDone", 19, 1 },
+ { "Req_LnM_RxStateReq", 18, 1 },
+ { "Req_LnM_RxPwrState", 16, 2 },
+ { "Req_LnL_RxStateDone", 15, 1 },
+ { "Req_LnL_RxStateReq", 14, 1 },
+ { "Req_LnL_RxPwrState", 12, 2 },
+ { "Req_LnK_RxStateDone", 11, 1 },
+ { "Req_LnK_RxStateReq", 10, 1 },
+ { "Req_LnK_RxPwrState", 8, 2 },
+ { "Req_LnJ_RxStateDone", 7, 1 },
+ { "Req_LnJ_RxStateReq", 6, 1 },
+ { "Req_LnJ_RxPwrState", 4, 2 },
+ { "Req_LnI_RxStateDone", 3, 1 },
+ { "Req_LnI_RxStateReq", 2, 1 },
+ { "Req_LnI_RxPwrState", 0, 2 },
+ { "PCIE_PHY_CURRXPWR1", 0x5c20, 0 },
+ { "Cur_LnP_RxPwrState", 28, 3 },
+ { "Cur_LnO_RxPwrState", 24, 3 },
+ { "Cur_LnN_RxPwrState", 20, 3 },
+ { "Cur_LnM_RxPwrState", 16, 3 },
+ { "Cur_LnL_RxPwrState", 12, 3 },
+ { "Cur_LnK_RxPwrState", 8, 3 },
+ { "Cur_LnJ_RxPwrState", 4, 3 },
+ { "Cur_LnI_RxPwrState", 0, 3 },
+ { "PCIE_PHY_GEN3_AE2", 0x5c24, 0 },
+ { "LnL_STAT", 28, 3 },
+ { "LnL_CMD", 24, 3 },
+ { "LnK_STAT", 20, 3 },
+ { "LnK_CMD", 16, 3 },
+ { "LnJ_STAT", 12, 3 },
+ { "LnJ_CMD", 8, 3 },
+ { "LnI_STAT", 4, 3 },
+ { "LnI_CMD", 0, 3 },
+ { "PCIE_PHY_GEN3_AE3", 0x5c28, 0 },
+ { "LnP_STAT", 28, 3 },
+ { "LnP_CMD", 24, 3 },
+ { "LnO_STAT", 20, 3 },
+ { "LnO_CMD", 16, 3 },
+ { "LnN_STAT", 12, 3 },
+ { "LnN_CMD", 8, 3 },
+ { "LnM_STAT", 4, 3 },
+ { "LnM_CMD", 0, 3 },
+ { "PCIE_PHY_FS_LF4", 0x5c2c, 0 },
+ { "Lane9LF", 24, 6 },
+ { "Lane9FS", 16, 6 },
+ { "Lane8LF", 8, 6 },
+ { "Lane8FS", 0, 6 },
+ { "PCIE_PHY_FS_LF5", 0x5c30, 0 },
+ { "Lane11LF", 24, 6 },
+ { "Lane11FS", 16, 6 },
+ { "Lane10LF", 8, 6 },
+ { "Lane10FS", 0, 6 },
+ { "PCIE_PHY_FS_LF6", 0x5c34, 0 },
+ { "Lane13LF", 24, 6 },
+ { "Lane13FS", 16, 6 },
+ { "Lane12LF", 8, 6 },
+ { "Lane12FS", 0, 6 },
+ { "PCIE_PHY_FS_LF7", 0x5c38, 0 },
+ { "Lane15LF", 24, 6 },
+ { "Lane15FS", 16, 6 },
+ { "Lane14LF", 8, 6 },
+ { "Lane14FS", 0, 6 },
+ { "PCIE_MULTI_PHY_INDIR_REQ", 0x5c3c, 0 },
+ { "Phy_Reg_Enable", 31, 1 },
+ { "Phy_Reg_Select", 22, 2 },
+ { "Phy_Reg_RegAddr", 0, 16 },
+ { "PCIE_MULTI_PHY_INDIR_DATA", 0x5c40, 0 },
+ { "PCIE_VF_INT_INDIR_REQ", 0x5c44, 0 },
+ { "Enable", 24, 1 },
+ { "AI", 23, 1 },
+ { "VFID", 0, 10 },
+ { "PCIE_VF_INT_INDIR_DATA", 0x5c48, 0 },
+ { "VecNum", 12, 10 },
+ { "VecBase", 0, 11 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c4c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c50, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c54, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c58, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c5c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c60, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c64, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c68, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c6c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c70, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c74, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c78, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c7c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c80, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c84, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c88, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c8c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c90, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c94, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c98, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5c9c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ca0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ca4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ca8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cb0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cb4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cb8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cbc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cc0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cc4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cc8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ccc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cd0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cd4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cd8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cdc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ce0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ce4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ce8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cf0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cf4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cf8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5cfc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d00, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d04, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d08, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d0c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d10, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d14, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d18, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d1c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d20, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d24, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d28, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d2c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d30, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d34, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d38, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d3c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d40, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d44, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d48, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d4c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d50, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d54, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d58, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d5c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d60, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d64, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d68, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d6c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d70, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d74, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d78, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d7c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d80, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d84, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d88, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d8c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d90, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d94, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d98, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5d9c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5da0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5da4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5da8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dac, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5db0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5db4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5db8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dbc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dc0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dc4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dc8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dcc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dd0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dd4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dd8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5ddc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5de0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5de4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5de8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dec, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5df0, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5df4, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5df8, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5dfc, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e00, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e04, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e08, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e0c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e10, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e14, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e18, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e1c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e20, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e24, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e28, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e2c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e30, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e34, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e38, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e3c, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e40, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e44, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_256_INT_CFG2", 0x5e48, 0 },
+ { "SendFLRRsp", 31, 1 },
+ { "ImmFLRRsp", 24, 1 },
+ { "TxnDisable", 20, 1 },
+ { "PCIE_VF_MSI_EN_4", 0x5e50, 0 },
+ { "PCIE_VF_MSI_EN_5", 0x5e54, 0 },
+ { "PCIE_VF_MSI_EN_6", 0x5e58, 0 },
+ { "PCIE_VF_MSI_EN_7", 0x5e5c, 0 },
+ { "PCIE_VF_MSIX_EN_4", 0x5e60, 0 },
+ { "PCIE_VF_MSIX_EN_5", 0x5e64, 0 },
+ { "PCIE_VF_MSIX_EN_6", 0x5e68, 0 },
+ { "PCIE_VF_MSIX_EN_7", 0x5e6c, 0 },
+ { "PCIE_FLR_VF4_STATUS", 0x5e70, 0 },
+ { "PCIE_FLR_VF5_STATUS", 0x5e74, 0 },
+ { "PCIE_FLR_VF6_STATUS", 0x5e78, 0 },
+ { "PCIE_FLR_VF7_STATUS", 0x5e7c, 0 },
+ { "PCIE_BUS_MST_STAT_4", 0x5e80, 0 },
+ { "PCIE_BUS_MST_STAT_5", 0x5e84, 0 },
+ { "PCIE_BUS_MST_STAT_6", 0x5e88, 0 },
+ { "PCIE_BUS_MST_STAT_7", 0x5e8c, 0 },
+ { "PCIE_BUS_MST_STAT_8", 0x5e90, 0 },
+ { "PCIE_TGT_SKID_FIFO", 0x5e94, 0 },
+ { "HdrFreeCnt", 16, 12 },
+ { "DataFreeCnt", 0, 12 },
+ { "PCIE_RSP_ERR_STAT_4", 0x5ea0, 0 },
+ { "PCIE_RSP_ERR_STAT_5", 0x5ea4, 0 },
+ { "PCIE_RSP_ERR_STAT_6", 0x5ea8, 0 },
+ { "PCIE_RSP_ERR_STAT_7", 0x5eac, 0 },
+ { "PCIE_RSP_ERR_STAT_8", 0x5eb0, 0 },
+ { "PCIE_PHY_STAT1", 0x5ec0, 0 },
+ { "PHY0_RTune_Ack", 31, 1 },
+ { "PHY1_RTune_Ack", 30, 1 },
+ { "PCIE_PHY_CTRL1", 0x5ec4, 0 },
+ { "PHY0_RTune_Req", 31, 1 },
+ { "PHY1_RTune_Req", 30, 1 },
+ { "TxDeemph_gen1", 16, 8 },
+ { "TxDeemph_gen2_3p5db", 8, 8 },
+ { "TxDeemph_gen2_6db", 0, 8 },
+ { "PCIE_PCIE_SPARE0", 0x5ec8, 0 },
+ { "PCIE_RESET_STAT", 0x5ecc, 0 },
+ { "PON_RST_STATE_flag", 11, 1 },
+ { "BUS_RST_STATE_flag", 10, 1 },
+ { "DL_DOWN_PCIeCRST_MODE0_STATE_flag", 9, 1 },
+ { "DL_DOWN_PCIeCRST_MODE1_STATE_flag", 8, 1 },
+ { "PCIe_WARM_RST_MODE0_STATE_flag", 7, 1 },
+ { "PCIe_WARM_RST_MODE1_STATE_flag", 6, 1 },
+ { "PIO_WARM_RST_MODE0_STATE_flag", 5, 1 },
+ { "PIO_WARM_RST_MODE1_STATE_flag", 4, 1 },
+ { "LastResetState", 0, 3 },
+ { "PCIE_FUNC_DSTATE", 0x5ed0, 0 },
+ { "PF7_DState", 21, 3 },
+ { "PF6_DState", 18, 3 },
+ { "PF5_DState", 15, 3 },
+ { "PF4_DState", 12, 3 },
+ { "PF3_DState", 9, 3 },
+ { "PF2_DState", 6, 3 },
+ { "PF1_DState", 3, 3 },
+ { "PF0_DState", 0, 3 },
+ { "PCIE_DEBUG_ADDR_RANGE1", 0x5ee0, 0 },
+ { "PCIE_DEBUG_ADDR_RANGE2", 0x5ef0, 0 },
+ { "PCIE_DEBUG_ADDR_RANGE_CNT", 0x5f00, 0 },
+ { NULL }
+};
+
+struct reg_info t6_dbg_regs[] = {
+ { "DBG_DBG0_CFG", 0x6000, 0 },
+ { "ModuleSelect", 12, 8 },
+ { "RegSelect", 4, 8 },
+ { "ClkSelect", 0, 4 },
+ { "DBG_DBG0_EN", 0x6004, 0 },
+ { "SDRHalfWord0", 8, 1 },
+ { "DDREn", 4, 1 },
+ { "PortEn", 0, 1 },
+ { "DBG_DBG1_CFG", 0x6008, 0 },
+ { "ModuleSelect", 12, 8 },
+ { "RegSelect", 4, 8 },
+ { "ClkSelect", 0, 4 },
+ { "DBG_DBG1_EN", 0x600c, 0 },
+ { "Clk_en_on_dbg1", 20, 1 },
+ { "SDRHalfWord0", 8, 1 },
+ { "DDREn", 4, 1 },
+ { "PortEn", 0, 1 },
+ { "DBG_GPIO_EN", 0x6010, 0 },
+ { "GPIO15_OEn", 31, 1 },
+ { "GPIO14_OEn", 30, 1 },
+ { "GPIO13_OEn", 29, 1 },
+ { "GPIO12_OEn", 28, 1 },
+ { "GPIO11_OEn", 27, 1 },
+ { "GPIO10_OEn", 26, 1 },
+ { "GPIO9_OEn", 25, 1 },
+ { "GPIO8_OEn", 24, 1 },
+ { "GPIO7_OEn", 23, 1 },
+ { "GPIO6_OEn", 22, 1 },
+ { "GPIO5_OEn", 21, 1 },
+ { "GPIO4_OEn", 20, 1 },
+ { "GPIO3_OEn", 19, 1 },
+ { "GPIO2_OEn", 18, 1 },
+ { "GPIO1_OEn", 17, 1 },
+ { "GPIO0_OEn", 16, 1 },
+ { "GPIO15_Out_Val", 15, 1 },
+ { "GPIO14_Out_Val", 14, 1 },
+ { "GPIO13_Out_Val", 13, 1 },
+ { "GPIO12_Out_Val", 12, 1 },
+ { "GPIO11_Out_Val", 11, 1 },
+ { "GPIO10_Out_Val", 10, 1 },
+ { "GPIO9_Out_Val", 9, 1 },
+ { "GPIO8_Out_Val", 8, 1 },
+ { "GPIO7_Out_Val", 7, 1 },
+ { "GPIO6_Out_Val", 6, 1 },
+ { "GPIO5_Out_Val", 5, 1 },
+ { "GPIO4_Out_Val", 4, 1 },
+ { "GPIO3_Out_Val", 3, 1 },
+ { "GPIO2_Out_Val", 2, 1 },
+ { "GPIO1_Out_Val", 1, 1 },
+ { "GPIO0_Out_Val", 0, 1 },
+ { "DBG_GPIO_IN", 0x6014, 0 },
+ { "GPIO15_CHG_DET", 31, 1 },
+ { "GPIO14_CHG_DET", 30, 1 },
+ { "GPIO13_CHG_DET", 29, 1 },
+ { "GPIO12_CHG_DET", 28, 1 },
+ { "GPIO11_CHG_DET", 27, 1 },
+ { "GPIO10_CHG_DET", 26, 1 },
+ { "GPIO9_CHG_DET", 25, 1 },
+ { "GPIO8_CHG_DET", 24, 1 },
+ { "GPIO7_CHG_DET", 23, 1 },
+ { "GPIO6_CHG_DET", 22, 1 },
+ { "GPIO5_CHG_DET", 21, 1 },
+ { "GPIO4_CHG_DET", 20, 1 },
+ { "GPIO3_CHG_DET", 19, 1 },
+ { "GPIO2_CHG_DET", 18, 1 },
+ { "GPIO1_CHG_DET", 17, 1 },
+ { "GPIO0_CHG_DET", 16, 1 },
+ { "GPIO15_IN", 15, 1 },
+ { "GPIO14_IN", 14, 1 },
+ { "GPIO13_IN", 13, 1 },
+ { "GPIO12_IN", 12, 1 },
+ { "GPIO11_IN", 11, 1 },
+ { "GPIO10_IN", 10, 1 },
+ { "GPIO9_IN", 9, 1 },
+ { "GPIO8_IN", 8, 1 },
+ { "GPIO7_IN", 7, 1 },
+ { "GPIO6_IN", 6, 1 },
+ { "GPIO5_IN", 5, 1 },
+ { "GPIO4_IN", 4, 1 },
+ { "GPIO3_IN", 3, 1 },
+ { "GPIO2_IN", 2, 1 },
+ { "GPIO1_IN", 1, 1 },
+ { "GPIO0_IN", 0, 1 },
+ { "DBG_GPIO_EN_NEW", 0x6100, 0 },
+ { "GPIO16_OEn", 7, 1 },
+ { "GPIO17_OEn", 6, 1 },
+ { "GPIO18_OEn", 5, 1 },
+ { "GPIO19_OEn", 4, 1 },
+ { "GPIO16_Out_Val", 3, 1 },
+ { "GPIO17_Out_Val", 2, 1 },
+ { "GPIO18_Out_Val", 1, 1 },
+ { "GPIO19_Out_Val", 0, 1 },
+ { "DBG_GPIO_IN_NEW", 0x6104, 0 },
+ { "GPIO16_CHG_DET", 7, 1 },
+ { "GPIO17_CHG_DET", 6, 1 },
+ { "GPIO18_CHG_DET", 5, 1 },
+ { "GPIO19_CHG_DET", 4, 1 },
+ { "GPIO19_IN", 3, 1 },
+ { "GPIO18_IN", 2, 1 },
+ { "GPIO17_IN", 1, 1 },
+ { "GPIO16_IN", 0, 1 },
+ { "DBG_INT_ENABLE", 0x6018, 0 },
+ { "GPIO19", 29, 1 },
+ { "GPIO18", 28, 1 },
+ { "GPIO17", 27, 1 },
+ { "GPIO16", 26, 1 },
+ { "IBM_FDL_FAIL_int_enbl", 25, 1 },
+ { "pll_lock_lost_int_enbl", 22, 1 },
+ { "C_LOCK", 21, 1 },
+ { "M_LOCK", 20, 1 },
+ { "U_LOCK", 19, 1 },
+ { "PCIe_LOCK", 18, 1 },
+ { "KX_LOCK", 17, 1 },
+ { "KR_LOCK", 16, 1 },
+ { "GPIO15", 15, 1 },
+ { "GPIO14", 14, 1 },
+ { "GPIO13", 13, 1 },
+ { "GPIO12", 12, 1 },
+ { "GPIO11", 11, 1 },
+ { "GPIO10", 10, 1 },
+ { "GPIO9", 9, 1 },
+ { "GPIO8", 8, 1 },
+ { "GPIO7", 7, 1 },
+ { "GPIO6", 6, 1 },
+ { "GPIO5", 5, 1 },
+ { "GPIO4", 4, 1 },
+ { "GPIO3", 3, 1 },
+ { "GPIO2", 2, 1 },
+ { "GPIO1", 1, 1 },
+ { "GPIO0", 0, 1 },
+ { "DBG_INT_CAUSE", 0x601c, 0 },
+ { "GPIO19", 29, 1 },
+ { "GPIO18", 28, 1 },
+ { "GPIO17", 27, 1 },
+ { "GPIO16", 26, 1 },
+ { "IBM_FDL_FAIL_int_cause", 25, 1 },
+ { "pll_lock_lost_int_cause", 22, 1 },
+ { "C_LOCK", 21, 1 },
+ { "M_LOCK", 20, 1 },
+ { "U_LOCK", 19, 1 },
+ { "PCIe_LOCK", 18, 1 },
+ { "KX_LOCK", 17, 1 },
+ { "KR_LOCK", 16, 1 },
+ { "GPIO15", 15, 1 },
+ { "GPIO14", 14, 1 },
+ { "GPIO13", 13, 1 },
+ { "GPIO12", 12, 1 },
+ { "GPIO11", 11, 1 },
+ { "GPIO10", 10, 1 },
+ { "GPIO9", 9, 1 },
+ { "GPIO8", 8, 1 },
+ { "GPIO7", 7, 1 },
+ { "GPIO6", 6, 1 },
+ { "GPIO5", 5, 1 },
+ { "GPIO4", 4, 1 },
+ { "GPIO3", 3, 1 },
+ { "GPIO2", 2, 1 },
+ { "GPIO1", 1, 1 },
+ { "GPIO0", 0, 1 },
+ { "DBG_DBG0_RST_VALUE", 0x6020, 0 },
+ { "DBG_PLL_OCLK_PAD_EN", 0x6028, 0 },
+ { "PCIE_OCLK_En", 20, 1 },
+ { "KX_OCLK_En", 16, 1 },
+ { "U_OCLK_En", 12, 1 },
+ { "KR_OCLK_En", 8, 1 },
+ { "M_OCLK_En", 4, 1 },
+ { "C_OCLK_En", 0, 1 },
+ { "DBG_PLL_LOCK", 0x602c, 0 },
+ { "P_LOCK", 20, 1 },
+ { "KX_LOCK", 16, 1 },
+ { "U_LOCK", 12, 1 },
+ { "KR_LOCK", 8, 1 },
+ { "M_LOCK", 4, 1 },
+ { "C_LOCK", 0, 1 },
+ { "DBG_GPIO_ACT_LOW", 0x6030, 0 },
+ { "GPIO19_ACT_LOW", 25, 1 },
+ { "GPIO18_ACT_LOW", 24, 1 },
+ { "GPIO17_ACT_LOW", 23, 1 },
+ { "GPIO16_ACT_LOW", 22, 1 },
+ { "P_LOCK_ACT_LOW", 21, 1 },
+ { "C_LOCK_ACT_LOW", 20, 1 },
+ { "M_LOCK_ACT_LOW", 19, 1 },
+ { "U_LOCK_ACT_LOW", 18, 1 },
+ { "KR_LOCK_ACT_LOW", 17, 1 },
+ { "KX_LOCK_ACT_LOW", 16, 1 },
+ { "GPIO15_ACT_LOW", 15, 1 },
+ { "GPIO14_ACT_LOW", 14, 1 },
+ { "GPIO13_ACT_LOW", 13, 1 },
+ { "GPIO12_ACT_LOW", 12, 1 },
+ { "GPIO11_ACT_LOW", 11, 1 },
+ { "GPIO10_ACT_LOW", 10, 1 },
+ { "GPIO9_ACT_LOW", 9, 1 },
+ { "GPIO8_ACT_LOW", 8, 1 },
+ { "GPIO7_ACT_LOW", 7, 1 },
+ { "GPIO6_ACT_LOW", 6, 1 },
+ { "GPIO5_ACT_LOW", 5, 1 },
+ { "GPIO4_ACT_LOW", 4, 1 },
+ { "GPIO3_ACT_LOW", 3, 1 },
+ { "GPIO2_ACT_LOW", 2, 1 },
+ { "GPIO1_ACT_LOW", 1, 1 },
+ { "GPIO0_ACT_LOW", 0, 1 },
+ { "DBG_EFUSE_BYTE0_3", 0x6034, 0 },
+ { "DBG_EFUSE_BYTE4_7", 0x6038, 0 },
+ { "DBG_EFUSE_BYTE8_11", 0x603c, 0 },
+ { "DBG_EFUSE_BYTE12_15", 0x6040, 0 },
+ { "DBG_EXTRA_STATIC_BITS_CONF", 0x6058, 0 },
+ { "STATIC_M_PLL_RESET", 30, 1 },
+ { "STATIC_M_PLL_SLEEP", 29, 1 },
+ { "STATIC_M_PLL_BYPASS", 28, 1 },
+ { "STATIC_MPLL_CLK_SEL", 27, 1 },
+ { "STATIC_U_PLL_SLEEP", 26, 1 },
+ { "STATIC_C_PLL_SLEEP", 25, 1 },
+ { "STATIC_LVDS_CLKOUT_SEL", 23, 2 },
+ { "STATIC_LVDS_CLKOUT_EN", 22, 1 },
+ { "STATIC_CCLK_FREQ_SEL", 20, 2 },
+ { "STATIC_UCLK_FREQ_SEL", 18, 2 },
+ { "ExPHYClk_sel_en", 17, 1 },
+ { "ExPHYClk_sel", 15, 2 },
+ { "STATIC_U_PLL_BYPASS", 14, 1 },
+ { "STATIC_C_PLL_BYPASS", 13, 1 },
+ { "STATIC_KR_PLL_BYPASS", 12, 1 },
+ { "STATIC_KX_PLL_BYPASS", 11, 1 },
+ { "STATIC_KX_PLL_V", 7, 4 },
+ { "STATIC_KR_PLL_V", 3, 4 },
+ { "DBG_STATIC_OCLK_MUXSEL_CONF", 0x605c, 0 },
+ { "P_OCLK_MUXSEL", 13, 4 },
+ { "M_OCLK_MUXSEL", 12, 1 },
+ { "C_OCLK_MUXSEL", 10, 2 },
+ { "U_OCLK_MUXSEL", 8, 2 },
+ { "KX_OCLK_MUXSEL", 3, 3 },
+ { "KR_OCLK_MUXSEL", 0, 3 },
+ { "DBG_TRACE0_CONF_COMPREG0", 0x6060, 0 },
+ { "DBG_TRACE0_CONF_COMPREG1", 0x6064, 0 },
+ { "DBG_TRACE1_CONF_COMPREG0", 0x6068, 0 },
+ { "DBG_TRACE1_CONF_COMPREG1", 0x606c, 0 },
+ { "DBG_TRACE0_CONF_MASKREG0", 0x6070, 0 },
+ { "DBG_TRACE0_CONF_MASKREG1", 0x6074, 0 },
+ { "DBG_TRACE1_CONF_MASKREG0", 0x6078, 0 },
+ { "DBG_TRACE1_CONF_MASKREG1", 0x607c, 0 },
+ { "DBG_TRACE_COUNTER", 0x6080, 0 },
+ { "Counter1", 16, 16 },
+ { "Counter0", 0, 16 },
+ { "DBG_STATIC_REFCLK_PERIOD", 0x6084, 0 },
+ { "DBG_TRACE_CONF", 0x6088, 0 },
+ { "dbg_trace_operate_with_trg", 5, 1 },
+ { "dbg_trace_operate_en", 4, 1 },
+ { "dbg_operate_indv_combined", 3, 1 },
+ { "dbg_operate_order_of_trigger", 2, 1 },
+ { "dbg_operate_sgl_dbl_trigger", 1, 1 },
+ { "dbg_operate0_or_1", 0, 1 },
+ { "DBG_TRACE_RDEN", 0x608c, 0 },
+ { "RD_ADDR1", 11, 9 },
+ { "RD_ADDR0", 2, 9 },
+ { "Rd_en1", 1, 1 },
+ { "Rd_en0", 0, 1 },
+ { "DBG_TRACE_WRADDR", 0x6090, 0 },
+ { "Wr_pointer_addr1", 16, 9 },
+ { "Wr_pointer_addr0", 0, 9 },
+ { "DBG_TRACE0_DATA_OUT", 0x6094, 0 },
+ { "DBG_TRACE1_DATA_OUT", 0x6098, 0 },
+ { "DBG_FUSE_SENSE_DONE", 0x609c, 0 },
+ { "PSRO_sel", 1, 4 },
+ { "FUSE_DONE_SENSE", 0, 1 },
+ { "DBG_TVSENSE_EN", 0x60a8, 0 },
+ { "MCIMPED1_out", 29, 1 },
+ { "MCIMPED2_out", 28, 1 },
+ { "TVSENSE_SNSOUT", 17, 9 },
+ { "TVSENSE_OUTPUTVALID", 16, 1 },
+ { "TVSENSE_SLEEP", 11, 1 },
+ { "TVSENSE_SENSV", 10, 1 },
+ { "TVSENSE_RST", 9, 1 },
+ { "TVSENSE_RATIO", 0, 8 },
+ { "DBG_CUST_EFUSE_OUT_EN", 0x60ac, 0 },
+ { "DBG_CUST_EFUSE_SEL1_EN", 0x60b0, 0 },
+ { "DBG_CUST_EFUSE_SEL2_EN", 0x60b4, 0 },
+ { "DBG_FEENABLE", 29, 1 },
+ { "DBG_FEF", 23, 6 },
+ { "DBG_FEMIMICN", 22, 1 },
+ { "DBG_FEGATEC", 21, 1 },
+ { "DBG_FEPROGP", 20, 1 },
+ { "DBG_FEREADCLK", 19, 1 },
+ { "DBG_FERSEL", 3, 16 },
+ { "DBG_FETIME", 0, 3 },
+ { "DBG_STATIC_M_PLL_CONF1", 0x60b8, 0 },
+ { "STATIC_M_PLL_MULTFRAC", 8, 24 },
+ { "STATIC_M_PLL_FFSLEWRATE", 0, 8 },
+ { "DBG_STATIC_M_PLL_CONF2", 0x60bc, 0 },
+ { "STATIC_M_PLL_PREDIV", 24, 6 },
+ { "STATIC_M_PLL_DCO_BYPASS", 23, 1 },
+ { "STATIC_M_PLL_SDORDER", 21, 2 },
+ { "STATIC_M_PLL_FFENABLE", 20, 1 },
+ { "STATIC_M_PLL_STOPCLKB", 19, 1 },
+ { "STATIC_M_PLL_STOPCLKA", 18, 1 },
+ { "STATIC_M_PLL_SLEEP", 17, 1 },
+ { "STATIC_M_PLL_BYPASS", 16, 1 },
+ { "STATIC_M_PLL_LOCKTUNE", 0, 5 },
+ { "DBG_STATIC_M_PLL_CONF3", 0x60c0, 0 },
+ { "STATIC_M_PLL_MULTPRE", 30, 2 },
+ { "STATIC_M_PLL_LOCKSEL", 28, 1 },
+ { "STATIC_M_PLL_FFTUNE", 12, 16 },
+ { "STATIC_M_PLL_RANGEPRE", 10, 2 },
+ { "STATIC_M_PLL_RANGEB", 5, 5 },
+ { "STATIC_M_PLL_RANGEA", 0, 5 },
+ { "DBG_STATIC_M_PLL_CONF4", 0x60c4, 0 },
+ { "DBG_STATIC_M_PLL_CONF5", 0x60c8, 0 },
+ { "STATIC_M_PLL_VCVTUNE", 24, 3 },
+ { "STATIC_M_PLL_RESET", 23, 1 },
+ { "STATIC_MPLL_REFCLK_SEL", 22, 1 },
+ { "STATIC_M_PLL_LFTUNE_32_40", 13, 9 },
+ { "STATIC_M_PLL_MULT", 0, 8 },
+ { "DBG_STATIC_M_PLL_CONF6", 0x60cc, 0 },
+ { "STATIC_M_PLL_DIVCHANGE", 30, 1 },
+ { "STATIC_M_PLL_FRAMESTOP", 29, 1 },
+ { "STATIC_M_PLL_FASTSTOP", 28, 1 },
+ { "STATIC_M_PLL_FFBYPASS", 27, 1 },
+ { "STATIC_M_PLL_STARTUP", 25, 2 },
+ { "STATIC_M_PLL_VREGTUNE", 6, 19 },
+ { "STATIC_PHY0RecRst_", 5, 1 },
+ { "STATIC_PHY1RecRst_", 4, 1 },
+ { "STATIC_SWMC0Rst_", 3, 1 },
+ { "STATIC_SWMC0CfgRst_", 2, 1 },
+ { "STATIC_SWMC1Rst_", 1, 1 },
+ { "STATIC_SWMC1CfgRst_", 0, 1 },
+ { "DBG_STATIC_C_PLL_CONF1", 0x60d0, 0 },
+ { "STATIC_C_PLL_MULTFRAC", 8, 24 },
+ { "STATIC_C_PLL_FFSLEWRATE", 0, 8 },
+ { "DBG_STATIC_C_PLL_CONF2", 0x60d4, 0 },
+ { "STATIC_C_PLL_PREDIV", 26, 6 },
+ { "STATIC_C_PLL_STARTUP", 24, 2 },
+ { "STATIC_C_PLL_DCO_BYPASS", 23, 1 },
+ { "STATIC_C_PLL_SDORDER", 21, 2 },
+ { "STATIC_C_PLL_DIVCHANGE", 20, 1 },
+ { "STATIC_C_PLL_STOPCLKB", 19, 1 },
+ { "STATIC_C_PLL_STOPCLKA", 18, 1 },
+ { "STATIC_C_PLL_SLEEP", 17, 1 },
+ { "STATIC_C_PLL_BYPASS", 16, 1 },
+ { "STATIC_C_PLL_LOCKTUNE", 0, 5 },
+ { "DBG_STATIC_C_PLL_CONF3", 0x60d8, 0 },
+ { "STATIC_C_PLL_MULTPRE", 30, 2 },
+ { "STATIC_C_PLL_LOCKSEL", 28, 1 },
+ { "STATIC_C_PLL_FFTUNE", 12, 16 },
+ { "STATIC_C_PLL_RANGEPRE", 10, 2 },
+ { "STATIC_C_PLL_RANGEB", 5, 5 },
+ { "STATIC_C_PLL_RANGEA", 0, 5 },
+ { "DBG_STATIC_C_PLL_CONF4", 0x60dc, 0 },
+ { "DBG_STATIC_C_PLL_CONF5", 0x60e0, 0 },
+ { "STATIC_C_PLL_FFBYPASS", 27, 1 },
+ { "STATIC_C_PLL_FASTSTOP", 26, 1 },
+ { "STATIC_C_PLL_FRAMESTOP", 25, 1 },
+ { "STATIC_C_PLL_VCVTUNE", 22, 3 },
+ { "STATIC_C_PLL_LFTUNE_32_40", 13, 9 },
+ { "STATIC_C_PLL_PREDIV", 8, 5 },
+ { "STATIC_C_PLL_MULT", 0, 8 },
+ { "DBG_STATIC_U_PLL_CONF1", 0x60e4, 0 },
+ { "STATIC_U_PLL_MULTFRAC", 8, 24 },
+ { "STATIC_U_PLL_FFSLEWRATE", 0, 8 },
+ { "DBG_STATIC_U_PLL_CONF2", 0x60e8, 0 },
+ { "STATIC_U_PLL_PREDIV", 26, 6 },
+ { "STATIC_U_PLL_STARTUP", 24, 2 },
+ { "STATIC_U_PLL_DCO_BYPASS", 23, 1 },
+ { "STATIC_U_PLL_SDORDER", 21, 2 },
+ { "STATIC_U_PLL_DIVCHANGE", 20, 1 },
+ { "STATIC_U_PLL_STOPCLKB", 19, 1 },
+ { "STATIC_U_PLL_STOPCLKA", 18, 1 },
+ { "STATIC_U_PLL_SLEEP", 17, 1 },
+ { "STATIC_U_PLL_BYPASS", 16, 1 },
+ { "STATIC_U_PLL_LOCKTUNE", 0, 5 },
+ { "DBG_STATIC_U_PLL_CONF3", 0x60ec, 0 },
+ { "STATIC_U_PLL_MULTPRE", 30, 2 },
+ { "STATIC_U_PLL_LOCKSEL", 28, 1 },
+ { "STATIC_U_PLL_FFTUNE", 12, 16 },
+ { "STATIC_U_PLL_RANGEPRE", 10, 2 },
+ { "STATIC_U_PLL_RANGEB", 5, 5 },
+ { "STATIC_U_PLL_RANGEA", 0, 5 },
+ { "DBG_STATIC_U_PLL_CONF4", 0x60f0, 0 },
+ { "DBG_STATIC_U_PLL_CONF5", 0x60f4, 0 },
+ { "STATIC_U_PLL_FFBYPASS", 27, 1 },
+ { "STATIC_U_PLL_FASTSTOP", 26, 1 },
+ { "STATIC_U_PLL_FRAMESTOP", 25, 1 },
+ { "STATIC_U_PLL_VCVTUNE", 22, 3 },
+ { "STATIC_U_PLL_LFTUNE_32_40", 13, 9 },
+ { "STATIC_U_PLL_PREDIV", 8, 5 },
+ { "STATIC_U_PLL_MULT", 0, 8 },
+ { "DBG_STATIC_KR_PLL_CONF1", 0x60f8, 0 },
+ { "STATIC_KR_PLL_BYPASS", 30, 1 },
+ { "STATIC_KR_PLL_VBOOSTDIV", 27, 3 },
+ { "STATIC_KR_PLL_CPISEL", 24, 3 },
+ { "STATIC_KR_PLL_CCALMETHOD", 23, 1 },
+ { "STATIC_KR_PLL_CCALLOAD", 22, 1 },
+ { "STATIC_KR_PLL_CCALFMIN", 21, 1 },
+ { "STATIC_KR_PLL_CCALFMAX", 20, 1 },
+ { "STATIC_KR_PLL_CCALCVHOLD", 19, 1 },
+ { "STATIC_KR_PLL_CCALBANDSEL", 15, 4 },
+ { "STATIC_KR_PLL_BGOFFSET", 11, 4 },
+ { "STATIC_KR_PLL_P", 8, 3 },
+ { "STATIC_KR_PLL_N2", 4, 4 },
+ { "STATIC_KR_PLL_N1", 0, 4 },
+ { "DBG_STATIC_KR_PLL_CONF2", 0x60fc, 0 },
+ { "STATIC_KR_PLL_M", 11, 9 },
+ { "STATIC_KR_PLL_ANALOGTUNE", 0, 11 },
+ { "DBG_STATIC_KX_PLL_CONF1", 0x6108, 0 },
+ { "STATIC_KX_PLL_BYPASS", 30, 1 },
+ { "STATIC_KX_PLL_VBOOSTDIV", 27, 3 },
+ { "STATIC_KX_PLL_CPISEL", 24, 3 },
+ { "STATIC_KX_PLL_CCALMETHOD", 23, 1 },
+ { "STATIC_KX_PLL_CCALLOAD", 22, 1 },
+ { "STATIC_KX_PLL_CCALFMIN", 21, 1 },
+ { "STATIC_KX_PLL_CCALFMAX", 20, 1 },
+ { "STATIC_KX_PLL_CCALCVHOLD", 19, 1 },
+ { "STATIC_KX_PLL_CCALBANDSEL", 15, 4 },
+ { "STATIC_KX_PLL_BGOFFSET", 11, 4 },
+ { "STATIC_KX_PLL_P", 8, 3 },
+ { "STATIC_KX_PLL_N2", 4, 4 },
+ { "STATIC_KX_PLL_N1", 0, 4 },
+ { "DBG_STATIC_KX_PLL_CONF2", 0x610c, 0 },
+ { "STATIC_KX_PLL_M", 11, 9 },
+ { "STATIC_KX_PLL_ANALOGTUNE", 0, 11 },
+ { "DBG_STATIC_C_DFS_CONF", 0x6110, 0 },
+ { "STATIC_C_DFS_RANGEA", 8, 5 },
+ { "STATIC_C_DFS_RANGEB", 3, 5 },
+ { "STATIC_C_DFS_FFTUNE4", 2, 1 },
+ { "STATIC_C_DFS_FFTUNE5", 1, 1 },
+ { "STATIC_C_DFS_ENABLE", 0, 1 },
+ { "DBG_STATIC_U_DFS_CONF", 0x6114, 0 },
+ { "STATIC_U_DFS_RANGEA", 8, 5 },
+ { "STATIC_U_DFS_RANGEB", 3, 5 },
+ { "STATIC_U_DFS_FFTUNE4", 2, 1 },
+ { "STATIC_U_DFS_FFTUNE5", 1, 1 },
+ { "STATIC_U_DFS_ENABLE", 0, 1 },
+ { "DBG_GPIO_PE_EN", 0x6118, 0 },
+ { "GPIO19_PE_En", 19, 1 },
+ { "GPIO18_PE_En", 18, 1 },
+ { "GPIO17_PE_En", 17, 1 },
+ { "GPIO16_PE_En", 16, 1 },
+ { "GPIO15_PE_En", 15, 1 },
+ { "GPIO14_PE_En", 14, 1 },
+ { "GPIO13_PE_En", 13, 1 },
+ { "GPIO12_PE_En", 12, 1 },
+ { "GPIO11_PE_En", 11, 1 },
+ { "GPIO10_PE_En", 10, 1 },
+ { "GPIO9_PE_En", 9, 1 },
+ { "GPIO8_PE_En", 8, 1 },
+ { "GPIO7_PE_En", 7, 1 },
+ { "GPIO6_PE_En", 6, 1 },
+ { "GPIO5_PE_En", 5, 1 },
+ { "GPIO4_PE_En", 4, 1 },
+ { "GPIO3_PE_En", 3, 1 },
+ { "GPIO2_PE_En", 2, 1 },
+ { "GPIO1_PE_En", 1, 1 },
+ { "GPIO0_PE_En", 0, 1 },
+ { "DBG_GPIO_PS_EN", 0x611c, 0 },
+ { "GPIO19_PS_En", 19, 1 },
+ { "GPIO18_PS_En", 18, 1 },
+ { "GPIO17_PS_En", 17, 1 },
+ { "GPIO16_PS_En", 16, 1 },
+ { "GPIO15_PS_En", 15, 1 },
+ { "GPIO14_PS_En", 14, 1 },
+ { "GPIO13_PS_En", 13, 1 },
+ { "GPIO12_PS_En", 12, 1 },
+ { "GPIO11_PS_En", 11, 1 },
+ { "GPIO10_PS_En", 10, 1 },
+ { "GPIO9_PS_En", 9, 1 },
+ { "GPIO8_PS_En", 8, 1 },
+ { "GPIO7_PS_En", 7, 1 },
+ { "GPIO6_PS_En", 6, 1 },
+ { "GPIO5_PS_En", 5, 1 },
+ { "GPIO4_PS_En", 4, 1 },
+ { "GPIO3_PS_En", 3, 1 },
+ { "GPIO2_PS_En", 2, 1 },
+ { "GPIO1_PS_En", 1, 1 },
+ { "GPIO0_PS_En", 0, 1 },
+ { "DBG_EFUSE_BYTE16_19", 0x6120, 0 },
+ { "DBG_EFUSE_BYTE20_23", 0x6124, 0 },
+ { "DBG_EFUSE_BYTE24_27", 0x6128, 0 },
+ { "DBG_EFUSE_BYTE28_31", 0x612c, 0 },
+ { "DBG_EFUSE_BYTE32_35", 0x6130, 0 },
+ { "DBG_EFUSE_BYTE36_39", 0x6134, 0 },
+ { "DBG_EFUSE_BYTE40_43", 0x6138, 0 },
+ { "DBG_EFUSE_BYTE44_47", 0x613c, 0 },
+ { "DBG_EFUSE_BYTE48_51", 0x6140, 0 },
+ { "DBG_EFUSE_BYTE52_55", 0x6144, 0 },
+ { "DBG_EFUSE_BYTE56_59", 0x6148, 0 },
+ { "DBG_EFUSE_BYTE60_63", 0x614c, 0 },
+ { "DBG_STATIC_U_PLL_CONF6", 0x6150, 0 },
+ { "DBG_STATIC_C_PLL_CONF6", 0x6154, 0 },
+ { "DBG_CUST_EFUSE_PROGRAM", 0x6158, 0 },
+ { "EFUSE_PROG_PERIOD", 16, 16 },
+ { "EFUSE_OPER_TYP", 14, 2 },
+ { "EFUSE_ADDR", 8, 6 },
+ { "EFUSE_DIN", 0, 8 },
+ { "DBG_CUST_EFUSE_OUT", 0x615c, 0 },
+ { "EFUSE_OPER_DONE", 8, 1 },
+ { "EFUSE_DOUT", 0, 8 },
+ { "DBG_CUST_EFUSE_BYTE0_3", 0x6160, 0 },
+ { "DBG_CUST_EFUSE_BYTE4_7", 0x6164, 0 },
+ { "DBG_CUST_EFUSE_BYTE8_11", 0x6168, 0 },
+ { "DBG_CUST_EFUSE_BYTE12_15", 0x616c, 0 },
+ { "DBG_CUST_EFUSE_BYTE16_19", 0x6170, 0 },
+ { "DBG_CUST_EFUSE_BYTE20_23", 0x6174, 0 },
+ { "DBG_CUST_EFUSE_BYTE24_27", 0x6178, 0 },
+ { "DBG_CUST_EFUSE_BYTE28_31", 0x617c, 0 },
+ { "DBG_CUST_EFUSE_BYTE32_35", 0x6180, 0 },
+ { "DBG_CUST_EFUSE_BYTE36_39", 0x6184, 0 },
+ { "DBG_CUST_EFUSE_BYTE40_43", 0x6188, 0 },
+ { "DBG_CUST_EFUSE_BYTE44_47", 0x618c, 0 },
+ { "DBG_CUST_EFUSE_BYTE48_51", 0x6190, 0 },
+ { "DBG_CUST_EFUSE_BYTE52_55", 0x6194, 0 },
+ { "DBG_CUST_EFUSE_BYTE56_59", 0x6198, 0 },
+ { "DBG_CUST_EFUSE_BYTE60_63", 0x619c, 0 },
+ { NULL }
+};
+
+struct reg_info t6_ma_regs[] = {
+ { "MA_CLIENT0_RD_LATENCY_THRESHOLD", 0x7700, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT0_WR_LATENCY_THRESHOLD", 0x7704, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT1_RD_LATENCY_THRESHOLD", 0x7708, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT1_WR_LATENCY_THRESHOLD", 0x770c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT2_RD_LATENCY_THRESHOLD", 0x7710, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT2_WR_LATENCY_THRESHOLD", 0x7714, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT3_RD_LATENCY_THRESHOLD", 0x7718, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT3_WR_LATENCY_THRESHOLD", 0x771c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT4_RD_LATENCY_THRESHOLD", 0x7720, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT4_WR_LATENCY_THRESHOLD", 0x7724, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT5_RD_LATENCY_THRESHOLD", 0x7728, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT5_WR_LATENCY_THRESHOLD", 0x772c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT6_RD_LATENCY_THRESHOLD", 0x7730, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT6_WR_LATENCY_THRESHOLD", 0x7734, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT7_RD_LATENCY_THRESHOLD", 0x7738, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT7_WR_LATENCY_THRESHOLD", 0x773c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT8_RD_LATENCY_THRESHOLD", 0x7740, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT8_WR_LATENCY_THRESHOLD", 0x7744, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT9_RD_LATENCY_THRESHOLD", 0x7748, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT9_WR_LATENCY_THRESHOLD", 0x774c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT10_RD_LATENCY_THRESHOLD", 0x7750, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT10_WR_LATENCY_THRESHOLD", 0x7754, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT11_RD_LATENCY_THRESHOLD", 0x7758, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT11_WR_LATENCY_THRESHOLD", 0x775c, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT12_RD_LATENCY_THRESHOLD", 0x7760, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_CLIENT12_WR_LATENCY_THRESHOLD", 0x7764, 0 },
+ { "THRESHOLD1", 17, 15 },
+ { "THRESHOLD1_EN", 16, 1 },
+ { "THRESHOLD0", 1, 15 },
+ { "THRESHOLD0_EN", 0, 1 },
+ { "MA_SGE_TH0_DEBUG_CNT", 0x7768, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_SGE_TH1_DEBUG_CNT", 0x776c, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_ULPTX_DEBUG_CNT", 0x7770, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_ULPRX_DEBUG_CNT", 0x7774, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_ULPTXRX_DEBUG_CNT", 0x7778, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_TP_TH0_DEBUG_CNT", 0x777c, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_TP_TH1_DEBUG_CNT", 0x7780, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_LE_DEBUG_CNT", 0x7784, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_CIM_DEBUG_CNT", 0x7788, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_PCIE_DEBUG_CNT", 0x778c, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_PMTX_DEBUG_CNT", 0x7790, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_PMRX_DEBUG_CNT", 0x7794, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_HMA_DEBUG_CNT", 0x7798, 0 },
+ { "DBG_READ_DATA_CNT", 24, 8 },
+ { "DBG_READ_REQ_CNT", 16, 8 },
+ { "DBG_WRITE_DATA_CNT", 8, 8 },
+ { "DBG_WRITE_REQ_CNT", 0, 8 },
+ { "MA_EDRAM0_BAR", 0x77c0, 0 },
+ { "EDRAM0_BASE", 16, 12 },
+ { "EDRAM0_SIZE", 0, 12 },
+ { "MA_EDRAM1_BAR", 0x77c4, 0 },
+ { "EDRAM1_BASE", 16, 12 },
+ { "EDRAM1_SIZE", 0, 12 },
+ { "MA_EXT_MEMORY0_BAR", 0x77c8, 0 },
+ { "EXT_MEM0_BASE", 16, 12 },
+ { "EXT_MEM0_SIZE", 0, 12 },
+ { "MA_HOST_MEMORY_BAR", 0x77cc, 0 },
+ { "HMA_BASE", 16, 12 },
+ { "HMA_SIZE", 0, 12 },
+ { "MA_EXT_MEM_PAGE_SIZE", 0x77d0, 0 },
+ { "BRBC_MODE", 4, 1 },
+ { "BRC_MODE", 3, 1 },
+ { "EXT_MEM_PAGE_SIZE", 0, 3 },
+ { "MA_ARB_CTRL", 0x77d4, 0 },
+ { "HMA_WRT_EN", 26, 1 },
+ { "HMA_NUM_PG_128B_FDBK", 21, 5 },
+ { "HMA_DIS_128B_PG_CNT_FDBK", 20, 1 },
+ { "HMA_DIS_BG_ARB", 19, 1 },
+ { "HMA_DIS_BANK_FAIR", 18, 1 },
+ { "HMA_DIS_PAGE_HINT", 17, 1 },
+ { "HMA_DIS_ADV_ARB", 16, 1 },
+ { "NUM_PG_128B_FDBK", 5, 5 },
+ { "DIS_128B_PG_CNT_FDBK", 4, 1 },
+ { "DIS_BG_ARB", 3, 1 },
+ { "DIS_BANK_FAIR", 2, 1 },
+ { "DIS_PAGE_HINT", 1, 1 },
+ { "DIS_ADV_ARB", 0, 1 },
+ { "MA_TARGET_MEM_ENABLE", 0x77d8, 0 },
+ { "MC_SPLIT", 6, 1 },
+ { "HMA_MUX", 5, 1 },
+ { "EXT_MEM1_ENABLE", 4, 1 },
+ { "HMA_ENABLE", 3, 1 },
+ { "EXT_MEM0_ENABLE", 2, 1 },
+ { "EDRAM1_ENABLE", 1, 1 },
+ { "EDRAM0_ENABLE", 0, 1 },
+ { "MA_INT_ENABLE", 0x77dc, 0 },
+ { "MEM_TO_INT_ENABLE", 2, 1 },
+ { "MEM_PERR_INT_ENABLE", 1, 1 },
+ { "MEM_WRAP_INT_ENABLE", 0, 1 },
+ { "MA_INT_CAUSE", 0x77e0, 0 },
+ { "MEM_TO_INT_CAUSE", 2, 1 },
+ { "MEM_PERR_INT_CAUSE", 1, 1 },
+ { "MEM_WRAP_INT_CAUSE", 0, 1 },
+ { "MA_INT_WRAP_STATUS", 0x77e4, 0 },
+ { "MEM_WRAP_ADDRESS", 4, 28 },
+ { "MEM_WRAP_CLIENT_NUM", 0, 4 },
+ { "MA_TP_THREAD1_MAPPER", 0x77e8, 0 },
+ { "MA_SGE_THREAD1_MAPPER", 0x77ec, 0 },
+ { "MA_PARITY_ERROR_ENABLE1", 0x77f0, 0 },
+ { "TP_DMARBT_PAR_ERROR_EN", 31, 1 },
+ { "LOGIC_FIFO_PAR_ERROR_EN", 30, 1 },
+ { "ARB3_PAR_WRQUEUE_ERROR_EN", 29, 1 },
+ { "ARB2_PAR_WRQUEUE_ERROR_EN", 28, 1 },
+ { "ARB1_PAR_WRQUEUE_ERROR_EN", 27, 1 },
+ { "ARB0_PAR_WRQUEUE_ERROR_EN", 26, 1 },
+ { "ARB3_PAR_RDQUEUE_ERROR_EN", 25, 1 },
+ { "ARB2_PAR_RDQUEUE_ERROR_EN", 24, 1 },
+ { "ARB1_PAR_RDQUEUE_ERROR_EN", 23, 1 },
+ { "ARB0_PAR_RDQUEUE_ERROR_EN", 22, 1 },
+ { "CL10_PAR_WRQUEUE_ERROR_EN", 21, 1 },
+ { "CL9_PAR_WRQUEUE_ERROR_EN", 20, 1 },
+ { "CL8_PAR_WRQUEUE_ERROR_EN", 19, 1 },
+ { "CL7_PAR_WRQUEUE_ERROR_EN", 18, 1 },
+ { "CL6_PAR_WRQUEUE_ERROR_EN", 17, 1 },
+ { "CL5_PAR_WRQUEUE_ERROR_EN", 16, 1 },
+ { "CL4_PAR_WRQUEUE_ERROR_EN", 15, 1 },
+ { "CL3_PAR_WRQUEUE_ERROR_EN", 14, 1 },
+ { "CL2_PAR_WRQUEUE_ERROR_EN", 13, 1 },
+ { "CL1_PAR_WRQUEUE_ERROR_EN", 12, 1 },
+ { "CL0_PAR_WRQUEUE_ERROR_EN", 11, 1 },
+ { "CL10_PAR_RDQUEUE_ERROR_EN", 10, 1 },
+ { "CL9_PAR_RDQUEUE_ERROR_EN", 9, 1 },
+ { "CL8_PAR_RDQUEUE_ERROR_EN", 8, 1 },
+ { "CL7_PAR_RDQUEUE_ERROR_EN", 7, 1 },
+ { "CL6_PAR_RDQUEUE_ERROR_EN", 6, 1 },
+ { "CL5_PAR_RDQUEUE_ERROR_EN", 5, 1 },
+ { "CL4_PAR_RDQUEUE_ERROR_EN", 4, 1 },
+ { "CL3_PAR_RDQUEUE_ERROR_EN", 3, 1 },
+ { "CL2_PAR_RDQUEUE_ERROR_EN", 2, 1 },
+ { "CL1_PAR_RDQUEUE_ERROR_EN", 1, 1 },
+ { "CL0_PAR_RDQUEUE_ERROR_EN", 0, 1 },
+ { "MA_PARITY_ERROR_STATUS1", 0x77f4, 0 },
+ { "TP_DMARBT_PAR_ERROR", 31, 1 },
+ { "LOGIC_FIFO_PAR_ERROR", 30, 1 },
+ { "ARB3_PAR_WRQUEUE_ERROR", 29, 1 },
+ { "ARB2_PAR_WRQUEUE_ERROR", 28, 1 },
+ { "ARB1_PAR_WRQUEUE_ERROR", 27, 1 },
+ { "ARB0_PAR_WRQUEUE_ERROR", 26, 1 },
+ { "ARB3_PAR_RDQUEUE_ERROR", 25, 1 },
+ { "ARB2_PAR_RDQUEUE_ERROR", 24, 1 },
+ { "ARB1_PAR_RDQUEUE_ERROR", 23, 1 },
+ { "ARB0_PAR_RDQUEUE_ERROR", 22, 1 },
+ { "CL10_PAR_WRQUEUE_ERROR", 21, 1 },
+ { "CL9_PAR_WRQUEUE_ERROR", 20, 1 },
+ { "CL8_PAR_WRQUEUE_ERROR", 19, 1 },
+ { "CL7_PAR_WRQUEUE_ERROR", 18, 1 },
+ { "CL6_PAR_WRQUEUE_ERROR", 17, 1 },
+ { "CL5_PAR_WRQUEUE_ERROR", 16, 1 },
+ { "CL4_PAR_WRQUEUE_ERROR", 15, 1 },
+ { "CL3_PAR_WRQUEUE_ERROR", 14, 1 },
+ { "CL2_PAR_WRQUEUE_ERROR", 13, 1 },
+ { "CL1_PAR_WRQUEUE_ERROR", 12, 1 },
+ { "CL0_PAR_WRQUEUE_ERROR", 11, 1 },
+ { "CL10_PAR_RDQUEUE_ERROR", 10, 1 },
+ { "CL9_PAR_RDQUEUE_ERROR", 9, 1 },
+ { "CL8_PAR_RDQUEUE_ERROR", 8, 1 },
+ { "CL7_PAR_RDQUEUE_ERROR", 7, 1 },
+ { "CL6_PAR_RDQUEUE_ERROR", 6, 1 },
+ { "CL5_PAR_RDQUEUE_ERROR", 5, 1 },
+ { "CL4_PAR_RDQUEUE_ERROR", 4, 1 },
+ { "CL3_PAR_RDQUEUE_ERROR", 3, 1 },
+ { "CL2_PAR_RDQUEUE_ERROR", 2, 1 },
+ { "CL1_PAR_RDQUEUE_ERROR", 1, 1 },
+ { "CL0_PAR_RDQUEUE_ERROR", 0, 1 },
+ { "MA_SGE_PCIE_COHERANCY_CTRL", 0x77f8, 0 },
+ { "BONUS_REG", 6, 26 },
+ { "COHERANCY_CMD_TYPE", 4, 2 },
+ { "COHERANCY_THREAD_NUM", 1, 3 },
+ { "COHERANCY_ENABLE", 0, 1 },
+ { "MA_ERROR_ENABLE", 0x77fc, 0 },
+ { "FUTURE_EXPANSION_EE", 1, 31 },
+ { "UE_ENABLE", 0, 1 },
+ { "MA_PARITY_ERROR_ENABLE2", 0x7800, 0 },
+ { "ARB4_PAR_WRQUEUE_ERROR_EN", 1, 1 },
+ { "ARB4_PAR_RDQUEUE_ERROR_EN", 0, 1 },
+ { "MA_PARITY_ERROR_STATUS2", 0x7804, 0 },
+ { "ARB4_PAR_WRQUEUE_ERROR", 1, 1 },
+ { "ARB4_PAR_RDQUEUE_ERROR", 0, 1 },
+ { "MA_EXT_MEMORY1_BAR", 0x7808, 0 },
+ { "EXT_MEM1_BASE", 16, 12 },
+ { "EXT_MEM1_SIZE", 0, 12 },
+ { "MA_PMTX_THROTTLE", 0x780c, 0 },
+ { "FL_ENABLE", 31, 1 },
+ { "FL_LIMIT", 0, 8 },
+ { "MA_PMRX_THROTTLE", 0x7810, 0 },
+ { "FL_ENABLE", 31, 1 },
+ { "FL_LIMIT", 0, 8 },
+ { "MA_SGE_TH0_WRDATA_CNT", 0x7814, 0 },
+ { "MA_SGE_TH1_WRDATA_CNT", 0x7818, 0 },
+ { "MA_ULPTX_WRDATA_CNT", 0x781c, 0 },
+ { "MA_ULPRX_WRDATA_CNT", 0x7820, 0 },
+ { "MA_ULPTXRX_WRDATA_CNT", 0x7824, 0 },
+ { "MA_TP_TH0_WRDATA_CNT", 0x7828, 0 },
+ { "MA_TP_TH1_WRDATA_CNT", 0x782c, 0 },
+ { "MA_LE_WRDATA_CNT", 0x7830, 0 },
+ { "MA_CIM_WRDATA_CNT", 0x7834, 0 },
+ { "MA_PCIE_WRDATA_CNT", 0x7838, 0 },
+ { "MA_PMTX_WRDATA_CNT", 0x783c, 0 },
+ { "MA_PMRX_WRDATA_CNT", 0x7840, 0 },
+ { "MA_HMA_WRDATA_CNT", 0x7844, 0 },
+ { "MA_SGE_TH0_RDDATA_CNT", 0x7848, 0 },
+ { "MA_SGE_TH1_RDDATA_CNT", 0x784c, 0 },
+ { "MA_ULPTX_RDDATA_CNT", 0x7850, 0 },
+ { "MA_ULPRX_RDDATA_CNT", 0x7854, 0 },
+ { "MA_ULPTXRX_RDDATA_CNT", 0x7858, 0 },
+ { "MA_TP_TH0_RDDATA_CNT", 0x785c, 0 },
+ { "MA_TP_TH1_RDDATA_CNT", 0x7860, 0 },
+ { "MA_LE_RDDATA_CNT", 0x7864, 0 },
+ { "MA_CIM_RDDATA_CNT", 0x7868, 0 },
+ { "MA_PCIE_RDDATA_CNT", 0x786c, 0 },
+ { "MA_PMTX_RDDATA_CNT", 0x7870, 0 },
+ { "MA_PMRX_RDDATA_CNT", 0x7874, 0 },
+ { "MA_HMA_RDDATA_CNT", 0x7878, 0 },
+ { "MA_EXIT_ADDR_FAULT", 0x787c, 0 },
+ { "MA_DDR_DEVICE_CFG", 0x7880, 0 },
+ { "MEM_WIDTH", 1, 3 },
+ { "DDR_MODE", 0, 1 },
+ { "MA_TIMEOUT_CFG", 0x78cc, 0 },
+ { "CLR", 31, 1 },
+ { "CNT_LOCK", 30, 1 },
+ { "WRN", 24, 1 },
+ { "DIR", 23, 1 },
+ { "TYPE", 22, 1 },
+ { "CLIENT", 16, 4 },
+ { "DELAY", 0, 16 },
+ { "MA_TIMEOUT_CNT", 0x78d0, 0 },
+ { "DIR", 23, 1 },
+ { "TYPE", 22, 1 },
+ { "CLIENT", 16, 4 },
+ { "CNT_VAL", 0, 16 },
+ { "MA_WRITE_TIMEOUT_ERROR_ENABLE", 0x78d4, 0 },
+ { "FUTURE_CEXPANSION_WTE", 29, 3 },
+ { "CL12_WR_CMD_TO_EN", 28, 1 },
+ { "CL11_WR_CMD_TO_EN", 27, 1 },
+ { "CL10_WR_CMD_TO_EN", 26, 1 },
+ { "CL9_WR_CMD_TO_EN", 25, 1 },
+ { "CL8_WR_CMD_TO_EN", 24, 1 },
+ { "CL7_WR_CMD_TO_EN", 23, 1 },
+ { "CL6_WR_CMD_TO_EN", 22, 1 },
+ { "CL5_WR_CMD_TO_EN", 21, 1 },
+ { "CL4_WR_CMD_TO_EN", 20, 1 },
+ { "CL3_WR_CMD_TO_EN", 19, 1 },
+ { "CL2_WR_CMD_TO_EN", 18, 1 },
+ { "CL1_WR_CMD_TO_EN", 17, 1 },
+ { "CL0_WR_CMD_TO_EN", 16, 1 },
+ { "FUTURE_DEXPANSION_WTE", 13, 3 },
+ { "CL12_WR_DATA_TO_EN", 12, 1 },
+ { "CL11_WR_DATA_TO_EN", 11, 1 },
+ { "CL10_WR_DATA_TO_EN", 10, 1 },
+ { "CL9_WR_DATA_TO_EN", 9, 1 },
+ { "CL8_WR_DATA_TO_EN", 8, 1 },
+ { "CL7_WR_DATA_TO_EN", 7, 1 },
+ { "CL6_WR_DATA_TO_EN", 6, 1 },
+ { "CL5_WR_DATA_TO_EN", 5, 1 },
+ { "CL4_WR_DATA_TO_EN", 4, 1 },
+ { "CL3_WR_DATA_TO_EN", 3, 1 },
+ { "CL2_WR_DATA_TO_EN", 2, 1 },
+ { "CL1_WR_DATA_TO_EN", 1, 1 },
+ { "CL0_WR_DATA_TO_EN", 0, 1 },
+ { "MA_WRITE_TIMEOUT_ERROR_STATUS", 0x78d8, 0 },
+ { "FUTURE_CEXPANSION_WTS", 29, 3 },
+ { "CL12_WR_CMD_TO_ERROR", 28, 1 },
+ { "CL11_WR_CMD_TO_ERROR", 27, 1 },
+ { "CL10_WR_CMD_TO_ERROR", 26, 1 },
+ { "CL9_WR_CMD_TO_ERROR", 25, 1 },
+ { "CL8_WR_CMD_TO_ERROR", 24, 1 },
+ { "CL7_WR_CMD_TO_ERROR", 23, 1 },
+ { "CL6_WR_CMD_TO_ERROR", 22, 1 },
+ { "CL5_WR_CMD_TO_ERROR", 21, 1 },
+ { "CL4_WR_CMD_TO_ERROR", 20, 1 },
+ { "CL3_WR_CMD_TO_ERROR", 19, 1 },
+ { "CL2_WR_CMD_TO_ERROR", 18, 1 },
+ { "CL1_WR_CMD_TO_ERROR", 17, 1 },
+ { "CL0_WR_CMD_TO_ERROR", 16, 1 },
+ { "FUTURE_DEXPANSION_WTS", 13, 3 },
+ { "CL12_WR_DATA_TO_ERROR", 12, 1 },
+ { "CL11_WR_DATA_TO_ERROR", 11, 1 },
+ { "CL10_WR_DATA_TO_ERROR", 10, 1 },
+ { "CL9_WR_DATA_TO_ERROR", 9, 1 },
+ { "CL8_WR_DATA_TO_ERROR", 8, 1 },
+ { "CL7_WR_DATA_TO_ERROR", 7, 1 },
+ { "CL6_WR_DATA_TO_ERROR", 6, 1 },
+ { "CL5_WR_DATA_TO_ERROR", 5, 1 },
+ { "CL4_WR_DATA_TO_ERROR", 4, 1 },
+ { "CL3_WR_DATA_TO_ERROR", 3, 1 },
+ { "CL2_WR_DATA_TO_ERROR", 2, 1 },
+ { "CL1_WR_DATA_TO_ERROR", 1, 1 },
+ { "CL0_WR_DATA_TO_ERROR", 0, 1 },
+ { "MA_READ_TIMEOUT_ERROR_ENABLE", 0x78dc, 0 },
+ { "FUTURE_CEXPANSION_RTE", 29, 3 },
+ { "CL12_RD_CMD_TO_EN", 28, 1 },
+ { "CL11_RD_CMD_TO_EN", 27, 1 },
+ { "CL10_RD_CMD_TO_EN", 26, 1 },
+ { "CL9_RD_CMD_TO_EN", 25, 1 },
+ { "CL8_RD_CMD_TO_EN", 24, 1 },
+ { "CL7_RD_CMD_TO_EN", 23, 1 },
+ { "CL6_RD_CMD_TO_EN", 22, 1 },
+ { "CL5_RD_CMD_TO_EN", 21, 1 },
+ { "CL4_RD_CMD_TO_EN", 20, 1 },
+ { "CL3_RD_CMD_TO_EN", 19, 1 },
+ { "CL2_RD_CMD_TO_EN", 18, 1 },
+ { "CL1_RD_CMD_TO_EN", 17, 1 },
+ { "CL0_RD_CMD_TO_EN", 16, 1 },
+ { "FUTURE_DEXPANSION_RTE", 13, 3 },
+ { "CL12_RD_DATA_TO_EN", 12, 1 },
+ { "CL11_RD_DATA_TO_EN", 11, 1 },
+ { "CL10_RD_DATA_TO_EN", 10, 1 },
+ { "CL9_RD_DATA_TO_EN", 9, 1 },
+ { "CL8_RD_DATA_TO_EN", 8, 1 },
+ { "CL7_RD_DATA_TO_EN", 7, 1 },
+ { "CL6_RD_DATA_TO_EN", 6, 1 },
+ { "CL5_RD_DATA_TO_EN", 5, 1 },
+ { "CL4_RD_DATA_TO_EN", 4, 1 },
+ { "CL3_RD_DATA_TO_EN", 3, 1 },
+ { "CL2_RD_DATA_TO_EN", 2, 1 },
+ { "CL1_RD_DATA_TO_EN", 1, 1 },
+ { "CL0_RD_DATA_TO_EN", 0, 1 },
+ { "MA_READ_TIMEOUT_ERROR_STATUS", 0x78e0, 0 },
+ { "FUTURE_CEXPANSION_RTS", 29, 3 },
+ { "CL12_RD_CMD_TO_ERROR", 28, 1 },
+ { "CL11_RD_CMD_TO_ERROR", 27, 1 },
+ { "CL10_RD_CMD_TO_ERROR", 26, 1 },
+ { "CL9_RD_CMD_TO_ERROR", 25, 1 },
+ { "CL8_RD_CMD_TO_ERROR", 24, 1 },
+ { "CL7_RD_CMD_TO_ERROR", 23, 1 },
+ { "CL6_RD_CMD_TO_ERROR", 22, 1 },
+ { "CL5_RD_CMD_TO_ERROR", 21, 1 },
+ { "CL4_RD_CMD_TO_ERROR", 20, 1 },
+ { "CL3_RD_CMD_TO_ERROR", 19, 1 },
+ { "CL2_RD_CMD_TO_ERROR", 18, 1 },
+ { "CL1_RD_CMD_TO_ERROR", 17, 1 },
+ { "CL0_RD_CMD_TO_ERROR", 16, 1 },
+ { "FUTURE_DEXPANSION_RTS", 13, 3 },
+ { "CL12_RD_DATA_TO_ERROR", 12, 1 },
+ { "CL11_RD_DATA_TO_ERROR", 11, 1 },
+ { "CL10_RD_DATA_TO_ERROR", 10, 1 },
+ { "CL9_RD_DATA_TO_ERROR", 9, 1 },
+ { "CL8_RD_DATA_TO_ERROR", 8, 1 },
+ { "CL7_RD_DATA_TO_ERROR", 7, 1 },
+ { "CL6_RD_DATA_TO_ERROR", 6, 1 },
+ { "CL5_RD_DATA_TO_ERROR", 5, 1 },
+ { "CL4_RD_DATA_TO_ERROR", 4, 1 },
+ { "CL3_RD_DATA_TO_ERROR", 3, 1 },
+ { "CL2_RD_DATA_TO_ERROR", 2, 1 },
+ { "CL1_RD_DATA_TO_ERROR", 1, 1 },
+ { "CL0_RD_DATA_TO_ERROR", 0, 1 },
+ { "MA_BKP_CNT_SEL", 0x78e4, 0 },
+ { "TYPE", 30, 2 },
+ { "CLIENT", 24, 4 },
+ { "MA_BKP_CNT", 0x78e8, 0 },
+ { "MA_WRT_ARB", 0x78ec, 0 },
+ { "WRT_EN", 31, 1 },
+ { "WR_TIM", 16, 8 },
+ { "RD_WIN", 8, 8 },
+ { "WR_WIN", 0, 8 },
+ { "MA_IF_PARITY_ERROR_ENABLE", 0x78f0, 0 },
+ { "FUTURE_DEXPANSION_IPE", 13, 19 },
+ { "CL12_IF_PAR_EN", 12, 1 },
+ { "CL11_IF_PAR_EN", 11, 1 },
+ { "CL10_IF_PAR_EN", 10, 1 },
+ { "CL9_IF_PAR_EN", 9, 1 },
+ { "CL8_IF_PAR_EN", 8, 1 },
+ { "CL7_IF_PAR_EN", 7, 1 },
+ { "CL6_IF_PAR_EN", 6, 1 },
+ { "CL5_IF_PAR_EN", 5, 1 },
+ { "CL4_IF_PAR_EN", 4, 1 },
+ { "CL3_IF_PAR_EN", 3, 1 },
+ { "CL2_IF_PAR_EN", 2, 1 },
+ { "CL1_IF_PAR_EN", 1, 1 },
+ { "CL0_IF_PAR_EN", 0, 1 },
+ { "MA_IF_PARITY_ERROR_STATUS", 0x78f4, 0 },
+ { "FUTURE_DEXPANSION_IPS", 13, 19 },
+ { "CL12_IF_PAR_ERROR", 12, 1 },
+ { "CL11_IF_PAR_ERROR", 11, 1 },
+ { "CL10_IF_PAR_ERROR", 10, 1 },
+ { "CL9_IF_PAR_ERROR", 9, 1 },
+ { "CL8_IF_PAR_ERROR", 8, 1 },
+ { "CL7_IF_PAR_ERROR", 7, 1 },
+ { "CL6_IF_PAR_ERROR", 6, 1 },
+ { "CL5_IF_PAR_ERROR", 5, 1 },
+ { "CL4_IF_PAR_ERROR", 4, 1 },
+ { "CL3_IF_PAR_ERROR", 3, 1 },
+ { "CL2_IF_PAR_ERROR", 2, 1 },
+ { "CL1_IF_PAR_ERROR", 1, 1 },
+ { "CL0_IF_PAR_ERROR", 0, 1 },
+ { "MA_LOCAL_DEBUG_CFG", 0x78f8, 0 },
+ { "DEBUG_OR", 15, 1 },
+ { "DEBUG_HI", 14, 1 },
+ { "DEBUG_RPT", 13, 1 },
+ { "DEBUGPAGE", 10, 3 },
+ { "DEBUGSELH", 5, 5 },
+ { "DEBUGSELL", 0, 5 },
+ { "MA_LOCAL_DEBUG_RPT", 0x78fc, 0 },
+ { NULL }
+};
+
+struct reg_info t6_cim_regs[] = {
+ { "CIM_BOOT_CFG", 0x7b00, 0 },
+ { "BootAddr", 8, 24 },
+ { "uPGen", 2, 6 },
+ { "BootSdram", 1, 1 },
+ { "uPCRst", 0, 1 },
+ { "CIM_BOOT_LEN", 0x7bf0, 0 },
+ { "BootLen", 4, 28 },
+ { "CIM_FLASH_BASE_ADDR", 0x7b04, 0 },
+ { "FlashBaseAddr", 6, 18 },
+ { "CIM_FLASH_ADDR_SIZE", 0x7b08, 0 },
+ { "FlashAddrSize", 4, 20 },
+ { "CIM_EEPROM_BASE_ADDR", 0x7b0c, 0 },
+ { "EEPROMBaseAddr", 6, 18 },
+ { "CIM_EEPROM_ADDR_SIZE", 0x7b10, 0 },
+ { "EEPROMAddrSize", 4, 20 },
+ { "CIM_SDRAM_BASE_ADDR", 0x7b14, 0 },
+ { "SdramBaseAddr", 6, 26 },
+ { "CIM_SDRAM_ADDR_SIZE", 0x7b18, 0 },
+ { "SdramAddrSize", 4, 28 },
+ { "CIM_EXTMEM2_BASE_ADDR", 0x7b1c, 0 },
+ { "ExtMem2BaseAddr", 6, 26 },
+ { "CIM_EXTMEM2_ADDR_SIZE", 0x7b20, 0 },
+ { "ExtMem2AddrSize", 4, 28 },
+ { "CIM_UP_SPARE_INT", 0x7b24, 0 },
+ { "TDebugInt", 4, 1 },
+ { "BootVecSel", 3, 1 },
+ { "uPSpareInt", 0, 3 },
+ { "CIM_HOST_INT_ENABLE", 0x7b28, 0 },
+ { "PCIE2CIMIntfParErr", 29, 1 },
+ { "ma_cim_IntfPerr", 28, 1 },
+ { "PLCIM_MstRspDataParErr", 27, 1 },
+ { "NCSI2CIMIntfParErr", 26, 1 },
+ { "SGE2CIMIntfParErr", 25, 1 },
+ { "ULP2CIMIntfParErr", 24, 1 },
+ { "TP2CIMIntfParErr", 23, 1 },
+ { "OBQSGERx1ParErr", 22, 1 },
+ { "OBQSGERx0ParErr", 21, 1 },
+ { "TieQOutParErrIntEn", 20, 1 },
+ { "TieQInParErrIntEn", 19, 1 },
+ { "MBHostParErr", 18, 1 },
+ { "MBuPParErr", 17, 1 },
+ { "IBQTP0ParErr", 16, 1 },
+ { "IBQTP1ParErr", 15, 1 },
+ { "IBQULPParErr", 14, 1 },
+ { "IBQSGELOParErr", 13, 1 },
+ { "IBQPCIEParErr", 12, 1 },
+ { "IBQNCSIParErr", 11, 1 },
+ { "OBQULP0ParErr", 10, 1 },
+ { "OBQULP1ParErr", 9, 1 },
+ { "OBQULP2ParErr", 8, 1 },
+ { "OBQULP3ParErr", 7, 1 },
+ { "OBQSGEParErr", 6, 1 },
+ { "OBQNCSIParErr", 5, 1 },
+ { "Timer1IntEn", 3, 1 },
+ { "Timer0IntEn", 2, 1 },
+ { "PrefDropIntEn", 1, 1 },
+ { "CIM_HOST_INT_CAUSE", 0x7b2c, 0 },
+ { "PCIE2CIMIntfParErr", 29, 1 },
+ { "ma_cim_IntfPerr", 28, 1 },
+ { "PLCIM_MstRspDataParErr", 27, 1 },
+ { "NCSI2CIMIntfParErr", 26, 1 },
+ { "SGE2CIMIntfParErr", 25, 1 },
+ { "ULP2CIMIntfParErr", 24, 1 },
+ { "TP2CIMIntfParErr", 23, 1 },
+ { "OBQSGERx1ParErr", 22, 1 },
+ { "OBQSGERx0ParErr", 21, 1 },
+ { "TieQOutParErrInt", 20, 1 },
+ { "TieQInParErrInt", 19, 1 },
+ { "MBHostParErr", 18, 1 },
+ { "IBQTP0ParErr", 16, 1 },
+ { "IBQTP1ParErr", 15, 1 },
+ { "IBQULPParErr", 14, 1 },
+ { "IBQSGELOParErr", 13, 1 },
+ { "IBQPCIEParErr", 12, 1 },
+ { "IBQNCSIParErr", 11, 1 },
+ { "OBQULP0ParErr", 10, 1 },
+ { "OBQULP1ParErr", 9, 1 },
+ { "OBQULP2ParErr", 8, 1 },
+ { "OBQULP3ParErr", 7, 1 },
+ { "OBQSGEParErr", 6, 1 },
+ { "OBQNCSIParErr", 5, 1 },
+ { "Timer1Int", 3, 1 },
+ { "Timer0Int", 2, 1 },
+ { "PrefDropInt", 1, 1 },
+ { "uPAccNonZero", 0, 1 },
+ { "CIM_HOST_UPACC_INT_ENABLE", 0x7b30, 0 },
+ { "EEPROMWRIntEn", 30, 1 },
+ { "TimeOutMAIntEn", 29, 1 },
+ { "TimeOutIntEn", 28, 1 },
+ { "RspOvrLookupIntEn", 27, 1 },
+ { "ReqOvrLookupIntEn", 26, 1 },
+ { "BlkWrPlIntEn", 25, 1 },
+ { "BlkRdPlIntEn", 24, 1 },
+ { "SglWrPlIntEn", 23, 1 },
+ { "SglRdPlIntEn", 22, 1 },
+ { "BlkWrCtlIntEn", 21, 1 },
+ { "BlkRdCtlIntEn", 20, 1 },
+ { "SglWrCtlIntEn", 19, 1 },
+ { "SglRdCtlIntEn", 18, 1 },
+ { "BlkWrEEPROMIntEn", 17, 1 },
+ { "BlkRdEEPROMIntEn", 16, 1 },
+ { "SglWrEEPROMIntEn", 15, 1 },
+ { "SglRdEEPROMIntEn", 14, 1 },
+ { "BlkWrFlashIntEn", 13, 1 },
+ { "BlkRdFlashIntEn", 12, 1 },
+ { "SglWrFlashIntEn", 11, 1 },
+ { "SglRdFlashIntEn", 10, 1 },
+ { "BlkWrBootIntEn", 9, 1 },
+ { "BlkRdBootIntEn", 8, 1 },
+ { "SglWrBootIntEn", 7, 1 },
+ { "SglRdBootIntEn", 6, 1 },
+ { "IllWrBEIntEn", 5, 1 },
+ { "IllRdBEIntEn", 4, 1 },
+ { "IllRdIntEn", 3, 1 },
+ { "IllWrIntEn", 2, 1 },
+ { "IllTransIntEn", 1, 1 },
+ { "RsvdSpaceIntEn", 0, 1 },
+ { "CIM_HOST_UPACC_INT_CAUSE", 0x7b34, 0 },
+ { "EEPROMWRInt", 30, 1 },
+ { "TimeOutMAInt", 29, 1 },
+ { "TimeOutInt", 28, 1 },
+ { "RspOvrLookupInt", 27, 1 },
+ { "ReqOvrLookupInt", 26, 1 },
+ { "BlkWrPlInt", 25, 1 },
+ { "BlkRdPlInt", 24, 1 },
+ { "SglWrPlInt", 23, 1 },
+ { "SglRdPlInt", 22, 1 },
+ { "BlkWrCtlInt", 21, 1 },
+ { "BlkRdCtlInt", 20, 1 },
+ { "SglWrCtlInt", 19, 1 },
+ { "SglRdCtlInt", 18, 1 },
+ { "BlkWrEEPROMInt", 17, 1 },
+ { "BlkRdEEPROMInt", 16, 1 },
+ { "SglWrEEPROMInt", 15, 1 },
+ { "SglRdEEPROMInt", 14, 1 },
+ { "BlkWrFlashInt", 13, 1 },
+ { "BlkRdFlashInt", 12, 1 },
+ { "SglWrFlashInt", 11, 1 },
+ { "SglRdFlashInt", 10, 1 },
+ { "BlkWrBootInt", 9, 1 },
+ { "BlkRdBootInt", 8, 1 },
+ { "SglWrBootInt", 7, 1 },
+ { "SglRdBootInt", 6, 1 },
+ { "IllWrBEInt", 5, 1 },
+ { "IllRdBEInt", 4, 1 },
+ { "IllRdInt", 3, 1 },
+ { "IllWrInt", 2, 1 },
+ { "IllTransInt", 1, 1 },
+ { "RsvdSpaceInt", 0, 1 },
+ { "CIM_UP_INT_ENABLE", 0x7b38, 0 },
+ { "PCIE2CIMIntfParErr", 29, 1 },
+ { "ma_cim_IntfPerr", 28, 1 },
+ { "PLCIM_MstRspDataParErr", 27, 1 },
+ { "NCSI2CIMIntfParErr", 26, 1 },
+ { "SGE2CIMIntfParErr", 25, 1 },
+ { "ULP2CIMIntfParErr", 24, 1 },
+ { "TP2CIMIntfParErr", 23, 1 },
+ { "OBQSGERx1ParErr", 22, 1 },
+ { "OBQSGERx0ParErr", 21, 1 },
+ { "TieQOutParErrIntEn", 20, 1 },
+ { "TieQInParErrIntEn", 19, 1 },
+ { "MBHostParErr", 18, 1 },
+ { "MBuPParErr", 17, 1 },
+ { "IBQTP0ParErr", 16, 1 },
+ { "IBQTP1ParErr", 15, 1 },
+ { "IBQULPParErr", 14, 1 },
+ { "IBQSGELOParErr", 13, 1 },
+ { "IBQPCIEParErr", 12, 1 },
+ { "IBQNCSIParErr", 11, 1 },
+ { "OBQULP0ParErr", 10, 1 },
+ { "OBQULP1ParErr", 9, 1 },
+ { "OBQULP2ParErr", 8, 1 },
+ { "OBQULP3ParErr", 7, 1 },
+ { "OBQSGEParErr", 6, 1 },
+ { "OBQNCSIParErr", 5, 1 },
+ { "MstPlIntEn", 4, 1 },
+ { "Timer1IntEn", 3, 1 },
+ { "Timer0IntEn", 2, 1 },
+ { "PrefDropIntEn", 1, 1 },
+ { "CIM_UP_INT_CAUSE", 0x7b3c, 0 },
+ { "PCIE2CIMIntfParErr", 29, 1 },
+ { "ma_cim_IntfPerr", 28, 1 },
+ { "PLCIM_MstRspDataParErr", 27, 1 },
+ { "NCSI2CIMIntfParErr", 26, 1 },
+ { "SGE2CIMIntfParErr", 25, 1 },
+ { "ULP2CIMIntfParErr", 24, 1 },
+ { "TP2CIMIntfParErr", 23, 1 },
+ { "OBQSGERx1ParErr", 22, 1 },
+ { "OBQSGERx0ParErr", 21, 1 },
+ { "TieQOutParErrInt", 20, 1 },
+ { "TieQInParErrInt", 19, 1 },
+ { "MBHostParErr", 18, 1 },
+ { "IBQTP0ParErr", 16, 1 },
+ { "IBQTP1ParErr", 15, 1 },
+ { "IBQULPParErr", 14, 1 },
+ { "IBQSGELOParErr", 13, 1 },
+ { "IBQPCIEParErr", 12, 1 },
+ { "IBQNCSIParErr", 11, 1 },
+ { "OBQULP0ParErr", 10, 1 },
+ { "OBQULP1ParErr", 9, 1 },
+ { "OBQULP2ParErr", 8, 1 },
+ { "OBQULP3ParErr", 7, 1 },
+ { "OBQSGEParErr", 6, 1 },
+ { "OBQNCSIParErr", 5, 1 },
+ { "MstPlInt", 4, 1 },
+ { "Timer1Int", 3, 1 },
+ { "Timer0Int", 2, 1 },
+ { "PrefDropInt", 1, 1 },
+ { "uPAccNonZero", 0, 1 },
+ { "CIM_UP_ACC_INT_ENABLE", 0x7b40, 0 },
+ { "EEPROMWRIntEn", 30, 1 },
+ { "TimeOutMAIntEn", 29, 1 },
+ { "TimeOutIntEn", 28, 1 },
+ { "RspOvrLookupIntEn", 27, 1 },
+ { "ReqOvrLookupIntEn", 26, 1 },
+ { "BlkWrPlIntEn", 25, 1 },
+ { "BlkRdPlIntEn", 24, 1 },
+ { "SglWrPlIntEn", 23, 1 },
+ { "SglRdPlIntEn", 22, 1 },
+ { "BlkWrCtlIntEn", 21, 1 },
+ { "BlkRdCtlIntEn", 20, 1 },
+ { "SglWrCtlIntEn", 19, 1 },
+ { "SglRdCtlIntEn", 18, 1 },
+ { "BlkWrEEPROMIntEn", 17, 1 },
+ { "BlkRdEEPROMIntEn", 16, 1 },
+ { "SglWrEEPROMIntEn", 15, 1 },
+ { "SglRdEEPROMIntEn", 14, 1 },
+ { "BlkWrFlashIntEn", 13, 1 },
+ { "BlkRdFlashIntEn", 12, 1 },
+ { "SglWrFlashIntEn", 11, 1 },
+ { "SglRdFlashIntEn", 10, 1 },
+ { "BlkWrBootIntEn", 9, 1 },
+ { "BlkRdBootIntEn", 8, 1 },
+ { "SglWrBootIntEn", 7, 1 },
+ { "SglRdBootIntEn", 6, 1 },
+ { "IllWrBEIntEn", 5, 1 },
+ { "IllRdBEIntEn", 4, 1 },
+ { "IllRdIntEn", 3, 1 },
+ { "IllWrIntEn", 2, 1 },
+ { "IllTransIntEn", 1, 1 },
+ { "RsvdSpaceIntEn", 0, 1 },
+ { "CIM_UP_ACC_INT_CAUSE", 0x7b44, 0 },
+ { "EEPROMWRInt", 30, 1 },
+ { "TimeOutMAInt", 29, 1 },
+ { "TimeOutInt", 28, 1 },
+ { "RspOvrLookupInt", 27, 1 },
+ { "ReqOvrLookupInt", 26, 1 },
+ { "BlkWrPlInt", 25, 1 },
+ { "BlkRdPlInt", 24, 1 },
+ { "SglWrPlInt", 23, 1 },
+ { "SglRdPlInt", 22, 1 },
+ { "BlkWrCtlInt", 21, 1 },
+ { "BlkRdCtlInt", 20, 1 },
+ { "SglWrCtlInt", 19, 1 },
+ { "SglRdCtlInt", 18, 1 },
+ { "BlkWrEEPROMInt", 17, 1 },
+ { "BlkRdEEPROMInt", 16, 1 },
+ { "SglWrEEPROMInt", 15, 1 },
+ { "SglRdEEPROMInt", 14, 1 },
+ { "BlkWrFlashInt", 13, 1 },
+ { "BlkRdFlashInt", 12, 1 },
+ { "SglWrFlashInt", 11, 1 },
+ { "SglRdFlashInt", 10, 1 },
+ { "BlkWrBootInt", 9, 1 },
+ { "BlkRdBootInt", 8, 1 },
+ { "SglWrBootInt", 7, 1 },
+ { "SglRdBootInt", 6, 1 },
+ { "IllWrBEInt", 5, 1 },
+ { "IllRdBEInt", 4, 1 },
+ { "IllRdInt", 3, 1 },
+ { "IllWrInt", 2, 1 },
+ { "IllTransInt", 1, 1 },
+ { "RsvdSpaceInt", 0, 1 },
+ { "CIM_QUEUE_CONFIG_REF", 0x7b48, 0 },
+ { "OBQSelect", 4, 1 },
+ { "IBQSelect", 3, 1 },
+ { "QueNumSelect", 0, 3 },
+ { "CIM_QUEUE_CONFIG_CTRL", 0x7b4c, 0 },
+ { "Que1KEn", 30, 1 },
+ { "QueSize", 24, 6 },
+ { "QueBase", 16, 6 },
+ { "QueDbg8BEn", 9, 1 },
+ { "QueFullThrsh", 0, 9 },
+ { "CIM_HOST_ACC_CTRL", 0x7b50, 0 },
+ { "HostBusy", 17, 1 },
+ { "HostWrite", 16, 1 },
+ { "HostAddr", 0, 16 },
+ { "CIM_HOST_ACC_DATA", 0x7b54, 0 },
+ { "CIM_CDEBUGDATA", 0x7b58, 0 },
+ { "CDebugDataH", 16, 16 },
+ { "CDebugDataL", 0, 16 },
+ { "CIM_IBQ_DBG_CFG", 0x7b60, 0 },
+ { "IbqDbgAddr", 16, 12 },
+ { "IbqDbgWr", 2, 1 },
+ { "IbqDbgBusy", 1, 1 },
+ { "IbqDbgEn", 0, 1 },
+ { "CIM_OBQ_DBG_CFG", 0x7b64, 0 },
+ { "ObqDbgAddr", 16, 12 },
+ { "ObqDbgWr", 2, 1 },
+ { "ObqDbgBusy", 1, 1 },
+ { "ObqDbgEn", 0, 1 },
+ { "CIM_IBQ_DBG_DATA", 0x7b68, 0 },
+ { "CIM_OBQ_DBG_DATA", 0x7b6c, 0 },
+ { "CIM_DEBUGCFG", 0x7b70, 0 },
+ { "POLADbgRdPtr", 23, 9 },
+ { "PILADbgRdPtr", 14, 9 },
+ { "LAMaskTrig", 13, 1 },
+ { "LADbgEn", 12, 1 },
+ { "LAFillOnce", 11, 1 },
+ { "LAMaskStop", 10, 1 },
+ { "DebugSelH", 5, 5 },
+ { "DebugSelL", 0, 5 },
+ { "CIM_DEBUGSTS", 0x7b74, 0 },
+ { "LAReset", 31, 1 },
+ { "POLADbgWrPtr", 16, 9 },
+ { "PILADbgWrPtr", 0, 9 },
+ { "CIM_PO_LA_DEBUGDATA", 0x7b78, 0 },
+ { "CIM_PI_LA_DEBUGDATA", 0x7b7c, 0 },
+ { "CIM_PO_LA_MADEBUGDATA", 0x7b80, 0 },
+ { "CIM_PI_LA_MADEBUGDATA", 0x7b84, 0 },
+ { "CIM_PO_LA_PIFSMDEBUGDATA", 0x7b8c, 0 },
+ { "CIM_MEM_ZONE0_VA", 0x7b90, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE0_BA", 0x7b94, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE0_LEN", 0x7b98, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE1_VA", 0x7b9c, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE1_BA", 0x7ba0, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE1_LEN", 0x7ba4, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE2_VA", 0x7ba8, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE2_BA", 0x7bac, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE2_LEN", 0x7bb0, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE3_VA", 0x7bb4, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE3_BA", 0x7bb8, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE3_LEN", 0x7bbc, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE4_VA", 0x7bc0, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE4_BA", 0x7bc4, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE4_LEN", 0x7bc8, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE5_VA", 0x7bcc, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE5_BA", 0x7bd0, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE5_LEN", 0x7bd4, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE6_VA", 0x7bd8, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE6_BA", 0x7bdc, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE6_LEN", 0x7be0, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_MEM_ZONE7_VA", 0x7be4, 0 },
+ { "MEM_ZONE_VA", 4, 28 },
+ { "CIM_MEM_ZONE7_BA", 0x7be8, 0 },
+ { "MEM_ZONE_BA", 6, 26 },
+ { "PBT_enable", 5, 1 },
+ { "ZONE_DST", 0, 2 },
+ { "CIM_MEM_ZONE7_LEN", 0x7bec, 0 },
+ { "MEM_ZONE_LEN", 4, 28 },
+ { "CIM_GLB_TIMER_CTL", 0x7bf4, 0 },
+ { "Timer1En", 4, 1 },
+ { "Timer0En", 3, 1 },
+ { "TimerEn", 1, 1 },
+ { "CIM_GLB_TIMER", 0x7bf8, 0 },
+ { "CIM_GLB_TIMER_TICK", 0x7bfc, 0 },
+ { "CIM_TIMER0", 0x7c00, 0 },
+ { "CIM_TIMER1", 0x7c04, 0 },
+ { "CIM_DEBUG_ADDR_TIMEOUT", 0x7c08, 0 },
+ { "DAddrTimeOut", 2, 30 },
+ { "DAddrTimeOutType", 0, 2 },
+ { "CIM_DEBUG_ADDR_ILLEGAL", 0x7c0c, 0 },
+ { "DAddrIllegal", 2, 30 },
+ { "DAddrIllegalType", 0, 2 },
+ { "CIM_DEBUG_PIF_CAUSE_MASK", 0x7c10, 0 },
+ { "CIM_DEBUG_PIF_UPACC_CAUSE_MASK", 0x7c14, 0 },
+ { "CIM_DEBUG_UP_CAUSE_MASK", 0x7c18, 0 },
+ { "CIM_DEBUG_UP_UPACC_CAUSE_MASK", 0x7c1c, 0 },
+ { "CIM_PERR_INJECT", 0x7c20, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "CIM_PERR_ENABLE", 0x7c24, 0 },
+ { "CIM_EEPROM_BUSY_BIT", 0x7c28, 0 },
+ { "CIM_MA_TIMER_EN", 0x7c2c, 0 },
+ { "slow_timer_enable", 1, 1 },
+ { "ma_timer_enable", 0, 1 },
+ { "CIM_UP_PO_SINGLE_OUTSTANDING", 0x7c30, 0 },
+ { "CIM_CIM_DEBUG_SPARE", 0x7c34, 0 },
+ { "CIM_UP_OPERATION_FREQ", 0x7c38, 0 },
+ { "CIM_CIM_IBQ_ERR_CODE", 0x7c3c, 0 },
+ { "CIM_ULP_TX_PKT_ERR_CODE", 16, 8 },
+ { "CIM_PCIE_PKT_ERR_CODE", 8, 8 },
+ { "CIM_SGE0_PKT_ERR_CODE", 0, 8 },
+ { "CIM_IBQ_DBG_WAIT_COUNTER", 0x7c40, 0 },
+ { "CIM_PIO_UP_MST_CFG_SEL", 0x7c44, 0 },
+ { "CIM_CGEN", 0x7c48, 0 },
+ { "CIM_QUEUE_FEATURE_DISABLE", 0x7c4c, 0 },
+ { "pcie_obq_if_disable", 5, 1 },
+ { "obq_throuttle_on_eop", 4, 1 },
+ { "obq_read_ctl_perf_mode_disable", 3, 1 },
+ { "obq_wait_for_eop_flush_disable", 2, 1 },
+ { "ibq_rra_dsbl", 1, 1 },
+ { "ibq_skid_fifo_eop_flsh_dsbl", 0, 1 },
+ { "CIM_CGEN_GLOBAL", 0x7c50, 0 },
+ { "CIM_DPSLP_EN", 0x7c54, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e240, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e244, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e248, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e24c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e250, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e254, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e258, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e25c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e260, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e264, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e268, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e26c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e270, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e274, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e278, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e27c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1e280, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1e284, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1e288, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1e28c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1e290, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e640, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e644, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e648, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e64c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e650, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e654, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e658, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e65c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e660, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e664, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e668, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e66c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e670, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e674, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e678, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1e67c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1e680, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1e684, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1e688, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1e68c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1e690, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea40, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea44, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea48, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea4c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea50, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea54, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea58, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea5c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea60, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea64, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea68, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea6c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea70, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea74, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea78, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ea7c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1ea80, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1ea84, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1ea88, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1ea8c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1ea90, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee40, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee44, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee48, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee4c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee50, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee54, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee58, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee5c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee60, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee64, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee68, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee6c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee70, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee74, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee78, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1ee7c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1ee80, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1ee84, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1ee88, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1ee8c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1ee90, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f240, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f244, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f248, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f24c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f250, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f254, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f258, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f25c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f260, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f264, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f268, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f26c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f270, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f274, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f278, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f27c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1f280, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1f284, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1f288, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1f28c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1f290, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f640, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f644, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f648, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f64c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f650, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f654, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f658, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f65c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f660, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f664, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f668, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f66c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f670, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f674, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f678, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1f67c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1f680, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1f684, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1f688, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1f68c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1f690, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa40, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa44, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa48, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa4c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa50, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa54, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa58, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa5c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa60, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa64, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa68, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa6c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa70, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa74, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa78, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fa7c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1fa80, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1fa84, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1fa88, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1fa8c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1fa90, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe40, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe44, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe48, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe4c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe50, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe54, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe58, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe5c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe60, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe64, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe68, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe6c, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe70, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe74, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe78, 0 },
+ { "CIM_PF_MAILBOX_DATA", 0x1fe7c, 0 },
+ { "CIM_PF_MAILBOX_CTRL", 0x1fe80, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { "CIM_PF_MAILBOX_ACC_STATUS", 0x1fe84, 0 },
+ { "MBWrBusy", 31, 1 },
+ { "CIM_PF_HOST_INT_ENABLE", 0x1fe88, 0 },
+ { "MBMsgRdyIntEn", 19, 1 },
+ { "CIM_PF_HOST_INT_CAUSE", 0x1fe8c, 0 },
+ { "MBMsgRdyInt", 19, 1 },
+ { "CIM_PF_MAILBOX_CTRL_SHADOW_COPY", 0x1fe90, 0 },
+ { "MBGeneric", 4, 28 },
+ { "MBMsgValid", 3, 1 },
+ { "MBIntReq", 2, 1 },
+ { "MBOwner", 0, 2 },
+ { NULL }
+};
+
+struct reg_info t6_tp_regs[] = {
+ { "TP_IN_CONFIG", 0x7d00, 0 },
+ { "VLANExtEnPort3", 31, 1 },
+ { "VLANExtEnPort2", 30, 1 },
+ { "VLANExtEnPort1", 29, 1 },
+ { "VLANExtEnPort0", 28, 1 },
+ { "TcpOptParserDisCh3", 27, 1 },
+ { "TcpOptParserDisCh2", 26, 1 },
+ { "TcpOptParserDisCh1", 25, 1 },
+ { "TcpOptParserDisCh0", 24, 1 },
+ { "CrcPassPrt3", 23, 1 },
+ { "CrcPassPrt2", 22, 1 },
+ { "CrcPassPrt1", 21, 1 },
+ { "CrcPassPrt0", 20, 1 },
+ { "VepaMode", 19, 1 },
+ { "FipUpEn", 18, 1 },
+ { "FcoeUpEn", 17, 1 },
+ { "FcoeEnable", 16, 1 },
+ { "IPv6Enable", 15, 1 },
+ { "NICMode", 14, 1 },
+ { "VnTagDefaultVal", 13, 1 },
+ { "ECheckUDPLen", 12, 1 },
+ { "EReportUdpHdrLen", 11, 1 },
+ { "FcoeFPMA", 10, 1 },
+ { "VnTagEnable", 9, 1 },
+ { "VnTagEthEnable", 8, 1 },
+ { "CChecksumCheckIP", 7, 1 },
+ { "CChecksumCheckUDP", 6, 1 },
+ { "CChecksumCheckTCP", 5, 1 },
+ { "CTag", 4, 1 },
+ { "CXoffOverride", 3, 1 },
+ { "EthUpEn", 2, 1 },
+ { "EGreDropEn", 1, 1 },
+ { "CFastDemuxEn", 0, 1 },
+ { "TP_OUT_CONFIG", 0x7d04, 0 },
+ { "PortQfcEn", 28, 4 },
+ { "EPktDistChn3", 23, 1 },
+ { "EPktDistChn2", 22, 1 },
+ { "EPktDistChn1", 21, 1 },
+ { "EPktDistChn0", 20, 1 },
+ { "TtlMode", 19, 1 },
+ { "EQfcDmac", 18, 1 },
+ { "ELpbkIncMpsStat", 17, 1 },
+ { "IPIDSplitMode", 16, 1 },
+ { "CCplAckMode", 13, 1 },
+ { "RMWHintEnable", 12, 1 },
+ { "EChecksumInsertTCP", 11, 1 },
+ { "EChecksumInsertIP", 10, 1 },
+ { "EVnTagEn", 9, 1 },
+ { "EV6FlwEn", 8, 1 },
+ { "EPriority", 7, 1 },
+ { "EVlanPrio", 6, 1 },
+ { "CChecksumInsertTCP", 5, 1 },
+ { "CChecksumInsertIP", 4, 1 },
+ { "CRxPktEnc", 3, 1 },
+ { "CCPL", 2, 1 },
+ { "CRxPktXt", 1, 1 },
+ { "CEthernet", 0, 1 },
+ { "TP_GLOBAL_CONFIG", 0x7d08, 0 },
+ { "SYNCookieParams", 26, 6 },
+ { "RXFlowControlDisable", 25, 1 },
+ { "TXPacingEnable", 24, 1 },
+ { "ActiveFilterCounts", 22, 1 },
+ { "ProtectedMode", 21, 1 },
+ { "FiveTupleLookup", 17, 2 },
+ { "OfdMpsStats", 16, 1 },
+ { "DontFragment", 15, 1 },
+ { "IPIdentSplit", 14, 1 },
+ { "RssSynSteerEnable", 12, 1 },
+ { "IssFromCplEnable", 11, 1 },
+ { "RssLoopbackEnable", 10, 1 },
+ { "TCAMServerUse", 8, 2 },
+ { "IPTTL", 0, 8 },
+ { "TP_DB_CONFIG", 0x7d0c, 0 },
+ { "DBMaxOpCnt", 24, 8 },
+ { "CxMaxOpCntDisable", 23, 1 },
+ { "CxMaxOpCnt", 16, 7 },
+ { "TxMaxOpCntDisable", 15, 1 },
+ { "TxMaxOpCnt", 8, 7 },
+ { "RxMaxOpCntDisable", 7, 1 },
+ { "RxMaxOpCnt", 0, 7 },
+ { "TP_CMM_TCB_BASE", 0x7d10, 0 },
+ { "TP_CMM_MM_BASE", 0x7d14, 0 },
+ { "TP_CMM_TIMER_BASE", 0x7d18, 0 },
+ { "TP_CMM_MM_FLST_SIZE", 0x7d1c, 0 },
+ { "RxPoolSize", 16, 16 },
+ { "TxPoolSize", 0, 16 },
+ { "TP_PMM_TX_BASE", 0x7d20, 0 },
+ { "TP_PMM_DEFRAG_BASE", 0x7d24, 0 },
+ { "TP_PMM_RX_BASE", 0x7d28, 0 },
+ { "TP_PMM_RX_PAGE_SIZE", 0x7d2c, 0 },
+ { "TP_PMM_RX_MAX_PAGE", 0x7d30, 0 },
+ { "PMRxNumChn", 31, 1 },
+ { "PMRxMaxPage", 0, 21 },
+ { "TP_PMM_TX_PAGE_SIZE", 0x7d34, 0 },
+ { "TP_PMM_TX_MAX_PAGE", 0x7d38, 0 },
+ { "PMTxNumChn", 30, 2 },
+ { "PMTxMaxPage", 0, 21 },
+ { "TP_TCP_OPTIONS", 0x7d40, 0 },
+ { "MTUDefault", 16, 16 },
+ { "MTUEnable", 10, 1 },
+ { "SACKTx", 9, 1 },
+ { "SACKRx", 8, 1 },
+ { "SACKMode", 4, 2 },
+ { "WindowScaleMode", 2, 2 },
+ { "TimestampsMode", 0, 2 },
+ { "TP_DACK_CONFIG", 0x7d44, 0 },
+ { "AutoState3", 30, 2 },
+ { "AutoState2", 28, 2 },
+ { "AutoState1", 26, 2 },
+ { "ByteThreshold", 8, 18 },
+ { "MSSThreshold", 4, 3 },
+ { "AutoCareful", 2, 1 },
+ { "AutoEnable", 1, 1 },
+ { "Mode", 0, 1 },
+ { "TP_PC_CONFIG", 0x7d48, 0 },
+ { "EnableFinCheck", 31, 1 },
+ { "EnableOcspiFull", 30, 1 },
+ { "EnableFLMErrorDDP", 29, 1 },
+ { "LockTid", 28, 1 },
+ { "DisableInvPend", 27, 1 },
+ { "EnableFilterCount", 26, 1 },
+ { "RddpCongEn", 25, 1 },
+ { "EnableOnFlyPDU", 24, 1 },
+ { "EnableMinRcvWnd", 23, 1 },
+ { "EnableMaxRcvWnd", 22, 1 },
+ { "EnableMibVfPld", 21, 1 },
+ { "TxDeferEnable", 20, 1 },
+ { "RxCongestionMode", 19, 1 },
+ { "HearbeatOnceDACK", 18, 1 },
+ { "HearbeatOnceHeap", 17, 1 },
+ { "HearbeatDACK", 16, 1 },
+ { "TxCongestionMode", 15, 1 },
+ { "AcceptLatestRcvAdv", 14, 1 },
+ { "DisableSYNData", 13, 1 },
+ { "DisableWindowPSH", 12, 1 },
+ { "DisableFINOldData", 11, 1 },
+ { "EnableFLMError", 10, 1 },
+ { "EnableOptMtu", 9, 1 },
+ { "FilterPeerFIN", 8, 1 },
+ { "EnableFeedbackSend", 7, 1 },
+ { "EnableRDMAError", 6, 1 },
+ { "EnableFilterNat", 5, 1 },
+ { "DisableSepPshFlag", 4, 1 },
+ { "EnableOfdoVLAN", 3, 1 },
+ { "DisableTimeWait", 2, 1 },
+ { "EnableVlanCheck", 1, 1 },
+ { "TxDataAckPageEnable", 0, 1 },
+ { "TP_PC_CONFIG2", 0x7d4c, 0 },
+ { "EnableMtuVfMode", 31, 1 },
+ { "EnableMibVfMode", 30, 1 },
+ { "DisableLbkCheck", 29, 1 },
+ { "EnableUrgDdpOff", 28, 1 },
+ { "EnableFilterLpbk", 27, 1 },
+ { "DisableTblMmgr", 26, 1 },
+ { "CngRecSndNxt", 25, 1 },
+ { "EnableLbkChn", 24, 1 },
+ { "EnableLroEcn", 23, 1 },
+ { "EnablePcmdCheck", 22, 1 },
+ { "EnableELbkAFull", 21, 1 },
+ { "EnableCLbkAFull", 20, 1 },
+ { "EnableOespiFull", 19, 1 },
+ { "DisableHitCheck", 18, 1 },
+ { "EnableRssErrCheck", 17, 1 },
+ { "DisableNewPshFlag", 16, 1 },
+ { "EnableRddpRcvAdvClr", 15, 1 },
+ { "EnableFinDdpOff", 14, 1 },
+ { "EnableArpMiss", 13, 1 },
+ { "EnableRstPaws", 12, 1 },
+ { "EnableIPv6RSS", 11, 1 },
+ { "EnableNonOfdHybRss", 10, 1 },
+ { "EnableUDP4TupRss", 9, 1 },
+ { "EnableRxPktTmstpRss", 8, 1 },
+ { "EnableEPCMDAFull", 7, 1 },
+ { "EnableCPCMDAFull", 6, 1 },
+ { "EnableEHdrAFull", 5, 1 },
+ { "EnableCHdrAFull", 4, 1 },
+ { "EnableEMacAFull", 3, 1 },
+ { "EnableNonOfdTidRss", 2, 1 },
+ { "EnableNonOfdTcbRss", 1, 1 },
+ { "EnableTnlOfdClosed", 0, 1 },
+ { "TP_TCP_BACKOFF_REG0", 0x7d50, 0 },
+ { "TimerBackoffIndex3", 24, 8 },
+ { "TimerBackoffIndex2", 16, 8 },
+ { "TimerBackoffIndex1", 8, 8 },
+ { "TimerBackoffIndex0", 0, 8 },
+ { "TP_TCP_BACKOFF_REG1", 0x7d54, 0 },
+ { "TimerBackoffIndex7", 24, 8 },
+ { "TimerBackoffIndex6", 16, 8 },
+ { "TimerBackoffIndex5", 8, 8 },
+ { "TimerBackoffIndex4", 0, 8 },
+ { "TP_TCP_BACKOFF_REG2", 0x7d58, 0 },
+ { "TimerBackoffIndex11", 24, 8 },
+ { "TimerBackoffIndex10", 16, 8 },
+ { "TimerBackoffIndex9", 8, 8 },
+ { "TimerBackoffIndex8", 0, 8 },
+ { "TP_TCP_BACKOFF_REG3", 0x7d5c, 0 },
+ { "TimerBackoffIndex15", 24, 8 },
+ { "TimerBackoffIndex14", 16, 8 },
+ { "TimerBackoffIndex13", 8, 8 },
+ { "TimerBackoffIndex12", 0, 8 },
+ { "TP_PARA_REG0", 0x7d60, 0 },
+ { "LimTxThresh", 28, 4 },
+ { "InitCwndIdle", 27, 1 },
+ { "InitCwnd", 24, 3 },
+ { "DupAckThresh", 20, 4 },
+ { "EcnCngFifo", 19, 1 },
+ { "EcnSynAck", 18, 1 },
+ { "EcnThresh", 16, 2 },
+ { "EcnMode", 15, 1 },
+ { "EcnModeCwr", 14, 1 },
+ { "SetTimeEnable", 13, 1 },
+ { "CplErrEnable", 12, 1 },
+ { "FastTnlCnt", 11, 1 },
+ { "ForceShove", 10, 1 },
+ { "TpTcamKey", 9, 1 },
+ { "SwsMode", 8, 1 },
+ { "TsmpMode", 6, 2 },
+ { "ByteCountLimit", 4, 2 },
+ { "SwsShove", 3, 1 },
+ { "TblTimer", 2, 1 },
+ { "RxtPace", 1, 1 },
+ { "SwsTimer", 0, 1 },
+ { "TP_PARA_REG1", 0x7d64, 0 },
+ { "InitRwnd", 16, 16 },
+ { "InitialSSThresh", 0, 16 },
+ { "TP_PARA_REG2", 0x7d68, 0 },
+ { "MaxRxData", 16, 16 },
+ { "RxCoalesceSize", 0, 16 },
+ { "TP_PARA_REG3", 0x7d6c, 0 },
+ { "EnableTnlCngLpbk", 31, 1 },
+ { "EnableTnlCngFifo", 30, 1 },
+ { "EnableTnlCngHdr", 29, 1 },
+ { "EnableTnlCngSge", 28, 1 },
+ { "RxMacCheck", 27, 1 },
+ { "RxSynFilter", 26, 1 },
+ { "CngCtrlECN", 25, 1 },
+ { "RxDdpOffInit", 24, 1 },
+ { "TunnelCngDrop3", 23, 1 },
+ { "TunnelCngDrop2", 22, 1 },
+ { "TunnelCngDrop1", 21, 1 },
+ { "TunnelCngDrop0", 20, 1 },
+ { "TxDataAckIdx", 16, 4 },
+ { "RxFragEnable", 12, 3 },
+ { "TxPaceFixedStrict", 11, 1 },
+ { "TxPaceAutoStrict", 10, 1 },
+ { "TxPaceFixed", 9, 1 },
+ { "TxPaceAuto", 8, 1 },
+ { "RxChnTunnel", 7, 1 },
+ { "RxUrgTunnel", 6, 1 },
+ { "RxUrgMode", 5, 1 },
+ { "TxUrgMode", 4, 1 },
+ { "CngCtrlMode", 2, 2 },
+ { "RxCoalesceEnable", 1, 1 },
+ { "RxCoalescePshEn", 0, 1 },
+ { "TP_PARA_REG4", 0x7d70, 0 },
+ { "IdleCwndHighSpeed", 28, 1 },
+ { "RxmtCwndHighSpeed", 27, 1 },
+ { "OverdriveHighSpeed", 25, 2 },
+ { "ByteCountHighSpeed", 24, 1 },
+ { "IdleCwndNewReno", 20, 1 },
+ { "RxmtCwndNewReno", 19, 1 },
+ { "OverdriveNewReno", 17, 2 },
+ { "ByteCountNewReno", 16, 1 },
+ { "IdleCwndTahoe", 12, 1 },
+ { "RxmtCwndTahoe", 11, 1 },
+ { "OverdriveTahoe", 9, 2 },
+ { "ByteCountTahoe", 8, 1 },
+ { "IdleCwndReno", 4, 1 },
+ { "RxmtCwndReno", 3, 1 },
+ { "OverdriveReno", 1, 2 },
+ { "ByteCountReno", 0, 1 },
+ { "TP_PARA_REG5", 0x7d74, 0 },
+ { "IndicateSize", 16, 16 },
+ { "MaxProxySize", 12, 4 },
+ { "EnableReadPdu", 11, 1 },
+ { "EnableReadAhead", 10, 1 },
+ { "EmptyRqEnable", 9, 1 },
+ { "SchdEnable", 8, 1 },
+ { "EnableXoffPdu", 7, 1 },
+ { "EnableFcoeCheck", 6, 1 },
+ { "EnableFragCheck", 5, 1 },
+ { "RearmDdpOffset", 4, 1 },
+ { "ResetDdpOffset", 3, 1 },
+ { "OnFlyDDPEnable", 2, 1 },
+ { "EnableRdmaFix", 1, 1 },
+ { "PushTimerEnable", 0, 1 },
+ { "TP_PARA_REG6", 0x7d78, 0 },
+ { "TxPDUSizeAdj", 24, 8 },
+ { "TxTcamKey", 22, 1 },
+ { "EnableCByp", 21, 1 },
+ { "DisablePDUAck", 20, 1 },
+ { "EnableCSav", 19, 1 },
+ { "EnableDeferPDU", 18, 1 },
+ { "EnableFlush", 17, 1 },
+ { "EnableBytePersist", 16, 1 },
+ { "DisableTmoCng", 15, 1 },
+ { "EnableReadAhead", 14, 1 },
+ { "AllowExeption", 13, 1 },
+ { "EnableDeferACK", 12, 1 },
+ { "EnableESnd", 11, 1 },
+ { "EnableCSnd", 10, 1 },
+ { "EnablePDUE", 9, 1 },
+ { "EnablePDUC", 8, 1 },
+ { "EnableBUFI", 7, 1 },
+ { "EnableBUFE", 6, 1 },
+ { "EnableDefer", 5, 1 },
+ { "EnableClearRxmtOos", 4, 1 },
+ { "DisablePDUCng", 3, 1 },
+ { "DisablePDUTimeout", 2, 1 },
+ { "DisablePDURxmt", 1, 1 },
+ { "DisablePDUxmt", 0, 1 },
+ { "TP_PARA_REG7", 0x7d7c, 0 },
+ { "PMMaxXferLen1", 16, 16 },
+ { "PMMaxXferLen0", 0, 16 },
+ { "TP_ENG_CONFIG", 0x7d80, 0 },
+ { "TableLatencyDone", 28, 4 },
+ { "TableLatencyStart", 24, 4 },
+ { "EngineLatencyDelta", 16, 4 },
+ { "EngineLatencyMmgr", 12, 4 },
+ { "EngineLatencyWireIp6", 8, 4 },
+ { "EngineLatencyWire", 4, 4 },
+ { "EngineLatencyBase", 0, 4 },
+ { "TP_PARA_REG8", 0x7d84, 0 },
+ { "EcnAckEct", 2, 1 },
+ { "EcnFinEct", 1, 1 },
+ { "EcnSynEct", 0, 1 },
+ { "TP_ERR_CONFIG", 0x7d8c, 0 },
+ { "TnlErrorFPMA", 31, 1 },
+ { "TnlErrorPing", 30, 1 },
+ { "TnlErrorCsum", 29, 1 },
+ { "TnlErrorCsumIP", 28, 1 },
+ { "TnlErrorOpaque", 27, 1 },
+ { "TnlErrorIp6Opt", 26, 1 },
+ { "TnlErrorTcpOpt", 25, 1 },
+ { "TnlErrorPktLen", 24, 1 },
+ { "TnlErrorTcpHdrLen", 23, 1 },
+ { "TnlErrorIpHdrLen", 22, 1 },
+ { "TnlErrorEthHdrLen", 21, 1 },
+ { "TnlErrorAttack", 20, 1 },
+ { "TnlErrorFrag", 19, 1 },
+ { "TnlErrorIpVer", 18, 1 },
+ { "TnlErrorMac", 17, 1 },
+ { "TnlErrorAny", 16, 1 },
+ { "DropErrorFPMA", 15, 1 },
+ { "DropErrorPing", 14, 1 },
+ { "DropErrorCsum", 13, 1 },
+ { "DropErrorCsumIP", 12, 1 },
+ { "DropErrorOpaque", 11, 1 },
+ { "DropErrorIp6Opt", 10, 1 },
+ { "DropErrorTcpOpt", 9, 1 },
+ { "DropErrorPktLen", 8, 1 },
+ { "DropErrorTcpHdrLen", 7, 1 },
+ { "DropErrorIpHdrLen", 6, 1 },
+ { "DropErrorEthHdrLen", 5, 1 },
+ { "DropErrorAttack", 4, 1 },
+ { "DropErrorFrag", 3, 1 },
+ { "DropErrorIpVer", 2, 1 },
+ { "DropErrorMac", 1, 1 },
+ { "DropErrorAny", 0, 1 },
+ { "TP_TIMER_RESOLUTION", 0x7d90, 0 },
+ { "TimerResolution", 16, 8 },
+ { "TimestampResolution", 8, 8 },
+ { "DelayedACKResolution", 0, 8 },
+ { "TP_MSL", 0x7d94, 0 },
+ { "TP_RXT_MIN", 0x7d98, 0 },
+ { "TP_RXT_MAX", 0x7d9c, 0 },
+ { "TP_PERS_MIN", 0x7da0, 0 },
+ { "TP_PERS_MAX", 0x7da4, 0 },
+ { "TP_KEEP_IDLE", 0x7da8, 0 },
+ { "TP_KEEP_INTVL", 0x7dac, 0 },
+ { "TP_INIT_SRTT", 0x7db0, 0 },
+ { "MaxRtt", 16, 16 },
+ { "InitSrtt", 0, 16 },
+ { "TP_DACK_TIMER", 0x7db4, 0 },
+ { "TP_FINWAIT2_TIMER", 0x7db8, 0 },
+ { "TP_FAST_FINWAIT2_TIMER", 0x7dbc, 0 },
+ { "TP_SHIFT_CNT", 0x7dc0, 0 },
+ { "SynShiftMax", 24, 4 },
+ { "RxtShiftMaxR1", 20, 4 },
+ { "RxtShiftMaxR2", 16, 4 },
+ { "PerShiftBackoffMax", 12, 4 },
+ { "PerShiftMax", 8, 4 },
+ { "KeepaliveMaxR1", 4, 4 },
+ { "KeepaliveMaxR2", 0, 4 },
+ { "TP_TM_CONFIG", 0x7dc4, 0 },
+ { "TP_TIME_LO", 0x7dc8, 0 },
+ { "TP_TIME_HI", 0x7dcc, 0 },
+ { "TP_PORT_MTU_0", 0x7dd0, 0 },
+ { "Port1MTUValue", 16, 16 },
+ { "Port0MTUValue", 0, 16 },
+ { "TP_PORT_MTU_1", 0x7dd4, 0 },
+ { "Port3MTUValue", 16, 16 },
+ { "Port2MTUValue", 0, 16 },
+ { "TP_PACE_TABLE", 0x7dd8, 0 },
+ { "TP_CCTRL_TABLE", 0x7ddc, 0 },
+ { "RowIndex", 16, 16 },
+ { "RowValue", 0, 16 },
+ { "TP_MTU_TABLE", 0x7de4, 0 },
+ { "MTUIndex", 24, 8 },
+ { "MTUWidth", 16, 4 },
+ { "MTUValue", 0, 14 },
+ { "TP_ULP_TABLE", 0x7de8, 0 },
+ { "ULPType7Length", 31, 1 },
+ { "ULPType7Offset", 28, 3 },
+ { "ULPType6Length", 27, 1 },
+ { "ULPType6Offset", 24, 3 },
+ { "ULPType5Length", 23, 1 },
+ { "ULPType5Offset", 20, 3 },
+ { "ULPType4Length", 19, 1 },
+ { "ULPType4Offset", 16, 3 },
+ { "ULPType3Length", 15, 1 },
+ { "ULPType3Offset", 12, 3 },
+ { "ULPType2Length", 11, 1 },
+ { "ULPType2Offset", 8, 3 },
+ { "ULPType1Length", 7, 1 },
+ { "ULPType1Offset", 4, 3 },
+ { "ULPType0Length", 3, 1 },
+ { "ULPType0Offset", 0, 3 },
+ { "TP_RSS_LKP_TABLE", 0x7dec, 0 },
+ { "LkpTblRowVld", 31, 1 },
+ { "LkpTblRowIdx", 20, 11 },
+ { "LkpTblQueue1", 10, 10 },
+ { "LkpTblQueue0", 0, 10 },
+ { "TP_RSS_CONFIG", 0x7df0, 0 },
+ { "TNL4tupEnIpv6", 31, 1 },
+ { "TNL2tupEnIpv6", 30, 1 },
+ { "TNL4tupEnIpv4", 29, 1 },
+ { "TNL2tupEnIpv4", 28, 1 },
+ { "TNLTcpSel", 27, 1 },
+ { "TNLIp6Sel", 26, 1 },
+ { "TNLVrtSel", 25, 1 },
+ { "TNLMapEn", 24, 1 },
+ { "TNLFcoeMode", 23, 1 },
+ { "TNLFcoeSid", 22, 1 },
+ { "TNLFcoeEn", 21, 1 },
+ { "HashXor", 20, 1 },
+ { "OFDHashSave", 19, 1 },
+ { "OFDVrtSel", 18, 1 },
+ { "OFDMapEn", 17, 1 },
+ { "OFDLkpEn", 16, 1 },
+ { "SYN4tupEnIpv6", 15, 1 },
+ { "SYN2tupEnIpv6", 14, 1 },
+ { "SYN4tupEnIpv4", 13, 1 },
+ { "SYN2tupEnIpv4", 12, 1 },
+ { "SYNIp6Sel", 11, 1 },
+ { "SYNVrtSel", 10, 1 },
+ { "SYNMapEn", 9, 1 },
+ { "SYNLkpEn", 8, 1 },
+ { "ChannelEnable", 7, 1 },
+ { "PortEnable", 6, 1 },
+ { "TNLAllLookup", 5, 1 },
+ { "VirtEnable", 4, 1 },
+ { "CongestionEnable", 3, 1 },
+ { "HashToeplitz", 2, 1 },
+ { "UdpEnable", 1, 1 },
+ { "Disable", 0, 1 },
+ { "TP_RSS_CONFIG_TNL", 0x7df4, 0 },
+ { "MaskSize", 28, 4 },
+ { "MaskFilter", 16, 11 },
+ { "HashAll", 2, 1 },
+ { "HashEth", 1, 1 },
+ { "UseWireCh", 0, 1 },
+ { "TP_RSS_CONFIG_OFD", 0x7df8, 0 },
+ { "MaskSize", 28, 4 },
+ { "RRCPLMapEn", 20, 1 },
+ { "RRCPLQueWidth", 16, 4 },
+ { "FrmwrQueMask", 12, 4 },
+ { "TP_RSS_CONFIG_SYN", 0x7dfc, 0 },
+ { "MaskSize", 28, 4 },
+ { "UseWireCh", 0, 1 },
+ { "TP_RSS_CONFIG_VRT", 0x7e00, 0 },
+ { "KeyWrAddrX", 30, 2 },
+ { "KeyExtend", 26, 1 },
+ { "VfRdRg", 25, 1 },
+ { "VfRdEn", 24, 1 },
+ { "VfPerrEn", 23, 1 },
+ { "KeyPerrEn", 22, 1 },
+ { "VfVlanEn", 21, 1 },
+ { "VfFwEn", 20, 1 },
+ { "HashDelay", 16, 4 },
+ { "VfWrAddr", 8, 8 },
+ { "KeyMode", 6, 2 },
+ { "VfWrEn", 5, 1 },
+ { "KeyWrEn", 4, 1 },
+ { "KeyWrAddr", 0, 4 },
+ { "TP_RSS_CONFIG_CNG", 0x7e04, 0 },
+ { "ChnCount3", 31, 1 },
+ { "ChnCount2", 30, 1 },
+ { "ChnCount1", 29, 1 },
+ { "ChnCount0", 28, 1 },
+ { "ChnUndFlow3", 27, 1 },
+ { "ChnUndFlow2", 26, 1 },
+ { "ChnUndFlow1", 25, 1 },
+ { "ChnUndFlow0", 24, 1 },
+ { "ChnOvrFlow3", 23, 1 },
+ { "ChnOvrFlow2", 22, 1 },
+ { "ChnOvrFlow1", 21, 1 },
+ { "ChnOvrFlow0", 20, 1 },
+ { "RstChn3", 19, 1 },
+ { "RstChn2", 18, 1 },
+ { "RstChn1", 17, 1 },
+ { "RstChn0", 16, 1 },
+ { "UpdVld", 15, 1 },
+ { "Xoff", 14, 1 },
+ { "UpdChn3", 13, 1 },
+ { "UpdChn2", 12, 1 },
+ { "UpdChn1", 11, 1 },
+ { "UpdChn0", 10, 1 },
+ { "Queue", 0, 10 },
+ { "TP_LA_TABLE_0", 0x7e10, 0 },
+ { "VirtPort1Table", 16, 16 },
+ { "VirtPort0Table", 0, 16 },
+ { "TP_LA_TABLE_1", 0x7e14, 0 },
+ { "VirtPort3Table", 16, 16 },
+ { "VirtPort2Table", 0, 16 },
+ { "TP_TM_PIO_ADDR", 0x7e18, 0 },
+ { "TP_TM_PIO_DATA", 0x7e1c, 0 },
+ { "TP_MOD_CONFIG", 0x7e24, 0 },
+ { "RxChannelWeight1", 24, 8 },
+ { "RXChannelWeight0", 16, 8 },
+ { "TimerMode", 8, 8 },
+ { "TxChannelXoffEn", 0, 4 },
+ { "TP_TX_MOD_QUEUE_REQ_MAP", 0x7e28, 0 },
+ { "RX_MOD_WEIGHT", 24, 8 },
+ { "TX_MOD_WEIGHT", 16, 8 },
+ { "TX_MOD_QUEUE_REQ_MAP", 0, 16 },
+ { "TP_TX_MOD_QUEUE_WEIGHT1", 0x7e2c, 0 },
+ { "TP_TX_MOD_QUEUE_WEIGHT7", 24, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT6", 16, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT5", 8, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT4", 0, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT0", 0x7e30, 0 },
+ { "TP_TX_MOD_QUEUE_WEIGHT3", 24, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT2", 16, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT1", 8, 8 },
+ { "TP_TX_MOD_QUEUE_WEIGHT0", 0, 8 },
+ { "TP_TX_MOD_CHANNEL_WEIGHT", 0x7e34, 0 },
+ { "CH3", 24, 8 },
+ { "CH2", 16, 8 },
+ { "CH1", 8, 8 },
+ { "CH0", 0, 8 },
+ { "TP_MOD_RATE_LIMIT", 0x7e38, 0 },
+ { "RX_MOD_RATE_LIMIT_INC", 24, 8 },
+ { "RX_MOD_RATE_LIMIT_TICK", 16, 8 },
+ { "TX_MOD_RATE_LIMIT_INC", 8, 8 },
+ { "TX_MOD_RATE_LIMIT_TICK", 0, 8 },
+ { "TP_PIO_ADDR", 0x7e40, 0 },
+ { "TP_PIO_DATA", 0x7e44, 0 },
+ { "TP_RESET", 0x7e4c, 0 },
+ { "FlstInitEnable", 1, 1 },
+ { "TPReset", 0, 1 },
+ { "TP_MIB_INDEX", 0x7e50, 0 },
+ { "TP_MIB_DATA", 0x7e54, 0 },
+ { "TP_SYNC_TIME_HI", 0x7e58, 0 },
+ { "TP_SYNC_TIME_LO", 0x7e5c, 0 },
+ { "TP_CMM_MM_RX_FLST_BASE", 0x7e60, 0 },
+ { "TP_CMM_MM_TX_FLST_BASE", 0x7e64, 0 },
+ { "TP_CMM_MM_PS_FLST_BASE", 0x7e68, 0 },
+ { "TP_CMM_MM_MAX_PSTRUCT", 0x7e6c, 0 },
+ { "TP_INT_ENABLE", 0x7e70, 0 },
+ { "FlmTxFlstEmpty", 30, 1 },
+ { "RssLkpPerr", 29, 1 },
+ { "FlmPerrSet", 28, 1 },
+ { "ProtocolSramPerr", 27, 1 },
+ { "ArpLutPerr", 26, 1 },
+ { "CmRcfOpPerr", 25, 1 },
+ { "CmCachePerr", 24, 1 },
+ { "CmRcfDataPerr", 23, 1 },
+ { "DbL2tLutPerr", 22, 1 },
+ { "DbTxTidPerr", 21, 1 },
+ { "DbExtPerr", 20, 1 },
+ { "DbOpPerr", 19, 1 },
+ { "TmCachePerr", 18, 1 },
+ { "ETpOutCplFifoPerr", 17, 1 },
+ { "ETpOutTcpFifoPerr", 16, 1 },
+ { "ETpOutIpFifoPerr", 15, 1 },
+ { "ETpOutEthFifoPerr", 14, 1 },
+ { "ETpInCplFifoPerr", 13, 1 },
+ { "ETpInTcpOptFifoPerr", 12, 1 },
+ { "ETpInTcpFifoPerr", 11, 1 },
+ { "ETpInIpFifoPerr", 10, 1 },
+ { "ETpInEthFifoPerr", 9, 1 },
+ { "CTpOutCplFifoPerr", 8, 1 },
+ { "CTpOutPldFifoPerr", 7, 1 },
+ { "CTpOutIpFifoPerr", 6, 1 },
+ { "CTpOutEthFifoPerr", 5, 1 },
+ { "CTpInCplFifoPerr", 4, 1 },
+ { "CTpInTcpOpFifoPerr", 3, 1 },
+ { "PduFbkFifoPerr", 2, 1 },
+ { "SrqTablePerr", 1, 1 },
+ { "DelInvFifoPerr", 0, 1 },
+ { "TP_INT_CAUSE", 0x7e74, 0 },
+ { "FlmTxFlstEmpty", 30, 1 },
+ { "RssLkpPerr", 29, 1 },
+ { "FlmPerrSet", 28, 1 },
+ { "ProtocolSramPerr", 27, 1 },
+ { "ArpLutPerr", 26, 1 },
+ { "CmRcfOpPerr", 25, 1 },
+ { "CmCachePerr", 24, 1 },
+ { "CmRcfDataPerr", 23, 1 },
+ { "DbL2tLutPerr", 22, 1 },
+ { "DbTxTidPerr", 21, 1 },
+ { "DbExtPerr", 20, 1 },
+ { "DbOpPerr", 19, 1 },
+ { "TmCachePerr", 18, 1 },
+ { "ETpOutCplFifoPerr", 17, 1 },
+ { "ETpOutTcpFifoPerr", 16, 1 },
+ { "ETpOutIpFifoPerr", 15, 1 },
+ { "ETpOutEthFifoPerr", 14, 1 },
+ { "ETpInCplFifoPerr", 13, 1 },
+ { "ETpInTcpOptFifoPerr", 12, 1 },
+ { "ETpInTcpFifoPerr", 11, 1 },
+ { "ETpInIpFifoPerr", 10, 1 },
+ { "ETpInEthFifoPerr", 9, 1 },
+ { "CTpOutCplFifoPerr", 8, 1 },
+ { "CTpOutPldFifoPerr", 7, 1 },
+ { "CTpOutIpFifoPerr", 6, 1 },
+ { "CTpOutEthFifoPerr", 5, 1 },
+ { "CTpInCplFifoPerr", 4, 1 },
+ { "CTpInTcpOpFifoPerr", 3, 1 },
+ { "PduFbkFifoPerr", 2, 1 },
+ { "SrqTablePerr", 1, 1 },
+ { "DelInvFifoPerr", 0, 1 },
+ { "TP_PER_ENABLE", 0x7e78, 0 },
+ { "FlmTxFlstEmpty", 30, 1 },
+ { "RssLkpPerr", 29, 1 },
+ { "FlmPerrSet", 28, 1 },
+ { "ProtocolSramPerr", 27, 1 },
+ { "ArpLutPerr", 26, 1 },
+ { "CmRcfOpPerr", 25, 1 },
+ { "CmCachePerr", 24, 1 },
+ { "CmRcfDataPerr", 23, 1 },
+ { "DbL2tLutPerr", 22, 1 },
+ { "DbTxTidPerr", 21, 1 },
+ { "DbExtPerr", 20, 1 },
+ { "DbOpPerr", 19, 1 },
+ { "TmCachePerr", 18, 1 },
+ { "ETpOutCplFifoPerr", 17, 1 },
+ { "ETpOutTcpFifoPerr", 16, 1 },
+ { "ETpOutIpFifoPerr", 15, 1 },
+ { "ETpOutEthFifoPerr", 14, 1 },
+ { "ETpInCplFifoPerr", 13, 1 },
+ { "ETpInTcpOptFifoPerr", 12, 1 },
+ { "ETpInTcpFifoPerr", 11, 1 },
+ { "ETpInIpFifoPerr", 10, 1 },
+ { "ETpInEthFifoPerr", 9, 1 },
+ { "CTpOutCplFifoPerr", 8, 1 },
+ { "CTpOutPldFifoPerr", 7, 1 },
+ { "CTpOutIpFifoPerr", 6, 1 },
+ { "CTpOutEthFifoPerr", 5, 1 },
+ { "CTpInCplFifoPerr", 4, 1 },
+ { "CTpInTcpOpFifoPerr", 3, 1 },
+ { "PduFbkFifoPerr", 2, 1 },
+ { "SrqTablePerr", 1, 1 },
+ { "DelInvFifoPerr", 0, 1 },
+ { "TP_FLM_FREE_PS_CNT", 0x7e80, 0 },
+ { "TP_FLM_FREE_RX_CNT", 0x7e84, 0 },
+ { "FreeRxPageChn", 28, 1 },
+ { "FreeRxPageCount", 0, 21 },
+ { "TP_FLM_FREE_TX_CNT", 0x7e88, 0 },
+ { "FreeTxPageChn", 28, 2 },
+ { "FreeTxPageCount", 0, 21 },
+ { "TP_TM_HEAP_PUSH_CNT", 0x7e8c, 0 },
+ { "TP_TM_HEAP_POP_CNT", 0x7e90, 0 },
+ { "TP_TM_DACK_PUSH_CNT", 0x7e94, 0 },
+ { "TP_TM_DACK_POP_CNT", 0x7e98, 0 },
+ { "TP_TM_MOD_PUSH_CNT", 0x7e9c, 0 },
+ { "TP_MOD_POP_CNT", 0x7ea0, 0 },
+ { "TP_TIMER_SEPARATOR", 0x7ea4, 0 },
+ { "TimerSeparator", 16, 16 },
+ { "DisableTimeFreeze", 0, 1 },
+ { "TP_STAMP_TIME", 0x7ea8, 0 },
+ { "TP_DEBUG_FLAGS", 0x7eac, 0 },
+ { "RxTimerCompBuffer", 27, 1 },
+ { "RxTimerDackFirst", 26, 1 },
+ { "RxTimerDack", 25, 1 },
+ { "RxTimerHeartbeat", 24, 1 },
+ { "RxPawsDrop", 23, 1 },
+ { "RxUrgDataDrop", 22, 1 },
+ { "RxFutureData", 21, 1 },
+ { "RxRcvRxmData", 20, 1 },
+ { "RxRcvOooDataFin", 19, 1 },
+ { "RxRcvOooData", 18, 1 },
+ { "RxRcvWndZero", 17, 1 },
+ { "RxRcvWndLtMss", 16, 1 },
+ { "TxDfrFast", 13, 1 },
+ { "TxRxmMisc", 12, 1 },
+ { "TxDupAckInc", 11, 1 },
+ { "TxRxmUrg", 10, 1 },
+ { "TxRxmFin", 9, 1 },
+ { "TxRxmSyn", 8, 1 },
+ { "TxRxmNewReno", 7, 1 },
+ { "TxRxmFast", 6, 1 },
+ { "TxRxmTimer", 5, 1 },
+ { "TxRxmTimerKeepalive", 4, 1 },
+ { "TxRxmTimerPersist", 3, 1 },
+ { "TxRcvAdvShrunk", 2, 1 },
+ { "TxRcvAdvZero", 1, 1 },
+ { "TxRcvAdvLtMss", 0, 1 },
+ { "TP_RX_SCHED", 0x7eb0, 0 },
+ { "CommitReset1", 31, 1 },
+ { "CommitReset0", 30, 1 },
+ { "ForceCong1", 29, 1 },
+ { "ForceCong0", 28, 1 },
+ { "EnableLpbkFull1", 26, 2 },
+ { "EnableLpbkFull0", 24, 2 },
+ { "EnableFifoFull1", 22, 2 },
+ { "EnablePcmdFull1", 20, 2 },
+ { "EnableHdrFull1", 18, 2 },
+ { "EnableFifoFull0", 16, 2 },
+ { "EnablePcmdFull0", 14, 2 },
+ { "EnableHdrFull0", 12, 2 },
+ { "TP_TX_SCHED", 0x7eb4, 0 },
+ { "CommitReset3", 31, 1 },
+ { "CommitReset2", 30, 1 },
+ { "CommitReset1", 29, 1 },
+ { "CommitReset0", 28, 1 },
+ { "ForceCong3", 27, 1 },
+ { "ForceCong2", 26, 1 },
+ { "ForceCong1", 25, 1 },
+ { "ForceCong0", 24, 1 },
+ { "CommitLimit3", 18, 6 },
+ { "CommitLimit2", 12, 6 },
+ { "CommitLimit1", 6, 6 },
+ { "CommitLimit0", 0, 6 },
+ { "TP_FX_SCHED", 0x7eb8, 0 },
+ { "TxChnXoff3", 19, 1 },
+ { "TxChnXoff2", 18, 1 },
+ { "TxChnXoff1", 17, 1 },
+ { "TxChnXoff0", 16, 1 },
+ { "TxModXoff7", 15, 1 },
+ { "TxModXoff6", 14, 1 },
+ { "TxModXoff5", 13, 1 },
+ { "TxModXoff4", 12, 1 },
+ { "TxModXoff3", 11, 1 },
+ { "TxModXoff2", 10, 1 },
+ { "TxModXoff1", 9, 1 },
+ { "TxModXoff0", 8, 1 },
+ { "RxChnXoff3", 7, 1 },
+ { "RxChnXoff2", 6, 1 },
+ { "RxChnXoff1", 5, 1 },
+ { "RxChnXoff0", 4, 1 },
+ { "RxModXoff1", 1, 1 },
+ { "RxModXoff0", 0, 1 },
+ { "TP_TX_ORATE", 0x7ebc, 0 },
+ { "OfdRate3", 24, 8 },
+ { "OfdRate2", 16, 8 },
+ { "OfdRate1", 8, 8 },
+ { "OfdRate0", 0, 8 },
+ { "TP_IX_SCHED0", 0x7ec0, 0 },
+ { "TP_IX_SCHED1", 0x7ec4, 0 },
+ { "TP_IX_SCHED2", 0x7ec8, 0 },
+ { "TP_IX_SCHED3", 0x7ecc, 0 },
+ { "TP_TX_TRATE", 0x7ed0, 0 },
+ { "TnlRate3", 24, 8 },
+ { "TnlRate2", 16, 8 },
+ { "TnlRate1", 8, 8 },
+ { "TnlRate0", 0, 8 },
+ { "TP_DBG_LA_CONFIG", 0x7ed4, 0 },
+ { "DbgLaOpcEnable", 24, 8 },
+ { "DbgLaWhlf", 23, 1 },
+ { "DbgLaWptr", 16, 7 },
+ { "DbgLaMode", 14, 2 },
+ { "DbgLaFatalFreeze", 13, 1 },
+ { "DbgLaEnable", 12, 1 },
+ { "DbgLaRptr", 0, 7 },
+ { "TP_DBG_LA_DATAL", 0x7ed8, 0 },
+ { "TP_DBG_LA_DATAH", 0x7edc, 0 },
+ { "TP_PROTOCOL_CNTRL", 0x7ee8, 0 },
+ { "WriteEnable", 31, 1 },
+ { "TcamEnable", 10, 1 },
+ { "BlockSelect", 8, 2 },
+ { "LineAddress", 1, 7 },
+ { "RequestDone", 0, 1 },
+ { "TP_PROTOCOL_DATA0", 0x7eec, 0 },
+ { "TP_PROTOCOL_DATA1", 0x7ef0, 0 },
+ { "TP_PROTOCOL_DATA2", 0x7ef4, 0 },
+ { "TP_PROTOCOL_DATA3", 0x7ef8, 0 },
+ { "TP_PROTOCOL_DATA4", 0x7efc, 0 },
+ { NULL }
+};
+
+struct reg_info t6_ulp_tx_regs[] = {
+ { "ULP_TX_CONFIG", 0x8dc0, 0 },
+ { "ULIMIT_EXCLUSIVE_FIX", 16, 1 },
+ { "ISO_A_FLAG_EN", 15, 1 },
+ { "IWARP_SEQ_FLIT_DIS", 14, 1 },
+ { "MR_SIZE_FIX_EN", 13, 1 },
+ { "T10_ISO_FIX_EN", 12, 1 },
+ { "CPL_FLAGS_UPDATE_EN", 11, 1 },
+ { "IWARP_SEQ_UPDATE_EN", 10, 1 },
+ { "SEQ_UPDATE_EN", 9, 1 },
+ { "ERR_ITT_EN", 8, 1 },
+ { "atomic_fix_dis", 7, 1 },
+ { "PHYS_ADDR_RESP_EN", 6, 1 },
+ { "ENDIANESS_CHANGE", 5, 1 },
+ { "ERR_RTAG_EN", 4, 1 },
+ { "TSO_ETHLEN_EN", 3, 1 },
+ { "emsg_more_info", 2, 1 },
+ { "LOSDR", 1, 1 },
+ { "extra_tag_insertion_enable", 0, 1 },
+ { "ULP_TX_PERR_INJECT", 0x8dc4, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "ULP_TX_INT_ENABLE", 0x8dc8, 0 },
+ { "Pbl_bound_err_ch3", 31, 1 },
+ { "Pbl_bound_err_ch2", 30, 1 },
+ { "Pbl_bound_err_ch1", 29, 1 },
+ { "Pbl_bound_err_ch0", 28, 1 },
+ { "sge2ulp_fifo_perr_set3", 27, 1 },
+ { "sge2ulp_fifo_perr_set2", 26, 1 },
+ { "sge2ulp_fifo_perr_set1", 25, 1 },
+ { "sge2ulp_fifo_perr_set0", 24, 1 },
+ { "cim2ulp_fifo_perr_set3", 23, 1 },
+ { "cim2ulp_fifo_perr_set2", 22, 1 },
+ { "cim2ulp_fifo_perr_set1", 21, 1 },
+ { "cim2ulp_fifo_perr_set0", 20, 1 },
+ { "CQE_fifo_perr_set3", 19, 1 },
+ { "CQE_fifo_perr_set2", 18, 1 },
+ { "CQE_fifo_perr_set1", 17, 1 },
+ { "CQE_fifo_perr_set0", 16, 1 },
+ { "pbl_fifo_perr_set3", 15, 1 },
+ { "pbl_fifo_perr_set2", 14, 1 },
+ { "pbl_fifo_perr_set1", 13, 1 },
+ { "pbl_fifo_perr_set0", 12, 1 },
+ { "cmd_fifo_perr_set3", 11, 1 },
+ { "cmd_fifo_perr_set2", 10, 1 },
+ { "cmd_fifo_perr_set1", 9, 1 },
+ { "cmd_fifo_perr_set0", 8, 1 },
+ { "lso_hdr_sram_perr_set3", 7, 1 },
+ { "lso_hdr_sram_perr_set2", 6, 1 },
+ { "lso_hdr_sram_perr_set1", 5, 1 },
+ { "lso_hdr_sram_perr_set0", 4, 1 },
+ { "ULP_TX_INT_CAUSE", 0x8dcc, 0 },
+ { "Pbl_bound_err_ch3", 31, 1 },
+ { "Pbl_bound_err_ch2", 30, 1 },
+ { "Pbl_bound_err_ch1", 29, 1 },
+ { "Pbl_bound_err_ch0", 28, 1 },
+ { "sge2ulp_fifo_perr_set3", 27, 1 },
+ { "sge2ulp_fifo_perr_set2", 26, 1 },
+ { "sge2ulp_fifo_perr_set1", 25, 1 },
+ { "sge2ulp_fifo_perr_set0", 24, 1 },
+ { "cim2ulp_fifo_perr_set3", 23, 1 },
+ { "cim2ulp_fifo_perr_set2", 22, 1 },
+ { "cim2ulp_fifo_perr_set1", 21, 1 },
+ { "cim2ulp_fifo_perr_set0", 20, 1 },
+ { "CQE_fifo_perr_set3", 19, 1 },
+ { "CQE_fifo_perr_set2", 18, 1 },
+ { "CQE_fifo_perr_set1", 17, 1 },
+ { "CQE_fifo_perr_set0", 16, 1 },
+ { "pbl_fifo_perr_set3", 15, 1 },
+ { "pbl_fifo_perr_set2", 14, 1 },
+ { "pbl_fifo_perr_set1", 13, 1 },
+ { "pbl_fifo_perr_set0", 12, 1 },
+ { "cmd_fifo_perr_set3", 11, 1 },
+ { "cmd_fifo_perr_set2", 10, 1 },
+ { "cmd_fifo_perr_set1", 9, 1 },
+ { "cmd_fifo_perr_set0", 8, 1 },
+ { "lso_hdr_sram_perr_set3", 7, 1 },
+ { "lso_hdr_sram_perr_set2", 6, 1 },
+ { "lso_hdr_sram_perr_set1", 5, 1 },
+ { "lso_hdr_sram_perr_set0", 4, 1 },
+ { "ULP_TX_PERR_ENABLE", 0x8dd0, 0 },
+ { "sge2ulp_fifo_perr_set3", 27, 1 },
+ { "sge2ulp_fifo_perr_set2", 26, 1 },
+ { "sge2ulp_fifo_perr_set1", 25, 1 },
+ { "sge2ulp_fifo_perr_set0", 24, 1 },
+ { "cim2ulp_fifo_perr_set3", 23, 1 },
+ { "cim2ulp_fifo_perr_set2", 22, 1 },
+ { "cim2ulp_fifo_perr_set1", 21, 1 },
+ { "cim2ulp_fifo_perr_set0", 20, 1 },
+ { "CQE_fifo_perr_set3", 19, 1 },
+ { "CQE_fifo_perr_set2", 18, 1 },
+ { "CQE_fifo_perr_set1", 17, 1 },
+ { "CQE_fifo_perr_set0", 16, 1 },
+ { "pbl_fifo_perr_set3", 15, 1 },
+ { "pbl_fifo_perr_set2", 14, 1 },
+ { "pbl_fifo_perr_set1", 13, 1 },
+ { "pbl_fifo_perr_set0", 12, 1 },
+ { "cmd_fifo_perr_set3", 11, 1 },
+ { "cmd_fifo_perr_set2", 10, 1 },
+ { "cmd_fifo_perr_set1", 9, 1 },
+ { "cmd_fifo_perr_set0", 8, 1 },
+ { "lso_hdr_sram_perr_set3", 7, 1 },
+ { "lso_hdr_sram_perr_set2", 6, 1 },
+ { "lso_hdr_sram_perr_set1", 5, 1 },
+ { "lso_hdr_sram_perr_set0", 4, 1 },
+ { "ULP_TX_TPT_LLIMIT", 0x8dd4, 0 },
+ { "ULP_TX_TPT_ULIMIT", 0x8dd8, 0 },
+ { "ULP_TX_PBL_LLIMIT", 0x8ddc, 0 },
+ { "ULP_TX_PBL_ULIMIT", 0x8de0, 0 },
+ { "ULP_TX_TLS_CTL", 0x8de4, 0 },
+ { "TlsPerrEn", 4, 1 },
+ { "TlsPathCtl", 3, 1 },
+ { "TlsDisableIFuse", 2, 1 },
+ { "TlsDisableCFuse", 1, 1 },
+ { "TlsDisable", 0, 1 },
+ { "ULP_TX_CPL_PACK_SIZE1", 0x8df8, 0 },
+ { "Ch3Size1", 24, 8 },
+ { "Ch2Size1", 16, 8 },
+ { "Ch1Size1", 8, 8 },
+ { "Ch0Size1", 0, 8 },
+ { "ULP_TX_CPL_PACK_SIZE2", 0x8dfc, 0 },
+ { "Ch3Size2", 24, 8 },
+ { "Ch2Size2", 16, 8 },
+ { "Ch1Size2", 8, 8 },
+ { "Ch0Size2", 0, 8 },
+ { "ULP_TX_ERR_MSG2CIM", 0x8e00, 0 },
+ { "ULP_TX_ERR_TABLE_BASE", 0x8e04, 0 },
+ { "ULP_TX_ERR_CNT_CH0", 0x8e10, 0 },
+ { "ULP_TX_ERR_CNT_CH1", 0x8e14, 0 },
+ { "ULP_TX_ERR_CNT_CH2", 0x8e18, 0 },
+ { "ULP_TX_ERR_CNT_CH3", 0x8e1c, 0 },
+ { "ULP_TX_FC_SOF", 0x8e20, 0 },
+ { "SOF_FS3", 24, 8 },
+ { "SOF_FS2", 16, 8 },
+ { "SOF_3", 8, 8 },
+ { "SOF_2", 0, 8 },
+ { "ULP_TX_FC_EOF", 0x8e24, 0 },
+ { "EOF_LS3", 24, 8 },
+ { "EOF_LS2", 16, 8 },
+ { "EOF_3", 8, 8 },
+ { "EOF_2", 0, 8 },
+ { "ULP_TX_CGEN_GLOBAL", 0x8e28, 0 },
+ { "ULP_TX_CGEN", 0x8e2c, 0 },
+ { "ULP_TX_CGEN_Storage", 8, 4 },
+ { "ULP_TX_CGEN_RDMA", 4, 4 },
+ { "ULP_TX_CGEN_Channel", 0, 4 },
+ { "ULP_TX_MEM_CFG", 0x8e30, 0 },
+ { "ULP_TX_PERR_INJECT_2", 0x8e34, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "ULP_TX_FPGA_CMD_CTRL", 0x8e38, 0 },
+ { "ULP_TX_FPGA_CMD_0", 0x8e3c, 0 },
+ { "ULP_TX_FPGA_CMD_1", 0x8e40, 0 },
+ { "ULP_TX_FPGA_CMD_2", 0x8e44, 0 },
+ { "ULP_TX_FPGA_CMD_3", 0x8e48, 0 },
+ { "ULP_TX_FPGA_CMD_4", 0x8e4c, 0 },
+ { "ULP_TX_FPGA_CMD_5", 0x8e50, 0 },
+ { "ULP_TX_FPGA_CMD_6", 0x8e54, 0 },
+ { "ULP_TX_FPGA_CMD_7", 0x8e58, 0 },
+ { "ULP_TX_FPGA_CMD_8", 0x8e5c, 0 },
+ { "ULP_TX_FPGA_CMD_9", 0x8e60, 0 },
+ { "ULP_TX_FPGA_CMD_10", 0x8e64, 0 },
+ { "ULP_TX_FPGA_CMD_11", 0x8e68, 0 },
+ { "ULP_TX_FPGA_CMD_12", 0x8e6c, 0 },
+ { "ULP_TX_FPGA_CMD_13", 0x8e70, 0 },
+ { "ULP_TX_FPGA_CMD_14", 0x8e74, 0 },
+ { "ULP_TX_FPGA_CMD_15", 0x8e78, 0 },
+ { "ULP_TX_INT_ENABLE_2", 0x8e7c, 0 },
+ { "edma_in_fifo_perr_set3", 31, 1 },
+ { "edma_in_fifo_perr_set2", 30, 1 },
+ { "edma_in_fifo_perr_set1", 29, 1 },
+ { "edma_in_fifo_perr_set0", 28, 1 },
+ { "align_ctl_fifo_perr_set3", 27, 1 },
+ { "align_ctl_fifo_perr_set2", 26, 1 },
+ { "align_ctl_fifo_perr_set1", 25, 1 },
+ { "align_ctl_fifo_perr_set0", 24, 1 },
+ { "sge_fifo_perr_set3", 23, 1 },
+ { "sge_fifo_perr_set2", 22, 1 },
+ { "sge_fifo_perr_set1", 21, 1 },
+ { "sge_fifo_perr_set0", 20, 1 },
+ { "stag_fifo_perr_set3", 19, 1 },
+ { "stag_fifo_perr_set2", 18, 1 },
+ { "stag_fifo_perr_set1", 17, 1 },
+ { "stag_fifo_perr_set0", 16, 1 },
+ { "map_fifo_perr_set3", 15, 1 },
+ { "map_fifo_perr_set2", 14, 1 },
+ { "map_fifo_perr_set1", 13, 1 },
+ { "map_fifo_perr_set0", 12, 1 },
+ { "dma_fifo_perr_set3", 11, 1 },
+ { "dma_fifo_perr_set2", 10, 1 },
+ { "dma_fifo_perr_set1", 9, 1 },
+ { "dma_fifo_perr_set0", 8, 1 },
+ { "fso_hdr_sram_perr_set3", 7, 1 },
+ { "fso_hdr_sram_perr_set2", 6, 1 },
+ { "fso_hdr_sram_perr_set1", 5, 1 },
+ { "fso_hdr_sram_perr_set0", 4, 1 },
+ { "t10_pi_sram_perr_set3", 3, 1 },
+ { "t10_pi_sram_perr_set2", 2, 1 },
+ { "t10_pi_sram_perr_set1", 1, 1 },
+ { "t10_pi_sram_perr_set0", 0, 1 },
+ { "ULP_TX_INT_CAUSE_2", 0x8e80, 0 },
+ { "edma_in_fifo_perr_set3", 31, 1 },
+ { "edma_in_fifo_perr_set2", 30, 1 },
+ { "edma_in_fifo_perr_set1", 29, 1 },
+ { "edma_in_fifo_perr_set0", 28, 1 },
+ { "align_ctl_fifo_perr_set3", 27, 1 },
+ { "align_ctl_fifo_perr_set2", 26, 1 },
+ { "align_ctl_fifo_perr_set1", 25, 1 },
+ { "align_ctl_fifo_perr_set0", 24, 1 },
+ { "sge_fifo_perr_set3", 23, 1 },
+ { "sge_fifo_perr_set2", 22, 1 },
+ { "sge_fifo_perr_set1", 21, 1 },
+ { "sge_fifo_perr_set0", 20, 1 },
+ { "stag_fifo_perr_set3", 19, 1 },
+ { "stag_fifo_perr_set2", 18, 1 },
+ { "stag_fifo_perr_set1", 17, 1 },
+ { "stag_fifo_perr_set0", 16, 1 },
+ { "map_fifo_perr_set3", 15, 1 },
+ { "map_fifo_perr_set2", 14, 1 },
+ { "map_fifo_perr_set1", 13, 1 },
+ { "map_fifo_perr_set0", 12, 1 },
+ { "dma_fifo_perr_set3", 11, 1 },
+ { "dma_fifo_perr_set2", 10, 1 },
+ { "dma_fifo_perr_set1", 9, 1 },
+ { "dma_fifo_perr_set0", 8, 1 },
+ { "fso_hdr_sram_perr_set3", 7, 1 },
+ { "fso_hdr_sram_perr_set2", 6, 1 },
+ { "fso_hdr_sram_perr_set1", 5, 1 },
+ { "fso_hdr_sram_perr_set0", 4, 1 },
+ { "t10_pi_sram_perr_set3", 3, 1 },
+ { "t10_pi_sram_perr_set2", 2, 1 },
+ { "t10_pi_sram_perr_set1", 1, 1 },
+ { "t10_pi_sram_perr_set0", 0, 1 },
+ { "ULP_TX_PERR_ENABLE_2", 0x8e84, 0 },
+ { "edma_in_fifo_perr_set3", 31, 1 },
+ { "edma_in_fifo_perr_set2", 30, 1 },
+ { "edma_in_fifo_perr_set1", 29, 1 },
+ { "edma_in_fifo_perr_set0", 28, 1 },
+ { "align_ctl_fifo_perr_set3", 27, 1 },
+ { "align_ctl_fifo_perr_set2", 26, 1 },
+ { "align_ctl_fifo_perr_set1", 25, 1 },
+ { "align_ctl_fifo_perr_set0", 24, 1 },
+ { "sge_fifo_perr_set3", 23, 1 },
+ { "sge_fifo_perr_set2", 22, 1 },
+ { "sge_fifo_perr_set1", 21, 1 },
+ { "sge_fifo_perr_set0", 20, 1 },
+ { "stag_fifo_perr_set3", 19, 1 },
+ { "stag_fifo_perr_set2", 18, 1 },
+ { "stag_fifo_perr_set1", 17, 1 },
+ { "stag_fifo_perr_set0", 16, 1 },
+ { "map_fifo_perr_set3", 15, 1 },
+ { "map_fifo_perr_set2", 14, 1 },
+ { "map_fifo_perr_set1", 13, 1 },
+ { "map_fifo_perr_set0", 12, 1 },
+ { "dma_fifo_perr_set3", 11, 1 },
+ { "dma_fifo_perr_set2", 10, 1 },
+ { "dma_fifo_perr_set1", 9, 1 },
+ { "dma_fifo_perr_set0", 8, 1 },
+ { "fso_hdr_sram_perr_set3", 7, 1 },
+ { "fso_hdr_sram_perr_set2", 6, 1 },
+ { "fso_hdr_sram_perr_set1", 5, 1 },
+ { "fso_hdr_sram_perr_set0", 4, 1 },
+ { "t10_pi_sram_perr_set3", 3, 1 },
+ { "t10_pi_sram_perr_set2", 2, 1 },
+ { "t10_pi_sram_perr_set1", 1, 1 },
+ { "t10_pi_sram_perr_set0", 0, 1 },
+ { "ULP_TX_SE_CNT_ERR", 0x8ea0, 0 },
+ { "ERR_CH3", 12, 4 },
+ { "ERR_CH2", 8, 4 },
+ { "ERR_CH1", 4, 4 },
+ { "ERR_CH0", 0, 4 },
+ { "ULP_TX_SE_CNT_CLR", 0x8ea4, 0 },
+ { "CLR_DROP", 16, 4 },
+ { "CLR_CH3", 12, 4 },
+ { "CLR_CH2", 8, 4 },
+ { "CLR_CH1", 4, 4 },
+ { "CLR_CH0", 0, 4 },
+ { "ULP_TX_SE_CNT_CH0", 0x8ea8, 0 },
+ { "SOP_CNT_ULP2TP", 28, 4 },
+ { "EOP_CNT_ULP2TP", 24, 4 },
+ { "SOP_CNT_LSO_IN", 20, 4 },
+ { "EOP_CNT_LSO_IN", 16, 4 },
+ { "SOP_CNT_ALG_IN", 12, 4 },
+ { "EOP_CNT_ALG_IN", 8, 4 },
+ { "SOP_CNT_CIM2ULP", 4, 4 },
+ { "EOP_CNT_CIM2ULP", 0, 4 },
+ { "ULP_TX_SE_CNT_CH1", 0x8eac, 0 },
+ { "SOP_CNT_ULP2TP", 28, 4 },
+ { "EOP_CNT_ULP2TP", 24, 4 },
+ { "SOP_CNT_LSO_IN", 20, 4 },
+ { "EOP_CNT_LSO_IN", 16, 4 },
+ { "SOP_CNT_ALG_IN", 12, 4 },
+ { "EOP_CNT_ALG_IN", 8, 4 },
+ { "SOP_CNT_CIM2ULP", 4, 4 },
+ { "EOP_CNT_CIM2ULP", 0, 4 },
+ { "ULP_TX_SE_CNT_CH2", 0x8eb0, 0 },
+ { "SOP_CNT_ULP2TP", 28, 4 },
+ { "EOP_CNT_ULP2TP", 24, 4 },
+ { "SOP_CNT_LSO_IN", 20, 4 },
+ { "EOP_CNT_LSO_IN", 16, 4 },
+ { "SOP_CNT_ALG_IN", 12, 4 },
+ { "EOP_CNT_ALG_IN", 8, 4 },
+ { "SOP_CNT_CIM2ULP", 4, 4 },
+ { "EOP_CNT_CIM2ULP", 0, 4 },
+ { "ULP_TX_SE_CNT_CH3", 0x8eb4, 0 },
+ { "SOP_CNT_ULP2TP", 28, 4 },
+ { "EOP_CNT_ULP2TP", 24, 4 },
+ { "SOP_CNT_LSO_IN", 20, 4 },
+ { "EOP_CNT_LSO_IN", 16, 4 },
+ { "SOP_CNT_ALG_IN", 12, 4 },
+ { "EOP_CNT_ALG_IN", 8, 4 },
+ { "SOP_CNT_CIM2ULP", 4, 4 },
+ { "EOP_CNT_CIM2ULP", 0, 4 },
+ { "ULP_TX_DROP_CNT", 0x8eb8, 0 },
+ { "DROP_INVLD_MC_CH3", 28, 4 },
+ { "DROP_INVLD_MC_CH2", 24, 4 },
+ { "DROP_INVLD_MC_CH1", 20, 4 },
+ { "DROP_INVLD_MC_CH0", 16, 4 },
+ { "DROP_CH3", 12, 4 },
+ { "DROP_CH2", 8, 4 },
+ { "DROP_CH1", 4, 4 },
+ { "DROP_CH0", 0, 4 },
+ { "ULP_TX_CSU_REVISION", 0x8ebc, 0 },
+ { "ULP_TX_LA_RDPTR_0", 0x8ec0, 0 },
+ { "ULP_TX_LA_RDDATA_0", 0x8ec4, 0 },
+ { "ULP_TX_LA_WRPTR_0", 0x8ec8, 0 },
+ { "ULP_TX_LA_RESERVED_0", 0x8ecc, 0 },
+ { "ULP_TX_LA_RDPTR_1", 0x8ed0, 0 },
+ { "ULP_TX_LA_RDDATA_1", 0x8ed4, 0 },
+ { "ULP_TX_LA_WRPTR_1", 0x8ed8, 0 },
+ { "ULP_TX_LA_RESERVED_1", 0x8edc, 0 },
+ { "ULP_TX_LA_RDPTR_2", 0x8ee0, 0 },
+ { "ULP_TX_LA_RDDATA_2", 0x8ee4, 0 },
+ { "ULP_TX_LA_WRPTR_2", 0x8ee8, 0 },
+ { "ULP_TX_LA_RESERVED_2", 0x8eec, 0 },
+ { "ULP_TX_LA_RDPTR_3", 0x8ef0, 0 },
+ { "ULP_TX_LA_RDDATA_3", 0x8ef4, 0 },
+ { "ULP_TX_LA_WRPTR_3", 0x8ef8, 0 },
+ { "ULP_TX_LA_RESERVED_3", 0x8efc, 0 },
+ { "ULP_TX_LA_RDPTR_4", 0x8f00, 0 },
+ { "ULP_TX_LA_RDDATA_4", 0x8f04, 0 },
+ { "ULP_TX_LA_WRPTR_4", 0x8f08, 0 },
+ { "ULP_TX_LA_RESERVED_4", 0x8f0c, 0 },
+ { "ULP_TX_LA_RDPTR_5", 0x8f10, 0 },
+ { "ULP_TX_LA_RDDATA_5", 0x8f14, 0 },
+ { "ULP_TX_LA_WRPTR_5", 0x8f18, 0 },
+ { "ULP_TX_LA_RESERVED_5", 0x8f1c, 0 },
+ { "ULP_TX_LA_RDPTR_6", 0x8f20, 0 },
+ { "ULP_TX_LA_RDDATA_6", 0x8f24, 0 },
+ { "ULP_TX_LA_WRPTR_6", 0x8f28, 0 },
+ { "ULP_TX_LA_RESERVED_6", 0x8f2c, 0 },
+ { "ULP_TX_LA_RDPTR_7", 0x8f30, 0 },
+ { "ULP_TX_LA_RDDATA_7", 0x8f34, 0 },
+ { "ULP_TX_LA_WRPTR_7", 0x8f38, 0 },
+ { "ULP_TX_LA_RESERVED_7", 0x8f3c, 0 },
+ { "ULP_TX_LA_RDPTR_8", 0x8f40, 0 },
+ { "ULP_TX_LA_RDDATA_8", 0x8f44, 0 },
+ { "ULP_TX_LA_WRPTR_8", 0x8f48, 0 },
+ { "ULP_TX_LA_RESERVED_8", 0x8f4c, 0 },
+ { "ULP_TX_LA_RDPTR_9", 0x8f50, 0 },
+ { "ULP_TX_LA_RDDATA_9", 0x8f54, 0 },
+ { "ULP_TX_LA_WRPTR_9", 0x8f58, 0 },
+ { "ULP_TX_LA_RESERVED_9", 0x8f5c, 0 },
+ { "ULP_TX_LA_RDPTR_10", 0x8f60, 0 },
+ { "ULP_TX_LA_RDDATA_10", 0x8f64, 0 },
+ { "ULP_TX_LA_WRPTR_10", 0x8f68, 0 },
+ { "ULP_TX_LA_RESERVED_10", 0x8f6c, 0 },
+ { "ULP_TX_ASIC_DEBUG_CTRL", 0x8f70, 0 },
+ { "ULP_TX_CPL_TX_DATA_FLAGS_MASK", 0x8f88, 0 },
+ { "bypass_first", 26, 1 },
+ { "bypass_middle", 25, 1 },
+ { "bypass_last", 24, 1 },
+ { "push_first", 22, 1 },
+ { "push_middle", 21, 1 },
+ { "push_last", 20, 1 },
+ { "save_first", 18, 1 },
+ { "save_middle", 17, 1 },
+ { "save_last", 16, 1 },
+ { "flush_first", 14, 1 },
+ { "flush_middle", 13, 1 },
+ { "flush_last", 12, 1 },
+ { "urgent_first", 10, 1 },
+ { "urgent_middle", 9, 1 },
+ { "urgent_last", 8, 1 },
+ { "more_first", 6, 1 },
+ { "more_middle", 5, 1 },
+ { "more_last", 4, 1 },
+ { "shove_first", 2, 1 },
+ { "shove_middle", 1, 1 },
+ { "shove_last", 0, 1 },
+ { "ULP_TX_TLS_IND_CMD", 0x8fb8, 0 },
+ { "ULP_TX_TLS_IND_DATA", 0x8fbc, 0 },
+ { "ULP_TX_ASIC_DEBUG_0", 0x8f74, 0 },
+ { "ULP_TX_ASIC_DEBUG_1", 0x8f78, 0 },
+ { "ULP_TX_ASIC_DEBUG_2", 0x8f7c, 0 },
+ { "ULP_TX_ASIC_DEBUG_3", 0x8f80, 0 },
+ { "ULP_TX_ASIC_DEBUG_4", 0x8f84, 0 },
+ { NULL }
+};
+
+struct reg_info t6_pm_rx_regs[] = {
+ { "PM_RX_CFG", 0x8fc0, 0 },
+ { "ch1_output", 27, 5 },
+ { "strobe1", 16, 1 },
+ { "ch1_input", 11, 5 },
+ { "ch2_input", 6, 5 },
+ { "ch3_input", 1, 5 },
+ { "strobe0", 0, 1 },
+ { "PM_RX_MODE", 0x8fc4, 0 },
+ { "use_bundle_len", 4, 1 },
+ { "stat_to_ch", 3, 1 },
+ { "stat_from_ch", 1, 2 },
+ { "prefetch_enable", 0, 1 },
+ { "PM_RX_STAT_CONFIG", 0x8fc8, 0 },
+ { "PM_RX_STAT_COUNT", 0x8fcc, 0 },
+ { "PM_RX_DBG_CTRL", 0x8fd0, 0 },
+ { "OspiWrBusy", 21, 2 },
+ { "IspiWrBusy", 17, 4 },
+ { "PMDbgAddr", 0, 17 },
+ { "PM_RX_DBG_DATA", 0x8fd4, 0 },
+ { "PM_RX_INT_ENABLE", 0x8fd8, 0 },
+ { "ospi_overflow1", 28, 1 },
+ { "ospi_overflow0", 27, 1 },
+ { "ma_intf_sdc_err", 26, 1 },
+ { "bundle_len_ParErr", 25, 1 },
+ { "bundle_len_ovfl", 24, 1 },
+ { "sdc_err", 23, 1 },
+ { "zero_e_cmd_error", 22, 1 },
+ { "iespi0_fifo2x_Rx_framing_error", 21, 1 },
+ { "iespi1_fifo2x_Rx_framing_error", 20, 1 },
+ { "iespi2_fifo2x_Rx_framing_error", 19, 1 },
+ { "iespi3_fifo2x_Rx_framing_error", 18, 1 },
+ { "iespi0_Rx_framing_error", 17, 1 },
+ { "iespi1_Rx_framing_error", 16, 1 },
+ { "iespi2_Rx_framing_error", 15, 1 },
+ { "iespi3_Rx_framing_error", 14, 1 },
+ { "iespi0_Tx_framing_error", 13, 1 },
+ { "iespi1_Tx_framing_error", 12, 1 },
+ { "iespi2_Tx_framing_error", 11, 1 },
+ { "iespi3_Tx_framing_error", 10, 1 },
+ { "ocspi0_Rx_framing_error", 9, 1 },
+ { "ocspi1_Rx_framing_error", 8, 1 },
+ { "ocspi0_Tx_framing_error", 7, 1 },
+ { "ocspi1_Tx_framing_error", 6, 1 },
+ { "ocspi0_ofifo2x_Tx_framing_error", 5, 1 },
+ { "ocspi1_ofifo2x_Tx_framing_error", 4, 1 },
+ { "ocspi_par_error", 3, 1 },
+ { "db_options_par_error", 2, 1 },
+ { "iespi_par_error", 1, 1 },
+ { "e_pcmd_par_error", 0, 1 },
+ { "PM_RX_INT_CAUSE", 0x8fdc, 0 },
+ { "ospi_overflow1", 28, 1 },
+ { "ospi_overflow0", 27, 1 },
+ { "ma_intf_sdc_err", 26, 1 },
+ { "bundle_len_ParErr", 25, 1 },
+ { "bundle_len_ovfl", 24, 1 },
+ { "sdc_err", 23, 1 },
+ { "zero_e_cmd_error", 22, 1 },
+ { "iespi0_fifo2x_Rx_framing_error", 21, 1 },
+ { "iespi1_fifo2x_Rx_framing_error", 20, 1 },
+ { "iespi2_fifo2x_Rx_framing_error", 19, 1 },
+ { "iespi3_fifo2x_Rx_framing_error", 18, 1 },
+ { "iespi0_Rx_framing_error", 17, 1 },
+ { "iespi1_Rx_framing_error", 16, 1 },
+ { "iespi2_Rx_framing_error", 15, 1 },
+ { "iespi3_Rx_framing_error", 14, 1 },
+ { "iespi0_Tx_framing_error", 13, 1 },
+ { "iespi1_Tx_framing_error", 12, 1 },
+ { "iespi2_Tx_framing_error", 11, 1 },
+ { "iespi3_Tx_framing_error", 10, 1 },
+ { "ocspi0_Rx_framing_error", 9, 1 },
+ { "ocspi1_Rx_framing_error", 8, 1 },
+ { "ocspi0_Tx_framing_error", 7, 1 },
+ { "ocspi1_Tx_framing_error", 6, 1 },
+ { "ocspi0_ofifo2x_Tx_framing_error", 5, 1 },
+ { "ocspi1_ofifo2x_Tx_framing_error", 4, 1 },
+ { "ocspi_par_error", 3, 1 },
+ { "db_options_par_error", 2, 1 },
+ { "iespi_par_error", 1, 1 },
+ { "e_pcmd_par_error", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_pm_tx_regs[] = {
+ { "PM_TX_CFG", 0x8fe0, 0 },
+ { "ch1_output", 27, 5 },
+ { "ch2_output", 22, 5 },
+ { "ch3_output", 17, 5 },
+ { "strobe1", 16, 1 },
+ { "ch1_input", 11, 5 },
+ { "ch2_input", 6, 5 },
+ { "ch3_input", 1, 5 },
+ { "strobe0", 0, 1 },
+ { "PM_TX_MODE", 0x8fe4, 0 },
+ { "cong_thresh3", 25, 7 },
+ { "cong_thresh2", 18, 7 },
+ { "cong_thresh1", 11, 7 },
+ { "cong_thresh0", 4, 7 },
+ { "use_bundle_len", 3, 1 },
+ { "stat_channel", 1, 2 },
+ { "prefetch_enable", 0, 1 },
+ { "PM_TX_STAT_CONFIG", 0x8fe8, 0 },
+ { "PM_TX_STAT_COUNT", 0x8fec, 0 },
+ { "PM_TX_DBG_CTRL", 0x8ff0, 0 },
+ { "OspiWrBusy", 21, 4 },
+ { "IspiWrBusy", 17, 4 },
+ { "PMDbgAddr", 0, 17 },
+ { "PM_TX_DBG_DATA", 0x8ff4, 0 },
+ { "PM_TX_INT_ENABLE", 0x8ff8, 0 },
+ { "pcmd_len_ovfl0", 31, 1 },
+ { "pcmd_len_ovfl1", 30, 1 },
+ { "pcmd_len_ovfl2", 29, 1 },
+ { "zero_c_cmd_error", 28, 1 },
+ { "icspi0_fifo2x_Rx_framing_error", 27, 1 },
+ { "icspi1_fifo2x_Rx_framing_error", 26, 1 },
+ { "icspi2_fifo2x_Rx_framing_error", 25, 1 },
+ { "icspi3_fifo2x_Rx_framing_error", 24, 1 },
+ { "icspi0_Rx_framing_error", 23, 1 },
+ { "icspi1_Rx_framing_error", 22, 1 },
+ { "icspi2_Rx_framing_error", 21, 1 },
+ { "icspi3_Rx_framing_error", 20, 1 },
+ { "icspi0_Tx_framing_error", 19, 1 },
+ { "icspi1_Tx_framing_error", 18, 1 },
+ { "icspi2_Tx_framing_error", 17, 1 },
+ { "icspi3_Tx_framing_error", 16, 1 },
+ { "oespi0_Rx_framing_error", 15, 1 },
+ { "oespi1_Rx_framing_error", 14, 1 },
+ { "oespi2_Rx_framing_error", 13, 1 },
+ { "oespi3_Rx_framing_error", 12, 1 },
+ { "oespi0_Tx_framing_error", 11, 1 },
+ { "oespi1_Tx_framing_error", 10, 1 },
+ { "oespi2_Tx_framing_error", 9, 1 },
+ { "oespi3_Tx_framing_error", 8, 1 },
+ { "oespi0_ofifo2x_Tx_framing_error", 7, 1 },
+ { "oespi1_ofifo2x_Tx_framing_error", 6, 1 },
+ { "oespi2_ofifo2x_Tx_framing_error", 5, 1 },
+ { "oespi3_ofifo2x_Tx_framing_error", 4, 1 },
+ { "oespi_par_error", 3, 1 },
+ { "db_options_par_error", 2, 1 },
+ { "icspi_par_error", 1, 1 },
+ { "c_pcmd_par_error", 0, 1 },
+ { "PM_TX_INT_CAUSE", 0x8ffc, 0 },
+ { "pcmd_len_ovfl0", 31, 1 },
+ { "pcmd_len_ovfl1", 30, 1 },
+ { "pcmd_len_ovfl2", 29, 1 },
+ { "zero_c_cmd_error", 28, 1 },
+ { "icspi0_fifo2x_Rx_framing_error", 27, 1 },
+ { "icspi1_fifo2x_Rx_framing_error", 26, 1 },
+ { "icspi2_fifo2x_Rx_framing_error", 25, 1 },
+ { "icspi3_fifo2x_Rx_framing_error", 24, 1 },
+ { "icspi0_Rx_framing_error", 23, 1 },
+ { "icspi1_Rx_framing_error", 22, 1 },
+ { "icspi2_Rx_framing_error", 21, 1 },
+ { "icspi3_Rx_framing_error", 20, 1 },
+ { "icspi0_Tx_framing_error", 19, 1 },
+ { "icspi1_Tx_framing_error", 18, 1 },
+ { "icspi2_Tx_framing_error", 17, 1 },
+ { "icspi3_Tx_framing_error", 16, 1 },
+ { "oespi0_Rx_framing_error", 15, 1 },
+ { "oespi1_Rx_framing_error", 14, 1 },
+ { "oespi2_Rx_framing_error", 13, 1 },
+ { "oespi3_Rx_framing_error", 12, 1 },
+ { "oespi0_Tx_framing_error", 11, 1 },
+ { "oespi1_Tx_framing_error", 10, 1 },
+ { "oespi2_Tx_framing_error", 9, 1 },
+ { "oespi3_Tx_framing_error", 8, 1 },
+ { "oespi0_ofifo2x_Tx_framing_error", 7, 1 },
+ { "oespi1_ofifo2x_Tx_framing_error", 6, 1 },
+ { "oespi2_ofifo2x_Tx_framing_error", 5, 1 },
+ { "oespi3_ofifo2x_Tx_framing_error", 4, 1 },
+ { "ospi_or_bundle_len_par_err", 3, 1 },
+ { "db_options_par_error", 2, 1 },
+ { "icspi_par_error", 1, 1 },
+ { "c_pcmd_par_error", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_mps_regs[] = {
+ { "MPS_CMN_CTL", 0x9000, 0 },
+ { "TX_PORT_STATS_MODE", 8, 1 },
+ { "T5Mode", 7, 1 },
+ { "SpeedMode", 5, 2 },
+ { "LpbkCrdtCtrl", 4, 1 },
+ { "Detect8023", 3, 1 },
+ { "VFDirectAccess", 2, 1 },
+ { "NumPorts", 0, 2 },
+ { "MPS_INT_ENABLE", 0x9004, 0 },
+ { "StatIntEnb", 5, 1 },
+ { "TxIntEnb", 4, 1 },
+ { "RxIntEnb", 3, 1 },
+ { "TrcIntEnb", 2, 1 },
+ { "ClsIntEnb", 1, 1 },
+ { "PLIntEnb", 0, 1 },
+ { "MPS_INT_CAUSE", 0x9008, 0 },
+ { "StatInt", 5, 1 },
+ { "TxInt", 4, 1 },
+ { "RxInt", 3, 1 },
+ { "TrcInt", 2, 1 },
+ { "ClsInt", 1, 1 },
+ { "PLInt", 0, 1 },
+ { "MPS_CGEN_GLOBAL", 0x900c, 0 },
+ { "MPS_VF_TX_CTL_31_0", 0x9010, 0 },
+ { "MPS_VF_TX_CTL_63_32", 0x9014, 0 },
+ { "MPS_VF_TX_CTL_95_64", 0x9018, 0 },
+ { "MPS_VF_TX_CTL_127_96", 0x901c, 0 },
+ { "MPS_VF_TX_CTL_159_128", 0x9100, 0 },
+ { "MPS_VF_TX_CTL_191_160", 0x9104, 0 },
+ { "MPS_VF_TX_CTL_223_192", 0x9108, 0 },
+ { "MPS_VF_TX_CTL_255_224", 0x910c, 0 },
+ { "MPS_VF_RX_CTL_31_0", 0x9020, 0 },
+ { "MPS_VF_RX_CTL_63_32", 0x9024, 0 },
+ { "MPS_VF_RX_CTL_95_64", 0x9028, 0 },
+ { "MPS_VF_RX_CTL_127_96", 0x902c, 0 },
+ { "MPS_VF_RX_CTL_159_128", 0x9110, 0 },
+ { "MPS_VF_RX_CTL_191_160", 0x9114, 0 },
+ { "MPS_VF_RX_CTL_223_192", 0x9118, 0 },
+ { "MPS_VF_RX_CTL_255_224", 0x911c, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP0", 0x9030, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP1", 0x9034, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP2", 0x9038, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP3", 0x903c, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP0", 0x9040, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP1", 0x9044, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP2", 0x9048, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP3", 0x904c, 0 },
+ { "MPS_TP_CSIDE_MUX_CTL_P0", 0x9050, 0 },
+ { "MPS_TP_CSIDE_MUX_CTL_P1", 0x9054, 0 },
+ { "MPS_WOL_CTL_MODE", 0x9058, 0 },
+ { "MPS_FPGA_DEBUG", 0x9060, 0 },
+ { "FPGA_PTP_PORT", 9, 2 },
+ { "LPBK_EN", 8, 1 },
+ { "CH_MAP1", 2, 2 },
+ { "CH_MAP0", 0, 2 },
+ { "MPS_DEBUG_CTL", 0x9068, 0 },
+ { "DbgModeCtl_H", 11, 1 },
+ { "DbgSel_H", 6, 5 },
+ { "DbgModeCtl_L", 5, 1 },
+ { "DbgSel_L", 0, 5 },
+ { "MPS_DEBUG_DATA_REG_L", 0x906c, 0 },
+ { "MPS_DEBUG_DATA_REG_H", 0x9070, 0 },
+ { "MPS_TOP_SPARE", 0x9074, 0 },
+ { "TopSpare", 8, 24 },
+ { "oVlanSelLpbk3", 7, 1 },
+ { "oVlanSelLpbk2", 6, 1 },
+ { "oVlanSelLpbk1", 5, 1 },
+ { "oVlanSelLpbk0", 4, 1 },
+ { "oVlanSelMac3", 3, 1 },
+ { "oVlanSelMac2", 2, 1 },
+ { "oVlanSelMac1", 1, 1 },
+ { "oVlanSelMac0", 0, 1 },
+ { "MPS_BUILD_REVISION", 0x9078, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH0", 0x907c, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH1", 0x9080, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH2", 0x9084, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH3", 0x9088, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH4", 0x908c, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH5", 0x9090, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH6", 0x9094, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH7", 0x9098, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH8", 0x909c, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH9", 0x90a0, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH10", 0x90a4, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH11", 0x90a8, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH12", 0x90ac, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH13", 0x90b0, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH14", 0x90b4, 0 },
+ { "MPS_TX_PAUSE_DURATION_BUF_GRP_TH15", 0x90b8, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH0", 0x90bc, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH1", 0x90c0, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH2", 0x90c4, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH3", 0x90c8, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH4", 0x90cc, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH5", 0x90d0, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH6", 0x90d4, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH7", 0x90d8, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH8", 0x90dc, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH9", 0x90e0, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH10", 0x90e4, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH11", 0x90e8, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH12", 0x90ec, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH13", 0x90f0, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH14", 0x90f4, 0 },
+ { "MPS_TX_PAUSE_RETRANS_BUF_GRP_TH15", 0x90f8, 0 },
+ { "MPS_FPGA_BIST_CFG_P0", 0x9120, 0 },
+ { "AddrMask", 16, 16 },
+ { "BaseAddr", 0, 16 },
+ { "MPS_FPGA_BIST_CFG_P1", 0x9124, 0 },
+ { "AddrMask", 16, 16 },
+ { "BaseAddr", 0, 16 },
+ { "MPS_PORT_CTL", 0x30000, 0 },
+ { "LpbkEn", 31, 1 },
+ { "TxEn", 30, 1 },
+ { "RxEn", 29, 1 },
+ { "PPPEn", 28, 1 },
+ { "FCSStripEn", 27, 1 },
+ { "PPPAndPause", 26, 1 },
+ { "PrioPPPEnMap", 16, 8 },
+ { "MPS_PORT_PAUSE_CTL", 0x30004, 0 },
+ { "MPS_PORT_TX_PAUSE_CTL", 0x30008, 0 },
+ { "RegSendOff", 24, 8 },
+ { "RegSendOn", 16, 8 },
+ { "SgeSendEn", 8, 8 },
+ { "RxSendEn", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_CTL2", 0x3000c, 0 },
+ { "MPS_PORT_RX_PAUSE_CTL", 0x30010, 0 },
+ { "RegHaltOn", 8, 8 },
+ { "RxHaltEn", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_STATUS", 0x30014, 0 },
+ { "RegSending", 16, 8 },
+ { "SgeSending", 8, 8 },
+ { "RxSending", 0, 8 },
+ { "MPS_PORT_RX_PAUSE_STATUS", 0x30018, 0 },
+ { "RegHalted", 8, 8 },
+ { "RxHalted", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_DEST_L", 0x3001c, 0 },
+ { "MPS_PORT_TX_PAUSE_DEST_H", 0x30020, 0 },
+ { "MPS_PORT_TX_PAUSE_SOURCE_L", 0x30024, 0 },
+ { "MPS_PORT_TX_PAUSE_SOURCE_H", 0x30028, 0 },
+ { "MPS_PORT_PRTY_BUFFER_GROUP_MAP", 0x3002c, 0 },
+ { "Prty7", 14, 2 },
+ { "Prty6", 12, 2 },
+ { "Prty5", 10, 2 },
+ { "Prty4", 8, 2 },
+ { "Prty3", 6, 2 },
+ { "Prty2", 4, 2 },
+ { "Prty1", 2, 2 },
+ { "Prty0", 0, 2 },
+ { "MPS_PORT_PRTY_BUFFER_GROUP_TH_MAP", 0x30030, 0 },
+ { "Prty7", 28, 4 },
+ { "Prty6", 24, 4 },
+ { "Prty5", 20, 4 },
+ { "Prty4", 16, 4 },
+ { "Prty3", 12, 4 },
+ { "Prty2", 8, 4 },
+ { "Prty1", 4, 4 },
+ { "Prty0", 0, 4 },
+ { "MPS_PORT_CTL", 0x34000, 0 },
+ { "LpbkEn", 31, 1 },
+ { "TxEn", 30, 1 },
+ { "RxEn", 29, 1 },
+ { "PPPEn", 28, 1 },
+ { "FCSStripEn", 27, 1 },
+ { "PPPAndPause", 26, 1 },
+ { "PrioPPPEnMap", 16, 8 },
+ { "MPS_PORT_PAUSE_CTL", 0x34004, 0 },
+ { "MPS_PORT_TX_PAUSE_CTL", 0x34008, 0 },
+ { "RegSendOff", 24, 8 },
+ { "RegSendOn", 16, 8 },
+ { "SgeSendEn", 8, 8 },
+ { "RxSendEn", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_CTL2", 0x3400c, 0 },
+ { "MPS_PORT_RX_PAUSE_CTL", 0x34010, 0 },
+ { "RegHaltOn", 8, 8 },
+ { "RxHaltEn", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_STATUS", 0x34014, 0 },
+ { "RegSending", 16, 8 },
+ { "SgeSending", 8, 8 },
+ { "RxSending", 0, 8 },
+ { "MPS_PORT_RX_PAUSE_STATUS", 0x34018, 0 },
+ { "RegHalted", 8, 8 },
+ { "RxHalted", 0, 8 },
+ { "MPS_PORT_TX_PAUSE_DEST_L", 0x3401c, 0 },
+ { "MPS_PORT_TX_PAUSE_DEST_H", 0x34020, 0 },
+ { "MPS_PORT_TX_PAUSE_SOURCE_L", 0x34024, 0 },
+ { "MPS_PORT_TX_PAUSE_SOURCE_H", 0x34028, 0 },
+ { "MPS_PORT_PRTY_BUFFER_GROUP_MAP", 0x3402c, 0 },
+ { "Prty7", 14, 2 },
+ { "Prty6", 12, 2 },
+ { "Prty5", 10, 2 },
+ { "Prty4", 8, 2 },
+ { "Prty3", 6, 2 },
+ { "Prty2", 4, 2 },
+ { "Prty1", 2, 2 },
+ { "Prty0", 0, 2 },
+ { "MPS_PORT_PRTY_BUFFER_GROUP_TH_MAP", 0x34030, 0 },
+ { "Prty7", 28, 4 },
+ { "Prty6", 24, 4 },
+ { "Prty5", 20, 4 },
+ { "Prty4", 16, 4 },
+ { "Prty3", 12, 4 },
+ { "Prty2", 8, 4 },
+ { "Prty1", 4, 4 },
+ { "Prty0", 0, 4 },
+ { "MPS_PF_CTL", 0x1e2c0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1e6c0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1eac0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1eec0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1f2c0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1f6c0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1fac0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_PF_CTL", 0x1fec0, 0 },
+ { "TxEn", 1, 1 },
+ { "RxEn", 0, 1 },
+ { "MPS_RX_CTL", 0x11000, 0 },
+ { "FILT_VLAN_SEL", 17, 1 },
+ { "CBA_EN", 16, 1 },
+ { "BLK_SNDR", 12, 4 },
+ { "CMPRS", 8, 4 },
+ { "SNF", 0, 8 },
+ { "MPS_RX_PORT_MUX_CTL", 0x11004, 0 },
+ { "CTL_P1", 4, 4 },
+ { "CTL_P0", 0, 4 },
+ { "MPS_RX_FIFO_0_CTL", 0x11008, 0 },
+ { "MPS_RX_FIFO_1_CTL", 0x1100c, 0 },
+ { "MPS_RX_FIFO_2_CTL", 0x11010, 0 },
+ { "MPS_RX_FIFO_3_CTL", 0x11014, 0 },
+ { "MPS_RX_PG_HYST_BG0", 0x11048, 0 },
+ { "EN", 31, 1 },
+ { "TH", 0, 11 },
+ { "MPS_RX_PG_HYST_BG1", 0x1104c, 0 },
+ { "EN", 31, 1 },
+ { "TH", 0, 11 },
+ { "MPS_RX_PG_HYST_BG2", 0x11050, 0 },
+ { "EN", 31, 1 },
+ { "TH", 0, 11 },
+ { "MPS_RX_PG_HYST_BG3", 0x11054, 0 },
+ { "EN", 31, 1 },
+ { "TH", 0, 11 },
+ { "MPS_RX_OCH_CTL", 0x11058, 0 },
+ { "DROP_WT", 27, 5 },
+ { "TRUNC_WT", 22, 5 },
+ { "DRAIN", 13, 5 },
+ { "DROP", 8, 5 },
+ { "STOP", 0, 5 },
+ { "MPS_RX_LPBK_BP0", 0x1105c, 0 },
+ { "MPS_RX_LPBK_BP1", 0x11060, 0 },
+ { "MPS_RX_LPBK_BP2", 0x11064, 0 },
+ { "MPS_RX_LPBK_BP3", 0x11068, 0 },
+ { "MPS_RX_PORT_GAP", 0x1106c, 0 },
+ { "MPS_RX_PERR_INT_CAUSE", 0x11074, 0 },
+ { "INT_ERR_INT", 24, 1 },
+ { "FF", 23, 1 },
+ { "RPLC", 19, 1 },
+ { "ATRB", 18, 1 },
+ { "PPM1", 10, 1 },
+ { "PPM0", 9, 1 },
+ { "MPS_RX_PERR_INT_ENABLE", 0x11078, 0 },
+ { "INT_ERR_INT", 24, 1 },
+ { "FF", 23, 1 },
+ { "RPLC", 19, 1 },
+ { "ATRB", 18, 1 },
+ { "PPM1", 10, 1 },
+ { "PPM0", 9, 1 },
+ { "MPS_RX_PERR_ENABLE", 0x1107c, 0 },
+ { "INT_ERR_INT", 24, 1 },
+ { "FF", 23, 1 },
+ { "RPLC", 19, 1 },
+ { "ATRB", 18, 1 },
+ { "PPM1", 10, 1 },
+ { "PPM0", 9, 1 },
+ { "MPS_RX_PERR_INJECT", 0x11080, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "MPS_RX_FUNC_INT_CAUSE", 0x11084, 0 },
+ { "MTU_ERR_INT3", 19, 1 },
+ { "MTU_ERR_INT2", 18, 1 },
+ { "MTU_ERR_INT1", 17, 1 },
+ { "MTU_ERR_INT0", 16, 1 },
+ { "SE_CNT_ERR_INT", 15, 1 },
+ { "FRM_ERR_INT", 14, 1 },
+ { "LEN_ERR_INT", 13, 1 },
+ { "INT_ERR_INT", 8, 5 },
+ { "PG_TH_INT7", 7, 1 },
+ { "PG_TH_INT6", 6, 1 },
+ { "PG_TH_INT5", 5, 1 },
+ { "PG_TH_INT4", 4, 1 },
+ { "PG_TH_INT3", 3, 1 },
+ { "PG_TH_INT2", 2, 1 },
+ { "PG_TH_INT1", 1, 1 },
+ { "PG_TH_INT0", 0, 1 },
+ { "MPS_RX_FUNC_INT_ENABLE", 0x11088, 0 },
+ { "MTU_ERR_INT3", 19, 1 },
+ { "MTU_ERR_INT2", 18, 1 },
+ { "MTU_ERR_INT1", 17, 1 },
+ { "MTU_ERR_INT0", 16, 1 },
+ { "SE_CNT_ERR_INT", 15, 1 },
+ { "FRM_ERR_INT", 14, 1 },
+ { "LEN_ERR_INT", 13, 1 },
+ { "INT_ERR_INT", 8, 5 },
+ { "PG_TH_INT7", 7, 1 },
+ { "PG_TH_INT6", 6, 1 },
+ { "PG_TH_INT5", 5, 1 },
+ { "PG_TH_INT4", 4, 1 },
+ { "PG_TH_INT3", 3, 1 },
+ { "PG_TH_INT2", 2, 1 },
+ { "PG_TH_INT1", 1, 1 },
+ { "PG_TH_INT0", 0, 1 },
+ { "MPS_RX_REPL_CTL", 0x11098, 0 },
+ { "MPS_RX_PPP_ATRB", 0x1109c, 0 },
+ { "ETYPE", 16, 16 },
+ { "OPCODE", 0, 16 },
+ { "MPS_RX_QFC0_ATRB", 0x110a0, 0 },
+ { "ETYPE", 16, 16 },
+ { "DA", 0, 16 },
+ { "MPS_RX_QFC1_ATRB", 0x110a4, 0 },
+ { "MPS_RX_PT_ARB0", 0x110a8, 0 },
+ { "LPBK_WT", 16, 14 },
+ { "MAC_WT", 0, 14 },
+ { "MPS_RX_PT_ARB1", 0x110ac, 0 },
+ { "LPBK_WT", 16, 14 },
+ { "MAC_WT", 0, 14 },
+ { "MPS_RX_PT_ARB2", 0x110b0, 0 },
+ { "LPBK_WT", 16, 14 },
+ { "MAC_WT", 0, 14 },
+ { "MPS_PF_OUT_EN", 0x110b4, 0 },
+ { "MPS_BMC_MTU", 0x110b8, 0 },
+ { "MPS_BMC_PKT_CNT", 0x110bc, 0 },
+ { "MPS_BMC_BYTE_CNT", 0x110c0, 0 },
+ { "MPS_PFVF_ATRB_CTL", 0x110c4, 0 },
+ { "RD_WRN", 31, 1 },
+ { "PFVF", 0, 9 },
+ { "MPS_PFVF_ATRB", 0x110c8, 0 },
+ { "PF", 28, 3 },
+ { "OFF", 18, 1 },
+ { "NV_DROP", 17, 1 },
+ { "MODE", 16, 1 },
+ { "FULL_FRAME_MODE", 14, 1 },
+ { "MTU", 0, 14 },
+ { "MPS_PFVF_ATRB_FLTR0", 0x110cc, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR1", 0x110d0, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR2", 0x110d4, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR3", 0x110d8, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR4", 0x110dc, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR5", 0x110e0, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR6", 0x110e4, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR7", 0x110e8, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR8", 0x110ec, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR9", 0x110f0, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR10", 0x110f4, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR11", 0x110f8, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR12", 0x110fc, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR13", 0x11100, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR14", 0x11104, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PFVF_ATRB_FLTR15", 0x11108, 0 },
+ { "VLAN_EN", 16, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_RPLC_MAP_CTL", 0x1110c, 0 },
+ { "RD_WRN", 31, 1 },
+ { "ADDR", 0, 10 },
+ { "MPS_PF_RPLCT_MAP", 0x11110, 0 },
+ { "MPS_VF_RPLCT_MAP0", 0x11114, 0 },
+ { "MPS_VF_RPLCT_MAP1", 0x11118, 0 },
+ { "MPS_VF_RPLCT_MAP2", 0x1111c, 0 },
+ { "MPS_VF_RPLCT_MAP3", 0x11120, 0 },
+ { "MPS_VF_RPLCT_MAP4", 0x11300, 0 },
+ { "MPS_VF_RPLCT_MAP5", 0x11304, 0 },
+ { "MPS_VF_RPLCT_MAP6", 0x11308, 0 },
+ { "MPS_VF_RPLCT_MAP7", 0x1130c, 0 },
+ { "MPS_MEM_DBG_CTL", 0x1112c, 0 },
+ { "PKD", 17, 1 },
+ { "PGD", 16, 1 },
+ { "ADDR", 0, 16 },
+ { "MPS_PKD_MEM_DATA0", 0x11130, 0 },
+ { "MPS_PKD_MEM_DATA1", 0x11134, 0 },
+ { "MPS_PKD_MEM_DATA2", 0x11138, 0 },
+ { "MPS_PGD_MEM_DATA", 0x1113c, 0 },
+ { "MPS_RX_SE_CNT_ERR", 0x11140, 0 },
+ { "MPS_RX_SE_CNT_CLR", 0x11144, 0 },
+ { "MPS_RX_SE_CNT_IN0", 0x11148, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN1", 0x1114c, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN2", 0x11150, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN3", 0x11154, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN4", 0x11158, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN5", 0x1115c, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN6", 0x11160, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_IN7", 0x11164, 0 },
+ { "SOP_CNT_PM", 24, 8 },
+ { "EOP_CNT_PM", 16, 8 },
+ { "SOP_CNT_IN", 8, 8 },
+ { "EOP_CNT_IN", 0, 8 },
+ { "MPS_RX_SE_CNT_OUT01", 0x11168, 0 },
+ { "SOP_CNT_1", 24, 8 },
+ { "EOP_CNT_1", 16, 8 },
+ { "SOP_CNT_0", 8, 8 },
+ { "EOP_CNT_0", 0, 8 },
+ { "MPS_RX_SE_CNT_OUT23", 0x1116c, 0 },
+ { "SOP_CNT_3", 24, 8 },
+ { "EOP_CNT_3", 16, 8 },
+ { "SOP_CNT_2", 8, 8 },
+ { "EOP_CNT_2", 0, 8 },
+ { "MPS_RX_SPI_ERR", 0x11170, 0 },
+ { "LEN_ERR", 21, 4 },
+ { "ERR", 0, 21 },
+ { "MPS_RX_IN_BUS_STATE", 0x11174, 0 },
+ { "ST3", 24, 8 },
+ { "ST2", 16, 8 },
+ { "ST1", 8, 8 },
+ { "ST0", 0, 8 },
+ { "MPS_RX_OUT_BUS_STATE", 0x11178, 0 },
+ { "ST_NCSI", 23, 9 },
+ { "ST_TP", 0, 23 },
+ { "MPS_RX_DBG_CTL", 0x1117c, 0 },
+ { "OUT_DBG_CHNL", 8, 3 },
+ { "DBG_PKD_QSEL", 7, 1 },
+ { "DBG_CDS_INV", 6, 1 },
+ { "IN_DBG_PORT", 3, 3 },
+ { "IN_DBG_CHNL", 0, 3 },
+ { "MPS_RX_SPARE", 0x11190, 0 },
+ { "MPS_RX_PTP_ETYPE", 0x11194, 0 },
+ { "PETYPE2", 16, 16 },
+ { "PETYPE1", 0, 16 },
+ { "MPS_RX_PTP_TCP", 0x11198, 0 },
+ { "PTCPORT2", 16, 16 },
+ { "PTCPORT1", 0, 16 },
+ { "MPS_RX_PTP_UDP", 0x1119c, 0 },
+ { "PUDPORT2", 16, 16 },
+ { "PUDPORT1", 0, 16 },
+ { "MPS_RX_PTP_CTL", 0x111a0, 0 },
+ { "MIN_PTP_SPACE", 24, 7 },
+ { "PUDP2EN", 20, 4 },
+ { "PUDP1EN", 16, 4 },
+ { "PTCP2EN", 12, 4 },
+ { "PTCP1EN", 8, 4 },
+ { "PETYPE2EN", 4, 4 },
+ { "PETYPE1EN", 0, 4 },
+ { "MPS_RX_PAUSE_GEN_TH_0_0", 0x111a4, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_0_1", 0x111a8, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_0_2", 0x111ac, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_0_3", 0x111b0, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_1_0", 0x111b4, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_1_1", 0x111b8, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_1_2", 0x111bc, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_1_3", 0x111c0, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_2_0", 0x111c4, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_2_1", 0x111c8, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_2_2", 0x111cc, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_2_3", 0x111d0, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_3_0", 0x111d4, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_3_1", 0x111d8, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_3_2", 0x111dc, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_PAUSE_GEN_TH_3_3", 0x111e0, 0 },
+ { "TH_HIGH", 16, 16 },
+ { "TH_LOW", 0, 16 },
+ { "MPS_RX_MAC_CLS_DROP_CNT0", 0x111e4, 0 },
+ { "MPS_RX_MAC_CLS_DROP_CNT1", 0x111e8, 0 },
+ { "MPS_RX_MAC_CLS_DROP_CNT2", 0x111ec, 0 },
+ { "MPS_RX_MAC_CLS_DROP_CNT3", 0x111f0, 0 },
+ { "MPS_RX_LPBK_CLS_DROP_CNT0", 0x111f4, 0 },
+ { "MPS_RX_LPBK_CLS_DROP_CNT1", 0x111f8, 0 },
+ { "MPS_RX_LPBK_CLS_DROP_CNT2", 0x111fc, 0 },
+ { "MPS_RX_LPBK_CLS_DROP_CNT3", 0x11200, 0 },
+ { "MPS_RX_CGEN", 0x11204, 0 },
+ { "MPS_RX_CGEN_NCSI", 12, 1 },
+ { "MPS_RX_CGEN_OUT", 8, 4 },
+ { "MPS_RX_CGEN_LPBK_IN", 4, 4 },
+ { "MPS_RX_CGEN_MAC_IN", 0, 4 },
+ { "MPS_RX_MAC_BG_PG_CNT0", 0x11208, 0 },
+ { "MAC_USED", 16, 11 },
+ { "MAC_ALLOC", 0, 11 },
+ { "MPS_RX_MAC_BG_PG_CNT1", 0x1120c, 0 },
+ { "MAC_USED", 16, 11 },
+ { "MAC_ALLOC", 0, 11 },
+ { "MPS_RX_MAC_BG_PG_CNT2", 0x11210, 0 },
+ { "MAC_USED", 16, 11 },
+ { "MAC_ALLOC", 0, 11 },
+ { "MPS_RX_MAC_BG_PG_CNT3", 0x11214, 0 },
+ { "MAC_USED", 16, 11 },
+ { "MAC_ALLOC", 0, 11 },
+ { "MPS_RX_LPBK_BG_PG_CNT0", 0x11218, 0 },
+ { "LPBK_USED", 16, 11 },
+ { "LPBK_ALLOC", 0, 11 },
+ { "MPS_RX_LPBK_BG_PG_CNT1", 0x1121c, 0 },
+ { "LPBK_USED", 16, 11 },
+ { "LPBK_ALLOC", 0, 11 },
+ { "MPS_RX_CONGESTION_THRESHOLD_BG0", 0x11220, 0 },
+ { "CONG_EN", 31, 1 },
+ { "CONG_TH", 0, 20 },
+ { "MPS_RX_CONGESTION_THRESHOLD_BG1", 0x11224, 0 },
+ { "CONG_EN", 31, 1 },
+ { "CONG_TH", 0, 20 },
+ { "MPS_RX_CONGESTION_THRESHOLD_BG2", 0x11228, 0 },
+ { "CONG_EN", 31, 1 },
+ { "CONG_TH", 0, 20 },
+ { "MPS_RX_CONGESTION_THRESHOLD_BG3", 0x1122c, 0 },
+ { "CONG_EN", 31, 1 },
+ { "CONG_TH", 0, 20 },
+ { "MPS_RX_GRE_PROT_TYPE", 0x11230, 0 },
+ { "NVGRE_EN", 9, 1 },
+ { "GRE_EN", 8, 1 },
+ { "GRE", 0, 8 },
+ { "MPS_RX_VXLAN_TYPE", 0x11234, 0 },
+ { "VXLAN_EN", 16, 1 },
+ { "VXLAN", 0, 16 },
+ { "MPS_RX_GENEVE_TYPE", 0x11238, 0 },
+ { "GENEVE_EN", 16, 1 },
+ { "GENEVE", 0, 16 },
+ { "MPS_RX_INNER_HDR_IVLAN", 0x1123c, 0 },
+ { "IVLAN_EN", 16, 1 },
+ { "IVLAN_ETYPE", 0, 16 },
+ { "MPS_RX_ENCAP_NVGRE", 0x11240, 0 },
+ { "ETYPE_EN", 16, 1 },
+ { "ETYPE", 0, 16 },
+ { "MPS_RX_ENCAP_GENEVE", 0x11244, 0 },
+ { "ETYPE_EN", 16, 1 },
+ { "ETYPE", 0, 16 },
+ { "MPS_RX_TCP", 0x11248, 0 },
+ { "PROT_TYPE_EN", 8, 1 },
+ { "PROT_TYPE", 0, 8 },
+ { "MPS_RX_UDP", 0x1124c, 0 },
+ { "PROT_TYPE_EN", 8, 1 },
+ { "PROT_TYPE", 0, 8 },
+ { "MPS_RX_PAUSE", 0x11250, 0 },
+ { "MPS_RX_LENGTH", 0x11254, 0 },
+ { "SAP_VALUE", 16, 16 },
+ { "LENGTH_ETYPE", 0, 16 },
+ { "MPS_RX_CTL_ORG", 0x11258, 0 },
+ { "CTL_VALUE", 24, 8 },
+ { "ORG_VALUE", 0, 24 },
+ { "MPS_RX_IPV4", 0x1125c, 0 },
+ { "MPS_RX_IPV6", 0x11260, 0 },
+ { "MPS_RX_TTL", 0x11264, 0 },
+ { "TTL_IPV4", 10, 8 },
+ { "TTL_IPV6", 2, 8 },
+ { "TTL_CHK_EN_IPV4", 1, 1 },
+ { "TTL_CHK_EN_IPV6", 0, 1 },
+ { "MPS_RX_DEFAULT_VNI", 0x11268, 0 },
+ { "MPS_RX_PRS_CTL", 0x1126c, 0 },
+ { "CTL_CHK_EN", 28, 1 },
+ { "ORG_CHK_EN", 27, 1 },
+ { "SAP_CHK_EN", 26, 1 },
+ { "VXLAN_FLAG_CHK_EN", 25, 1 },
+ { "VXLAN_FLAG_MASK", 17, 8 },
+ { "VXLAN_FLAG", 9, 8 },
+ { "GRE_VER_CHK_EN", 8, 1 },
+ { "GRE_VER", 5, 3 },
+ { "GENEVE_VER_CHK_EN", 4, 1 },
+ { "GENEVE_VER", 2, 2 },
+ { "DIP_EN", 1, 1 },
+ { "MPS_RX_PRS_CTL_2", 0x11270, 0 },
+ { "EN_UDP_CSUM_CHK", 4, 1 },
+ { "EN_UDP_LEN_CHK", 3, 1 },
+ { "EN_IP_CSUM_CHK", 2, 1 },
+ { "EN_IP_PAYLOAD_LEN_CHK", 1, 1 },
+ { "IPV6_UDP_CSUM_COMPAT", 0, 1 },
+ { "MPS_RX_MPS2NCSI_CNT", 0x11274, 0 },
+ { "MPS_RX_MAX_TNL_HDR_LEN", 0x11278, 0 },
+ { "MPS_RX_PAUSE_DA_H", 0x1127c, 0 },
+ { "MPS_RX_PAUSE_DA_L", 0x11280, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_MAC0", 0x11284, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_MAC0", 0x11288, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_MAC0", 0x1128c, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_MAC0", 0x11290, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_MAC1", 0x11294, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_MAC1", 0x11298, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_MAC1", 0x1129c, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_MAC1", 0x112a0, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_LPBK0", 0x112a4, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_LPBK0", 0x112a8, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_LPBK0", 0x112ac, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_LPBK0", 0x112b0, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_LPBK1", 0x112b4, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_LPBK1", 0x112b8, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_LPBK1", 0x112bc, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_LPBK1", 0x112c0, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_TO_TP0", 0x112c4, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_TO_TP0", 0x112c8, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_TO_TP0", 0x112cc, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_TO_TP0", 0x112d0, 0 },
+ { "MPS_RX_CNT_NVGRE_PKT_TO_TP1", 0x112d4, 0 },
+ { "MPS_RX_CNT_VXLAN_PKT_TO_TP1", 0x112d8, 0 },
+ { "MPS_RX_CNT_GENEVE_PKT_TO_TP1", 0x112dc, 0 },
+ { "MPS_RX_CNT_TNL_ERR_PKT_TO_TP1", 0x112e0, 0 },
+ { "MPS_PORT_RX_CTL", 0x30100, 0 },
+ { "HASH_PRIO_SEL_LPBK", 25, 1 },
+ { "HASH_PRIO_SEL_MAC", 24, 1 },
+ { "HASH_EN_LPBK", 23, 1 },
+ { "HASH_EN_MAC", 22, 1 },
+ { "PTP_FWD_UP", 21, 1 },
+ { "NO_RPLCT_M", 20, 1 },
+ { "RPLCT_SEL_L", 18, 2 },
+ { "FLTR_VLAN_SEL", 17, 1 },
+ { "PRIO_VLAN_SEL", 16, 1 },
+ { "CHK_8023_LEN_M", 15, 1 },
+ { "CHK_8023_LEN_L", 14, 1 },
+ { "NIV_DROP", 13, 1 },
+ { "NOV_DROP", 12, 1 },
+ { "CLS_PRT", 11, 1 },
+ { "RX_QFC_EN", 10, 1 },
+ { "QFC_FWD_UP", 9, 1 },
+ { "PPP_FWD_UP", 8, 1 },
+ { "PAUSE_FWD_UP", 7, 1 },
+ { "LPBK_BP", 6, 1 },
+ { "PASS_NO_MATCH", 5, 1 },
+ { "IVLAN_EN", 4, 1 },
+ { "OVLAN_EN3", 3, 1 },
+ { "OVLAN_EN2", 2, 1 },
+ { "OVLAN_EN1", 1, 1 },
+ { "OVLAN_EN0", 0, 1 },
+ { "MPS_PORT_RX_MTU", 0x30104, 0 },
+ { "MPS_PORT_RX_PF_MAP", 0x30108, 0 },
+ { "MPS_PORT_RX_VF_MAP0", 0x3010c, 0 },
+ { "MPS_PORT_RX_VF_MAP1", 0x30110, 0 },
+ { "MPS_PORT_RX_VF_MAP2", 0x30114, 0 },
+ { "MPS_PORT_RX_VF_MAP3", 0x30118, 0 },
+ { "MPS_PORT_RX_VF_MAP4", 0x30150, 0 },
+ { "MPS_PORT_RX_VF_MAP5", 0x30154, 0 },
+ { "MPS_PORT_RX_VF_MAP6", 0x30158, 0 },
+ { "MPS_PORT_RX_VF_MAP7", 0x3015c, 0 },
+ { "MPS_PORT_RX_IVLAN", 0x3011c, 0 },
+ { "MPS_PORT_RX_OVLAN0", 0x30120, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN1", 0x30124, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN2", 0x30128, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN3", 0x3012c, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_RSS_HASH", 0x30130, 0 },
+ { "MPS_PORT_RX_RSS_CONTROL", 0x30134, 0 },
+ { "RSS_CTRL", 16, 8 },
+ { "QUE_NUM", 0, 16 },
+ { "MPS_PORT_RX_CTL1", 0x30138, 0 },
+ { "FIXED_PFVF_MAC", 14, 1 },
+ { "FIXED_PFVF_LPBK", 13, 1 },
+ { "FIXED_PFVF_LPBK_OV", 12, 1 },
+ { "FIXED_PF", 9, 3 },
+ { "FIXED_VF_VLD", 8, 1 },
+ { "FIXED_VF", 0, 8 },
+ { "MPS_PORT_RX_SPARE", 0x3013c, 0 },
+ { "MPS_PORT_RX_PTP_RSS_HASH", 0x30140, 0 },
+ { "MPS_PORT_RX_PTP_RSS_CONTROL", 0x30144, 0 },
+ { "RSS_CTRL", 16, 8 },
+ { "QUE_NUM", 0, 16 },
+ { "MPS_PORT_RX_TS_VLD", 0x30148, 0 },
+ { "MPS_PORT_RX_TNL_LKP_INNER_SEL", 0x3014c, 0 },
+ { "MPS_PORT_RX_PRS_DEBUG_FLAG_MAC", 0x30160, 0 },
+ { "Outer_IPv4_n_Inner_IPv4", 31, 1 },
+ { "Outer_IPv4_n_Inner_IPv6", 30, 1 },
+ { "Outer_IPv6_n_Inner_IPv4", 29, 1 },
+ { "Outer_IPv6_n_Inner_IPv6", 28, 1 },
+ { "Outer_IPv4_n_VLAN_NVGRE", 27, 1 },
+ { "Outer_IPv6_n_VLAN_NVGRE", 26, 1 },
+ { "Outer_IPv4_n_Double_VLAN_NVGRE", 25, 1 },
+ { "Outer_IPv6_n_Double_VLAN_NVGRE", 24, 1 },
+ { "Outer_IPv4_n_VLAN_GRE", 23, 1 },
+ { "Outer_IPv6_n_VLAN_GRE", 22, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GRE", 21, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GRE", 20, 1 },
+ { "Outer_IPv4_n_VLAN_VXLAN", 19, 1 },
+ { "Outer_IPv6_n_VLAN_VXLAN", 18, 1 },
+ { "Outer_IPv4_n_Double_VLAN_VXLAN", 17, 1 },
+ { "Outer_IPv6_n_Double_VLAN_VXLAN", 16, 1 },
+ { "Outer_IPv4_n_VLAN_GENEVE", 15, 1 },
+ { "Outer_IPv6_n_VLAN_GENEVE", 14, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GENEVE", 13, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GENEVE", 12, 1 },
+ { "Err_Tnl_Hdr_Len", 11, 1 },
+ { "non_runt_frame", 10, 1 },
+ { "Inner_VLAN_VLD", 9, 1 },
+ { "Err_IP_Payload_Len", 8, 1 },
+ { "Err_UDP_Payload_Len", 7, 1 },
+ { "MPS_PORT_RX_PRS_DEBUG_FLAG_LPBK", 0x30164, 0 },
+ { "Outer_IPv4_n_Inner_IPv4", 31, 1 },
+ { "Outer_IPv4_n_Inner_IPv6", 30, 1 },
+ { "Outer_IPv6_n_Inner_IPv4", 29, 1 },
+ { "Outer_IPv6_n_Inner_IPv6", 28, 1 },
+ { "Outer_IPv4_n_VLAN_NVGRE", 27, 1 },
+ { "Outer_IPv6_n_VLAN_NVGRE", 26, 1 },
+ { "Outer_IPv4_n_Double_VLAN_NVGRE", 25, 1 },
+ { "Outer_IPv6_n_Double_VLAN_NVGRE", 24, 1 },
+ { "Outer_IPv4_n_VLAN_GRE", 23, 1 },
+ { "Outer_IPv6_n_VLAN_GRE", 22, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GRE", 21, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GRE", 20, 1 },
+ { "Outer_IPv4_n_VLAN_VXLAN", 19, 1 },
+ { "Outer_IPv6_n_VLAN_VXLAN", 18, 1 },
+ { "Outer_IPv4_n_Double_VLAN_VXLAN", 17, 1 },
+ { "Outer_IPv6_n_Double_VLAN_VXLAN", 16, 1 },
+ { "Outer_IPv4_n_VLAN_GENEVE", 15, 1 },
+ { "Outer_IPv6_n_VLAN_GENEVE", 14, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GENEVE", 13, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GENEVE", 12, 1 },
+ { "Err_Tnl_Hdr_Len", 11, 1 },
+ { "Inner_VLAN_VLD", 10, 1 },
+ { "Err_IP_Payload_Len", 9, 1 },
+ { "Err_UDP_Payload_Len", 8, 1 },
+ { "MPS_PORT_RX_REPL_VECT_SEL", 0x30168, 0 },
+ { "DIS_REPL_VECT_SEL", 4, 1 },
+ { "REPL_VECT_SEL", 0, 4 },
+ { "MPS_PORT_RX_CTL", 0x34100, 0 },
+ { "HASH_PRIO_SEL_LPBK", 25, 1 },
+ { "HASH_PRIO_SEL_MAC", 24, 1 },
+ { "HASH_EN_LPBK", 23, 1 },
+ { "HASH_EN_MAC", 22, 1 },
+ { "PTP_FWD_UP", 21, 1 },
+ { "NO_RPLCT_M", 20, 1 },
+ { "RPLCT_SEL_L", 18, 2 },
+ { "FLTR_VLAN_SEL", 17, 1 },
+ { "PRIO_VLAN_SEL", 16, 1 },
+ { "CHK_8023_LEN_M", 15, 1 },
+ { "CHK_8023_LEN_L", 14, 1 },
+ { "NIV_DROP", 13, 1 },
+ { "NOV_DROP", 12, 1 },
+ { "CLS_PRT", 11, 1 },
+ { "RX_QFC_EN", 10, 1 },
+ { "QFC_FWD_UP", 9, 1 },
+ { "PPP_FWD_UP", 8, 1 },
+ { "PAUSE_FWD_UP", 7, 1 },
+ { "LPBK_BP", 6, 1 },
+ { "PASS_NO_MATCH", 5, 1 },
+ { "IVLAN_EN", 4, 1 },
+ { "OVLAN_EN3", 3, 1 },
+ { "OVLAN_EN2", 2, 1 },
+ { "OVLAN_EN1", 1, 1 },
+ { "OVLAN_EN0", 0, 1 },
+ { "MPS_PORT_RX_MTU", 0x34104, 0 },
+ { "MPS_PORT_RX_PF_MAP", 0x34108, 0 },
+ { "MPS_PORT_RX_VF_MAP0", 0x3410c, 0 },
+ { "MPS_PORT_RX_VF_MAP1", 0x34110, 0 },
+ { "MPS_PORT_RX_VF_MAP2", 0x34114, 0 },
+ { "MPS_PORT_RX_VF_MAP3", 0x34118, 0 },
+ { "MPS_PORT_RX_VF_MAP4", 0x34150, 0 },
+ { "MPS_PORT_RX_VF_MAP5", 0x34154, 0 },
+ { "MPS_PORT_RX_VF_MAP6", 0x34158, 0 },
+ { "MPS_PORT_RX_VF_MAP7", 0x3415c, 0 },
+ { "MPS_PORT_RX_IVLAN", 0x3411c, 0 },
+ { "MPS_PORT_RX_OVLAN0", 0x34120, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN1", 0x34124, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN2", 0x34128, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_OVLAN3", 0x3412c, 0 },
+ { "OVLAN_MASK", 16, 16 },
+ { "OVLAN_ETYPE", 0, 16 },
+ { "MPS_PORT_RX_RSS_HASH", 0x34130, 0 },
+ { "MPS_PORT_RX_RSS_CONTROL", 0x34134, 0 },
+ { "RSS_CTRL", 16, 8 },
+ { "QUE_NUM", 0, 16 },
+ { "MPS_PORT_RX_CTL1", 0x34138, 0 },
+ { "FIXED_PFVF_MAC", 14, 1 },
+ { "FIXED_PFVF_LPBK", 13, 1 },
+ { "FIXED_PFVF_LPBK_OV", 12, 1 },
+ { "FIXED_PF", 9, 3 },
+ { "FIXED_VF_VLD", 8, 1 },
+ { "FIXED_VF", 0, 8 },
+ { "MPS_PORT_RX_SPARE", 0x3413c, 0 },
+ { "MPS_PORT_RX_PTP_RSS_HASH", 0x34140, 0 },
+ { "MPS_PORT_RX_PTP_RSS_CONTROL", 0x34144, 0 },
+ { "RSS_CTRL", 16, 8 },
+ { "QUE_NUM", 0, 16 },
+ { "MPS_PORT_RX_TS_VLD", 0x34148, 0 },
+ { "MPS_PORT_RX_TNL_LKP_INNER_SEL", 0x3414c, 0 },
+ { "MPS_PORT_RX_PRS_DEBUG_FLAG_MAC", 0x34160, 0 },
+ { "Outer_IPv4_n_Inner_IPv4", 31, 1 },
+ { "Outer_IPv4_n_Inner_IPv6", 30, 1 },
+ { "Outer_IPv6_n_Inner_IPv4", 29, 1 },
+ { "Outer_IPv6_n_Inner_IPv6", 28, 1 },
+ { "Outer_IPv4_n_VLAN_NVGRE", 27, 1 },
+ { "Outer_IPv6_n_VLAN_NVGRE", 26, 1 },
+ { "Outer_IPv4_n_Double_VLAN_NVGRE", 25, 1 },
+ { "Outer_IPv6_n_Double_VLAN_NVGRE", 24, 1 },
+ { "Outer_IPv4_n_VLAN_GRE", 23, 1 },
+ { "Outer_IPv6_n_VLAN_GRE", 22, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GRE", 21, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GRE", 20, 1 },
+ { "Outer_IPv4_n_VLAN_VXLAN", 19, 1 },
+ { "Outer_IPv6_n_VLAN_VXLAN", 18, 1 },
+ { "Outer_IPv4_n_Double_VLAN_VXLAN", 17, 1 },
+ { "Outer_IPv6_n_Double_VLAN_VXLAN", 16, 1 },
+ { "Outer_IPv4_n_VLAN_GENEVE", 15, 1 },
+ { "Outer_IPv6_n_VLAN_GENEVE", 14, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GENEVE", 13, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GENEVE", 12, 1 },
+ { "Err_Tnl_Hdr_Len", 11, 1 },
+ { "non_runt_frame", 10, 1 },
+ { "Inner_VLAN_VLD", 9, 1 },
+ { "Err_IP_Payload_Len", 8, 1 },
+ { "Err_UDP_Payload_Len", 7, 1 },
+ { "MPS_PORT_RX_PRS_DEBUG_FLAG_LPBK", 0x34164, 0 },
+ { "Outer_IPv4_n_Inner_IPv4", 31, 1 },
+ { "Outer_IPv4_n_Inner_IPv6", 30, 1 },
+ { "Outer_IPv6_n_Inner_IPv4", 29, 1 },
+ { "Outer_IPv6_n_Inner_IPv6", 28, 1 },
+ { "Outer_IPv4_n_VLAN_NVGRE", 27, 1 },
+ { "Outer_IPv6_n_VLAN_NVGRE", 26, 1 },
+ { "Outer_IPv4_n_Double_VLAN_NVGRE", 25, 1 },
+ { "Outer_IPv6_n_Double_VLAN_NVGRE", 24, 1 },
+ { "Outer_IPv4_n_VLAN_GRE", 23, 1 },
+ { "Outer_IPv6_n_VLAN_GRE", 22, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GRE", 21, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GRE", 20, 1 },
+ { "Outer_IPv4_n_VLAN_VXLAN", 19, 1 },
+ { "Outer_IPv6_n_VLAN_VXLAN", 18, 1 },
+ { "Outer_IPv4_n_Double_VLAN_VXLAN", 17, 1 },
+ { "Outer_IPv6_n_Double_VLAN_VXLAN", 16, 1 },
+ { "Outer_IPv4_n_VLAN_GENEVE", 15, 1 },
+ { "Outer_IPv6_n_VLAN_GENEVE", 14, 1 },
+ { "Outer_IPv4_n_Double_VLAN_GENEVE", 13, 1 },
+ { "Outer_IPv6_n_Double_VLAN_GENEVE", 12, 1 },
+ { "Err_Tnl_Hdr_Len", 11, 1 },
+ { "Inner_VLAN_VLD", 10, 1 },
+ { "Err_IP_Payload_Len", 9, 1 },
+ { "Err_UDP_Payload_Len", 8, 1 },
+ { "MPS_PORT_RX_REPL_VECT_SEL", 0x34168, 0 },
+ { "DIS_REPL_VECT_SEL", 4, 1 },
+ { "REPL_VECT_SEL", 0, 4 },
+ { "MPS_TX_PRTY_SEL", 0x9400, 0 },
+ { "Ch2_Prty", 12, 3 },
+ { "Ch1_Prty", 8, 3 },
+ { "Ch0_Prty", 4, 3 },
+ { "TP_Source", 2, 2 },
+ { "NCSI_Source", 0, 2 },
+ { "MPS_TX_INT_ENABLE", 0x9404, 0 },
+ { "PortErr", 16, 1 },
+ { "FRMERR", 15, 1 },
+ { "SECNTERR", 14, 1 },
+ { "BUBBLE", 13, 1 },
+ { "TxDescFifo", 9, 4 },
+ { "TxDataFifo", 5, 4 },
+ { "Ncsi", 4, 1 },
+ { "TP", 0, 4 },
+ { "MPS_TX_INT_CAUSE", 0x9408, 0 },
+ { "PortErr", 16, 1 },
+ { "FRMERR", 15, 1 },
+ { "SECNTERR", 14, 1 },
+ { "BUBBLE", 13, 1 },
+ { "TxDescFifo", 9, 4 },
+ { "TxDataFifo", 5, 4 },
+ { "Ncsi", 4, 1 },
+ { "TP", 0, 4 },
+ { "MPS_TX_NCSI2MPS_CNT", 0x940c, 0 },
+ { "MPS_TX_PERR_ENABLE", 0x9410, 0 },
+ { "TxDescFifo", 9, 4 },
+ { "TxDataFifo", 5, 4 },
+ { "Ncsi", 4, 1 },
+ { "TP", 0, 4 },
+ { "MPS_TX_PERR_INJECT", 0x9414, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "MPS_TX_SE_CNT_TP01", 0x9418, 0 },
+ { "SOP_CNT_1", 24, 8 },
+ { "EOP_CNT_1", 16, 8 },
+ { "SOP_CNT_0", 8, 8 },
+ { "EOP_CNT_0", 0, 8 },
+ { "MPS_TX_SE_CNT_TP23", 0x941c, 0 },
+ { "SOP_CNT_3", 24, 8 },
+ { "EOP_CNT_3", 16, 8 },
+ { "SOP_CNT_2", 8, 8 },
+ { "EOP_CNT_2", 0, 8 },
+ { "MPS_TX_SE_CNT_MAC01", 0x9420, 0 },
+ { "SOP_CNT_1", 24, 8 },
+ { "EOP_CNT_1", 16, 8 },
+ { "SOP_CNT_0", 8, 8 },
+ { "EOP_CNT_0", 0, 8 },
+ { "MPS_TX_SE_CNT_MAC23", 0x9424, 0 },
+ { "SOP_CNT_3", 24, 8 },
+ { "EOP_CNT_3", 16, 8 },
+ { "SOP_CNT_2", 8, 8 },
+ { "EOP_CNT_2", 0, 8 },
+ { "MPS_TX_SECNT_SPI_BUBBLE_ERR", 0x9428, 0 },
+ { "Bubble", 16, 8 },
+ { "Spi", 8, 8 },
+ { "SeCnt", 0, 8 },
+ { "MPS_TX_SECNT_BUBBLE_CLR", 0x942c, 0 },
+ { "NcsiSeCnt", 20, 1 },
+ { "LpbkSeCnt", 16, 4 },
+ { "Bubble", 8, 8 },
+ { "SeCnt", 0, 8 },
+ { "MPS_TX_PORT_ERR", 0x9430, 0 },
+ { "Lpbkpt3", 7, 1 },
+ { "Lpbkpt2", 6, 1 },
+ { "Lpbkpt1", 5, 1 },
+ { "Lpbkpt0", 4, 1 },
+ { "pt3", 3, 1 },
+ { "pt2", 2, 1 },
+ { "pt1", 1, 1 },
+ { "pt0", 0, 1 },
+ { "MPS_TX_LPBK_DROP_BP_CTL_CH0", 0x9434, 0 },
+ { "BpEn", 1, 1 },
+ { "DropEn", 0, 1 },
+ { "MPS_TX_LPBK_DROP_BP_CTL_CH1", 0x9438, 0 },
+ { "BpEn", 1, 1 },
+ { "DropEn", 0, 1 },
+ { "MPS_TX_LPBK_DROP_BP_CTL_CH2", 0x943c, 0 },
+ { "BpEn", 1, 1 },
+ { "DropEn", 0, 1 },
+ { "MPS_TX_LPBK_DROP_BP_CTL_CH3", 0x9440, 0 },
+ { "BpEn", 1, 1 },
+ { "DropEn", 0, 1 },
+ { "MPS_TX_DEBUG_REG_TP2TX_10", 0x9444, 0 },
+ { "SOPCh1", 31, 1 },
+ { "EOPCh1", 30, 1 },
+ { "SizeCh1", 27, 3 },
+ { "ErrCh1", 26, 1 },
+ { "FullCh1", 25, 1 },
+ { "ValidCh1", 24, 1 },
+ { "DataCh1", 16, 8 },
+ { "SOPCh0", 15, 1 },
+ { "EOPCh0", 14, 1 },
+ { "SizeCh0", 11, 3 },
+ { "ErrCh0", 10, 1 },
+ { "FullCh0", 9, 1 },
+ { "ValidCh0", 8, 1 },
+ { "DataCh0", 0, 8 },
+ { "MPS_TX_DEBUG_REG_TP2TX_32", 0x9448, 0 },
+ { "SOPCh3", 31, 1 },
+ { "EOPCh3", 30, 1 },
+ { "SizeCh3", 27, 3 },
+ { "ErrCh3", 26, 1 },
+ { "FullCh3", 25, 1 },
+ { "ValidCh3", 24, 1 },
+ { "DataCh3", 16, 8 },
+ { "SOPCh2", 15, 1 },
+ { "EOPCh2", 14, 1 },
+ { "SizeCh2", 11, 3 },
+ { "ErrCh2", 10, 1 },
+ { "FullCh2", 9, 1 },
+ { "ValidCh2", 8, 1 },
+ { "DataCh2", 0, 8 },
+ { "MPS_TX_DEBUG_REG_TX2MAC_10", 0x944c, 0 },
+ { "SOPPt1", 31, 1 },
+ { "EOPPt1", 30, 1 },
+ { "SizePt1", 27, 3 },
+ { "ErrPt1", 26, 1 },
+ { "FullPt1", 25, 1 },
+ { "ValidPt1", 24, 1 },
+ { "DataPt1", 16, 8 },
+ { "SOPPt0", 15, 1 },
+ { "EOPPt0", 14, 1 },
+ { "SizePt0", 11, 3 },
+ { "ErrPt0", 10, 1 },
+ { "FullPt0", 9, 1 },
+ { "ValidPt0", 8, 1 },
+ { "DataPt0", 0, 8 },
+ { "MPS_TX_DEBUG_REG_TX2MAC_32", 0x9450, 0 },
+ { "SOPPt3", 31, 1 },
+ { "EOPPt3", 30, 1 },
+ { "SizePt3", 27, 3 },
+ { "ErrPt3", 26, 1 },
+ { "FullPt3", 25, 1 },
+ { "ValidPt3", 24, 1 },
+ { "DataPt3", 16, 8 },
+ { "SOPPt2", 15, 1 },
+ { "EOPPt2", 14, 1 },
+ { "SizePt2", 11, 3 },
+ { "ErrPt2", 10, 1 },
+ { "FullPt2", 9, 1 },
+ { "ValidPt2", 8, 1 },
+ { "DataPt2", 0, 8 },
+ { "MPS_TX_SGE_CH_PAUSE_IGNR", 0x9454, 0 },
+ { "MPS_TX_DEBUG_SUBPART_SEL", 0x9458, 0 },
+ { "SubPrtH", 11, 5 },
+ { "PortH", 8, 3 },
+ { "SubPrtL", 3, 5 },
+ { "PortL", 0, 3 },
+ { "MPS_TX_PAD_CTL", 0x945c, 0 },
+ { "LpbkPadEnPt3", 7, 1 },
+ { "LpbkPadEnPt2", 6, 1 },
+ { "LpbkPadEnPt1", 5, 1 },
+ { "LpbkPadEnPt0", 4, 1 },
+ { "MacPadEnPt3", 3, 1 },
+ { "MacPadEnPt2", 2, 1 },
+ { "MacPadEnPt1", 1, 1 },
+ { "MacPadEnPt0", 0, 1 },
+ { "MPS_TX_PFVF_PORT_DROP_TP", 0x9460, 0 },
+ { "TP2MPS_Ch1", 8, 8 },
+ { "TP2MPS_Ch0", 0, 8 },
+ { "MPS_TX_PFVF_PORT_DROP_NCSI", 0x9464, 0 },
+ { "MPS_TX_PFVF_PORT_DROP_CTL", 0x9468, 0 },
+ { "PFNOVFDROP", 5, 1 },
+ { "NCSI_Ch4_CLR", 4, 1 },
+ { "TP2MPS_Ch1_CLR", 1, 1 },
+ { "TP2MPS_Ch0_CLR", 0, 1 },
+ { "MPS_TX_CGEN", 0x946c, 0 },
+ { "TxOutLpbk3_CGEN", 31, 1 },
+ { "TxOutLpbk2_CGEN", 30, 1 },
+ { "TxOutLpbk1_CGEN", 29, 1 },
+ { "TxOutLpbk0_CGEN", 28, 1 },
+ { "TxOutMAC3_CGEN", 27, 1 },
+ { "TxOutMAC2_CGEN", 26, 1 },
+ { "TxOutMAC1_CGEN", 25, 1 },
+ { "TxOutMAC0_CGEN", 24, 1 },
+ { "TxSchLpbk3_CGEN", 23, 1 },
+ { "TxSchLpbk2_CGEN", 22, 1 },
+ { "TxSchLpbk1_CGEN", 21, 1 },
+ { "TxSchLpbk0_CGEN", 20, 1 },
+ { "TxSchMAC3_CGEN", 19, 1 },
+ { "TxSchMAC2_CGEN", 18, 1 },
+ { "TxSchMAC1_CGEN", 17, 1 },
+ { "TxSchMAC0_CGEN", 16, 1 },
+ { "TxInCh4_CGEN", 15, 1 },
+ { "TxInCh3_CGEN", 14, 1 },
+ { "TxInCh2_CGEN", 13, 1 },
+ { "TxInCh1_CGEN", 12, 1 },
+ { "TxInCh0_CGEN", 11, 1 },
+ { "MPS_TX_CGEN_DYNAMIC", 0x9470, 0 },
+ { "TxOutLpbk3_CGEN", 31, 1 },
+ { "TxOutLpbk2_CGEN", 30, 1 },
+ { "TxOutLpbk1_CGEN", 29, 1 },
+ { "TxOutLpbk0_CGEN", 28, 1 },
+ { "TxOutMAC3_CGEN", 27, 1 },
+ { "TxOutMAC2_CGEN", 26, 1 },
+ { "TxOutMAC1_CGEN", 25, 1 },
+ { "TxOutMAC0_CGEN", 24, 1 },
+ { "TxSchLpbk3_CGEN", 23, 1 },
+ { "TxSchLpbk2_CGEN", 22, 1 },
+ { "TxSchLpbk1_CGEN", 21, 1 },
+ { "TxSchLpbk0_CGEN", 20, 1 },
+ { "TxSchMAC3_CGEN", 19, 1 },
+ { "TxSchMAC2_CGEN", 18, 1 },
+ { "TxSchMAC1_CGEN", 17, 1 },
+ { "TxSchMAC0_CGEN", 16, 1 },
+ { "TxInCh4_CGEN", 15, 1 },
+ { "TxInCh3_CGEN", 14, 1 },
+ { "TxInCh2_CGEN", 13, 1 },
+ { "TxInCh1_CGEN", 12, 1 },
+ { "TxInCh0_CGEN", 11, 1 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1e2e0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1e6e0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1eae0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1eee0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1f2e0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1f6e0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1fae0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PF_TX_QINQ_VLAN", 0x1fee0, 0 },
+ { "ProtocolID", 16, 16 },
+ { "Priority", 13, 3 },
+ { "CFI", 12, 1 },
+ { "Tag", 0, 12 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH0", 0x30190, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH1", 0x30194, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH2", 0x30198, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH3", 0x3019c, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH4", 0x301a0, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH0", 0x301a8, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH1", 0x301ac, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH2", 0x301b0, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH3", 0x301b4, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH4", 0x301b8, 0 },
+ { "MPS_PORT_TX_FIFO_CTL", 0x301c4, 0 },
+ { "OUT_TH", 22, 8 },
+ { "IN_TH", 14, 8 },
+ { "FifoTh", 5, 9 },
+ { "FifoEn", 4, 1 },
+ { "MaxPktCnt", 0, 4 },
+ { "MPS_PORT_FPGA_PAUSE_CTL", 0x301c8, 0 },
+ { "MPS_PORT_TX_PAUSE_PENDING_STATUS", 0x301d0, 0 },
+ { "off_pending", 8, 8 },
+ { "on_pending", 0, 8 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH0", 0x34190, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH1", 0x34194, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH2", 0x34198, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH3", 0x3419c, 0 },
+ { "MPS_PORT_TX_MAC_RELOAD_CH4", 0x341a0, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH0", 0x341a8, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH1", 0x341ac, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH2", 0x341b0, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH3", 0x341b4, 0 },
+ { "MPS_PORT_TX_LPBK_RELOAD_CH4", 0x341b8, 0 },
+ { "MPS_PORT_TX_FIFO_CTL", 0x341c4, 0 },
+ { "OUT_TH", 22, 8 },
+ { "IN_TH", 14, 8 },
+ { "FifoTh", 5, 9 },
+ { "FifoEn", 4, 1 },
+ { "MaxPktCnt", 0, 4 },
+ { "MPS_PORT_FPGA_PAUSE_CTL", 0x341c8, 0 },
+ { "MPS_PORT_TX_PAUSE_PENDING_STATUS", 0x341d0, 0 },
+ { "off_pending", 8, 8 },
+ { "on_pending", 0, 8 },
+ { "MPS_TRC_CFG", 0x9800, 0 },
+ { "TrcMultiRSSFilter", 5, 1 },
+ { "TrcFifoEmpty", 4, 1 },
+ { "TrcIgnoreDropInput", 3, 1 },
+ { "TrcKeepDuplicates", 2, 1 },
+ { "TrcEn", 1, 1 },
+ { "TrcMultiFilter", 0, 1 },
+ { "MPS_TRC_FILTER0_RSS_HASH", 0x9804, 0 },
+ { "MPS_TRC_FILTER0_RSS_CONTROL", 0x9808, 0 },
+ { "RssControl", 16, 8 },
+ { "QueueNumber", 0, 16 },
+ { "MPS_TRC_FILTER1_RSS_HASH", 0x9ff0, 0 },
+ { "MPS_TRC_FILTER1_RSS_CONTROL", 0x9ff4, 0 },
+ { "RssControl", 16, 8 },
+ { "QueueNumber", 0, 16 },
+ { "MPS_TRC_FILTER2_RSS_HASH", 0x9ff8, 0 },
+ { "MPS_TRC_FILTER2_RSS_CONTROL", 0x9ffc, 0 },
+ { "RssControl", 16, 8 },
+ { "QueueNumber", 0, 16 },
+ { "MPS_TRC_FILTER3_RSS_HASH", 0xa000, 0 },
+ { "MPS_TRC_FILTER3_RSS_CONTROL", 0xa004, 0 },
+ { "RssControl", 16, 8 },
+ { "QueueNumber", 0, 16 },
+ { "MPS_TRC_RSS_HASH", 0xa008, 0 },
+ { "MPS_TRC_RSS_CONTROL", 0xa00c, 0 },
+ { "RssControl", 16, 8 },
+ { "QueueNumber", 0, 16 },
+ { "MPS_TRC_VF_OFF_FILTER_0", 0xa010, 0 },
+ { "TrcMPS2TP_MacOnly", 22, 1 },
+ { "TrcAllMPS2TP", 21, 1 },
+ { "TrcAllTP2MPS", 20, 1 },
+ { "TrcAllVf", 19, 1 },
+ { "OffEn", 18, 1 },
+ { "VfFiltEn", 17, 1 },
+ { "VfFiltMask", 9, 8 },
+ { "VfFiltValid", 8, 1 },
+ { "VfFiltData", 0, 8 },
+ { "MPS_TRC_VF_OFF_FILTER_1", 0xa014, 0 },
+ { "TrcMPS2TP_MacOnly", 22, 1 },
+ { "TrcAllMPS2TP", 21, 1 },
+ { "TrcAllTP2MPS", 20, 1 },
+ { "TrcAllVf", 19, 1 },
+ { "OffEn", 18, 1 },
+ { "VfFiltEn", 17, 1 },
+ { "VfFiltMask", 9, 8 },
+ { "VfFiltValid", 8, 1 },
+ { "VfFiltData", 0, 8 },
+ { "MPS_TRC_VF_OFF_FILTER_2", 0xa018, 0 },
+ { "TrcMPS2TP_MacOnly", 22, 1 },
+ { "TrcAllMPS2TP", 21, 1 },
+ { "TrcAllTP2MPS", 20, 1 },
+ { "TrcAllVf", 19, 1 },
+ { "OffEn", 18, 1 },
+ { "VfFiltEn", 17, 1 },
+ { "VfFiltMask", 9, 8 },
+ { "VfFiltValid", 8, 1 },
+ { "VfFiltData", 0, 8 },
+ { "MPS_TRC_VF_OFF_FILTER_3", 0xa01c, 0 },
+ { "TrcMPS2TP_MacOnly", 22, 1 },
+ { "TrcAllMPS2TP", 21, 1 },
+ { "TrcAllTP2MPS", 20, 1 },
+ { "TrcAllVf", 19, 1 },
+ { "OffEn", 18, 1 },
+ { "VfFiltEn", 17, 1 },
+ { "VfFiltMask", 9, 8 },
+ { "VfFiltValid", 8, 1 },
+ { "VfFiltData", 0, 8 },
+ { "MPS_TRC_CGEN", 0xa020, 0 },
+ { "MPS_TRC_FILTER_MATCH_CTL_A", 0x9810, 0 },
+ { "TfInsertActLen", 27, 1 },
+ { "TfInsertTimer", 26, 1 },
+ { "TfInvertMatch", 25, 1 },
+ { "TfPktTooLarge", 24, 1 },
+ { "TfEn", 23, 1 },
+ { "TfPort", 18, 5 },
+ { "TfDrop", 17, 1 },
+ { "TfSopEopErr", 16, 1 },
+ { "TfLength", 8, 5 },
+ { "TfOffset", 0, 5 },
+ { "MPS_TRC_FILTER_MATCH_CTL_A", 0x9814, 0 },
+ { "TfInsertActLen", 27, 1 },
+ { "TfInsertTimer", 26, 1 },
+ { "TfInvertMatch", 25, 1 },
+ { "TfPktTooLarge", 24, 1 },
+ { "TfEn", 23, 1 },
+ { "TfPort", 18, 5 },
+ { "TfDrop", 17, 1 },
+ { "TfSopEopErr", 16, 1 },
+ { "TfLength", 8, 5 },
+ { "TfOffset", 0, 5 },
+ { "MPS_TRC_FILTER_MATCH_CTL_A", 0x9818, 0 },
+ { "TfInsertActLen", 27, 1 },
+ { "TfInsertTimer", 26, 1 },
+ { "TfInvertMatch", 25, 1 },
+ { "TfPktTooLarge", 24, 1 },
+ { "TfEn", 23, 1 },
+ { "TfPort", 18, 5 },
+ { "TfDrop", 17, 1 },
+ { "TfSopEopErr", 16, 1 },
+ { "TfLength", 8, 5 },
+ { "TfOffset", 0, 5 },
+ { "MPS_TRC_FILTER_MATCH_CTL_A", 0x981c, 0 },
+ { "TfInsertActLen", 27, 1 },
+ { "TfInsertTimer", 26, 1 },
+ { "TfInvertMatch", 25, 1 },
+ { "TfPktTooLarge", 24, 1 },
+ { "TfEn", 23, 1 },
+ { "TfPort", 18, 5 },
+ { "TfDrop", 17, 1 },
+ { "TfSopEopErr", 16, 1 },
+ { "TfLength", 8, 5 },
+ { "TfOffset", 0, 5 },
+ { "MPS_TRC_FILTER_MATCH_CTL_B", 0x9820, 0 },
+ { "TfMinPktSize", 16, 9 },
+ { "TfCaptureMax", 0, 14 },
+ { "MPS_TRC_FILTER_MATCH_CTL_B", 0x9824, 0 },
+ { "TfMinPktSize", 16, 9 },
+ { "TfCaptureMax", 0, 14 },
+ { "MPS_TRC_FILTER_MATCH_CTL_B", 0x9828, 0 },
+ { "TfMinPktSize", 16, 9 },
+ { "TfCaptureMax", 0, 14 },
+ { "MPS_TRC_FILTER_MATCH_CTL_B", 0x982c, 0 },
+ { "TfMinPktSize", 16, 9 },
+ { "TfCaptureMax", 0, 14 },
+ { "MPS_TRC_FILTER_RUNT_CTL", 0x9830, 0 },
+ { "MPS_TRC_FILTER_RUNT_CTL", 0x9834, 0 },
+ { "MPS_TRC_FILTER_RUNT_CTL", 0x9838, 0 },
+ { "MPS_TRC_FILTER_RUNT_CTL", 0x983c, 0 },
+ { "MPS_TRC_FILTER_DROP", 0x9840, 0 },
+ { "TfDropInpCount", 16, 16 },
+ { "TfDropBufferCount", 0, 16 },
+ { "MPS_TRC_FILTER_DROP", 0x9844, 0 },
+ { "TfDropInpCount", 16, 16 },
+ { "TfDropBufferCount", 0, 16 },
+ { "MPS_TRC_FILTER_DROP", 0x9848, 0 },
+ { "TfDropInpCount", 16, 16 },
+ { "TfDropBufferCount", 0, 16 },
+ { "MPS_TRC_FILTER_DROP", 0x984c, 0 },
+ { "TfDropInpCount", 16, 16 },
+ { "TfDropBufferCount", 0, 16 },
+ { "MPS_TRC_PERR_INJECT", 0x9850, 0 },
+ { "MemSel", 1, 4 },
+ { "InjectDataErr", 0, 1 },
+ { "MPS_TRC_PERR_ENABLE", 0x9854, 0 },
+ { "MiscPerr", 8, 1 },
+ { "PktFifo", 4, 4 },
+ { "FiltMem", 0, 4 },
+ { "MPS_TRC_INT_ENABLE", 0x9858, 0 },
+ { "PLErrEnb", 9, 1 },
+ { "MiscPerr", 8, 1 },
+ { "PktFifo", 4, 4 },
+ { "FiltMem", 0, 4 },
+ { "MPS_TRC_INT_CAUSE", 0x985c, 0 },
+ { "PLErrEnb", 9, 1 },
+ { "MiscPerr", 8, 1 },
+ { "PktFifo", 4, 4 },
+ { "FiltMem", 0, 4 },
+ { "MPS_TRC_TIMESTAMP_L", 0x9860, 0 },
+ { "MPS_TRC_TIMESTAMP_H", 0x9864, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c00, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c04, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c08, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c0c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c10, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c14, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c18, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c1c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c20, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c24, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c28, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c2c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c30, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c34, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c38, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c3c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c40, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c44, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c48, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c4c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c50, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c54, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c58, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c5c, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c60, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c64, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c68, 0 },
+ { "MPS_TRC_FILTER0_MATCH", 0x9c6c, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c80, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c84, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c88, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c8c, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c90, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c94, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c98, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9c9c, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ca0, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ca4, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ca8, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cac, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cb0, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cb4, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cb8, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cbc, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cc0, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cc4, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cc8, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ccc, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cd0, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cd4, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cd8, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cdc, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ce0, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ce4, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9ce8, 0 },
+ { "MPS_TRC_FILTER0_DONT_CARE", 0x9cec, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d00, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d04, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d08, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d0c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d10, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d14, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d18, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d1c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d20, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d24, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d28, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d2c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d30, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d34, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d38, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d3c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d40, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d44, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d48, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d4c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d50, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d54, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d58, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d5c, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d60, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d64, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d68, 0 },
+ { "MPS_TRC_FILTER1_MATCH", 0x9d6c, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d80, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d84, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d88, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d8c, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d90, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d94, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d98, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9d9c, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9da0, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9da4, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9da8, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dac, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9db0, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9db4, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9db8, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dbc, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dc0, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dc4, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dc8, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dcc, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dd0, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dd4, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dd8, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9ddc, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9de0, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9de4, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9de8, 0 },
+ { "MPS_TRC_FILTER1_DONT_CARE", 0x9dec, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e00, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e04, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e08, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e0c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e10, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e14, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e18, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e1c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e20, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e24, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e28, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e2c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e30, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e34, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e38, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e3c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e40, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e44, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e48, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e4c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e50, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e54, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e58, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e5c, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e60, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e64, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e68, 0 },
+ { "MPS_TRC_FILTER2_MATCH", 0x9e6c, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e80, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e84, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e88, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e8c, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e90, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e94, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e98, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9e9c, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ea0, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ea4, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ea8, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9eac, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9eb0, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9eb4, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9eb8, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ebc, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ec0, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ec4, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ec8, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ecc, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ed0, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ed4, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ed8, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9edc, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ee0, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ee4, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9ee8, 0 },
+ { "MPS_TRC_FILTER2_DONT_CARE", 0x9eec, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f00, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f04, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f08, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f0c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f10, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f14, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f18, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f1c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f20, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f24, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f28, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f2c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f30, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f34, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f38, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f3c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f40, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f44, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f48, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f4c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f50, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f54, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f58, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f5c, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f60, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f64, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f68, 0 },
+ { "MPS_TRC_FILTER3_MATCH", 0x9f6c, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f80, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f84, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f88, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f8c, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f90, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f94, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f98, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9f9c, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fa0, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fa4, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fa8, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fac, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fb0, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fb4, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fb8, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fbc, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fc0, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fc4, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fc8, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fcc, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fd0, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fd4, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fd8, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fdc, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fe0, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fe4, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fe8, 0 },
+ { "MPS_TRC_FILTER3_DONT_CARE", 0x9fec, 0 },
+ { "MPS_STAT_CTL", 0x9600, 0 },
+ { "StatStopCtrl", 10, 1 },
+ { "StopStat", 9, 1 },
+ { "StatWriteCtrl", 8, 1 },
+ { "CountLbPF", 7, 1 },
+ { "CountLbVF", 6, 1 },
+ { "CountPauseMCRx", 5, 1 },
+ { "CountPauseStatRx", 4, 1 },
+ { "CountPauseMCTx", 3, 1 },
+ { "CountPauseStatTx", 2, 1 },
+ { "CountVFinPF", 1, 1 },
+ { "LpbkErrStat", 0, 1 },
+ { "MPS_STAT_INT_ENABLE", 0x9608, 0 },
+ { "MPS_STAT_INT_CAUSE", 0x960c, 0 },
+ { "MPS_STAT_PERR_INT_ENABLE_SRAM", 0x9610, 0 },
+ { "Rxbg", 27, 2 },
+ { "Rxpf", 22, 5 },
+ { "Txpf", 18, 4 },
+ { "Rxport", 11, 7 },
+ { "Lbport", 6, 5 },
+ { "Txport", 0, 6 },
+ { "MPS_STAT_PERR_INT_CAUSE_SRAM", 0x9614, 0 },
+ { "Rxbg", 27, 2 },
+ { "Rxpf", 22, 5 },
+ { "Txpf", 18, 4 },
+ { "Rxport", 11, 7 },
+ { "Lbport", 6, 5 },
+ { "Txport", 0, 6 },
+ { "MPS_STAT_PERR_ENABLE_SRAM", 0x9618, 0 },
+ { "Rxbg", 27, 2 },
+ { "Rxpf", 22, 5 },
+ { "Txpf", 18, 4 },
+ { "Rxport", 11, 7 },
+ { "Lbport", 6, 5 },
+ { "Txport", 0, 6 },
+ { "MPS_STAT_PERR_INT_ENABLE_TX_FIFO", 0x961c, 0 },
+ { "TxCh", 20, 4 },
+ { "Tx", 12, 8 },
+ { "Pause", 8, 4 },
+ { "Drop", 0, 8 },
+ { "MPS_STAT_PERR_INT_CAUSE_TX_FIFO", 0x9620, 0 },
+ { "TxCh", 20, 4 },
+ { "Tx", 12, 8 },
+ { "Pause", 8, 4 },
+ { "Drop", 0, 8 },
+ { "MPS_STAT_PERR_ENABLE_TX_FIFO", 0x9624, 0 },
+ { "TxCh", 20, 4 },
+ { "Tx", 12, 8 },
+ { "Pause", 8, 4 },
+ { "Drop", 0, 8 },
+ { "MPS_STAT_PERR_INT_ENABLE_RX_FIFO", 0x9628, 0 },
+ { "Pause", 20, 4 },
+ { "Lpbk", 16, 4 },
+ { "Nq", 8, 8 },
+ { "PV", 4, 4 },
+ { "Mac", 0, 4 },
+ { "MPS_STAT_PERR_INT_CAUSE_RX_FIFO", 0x962c, 0 },
+ { "Pause", 20, 4 },
+ { "Lpbk", 16, 4 },
+ { "Nq", 8, 8 },
+ { "PV", 4, 4 },
+ { "Mac", 0, 4 },
+ { "MPS_STAT_PERR_ENABLE_RX_FIFO", 0x9630, 0 },
+ { "Pause", 20, 4 },
+ { "Lpbk", 16, 4 },
+ { "Nq", 8, 8 },
+ { "PV", 4, 4 },
+ { "Mac", 0, 4 },
+ { "MPS_STAT_PERR_INJECT", 0x9634, 0 },
+ { "MemSel", 1, 7 },
+ { "InjectDataErr", 0, 1 },
+ { "MPS_STAT_DEBUG_SUB_SEL", 0x9638, 0 },
+ { "SubPrtH", 5, 5 },
+ { "SubPrtL", 0, 5 },
+ { "MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L", 0x9640, 0 },
+ { "MPS_STAT_RX_BG_0_MAC_DROP_FRAME_H", 0x9644, 0 },
+ { "MPS_STAT_RX_BG_1_MAC_DROP_FRAME_L", 0x9648, 0 },
+ { "MPS_STAT_RX_BG_1_MAC_DROP_FRAME_H", 0x964c, 0 },
+ { "MPS_STAT_RX_BG_2_MAC_DROP_FRAME_L", 0x9650, 0 },
+ { "MPS_STAT_RX_BG_2_MAC_DROP_FRAME_H", 0x9654, 0 },
+ { "MPS_STAT_RX_BG_3_MAC_DROP_FRAME_L", 0x9658, 0 },
+ { "MPS_STAT_RX_BG_3_MAC_DROP_FRAME_H", 0x965c, 0 },
+ { "MPS_STAT_RX_BG_0_LB_DROP_FRAME_L", 0x9660, 0 },
+ { "MPS_STAT_RX_BG_0_LB_DROP_FRAME_H", 0x9664, 0 },
+ { "MPS_STAT_RX_BG_1_LB_DROP_FRAME_L", 0x9668, 0 },
+ { "MPS_STAT_RX_BG_1_LB_DROP_FRAME_H", 0x966c, 0 },
+ { "MPS_STAT_RX_BG_2_LB_DROP_FRAME_L", 0x9670, 0 },
+ { "MPS_STAT_RX_BG_2_LB_DROP_FRAME_H", 0x9674, 0 },
+ { "MPS_STAT_RX_BG_3_LB_DROP_FRAME_L", 0x9678, 0 },
+ { "MPS_STAT_RX_BG_3_LB_DROP_FRAME_H", 0x967c, 0 },
+ { "MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L", 0x9680, 0 },
+ { "MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_H", 0x9684, 0 },
+ { "MPS_STAT_RX_BG_1_MAC_TRUNC_FRAME_L", 0x9688, 0 },
+ { "MPS_STAT_RX_BG_1_MAC_TRUNC_FRAME_H", 0x968c, 0 },
+ { "MPS_STAT_RX_BG_2_MAC_TRUNC_FRAME_L", 0x9690, 0 },
+ { "MPS_STAT_RX_BG_2_MAC_TRUNC_FRAME_H", 0x9694, 0 },
+ { "MPS_STAT_RX_BG_3_MAC_TRUNC_FRAME_L", 0x9698, 0 },
+ { "MPS_STAT_RX_BG_3_MAC_TRUNC_FRAME_H", 0x969c, 0 },
+ { "MPS_STAT_RX_BG_0_LB_TRUNC_FRAME_L", 0x96a0, 0 },
+ { "MPS_STAT_RX_BG_0_LB_TRUNC_FRAME_H", 0x96a4, 0 },
+ { "MPS_STAT_RX_BG_1_LB_TRUNC_FRAME_L", 0x96a8, 0 },
+ { "MPS_STAT_RX_BG_1_LB_TRUNC_FRAME_H", 0x96ac, 0 },
+ { "MPS_STAT_RX_BG_2_LB_TRUNC_FRAME_L", 0x96b0, 0 },
+ { "MPS_STAT_RX_BG_2_LB_TRUNC_FRAME_H", 0x96b4, 0 },
+ { "MPS_STAT_RX_BG_3_LB_TRUNC_FRAME_L", 0x96b8, 0 },
+ { "MPS_STAT_RX_BG_3_LB_TRUNC_FRAME_H", 0x96bc, 0 },
+ { "MPS_STAT_PERR_INT_ENABLE_SRAM1", 0x96c0, 0 },
+ { "Rxvf", 5, 3 },
+ { "Txvf", 0, 5 },
+ { "MPS_STAT_PERR_INT_CAUSE_SRAM1", 0x96c4, 0 },
+ { "Rxvf", 5, 3 },
+ { "Txvf", 0, 5 },
+ { "MPS_STAT_PERR_ENABLE_SRAM1", 0x96c8, 0 },
+ { "Rxvf", 5, 3 },
+ { "Txvf", 0, 5 },
+ { "MPS_STAT_STOP_UPD_BG", 0x96cc, 0 },
+ { "MPS_STAT_STOP_UPD_PORT", 0x96d0, 0 },
+ { "PtLpbk", 8, 4 },
+ { "PtTx", 4, 4 },
+ { "PtRx", 0, 4 },
+ { "MPS_STAT_STOP_UPD_PF", 0x96d4, 0 },
+ { "PFTx", 8, 8 },
+ { "PFRx", 0, 8 },
+ { "MPS_STAT_STOP_UPD_TX_VF_0_31", 0x96d8, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_32_63", 0x96dc, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_64_95", 0x96e0, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_96_127", 0x96e4, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_128_159", 0x9710, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_160_191", 0x9714, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_192_223", 0x9718, 0 },
+ { "MPS_STAT_STOP_UPD_TX_VF_224_255", 0x971c, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_0_31", 0x96e8, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_32_63", 0x96ec, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_64_95", 0x96f0, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_96_127", 0x96f4, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_128_159", 0x96f8, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_160_191", 0x96fc, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_192_223", 0x9700, 0 },
+ { "MPS_STAT_STOP_UPD_RX_VF_224_255", 0x9704, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BYTES_L", 0x30400, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BYTES_H", 0x30404, 0 },
+ { "MPS_PORT_STAT_TX_PORT_FRAMES_L", 0x30408, 0 },
+ { "MPS_PORT_STAT_TX_PORT_FRAMES_H", 0x3040c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BCAST_L", 0x30410, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BCAST_H", 0x30414, 0 },
+ { "MPS_PORT_STAT_TX_PORT_MCAST_L", 0x30418, 0 },
+ { "MPS_PORT_STAT_TX_PORT_MCAST_H", 0x3041c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_UCAST_L", 0x30420, 0 },
+ { "MPS_PORT_STAT_TX_PORT_UCAST_H", 0x30424, 0 },
+ { "MPS_PORT_STAT_TX_PORT_ERROR_L", 0x30428, 0 },
+ { "MPS_PORT_STAT_TX_PORT_ERROR_H", 0x3042c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_64B_L", 0x30430, 0 },
+ { "MPS_PORT_STAT_TX_PORT_64B_H", 0x30434, 0 },
+ { "MPS_PORT_STAT_TX_PORT_65B_127B_L", 0x30438, 0 },
+ { "MPS_PORT_STAT_TX_PORT_65B_127B_H", 0x3043c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_128B_255B_L", 0x30440, 0 },
+ { "MPS_PORT_STAT_TX_PORT_128B_255B_H", 0x30444, 0 },
+ { "MPS_PORT_STAT_TX_PORT_256B_511B_L", 0x30448, 0 },
+ { "MPS_PORT_STAT_TX_PORT_256B_511B_H", 0x3044c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_512B_1023B_L", 0x30450, 0 },
+ { "MPS_PORT_STAT_TX_PORT_512B_1023B_H", 0x30454, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1024B_1518B_L", 0x30458, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1024B_1518B_H", 0x3045c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1519B_MAX_L", 0x30460, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1519B_MAX_H", 0x30464, 0 },
+ { "MPS_PORT_STAT_TX_PORT_DROP_L", 0x30468, 0 },
+ { "MPS_PORT_STAT_TX_PORT_DROP_H", 0x3046c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PAUSE_L", 0x30470, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PAUSE_H", 0x30474, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP0_L", 0x30478, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP0_H", 0x3047c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP1_L", 0x30480, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP1_H", 0x30484, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP2_L", 0x30488, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP2_H", 0x3048c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP3_L", 0x30490, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP3_H", 0x30494, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP4_L", 0x30498, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP4_H", 0x3049c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP5_L", 0x304a0, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP5_H", 0x304a4, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP6_L", 0x304a8, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP6_H", 0x304ac, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP7_L", 0x304b0, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP7_H", 0x304b4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BYTES_L", 0x304c0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BYTES_H", 0x304c4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_FRAMES_L", 0x304c8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_FRAMES_H", 0x304cc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BCAST_L", 0x304d0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BCAST_H", 0x304d4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_MCAST_L", 0x304d8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_MCAST_H", 0x304dc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_UCAST_L", 0x304e0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_UCAST_H", 0x304e4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_ERROR_L", 0x304e8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_ERROR_H", 0x304ec, 0 },
+ { "MPS_PORT_STAT_LB_PORT_64B_L", 0x304f0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_64B_H", 0x304f4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_65B_127B_L", 0x304f8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_65B_127B_H", 0x304fc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_128B_255B_L", 0x30500, 0 },
+ { "MPS_PORT_STAT_LB_PORT_128B_255B_H", 0x30504, 0 },
+ { "MPS_PORT_STAT_LB_PORT_256B_511B_L", 0x30508, 0 },
+ { "MPS_PORT_STAT_LB_PORT_256B_511B_H", 0x3050c, 0 },
+ { "MPS_PORT_STAT_LB_PORT_512B_1023B_L", 0x30510, 0 },
+ { "MPS_PORT_STAT_LB_PORT_512B_1023B_H", 0x30514, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1024B_1518B_L", 0x30518, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1024B_1518B_H", 0x3051c, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1519B_MAX_L", 0x30520, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1519B_MAX_H", 0x30524, 0 },
+ { "MPS_PORT_STAT_LB_PORT_DROP_FRAMES_L", 0x30528, 0 },
+ { "MPS_PORT_STAT_LB_PORT_DROP_FRAMES_H", 0x3052c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BYTES_L", 0x30540, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BYTES_H", 0x30544, 0 },
+ { "MPS_PORT_STAT_RX_PORT_FRAMES_L", 0x30548, 0 },
+ { "MPS_PORT_STAT_RX_PORT_FRAMES_H", 0x3054c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BCAST_L", 0x30550, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BCAST_H", 0x30554, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MCAST_L", 0x30558, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MCAST_H", 0x3055c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_UCAST_L", 0x30560, 0 },
+ { "MPS_PORT_STAT_RX_PORT_UCAST_H", 0x30564, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_ERROR_L", 0x30568, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_ERROR_H", 0x3056c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L", 0x30570, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_H", 0x30574, 0 },
+ { "MPS_PORT_STAT_RX_PORT_CRC_ERROR_L", 0x30578, 0 },
+ { "MPS_PORT_STAT_RX_PORT_CRC_ERROR_H", 0x3057c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LEN_ERROR_L", 0x30580, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LEN_ERROR_H", 0x30584, 0 },
+ { "MPS_PORT_STAT_RX_PORT_SYM_ERROR_L", 0x30588, 0 },
+ { "MPS_PORT_STAT_RX_PORT_SYM_ERROR_H", 0x3058c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_64B_L", 0x30590, 0 },
+ { "MPS_PORT_STAT_RX_PORT_64B_H", 0x30594, 0 },
+ { "MPS_PORT_STAT_RX_PORT_65B_127B_L", 0x30598, 0 },
+ { "MPS_PORT_STAT_RX_PORT_65B_127B_H", 0x3059c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_128B_255B_L", 0x305a0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_128B_255B_H", 0x305a4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_256B_511B_L", 0x305a8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_256B_511B_H", 0x305ac, 0 },
+ { "MPS_PORT_STAT_RX_PORT_512B_1023B_L", 0x305b0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_512B_1023B_H", 0x305b4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1024B_1518B_L", 0x305b8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1024B_1518B_H", 0x305bc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1519B_MAX_L", 0x305c0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1519B_MAX_H", 0x305c4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PAUSE_L", 0x305c8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PAUSE_H", 0x305cc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP0_L", 0x305d0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP0_H", 0x305d4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP1_L", 0x305d8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP1_H", 0x305dc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP2_L", 0x305e0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP2_H", 0x305e4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP3_L", 0x305e8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP3_H", 0x305ec, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP4_L", 0x305f0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP4_H", 0x305f4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP5_L", 0x305f8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP5_H", 0x305fc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP6_L", 0x30600, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP6_H", 0x30604, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP7_L", 0x30608, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP7_H", 0x3060c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LESS_64B_L", 0x30610, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LESS_64B_H", 0x30614, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MAC_ERROR_L", 0x30618, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MAC_ERROR_H", 0x3061c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BYTES_L", 0x34400, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BYTES_H", 0x34404, 0 },
+ { "MPS_PORT_STAT_TX_PORT_FRAMES_L", 0x34408, 0 },
+ { "MPS_PORT_STAT_TX_PORT_FRAMES_H", 0x3440c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BCAST_L", 0x34410, 0 },
+ { "MPS_PORT_STAT_TX_PORT_BCAST_H", 0x34414, 0 },
+ { "MPS_PORT_STAT_TX_PORT_MCAST_L", 0x34418, 0 },
+ { "MPS_PORT_STAT_TX_PORT_MCAST_H", 0x3441c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_UCAST_L", 0x34420, 0 },
+ { "MPS_PORT_STAT_TX_PORT_UCAST_H", 0x34424, 0 },
+ { "MPS_PORT_STAT_TX_PORT_ERROR_L", 0x34428, 0 },
+ { "MPS_PORT_STAT_TX_PORT_ERROR_H", 0x3442c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_64B_L", 0x34430, 0 },
+ { "MPS_PORT_STAT_TX_PORT_64B_H", 0x34434, 0 },
+ { "MPS_PORT_STAT_TX_PORT_65B_127B_L", 0x34438, 0 },
+ { "MPS_PORT_STAT_TX_PORT_65B_127B_H", 0x3443c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_128B_255B_L", 0x34440, 0 },
+ { "MPS_PORT_STAT_TX_PORT_128B_255B_H", 0x34444, 0 },
+ { "MPS_PORT_STAT_TX_PORT_256B_511B_L", 0x34448, 0 },
+ { "MPS_PORT_STAT_TX_PORT_256B_511B_H", 0x3444c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_512B_1023B_L", 0x34450, 0 },
+ { "MPS_PORT_STAT_TX_PORT_512B_1023B_H", 0x34454, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1024B_1518B_L", 0x34458, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1024B_1518B_H", 0x3445c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1519B_MAX_L", 0x34460, 0 },
+ { "MPS_PORT_STAT_TX_PORT_1519B_MAX_H", 0x34464, 0 },
+ { "MPS_PORT_STAT_TX_PORT_DROP_L", 0x34468, 0 },
+ { "MPS_PORT_STAT_TX_PORT_DROP_H", 0x3446c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PAUSE_L", 0x34470, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PAUSE_H", 0x34474, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP0_L", 0x34478, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP0_H", 0x3447c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP1_L", 0x34480, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP1_H", 0x34484, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP2_L", 0x34488, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP2_H", 0x3448c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP3_L", 0x34490, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP3_H", 0x34494, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP4_L", 0x34498, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP4_H", 0x3449c, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP5_L", 0x344a0, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP5_H", 0x344a4, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP6_L", 0x344a8, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP6_H", 0x344ac, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP7_L", 0x344b0, 0 },
+ { "MPS_PORT_STAT_TX_PORT_PPP7_H", 0x344b4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BYTES_L", 0x344c0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BYTES_H", 0x344c4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_FRAMES_L", 0x344c8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_FRAMES_H", 0x344cc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BCAST_L", 0x344d0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_BCAST_H", 0x344d4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_MCAST_L", 0x344d8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_MCAST_H", 0x344dc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_UCAST_L", 0x344e0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_UCAST_H", 0x344e4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_ERROR_L", 0x344e8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_ERROR_H", 0x344ec, 0 },
+ { "MPS_PORT_STAT_LB_PORT_64B_L", 0x344f0, 0 },
+ { "MPS_PORT_STAT_LB_PORT_64B_H", 0x344f4, 0 },
+ { "MPS_PORT_STAT_LB_PORT_65B_127B_L", 0x344f8, 0 },
+ { "MPS_PORT_STAT_LB_PORT_65B_127B_H", 0x344fc, 0 },
+ { "MPS_PORT_STAT_LB_PORT_128B_255B_L", 0x34500, 0 },
+ { "MPS_PORT_STAT_LB_PORT_128B_255B_H", 0x34504, 0 },
+ { "MPS_PORT_STAT_LB_PORT_256B_511B_L", 0x34508, 0 },
+ { "MPS_PORT_STAT_LB_PORT_256B_511B_H", 0x3450c, 0 },
+ { "MPS_PORT_STAT_LB_PORT_512B_1023B_L", 0x34510, 0 },
+ { "MPS_PORT_STAT_LB_PORT_512B_1023B_H", 0x34514, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1024B_1518B_L", 0x34518, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1024B_1518B_H", 0x3451c, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1519B_MAX_L", 0x34520, 0 },
+ { "MPS_PORT_STAT_LB_PORT_1519B_MAX_H", 0x34524, 0 },
+ { "MPS_PORT_STAT_LB_PORT_DROP_FRAMES_L", 0x34528, 0 },
+ { "MPS_PORT_STAT_LB_PORT_DROP_FRAMES_H", 0x3452c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BYTES_L", 0x34540, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BYTES_H", 0x34544, 0 },
+ { "MPS_PORT_STAT_RX_PORT_FRAMES_L", 0x34548, 0 },
+ { "MPS_PORT_STAT_RX_PORT_FRAMES_H", 0x3454c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BCAST_L", 0x34550, 0 },
+ { "MPS_PORT_STAT_RX_PORT_BCAST_H", 0x34554, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MCAST_L", 0x34558, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MCAST_H", 0x3455c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_UCAST_L", 0x34560, 0 },
+ { "MPS_PORT_STAT_RX_PORT_UCAST_H", 0x34564, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_ERROR_L", 0x34568, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_ERROR_H", 0x3456c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L", 0x34570, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_H", 0x34574, 0 },
+ { "MPS_PORT_STAT_RX_PORT_CRC_ERROR_L", 0x34578, 0 },
+ { "MPS_PORT_STAT_RX_PORT_CRC_ERROR_H", 0x3457c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LEN_ERROR_L", 0x34580, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LEN_ERROR_H", 0x34584, 0 },
+ { "MPS_PORT_STAT_RX_PORT_SYM_ERROR_L", 0x34588, 0 },
+ { "MPS_PORT_STAT_RX_PORT_SYM_ERROR_H", 0x3458c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_64B_L", 0x34590, 0 },
+ { "MPS_PORT_STAT_RX_PORT_64B_H", 0x34594, 0 },
+ { "MPS_PORT_STAT_RX_PORT_65B_127B_L", 0x34598, 0 },
+ { "MPS_PORT_STAT_RX_PORT_65B_127B_H", 0x3459c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_128B_255B_L", 0x345a0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_128B_255B_H", 0x345a4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_256B_511B_L", 0x345a8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_256B_511B_H", 0x345ac, 0 },
+ { "MPS_PORT_STAT_RX_PORT_512B_1023B_L", 0x345b0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_512B_1023B_H", 0x345b4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1024B_1518B_L", 0x345b8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1024B_1518B_H", 0x345bc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1519B_MAX_L", 0x345c0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_1519B_MAX_H", 0x345c4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PAUSE_L", 0x345c8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PAUSE_H", 0x345cc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP0_L", 0x345d0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP0_H", 0x345d4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP1_L", 0x345d8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP1_H", 0x345dc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP2_L", 0x345e0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP2_H", 0x345e4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP3_L", 0x345e8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP3_H", 0x345ec, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP4_L", 0x345f0, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP4_H", 0x345f4, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP5_L", 0x345f8, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP5_H", 0x345fc, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP6_L", 0x34600, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP6_H", 0x34604, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP7_L", 0x34608, 0 },
+ { "MPS_PORT_STAT_RX_PORT_PPP7_H", 0x3460c, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LESS_64B_L", 0x34610, 0 },
+ { "MPS_PORT_STAT_RX_PORT_LESS_64B_H", 0x34614, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MAC_ERROR_L", 0x34618, 0 },
+ { "MPS_PORT_STAT_RX_PORT_MAC_ERROR_H", 0x3461c, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1e300, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1e304, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1e308, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1e30c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1e310, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1e314, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1e318, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1e31c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1e320, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1e324, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1e328, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1e32c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1e330, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1e334, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1e338, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1e33c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1e340, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1e344, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1e348, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1e34c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1e350, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1e354, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1e358, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1e35c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1e360, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1e364, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1e368, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1e36c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1e370, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1e374, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1e378, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1e37c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1e380, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1e384, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1e700, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1e704, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1e708, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1e70c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1e710, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1e714, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1e718, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1e71c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1e720, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1e724, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1e728, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1e72c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1e730, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1e734, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1e738, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1e73c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1e740, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1e744, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1e748, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1e74c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1e750, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1e754, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1e758, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1e75c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1e760, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1e764, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1e768, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1e76c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1e770, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1e774, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1e778, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1e77c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1e780, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1e784, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1eb00, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1eb04, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1eb08, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1eb0c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1eb10, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1eb14, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1eb18, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1eb1c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1eb20, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1eb24, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1eb28, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1eb2c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1eb30, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1eb34, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1eb38, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1eb3c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1eb40, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1eb44, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1eb48, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1eb4c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1eb50, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1eb54, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1eb58, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1eb5c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1eb60, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1eb64, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1eb68, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1eb6c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1eb70, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1eb74, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1eb78, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1eb7c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1eb80, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1eb84, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1ef00, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1ef04, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1ef08, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1ef0c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1ef10, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1ef14, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1ef18, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1ef1c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1ef20, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1ef24, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1ef28, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1ef2c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1ef30, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1ef34, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1ef38, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1ef3c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1ef40, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1ef44, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1ef48, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1ef4c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1ef50, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1ef54, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1ef58, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1ef5c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1ef60, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1ef64, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1ef68, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1ef6c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1ef70, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1ef74, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1ef78, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1ef7c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1ef80, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1ef84, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1f300, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1f304, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1f308, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1f30c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1f310, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1f314, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1f318, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1f31c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1f320, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1f324, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1f328, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1f32c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1f330, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1f334, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1f338, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1f33c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1f340, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1f344, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1f348, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1f34c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1f350, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1f354, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1f358, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1f35c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1f360, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1f364, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1f368, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1f36c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1f370, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1f374, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1f378, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1f37c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1f380, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1f384, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1f700, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1f704, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1f708, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1f70c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1f710, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1f714, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1f718, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1f71c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1f720, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1f724, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1f728, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1f72c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1f730, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1f734, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1f738, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1f73c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1f740, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1f744, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1f748, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1f74c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1f750, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1f754, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1f758, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1f75c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1f760, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1f764, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1f768, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1f76c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1f770, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1f774, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1f778, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1f77c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1f780, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1f784, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1fb00, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1fb04, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1fb08, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1fb0c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1fb10, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1fb14, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1fb18, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1fb1c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1fb20, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1fb24, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1fb28, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1fb2c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1fb30, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1fb34, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1fb38, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1fb3c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1fb40, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1fb44, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1fb48, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1fb4c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1fb50, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1fb54, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1fb58, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1fb5c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1fb60, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1fb64, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1fb68, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1fb6c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1fb70, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1fb74, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1fb78, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1fb7c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1fb80, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1fb84, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_L", 0x1ff00, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_BYTES_H", 0x1ff04, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_L", 0x1ff08, 0 },
+ { "MPS_PF_STAT_TX_PF_BCAST_FRAMES_H", 0x1ff0c, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_L", 0x1ff10, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_BYTES_H", 0x1ff14, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_L", 0x1ff18, 0 },
+ { "MPS_PF_STAT_TX_PF_MCAST_FRAMES_H", 0x1ff1c, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_L", 0x1ff20, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_BYTES_H", 0x1ff24, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_L", 0x1ff28, 0 },
+ { "MPS_PF_STAT_TX_PF_UCAST_FRAMES_H", 0x1ff2c, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_L", 0x1ff30, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_BYTES_H", 0x1ff34, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_L", 0x1ff38, 0 },
+ { "MPS_PF_STAT_TX_PF_OFFLOAD_FRAMES_H", 0x1ff3c, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_L", 0x1ff40, 0 },
+ { "MPS_PF_STAT_RX_PF_BYTES_H", 0x1ff44, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_L", 0x1ff48, 0 },
+ { "MPS_PF_STAT_RX_PF_FRAMES_H", 0x1ff4c, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_L", 0x1ff50, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_BYTES_H", 0x1ff54, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_L", 0x1ff58, 0 },
+ { "MPS_PF_STAT_RX_PF_BCAST_FRAMES_H", 0x1ff5c, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_L", 0x1ff60, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_BYTES_H", 0x1ff64, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_L", 0x1ff68, 0 },
+ { "MPS_PF_STAT_RX_PF_MCAST_FRAMES_H", 0x1ff6c, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_L", 0x1ff70, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_BYTES_H", 0x1ff74, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_L", 0x1ff78, 0 },
+ { "MPS_PF_STAT_RX_PF_UCAST_FRAMES_H", 0x1ff7c, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_L", 0x1ff80, 0 },
+ { "MPS_PF_STAT_RX_PF_ERR_FRAMES_H", 0x1ff84, 0 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30200, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30204, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30208, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3020c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30210, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30214, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30218, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3021c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30220, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30224, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30228, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3022c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30230, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30234, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30238, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3023c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30240, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30244, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30248, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3024c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30250, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30254, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30258, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3025c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30260, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30264, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30268, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3026c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30270, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30274, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30278, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3027c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30280, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30284, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30288, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3028c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30290, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30294, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30298, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3029c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302a0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302a4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302a8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302ac, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302b0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302b4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302b8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302bc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302c0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302c4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302c8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302cc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302d0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302d4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302d8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302dc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302e0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302e4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302e8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302ec, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302f0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302f4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302f8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x302fc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x30300, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34200, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34204, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34208, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3420c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34210, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34214, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34218, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3421c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34220, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34224, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34228, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3422c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34230, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34234, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34238, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3423c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34240, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34244, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34248, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3424c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34250, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34254, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34258, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3425c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34260, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34264, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34268, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3426c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34270, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34274, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34278, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3427c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34280, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34284, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34288, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3428c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34290, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34294, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34298, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x3429c, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342a0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342a4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342a8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342ac, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342b0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342b4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342b8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342bc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342c0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342c4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342c8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342cc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342d0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342d4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342d8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342dc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342e0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342e4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342e8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342ec, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342f0, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342f4, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342f8, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x342fc, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_SRAM", 0x34300, 0 },
+ { "DisEncapOuterRplct", 23, 1 },
+ { "DisEncap", 22, 1 },
+ { "Valid", 21, 1 },
+ { "PortMap", 17, 4 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_HASH_CTL", 0x30304, 0 },
+ { "UnicastEnable", 31, 1 },
+ { "MPS_PORT_CLS_PROMISCUOUS_CTL", 0x30308, 0 },
+ { "Enable", 31, 1 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_BMC_MAC_ADDR_L", 0x3030c, 0 },
+ { "MPS_PORT_CLS_BMC_MAC_ADDR_H", 0x30310, 0 },
+ { "MatchAll", 18, 1 },
+ { "MatchBoth", 17, 1 },
+ { "Valid", 16, 1 },
+ { "DA", 0, 16 },
+ { "MPS_PORT_CLS_BMC_VLAN", 0x30314, 0 },
+ { "BMC_VLAN_SEL", 13, 1 },
+ { "Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PORT_CLS_CTL", 0x30318, 0 },
+ { "LPBK_TCAM1_HIT_PRIORITY", 14, 1 },
+ { "LPBK_TCAM0_HIT_PRIORITY", 13, 1 },
+ { "LPBK_TCAM_PRIORITY", 12, 1 },
+ { "LPBK_SMAC_TCAM_SEL", 10, 2 },
+ { "LPBK_DMAC_TCAM_SEL", 8, 2 },
+ { "TCAM1_HIT_PRIORITY", 7, 1 },
+ { "TCAM0_HIT_PRIORITY", 6, 1 },
+ { "TCAM_PRIORITY", 5, 1 },
+ { "SMAC_TCAM_SEL", 3, 2 },
+ { "DMAC_TCAM_SEL", 1, 2 },
+ { "PF_VLAN_SEL", 0, 1 },
+ { "MPS_PORT_CLS_NCSI_ETH_TYPE", 0x3031c, 0 },
+ { "EthType1", 16, 16 },
+ { "EthType2", 0, 16 },
+ { "MPS_PORT_CLS_NCSI_ETH_TYPE_EN", 0x30320, 0 },
+ { "EN1", 1, 1 },
+ { "EN2", 0, 1 },
+ { "MPS_PORT_CLS_HASH_CTL", 0x34304, 0 },
+ { "UnicastEnable", 31, 1 },
+ { "MPS_PORT_CLS_PROMISCUOUS_CTL", 0x34308, 0 },
+ { "Enable", 31, 1 },
+ { "MultiListen", 16, 1 },
+ { "Priority", 13, 3 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_PORT_CLS_BMC_MAC_ADDR_L", 0x3430c, 0 },
+ { "MPS_PORT_CLS_BMC_MAC_ADDR_H", 0x34310, 0 },
+ { "MatchAll", 18, 1 },
+ { "MatchBoth", 17, 1 },
+ { "Valid", 16, 1 },
+ { "DA", 0, 16 },
+ { "MPS_PORT_CLS_BMC_VLAN", 0x34314, 0 },
+ { "BMC_VLAN_SEL", 13, 1 },
+ { "Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_PORT_CLS_CTL", 0x34318, 0 },
+ { "LPBK_TCAM1_HIT_PRIORITY", 14, 1 },
+ { "LPBK_TCAM0_HIT_PRIORITY", 13, 1 },
+ { "LPBK_TCAM_PRIORITY", 12, 1 },
+ { "LPBK_SMAC_TCAM_SEL", 10, 2 },
+ { "LPBK_DMAC_TCAM_SEL", 8, 2 },
+ { "TCAM1_HIT_PRIORITY", 7, 1 },
+ { "TCAM0_HIT_PRIORITY", 6, 1 },
+ { "TCAM_PRIORITY", 5, 1 },
+ { "SMAC_TCAM_SEL", 3, 2 },
+ { "DMAC_TCAM_SEL", 1, 2 },
+ { "PF_VLAN_SEL", 0, 1 },
+ { "MPS_PORT_CLS_NCSI_ETH_TYPE", 0x3431c, 0 },
+ { "EthType1", 16, 16 },
+ { "EthType2", 0, 16 },
+ { "MPS_PORT_CLS_NCSI_ETH_TYPE_EN", 0x34320, 0 },
+ { "EN1", 1, 1 },
+ { "EN2", 0, 1 },
+ { "MPS_CLS_CTL", 0xd000, 0 },
+ { "VlanClsEn_in", 7, 1 },
+ { "DisTcamParChk", 6, 1 },
+ { "VlanLkpEn", 5, 1 },
+ { "MemWriteFault", 4, 1 },
+ { "MemWriteWaiting", 3, 1 },
+ { "CimNoPromiscuous", 2, 1 },
+ { "HypervisorOnly", 1, 1 },
+ { "VlanClsEn", 0, 1 },
+ { "MPS_CLS_ARB_WEIGHT", 0xd004, 0 },
+ { "PlWeight", 16, 5 },
+ { "CimWeight", 8, 5 },
+ { "LpbkWeight", 0, 5 },
+ { "MPS_CLS_NCSI_ETH_TYPE", 0xd008, 0 },
+ { "EthType1", 16, 16 },
+ { "EthType2", 0, 16 },
+ { "MPS_CLS_NCSI_ETH_TYPE_EN", 0xd00c, 0 },
+ { "EN1", 1, 1 },
+ { "EN2", 0, 1 },
+ { "MPS_CLS_BMC_MAC_ADDR_L", 0xd010, 0 },
+ { "MPS_CLS_BMC_MAC_ADDR_H", 0xd014, 0 },
+ { "MatchAll", 18, 1 },
+ { "MatchBoth", 17, 1 },
+ { "Valid", 16, 1 },
+ { "DA", 0, 16 },
+ { "MPS_CLS_BMC_VLAN", 0xd018, 0 },
+ { "Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_PERR_INJECT", 0xd01c, 0 },
+ { "MemSel", 1, 2 },
+ { "InjectDataErr", 0, 1 },
+ { "MPS_CLS_PERR_ENABLE", 0xd020, 0 },
+ { "HashSRAM", 2, 1 },
+ { "MatchTCAM", 1, 1 },
+ { "MatchSRAM", 0, 1 },
+ { "MPS_CLS_INT_ENABLE", 0xd024, 0 },
+ { "PLErrEnb", 3, 1 },
+ { "HashSRAM", 2, 1 },
+ { "MatchTCAM", 1, 1 },
+ { "MatchSRAM", 0, 1 },
+ { "MPS_CLS_INT_CAUSE", 0xd028, 0 },
+ { "PLErrEnb", 3, 1 },
+ { "HashSRAM", 2, 1 },
+ { "MatchTCAM", 1, 1 },
+ { "MatchSRAM", 0, 1 },
+ { "MPS_CLS_PL_TEST_DATA_L", 0xd02c, 0 },
+ { "MPS_CLS_PL_TEST_DATA_H", 0xd030, 0 },
+ { "MPS_CLS_PL_TEST_RES_DATA", 0xd034, 0 },
+ { "Cls_Spare", 28, 4 },
+ { "Cls_Priority", 25, 3 },
+ { "Cls_Replicate", 24, 1 },
+ { "Cls_Index", 15, 9 },
+ { "Cls_VF", 7, 8 },
+ { "Cls_VF_Vld", 6, 1 },
+ { "Cls_PF", 3, 3 },
+ { "Cls_Match", 0, 3 },
+ { "MPS_CLS_PL_TEST_CTL", 0xd038, 0 },
+ { "MPS_CLS_PORT_BMC_CTL", 0xd03c, 0 },
+ { "MPS_CLS_MATCH_CNT_TCAM", 0xd100, 0 },
+ { "MPS_CLS_MATCH_CNT_HASH", 0xd104, 0 },
+ { "MPS_CLS_MATCH_CNT_BCAST", 0xd108, 0 },
+ { "MPS_CLS_MATCH_CNT_BMC", 0xd10c, 0 },
+ { "MPS_CLS_MATCH_CNT_PROM", 0xd110, 0 },
+ { "MPS_CLS_MATCH_CNT_HPROM", 0xd114, 0 },
+ { "MPS_CLS_MISS_CNT", 0xd118, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd200, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd220, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd240, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd260, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd280, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd2a0, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd2c0, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_L", 0xd2e0, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd204, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd224, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd244, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd264, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd284, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd2a4, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd2c4, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_DA_H", 0xd2e4, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd208, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd228, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd248, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd268, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd288, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd2a8, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd2c8, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_L", 0xd2e8, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd20c, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd22c, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd24c, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd26c, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd28c, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd2ac, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd2cc, 0 },
+ { "MPS_CLS_REQUEST_TRACE_MAC_SA_H", 0xd2ec, 0 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd210, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd230, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd250, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd270, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd290, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd2b0, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd2d0, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_PORT_VLAN", 0xd2f0, 0 },
+ { "ClsTrcVlanVld", 31, 1 },
+ { "ClsTrcVlanId", 16, 12 },
+ { "ClsTrcReqPort", 0, 4 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd214, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd234, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd254, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd274, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd294, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd2b4, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd2d4, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_REQUEST_TRACE_ENCAP", 0xd2f4, 0 },
+ { "ClsTrcLkpType", 31, 1 },
+ { "ClsTrcDIPHit", 30, 1 },
+ { "ClsTrcVNI", 0, 24 },
+ { "MPS_CLS_RESULT_TRACE", 0xd300, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd304, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd308, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd30c, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd310, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd314, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd318, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_RESULT_TRACE", 0xd31c, 0 },
+ { "ClsTrcPortNum", 31, 1 },
+ { "ClsTrcPriority", 28, 3 },
+ { "ClsTrcMultiListen", 27, 1 },
+ { "ClsTrcReplicate", 26, 1 },
+ { "ClsTrcPortMap", 24, 2 },
+ { "ClsTrcMatch", 21, 3 },
+ { "ClsTrcIndex", 12, 9 },
+ { "ClsTrcVF_Vld", 11, 1 },
+ { "ClsTrcPF", 3, 8 },
+ { "ClsTrcVF", 0, 3 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfc0, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfc4, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfc8, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfcc, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfd0, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfd4, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfd8, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfdc, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_VLAN_TABLE", 0xdfe0, 0 },
+ { "VLAN_Mask", 16, 12 },
+ { "PF", 13, 3 },
+ { "VLAN_Valid", 12, 1 },
+ { "VLAN_ID", 0, 12 },
+ { "MPS_CLS_DIPIPV4_ID_TABLE", 0x12000, 0 },
+ { "MPS_CLS_DIPIPV4_ID_TABLE", 0x12008, 0 },
+ { "MPS_CLS_DIPIPV4_ID_TABLE", 0x12010, 0 },
+ { "MPS_CLS_DIPIPV4_ID_TABLE", 0x12018, 0 },
+ { "MPS_CLS_DIPIPV4_MASK_TABLE", 0x12004, 0 },
+ { "MPS_CLS_DIPIPV4_MASK_TABLE", 0x1200c, 0 },
+ { "MPS_CLS_DIPIPV4_MASK_TABLE", 0x12014, 0 },
+ { "MPS_CLS_DIPIPV4_MASK_TABLE", 0x1201c, 0 },
+ { "MPS_CLS_DIPIPV6ID_0_TABLE", 0x12020, 0 },
+ { "MPS_CLS_DIPIPV6ID_0_TABLE", 0x12040, 0 },
+ { "MPS_CLS_DIPIPV6ID_1_TABLE", 0x12024, 0 },
+ { "MPS_CLS_DIPIPV6ID_1_TABLE", 0x12044, 0 },
+ { "MPS_CLS_DIPIPV6ID_2_TABLE", 0x12028, 0 },
+ { "MPS_CLS_DIPIPV6ID_2_TABLE", 0x12048, 0 },
+ { "MPS_CLS_DIPIPV6ID_3_TABLE", 0x1202c, 0 },
+ { "MPS_CLS_DIPIPV6ID_3_TABLE", 0x1204c, 0 },
+ { "MPS_CLS_DIPIPV6MASK_0_TABLE", 0x12030, 0 },
+ { "MPS_CLS_DIPIPV6MASK_0_TABLE", 0x12050, 0 },
+ { "MPS_CLS_DIPIPV6MASK_1_TABLE", 0x12034, 0 },
+ { "MPS_CLS_DIPIPV6MASK_1_TABLE", 0x12054, 0 },
+ { "MPS_CLS_DIPIPV6MASK_2_TABLE", 0x12038, 0 },
+ { "MPS_CLS_DIPIPV6MASK_2_TABLE", 0x12058, 0 },
+ { "MPS_CLS_DIPIPV6MASK_3_TABLE", 0x1203c, 0 },
+ { "MPS_CLS_DIPIPV6MASK_3_TABLE", 0x1205c, 0 },
+ { "MPS_RX_HASH_LKP_TABLE", 0x12060, 0 },
+ { "MPS_RX_HASH_LKP_TABLE", 0x12064, 0 },
+ { "MPS_RX_HASH_LKP_TABLE", 0x12068, 0 },
+ { "MPS_RX_HASH_LKP_TABLE", 0x1206c, 0 },
+ { "MPS_CLS_SRAM_L", 0xe000, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe008, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe010, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe018, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe020, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe028, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe030, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe038, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe040, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe048, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe050, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe058, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe060, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe068, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe070, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe078, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe080, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe088, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe090, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe098, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe0f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe100, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe108, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe110, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe118, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe120, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe128, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe130, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe138, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe140, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe148, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe150, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe158, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe160, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe168, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe170, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe178, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe180, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe188, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe190, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe198, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe1f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe200, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe208, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe210, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe218, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe220, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe228, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe230, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe238, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe240, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe248, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe250, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe258, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe260, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe268, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe270, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe278, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe280, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe288, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe290, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe298, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe2f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe300, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe308, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe310, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe318, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe320, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe328, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe330, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe338, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe340, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe348, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe350, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe358, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe360, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe368, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe370, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe378, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe380, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe388, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe390, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe398, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe3f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe400, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe408, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe410, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe418, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe420, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe428, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe430, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe438, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe440, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe448, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe450, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe458, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe460, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe468, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe470, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe478, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe480, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe488, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe490, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe498, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe4f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe500, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe508, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe510, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe518, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe520, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe528, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe530, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe538, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe540, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe548, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe550, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe558, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe560, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe568, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe570, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe578, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe580, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe588, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe590, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe598, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe5f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe600, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe608, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe610, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe618, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe620, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe628, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe630, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe638, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe640, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe648, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe650, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe658, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe660, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe668, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe670, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe678, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe680, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe688, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe690, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe698, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe6f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe700, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe708, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe710, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe718, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe720, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe728, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe730, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe738, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe740, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe748, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe750, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe758, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe760, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe768, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe770, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe778, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe780, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe788, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe790, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe798, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe7f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe800, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe808, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe810, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe818, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe820, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe828, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe830, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe838, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe840, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe848, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe850, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe858, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe860, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe868, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe870, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe878, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe880, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe888, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe890, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe898, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe8f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe900, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe908, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe910, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe918, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe920, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe928, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe930, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe938, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe940, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe948, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe950, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe958, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe960, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe968, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe970, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe978, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe980, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe988, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe990, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe998, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9a0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9a8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9b0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9b8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9c0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9c8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9d0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9d8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9e0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9e8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9f0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xe9f8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xea98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeaa0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeaa8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeab0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeab8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeac0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeac8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xead0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xead8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeae0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeae8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeaf0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeaf8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeb98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeba0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeba8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebb0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebb8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebc0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebc8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebd0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebd8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebe0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebe8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebf0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xebf8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xec98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeca0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeca8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecb0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecb8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecc0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecc8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecd0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecd8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xece0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xece8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecf0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xecf8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xed98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeda0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeda8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedb0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedb8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedc0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedc8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedd0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedd8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xede0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xede8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedf0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xedf8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xee98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeea0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeea8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeeb0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeeb8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeec0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeec8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeed0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeed8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeee0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeee8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeef0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeef8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef00, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef08, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef10, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef18, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef20, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef28, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef30, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef38, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef40, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef48, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef50, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef58, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef60, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef68, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef70, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef78, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef80, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef88, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef90, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xef98, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefa0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefa8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefb0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefb8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefc0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefc8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefd0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefd8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefe0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xefe8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeff0, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_L", 0xeff8, 0 },
+ { "DisEncapOuterRplct", 31, 1 },
+ { "DisEncap", 30, 1 },
+ { "MultiListen3", 29, 1 },
+ { "MultiListen2", 28, 1 },
+ { "MultiListen1", 27, 1 },
+ { "MultiListen0", 26, 1 },
+ { "Priority3", 23, 3 },
+ { "Priority2", 20, 3 },
+ { "Priority1", 17, 3 },
+ { "Priority0", 14, 3 },
+ { "Valid", 13, 1 },
+ { "Replicate", 12, 1 },
+ { "PF", 9, 3 },
+ { "VF_Valid", 8, 1 },
+ { "VF", 0, 8 },
+ { "MPS_CLS_SRAM_H", 0xe004, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe00c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe014, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe01c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe024, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe02c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe034, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe03c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe044, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe04c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe054, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe05c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe064, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe06c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe074, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe07c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe084, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe08c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe094, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe09c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe0fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe104, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe10c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe114, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe11c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe124, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe12c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe134, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe13c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe144, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe14c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe154, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe15c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe164, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe16c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe174, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe17c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe184, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe18c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe194, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe19c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe1fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe204, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe20c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe214, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe21c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe224, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe22c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe234, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe23c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe244, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe24c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe254, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe25c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe264, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe26c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe274, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe27c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe284, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe28c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe294, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe29c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe2fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe304, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe30c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe314, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe31c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe324, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe32c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe334, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe33c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe344, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe34c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe354, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe35c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe364, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe36c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe374, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe37c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe384, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe38c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe394, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe39c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe3fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe404, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe40c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe414, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe41c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe424, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe42c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe434, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe43c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe444, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe44c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe454, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe45c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe464, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe46c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe474, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe47c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe484, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe48c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe494, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe49c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe4fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe504, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe50c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe514, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe51c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe524, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe52c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe534, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe53c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe544, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe54c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe554, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe55c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe564, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe56c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe574, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe57c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe584, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe58c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe594, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe59c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe5fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe604, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe60c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe614, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe61c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe624, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe62c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe634, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe63c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe644, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe64c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe654, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe65c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe664, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe66c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe674, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe67c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe684, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe68c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe694, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe69c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe6fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe704, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe70c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe714, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe71c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe724, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe72c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe734, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe73c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe744, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe74c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe754, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe75c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe764, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe76c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe774, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe77c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe784, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe78c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe794, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe79c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe7fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe804, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe80c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe814, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe81c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe824, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe82c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe834, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe83c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe844, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe84c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe854, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe85c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe864, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe86c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe874, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe87c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe884, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe88c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe894, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe89c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe8fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe904, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe90c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe914, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe91c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe924, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe92c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe934, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe93c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe944, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe94c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe954, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe95c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe964, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe96c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe974, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe97c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe984, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe98c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe994, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe99c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9a4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9ac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9b4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9bc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9c4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9cc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9d4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9dc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9e4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9ec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9f4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xe9fc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xea9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeaa4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeaac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeab4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeabc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeac4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeacc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xead4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeadc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeae4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeaec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeaf4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeafc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeb9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeba4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebb4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebbc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebc4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebcc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebd4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebdc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebe4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebf4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xebfc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xec9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeca4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecb4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecbc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecc4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeccc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecd4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecdc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xece4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecf4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xecfc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xed9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeda4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedb4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedbc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedc4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedcc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedd4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeddc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xede4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedf4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xedfc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xee9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeea4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeeac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeeb4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeebc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeec4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeecc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeed4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeedc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeee4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeeec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeef4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeefc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef04, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef0c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef14, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef1c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef24, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef2c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef34, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef3c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef44, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef4c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef54, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef5c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef64, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef6c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef74, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef7c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef84, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef8c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef94, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xef9c, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefa4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefac, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefb4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefbc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefc4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefcc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefd4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefdc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefe4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xefec, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeff4, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_SRAM_H", 0xeffc, 0 },
+ { "MacParity2", 10, 1 },
+ { "MacParity1", 9, 1 },
+ { "MacParity0", 8, 1 },
+ { "MacParityMaskSize", 4, 4 },
+ { "PortMap", 0, 4 },
+ { "MPS_CLS_TCAM_DATA0", 0xf000, 0 },
+ { "MPS_CLS_TCAM_DATA1", 0xf004, 0 },
+ { "VIDL", 16, 16 },
+ { "DMACH", 0, 16 },
+ { "MPS_CLS_TCAM_DATA2_CTL", 0xf008, 0 },
+ { "CtlCmdType", 31, 1 },
+ { "CtlReqID", 30, 1 },
+ { "CtlTcamSel", 25, 1 },
+ { "CtlTcamIndex", 17, 8 },
+ { "CtlXYBitSel", 16, 1 },
+ { "DataPortNum", 12, 4 },
+ { "DataLkpType", 10, 2 },
+ { "DataDipHit", 8, 1 },
+ { "DataVIDH2", 7, 1 },
+ { "DataVIDH1", 0, 7 },
+ { "MPS_CLS_TCAM_RDATA0_REQ_ID0", 0xf010, 0 },
+ { "MPS_CLS_TCAM_RDATA1_REQ_ID0", 0xf014, 0 },
+ { "VIDL", 16, 16 },
+ { "DMACH", 0, 16 },
+ { "MPS_CLS_TCAM_RDATA2_REQ_ID0", 0xf018, 0 },
+ { "DataPortNum", 12, 4 },
+ { "DataLkpType", 10, 2 },
+ { "DataDipHit", 8, 1 },
+ { "DataVIDH2", 7, 1 },
+ { "DataVIDH1", 0, 7 },
+ { "MPS_CLS_TCAM_RDATA0_REQ_ID1", 0xf020, 0 },
+ { "MPS_CLS_TCAM_RDATA1_REQ_ID1", 0xf024, 0 },
+ { "VIDL", 16, 16 },
+ { "DMACH", 0, 16 },
+ { "MPS_CLS_TCAM_RDATA2_REQ_ID1", 0xf028, 0 },
+ { "DataPortNum", 12, 4 },
+ { "DataLkpType", 10, 2 },
+ { "DataDipHit", 8, 1 },
+ { "DataVIDH2", 7, 1 },
+ { "DataVIDH1", 0, 7 },
+ { NULL }
+};
+
+struct reg_info t6_cpl_switch_regs[] = {
+ { "CPL_SWITCH_CNTRL", 0x19040, 0 },
+ { "cpl_pkt_tid", 8, 24 },
+ { "cim_split_enable", 6, 1 },
+ { "cim_truncate_enable", 5, 1 },
+ { "cim_to_up_full_size", 4, 1 },
+ { "cpu_no_enable", 3, 1 },
+ { "switch_table_enable", 2, 1 },
+ { "sge_enable", 1, 1 },
+ { "cim_enable", 0, 1 },
+ { "CPL_SWITCH_TBL_IDX", 0x19044, 0 },
+ { "CPL_SWITCH_TBL_DATA", 0x19048, 0 },
+ { "CPL_SWITCH_ZERO_ERROR", 0x1904c, 0 },
+ { "zero_cmd_ch1", 8, 8 },
+ { "zero_cmd_ch0", 0, 8 },
+ { "CPL_INTR_ENABLE", 0x19050, 0 },
+ { "perr_cpl_128to128_1", 7, 1 },
+ { "perr_cpl_128to128_0", 6, 1 },
+ { "cim_op_map_perr", 5, 1 },
+ { "cim_ovfl_error", 4, 1 },
+ { "tp_framing_error", 3, 1 },
+ { "sge_framing_error", 2, 1 },
+ { "cim_framing_error", 1, 1 },
+ { "zero_switch_error", 0, 1 },
+ { "CPL_INTR_CAUSE", 0x19054, 0 },
+ { "perr_cpl_128to128_1", 7, 1 },
+ { "perr_cpl_128to128_0", 6, 1 },
+ { "cim_op_map_perr", 5, 1 },
+ { "cim_ovfl_error", 4, 1 },
+ { "tp_framing_error", 3, 1 },
+ { "sge_framing_error", 2, 1 },
+ { "cim_framing_error", 1, 1 },
+ { "zero_switch_error", 0, 1 },
+ { "CPL_MAP_TBL_IDX", 0x19058, 0 },
+ { "cim_split_opcode_program", 8, 1 },
+ { "cpl_map_tbl_idx", 0, 8 },
+ { "CPL_MAP_TBL_DATA", 0x1905c, 0 },
+ { NULL }
+};
+
+struct reg_info t6_smb_regs[] = {
+ { "SMB_GLOBAL_TIME_CFG", 0x19060, 0 },
+ { "MacroCntCfg", 8, 5 },
+ { "MicroCntCfg", 0, 8 },
+ { "SMB_MST_TIMEOUT_CFG", 0x19064, 0 },
+ { "SMB_MST_CTL_CFG", 0x19068, 0 },
+ { "MstFifoDbg", 31, 1 },
+ { "MstFifoDbgClr", 30, 1 },
+ { "MstRxByteCfg", 12, 6 },
+ { "MstTxByteCfg", 6, 6 },
+ { "MstReset", 1, 1 },
+ { "MstCtlEn", 0, 1 },
+ { "SMB_MST_CTL_STS", 0x1906c, 0 },
+ { "MstRxByteCnt", 12, 6 },
+ { "MstTxByteCnt", 6, 6 },
+ { "MstBusySts", 0, 1 },
+ { "SMB_MST_TX_FIFO_RDWR", 0x19070, 0 },
+ { "SMB_MST_RX_FIFO_RDWR", 0x19074, 0 },
+ { "SMB_SLV_TIMEOUT_CFG", 0x19078, 0 },
+ { "SMB_SLV_CTL_CFG", 0x1907c, 0 },
+ { "SlvFifoDbg", 31, 1 },
+ { "SlvFifoDbgClr", 30, 1 },
+ { "SlvCrcOutBitInv", 21, 1 },
+ { "SlvCrcOutBitRev", 20, 1 },
+ { "SlvCrcInBitRev", 19, 1 },
+ { "SlvCrcPreset", 11, 8 },
+ { "SlvAddrCfg", 4, 7 },
+ { "SlvAlrtSet", 2, 1 },
+ { "SlvReset", 1, 1 },
+ { "SlvCtlEn", 0, 1 },
+ { "SMB_SLV_CTL_STS", 0x19080, 0 },
+ { "SlvFifoTxCnt", 12, 6 },
+ { "SlvFifoCnt", 6, 6 },
+ { "SlvAlrtSts", 2, 1 },
+ { "SlvBusySts", 0, 1 },
+ { "SMB_SLV_FIFO_RDWR", 0x19084, 0 },
+ { "SMB_INT_ENABLE", 0x1908c, 0 },
+ { "MstTxFifoParEn", 21, 1 },
+ { "MstRxFifoParEn", 20, 1 },
+ { "SlvFifoParEn", 19, 1 },
+ { "SlvUnExpBusStopEn", 18, 1 },
+ { "SlvUnExpBusStartEn", 17, 1 },
+ { "SlvCommandCodeInvEn", 16, 1 },
+ { "SlvByteCntErrEn", 15, 1 },
+ { "SlvUnExpAckMstEn", 14, 1 },
+ { "SlvUnExpNackMstEn", 13, 1 },
+ { "SlvNoBusStopEn", 12, 1 },
+ { "SlvNoRepStartEn", 11, 1 },
+ { "SlvRxAddrIntEn", 10, 1 },
+ { "SlvRxPecErrIntEn", 9, 1 },
+ { "SlvPrepToArpIntEn", 8, 1 },
+ { "SlvTimeOutIntEn", 7, 1 },
+ { "SlvErrIntEn", 6, 1 },
+ { "SlvDoneIntEn", 5, 1 },
+ { "SlvRxRdyIntEn", 4, 1 },
+ { "MstTimeOutIntEn", 3, 1 },
+ { "MstNAckIntEn", 2, 1 },
+ { "MstLostArbIntEn", 1, 1 },
+ { "MstDoneIntEn", 0, 1 },
+ { "SMB_INT_CAUSE", 0x19090, 0 },
+ { "MstTxFifoParInt", 21, 1 },
+ { "MstRxFifoParInt", 20, 1 },
+ { "SlvFifoParInt", 19, 1 },
+ { "SlvUnExpBusStopInt", 18, 1 },
+ { "SlvUnExpBusStartInt", 17, 1 },
+ { "SlvCommandCodeInvInt", 16, 1 },
+ { "SlvByteCntErrInt", 15, 1 },
+ { "SlvUnExpAckMstInt", 14, 1 },
+ { "SlvUnExpNackMstInt", 13, 1 },
+ { "SlvNoBusStopInt", 12, 1 },
+ { "SlvNoRepStartInt", 11, 1 },
+ { "SlvRxAddrInt", 10, 1 },
+ { "SlvRxPecErrInt", 9, 1 },
+ { "SlvPrepToArpInt", 8, 1 },
+ { "SlvTimeOutInt", 7, 1 },
+ { "SlvErrInt", 6, 1 },
+ { "SlvDoneInt", 5, 1 },
+ { "SlvRxRdyInt", 4, 1 },
+ { "MstTimeOutInt", 3, 1 },
+ { "MstNAckInt", 2, 1 },
+ { "MstLostArbInt", 1, 1 },
+ { "MstDoneInt", 0, 1 },
+ { "SMB_DEBUG_DATA", 0x19094, 0 },
+ { "DebugDataH", 16, 16 },
+ { "DebugDataL", 0, 16 },
+ { "SMB_PERR_EN", 0x19098, 0 },
+ { "MstTxFifo", 21, 1 },
+ { "MstRxFifo", 19, 1 },
+ { "SlvFifo", 18, 1 },
+ { "MstTxFifoPerrEn", 2, 1 },
+ { "MstRxFifoPerrEn", 1, 1 },
+ { "SlvFifoPerrEn", 0, 1 },
+ { "SMB_PERR_INJ", 0x1909c, 0 },
+ { "MstTxInjDataErr", 3, 1 },
+ { "MstRxInjDataErr", 2, 1 },
+ { "SlvInjDataErr", 1, 1 },
+ { "FifoInjDataErrEn", 0, 1 },
+ { "SMB_SLV_ARP_CTL", 0x190a0, 0 },
+ { "ArpCommandCode", 2, 8 },
+ { "ArpAddrRes", 1, 1 },
+ { "ArpAddrVal", 0, 1 },
+ { "SMB_ARP_UDID0", 0x190a4, 0 },
+ { "SMB_ARP_UDID1", 0x190a8, 0 },
+ { "SubsystemVendorID", 16, 16 },
+ { "SubsystemDeviceID", 0, 16 },
+ { "SMB_ARP_UDID2", 0x190ac, 0 },
+ { "DeviceID", 16, 16 },
+ { "Interface", 0, 16 },
+ { "SMB_ARP_UDID3", 0x190b0, 0 },
+ { "DeviceCap", 24, 8 },
+ { "VersionID", 16, 8 },
+ { "VendorID", 0, 16 },
+ { "SMB_SLV_AUX_ADDR0", 0x190b4, 0 },
+ { "AuxAddr0Val", 6, 1 },
+ { "AuxAddr0", 0, 6 },
+ { "SMB_SLV_AUX_ADDR1", 0x190b8, 0 },
+ { "AuxAddr1Val", 6, 1 },
+ { "AuxAddr1", 0, 6 },
+ { "SMB_SLV_AUX_ADDR2", 0x190bc, 0 },
+ { "AuxAddr2Val", 6, 1 },
+ { "AuxAddr2", 0, 6 },
+ { "SMB_SLV_AUX_ADDR3", 0x190c0, 0 },
+ { "AuxAddr3Val", 6, 1 },
+ { "AuxAddr3", 0, 6 },
+ { "SMB_COMMAND_CODE0", 0x190c4, 0 },
+ { "SMB_COMMAND_CODE1", 0x190c8, 0 },
+ { "SMB_COMMAND_CODE2", 0x190cc, 0 },
+ { "SMB_COMMAND_CODE3", 0x190d0, 0 },
+ { "SMB_COMMAND_CODE4", 0x190d4, 0 },
+ { "SMB_COMMAND_CODE5", 0x190d8, 0 },
+ { "SMB_COMMAND_CODE6", 0x190dc, 0 },
+ { "SMB_COMMAND_CODE7", 0x190e0, 0 },
+ { "SMB_MICRO_CNT_CLK_CFG", 0x190e4, 0 },
+ { "MacroCntClkCfg", 8, 5 },
+ { "MicroCntClkCfg", 0, 8 },
+ { "SMB_CTL_STATUS", 0x190e8, 0 },
+ { "MstBusBusy", 2, 1 },
+ { "SlvBusBusy", 1, 1 },
+ { "BusBusy", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_i2cm_regs[] = {
+ { "I2CM_CFG", 0x190f0, 0 },
+ { "I2CM_DATA", 0x190f4, 0 },
+ { "I2CM_OP", 0x190f8, 0 },
+ { "Busy", 31, 1 },
+ { "Ack", 30, 1 },
+ { "Cont", 1, 1 },
+ { "Op", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_mi_regs[] = {
+ { "MI_CFG", 0x19100, 0 },
+ { "T4_St", 14, 1 },
+ { "ClkDiv", 5, 8 },
+ { "St", 3, 2 },
+ { "PreEn", 2, 1 },
+ { "MDIInv", 1, 1 },
+ { "MDIO_1P2V_Sel", 0, 1 },
+ { "MI_ADDR", 0x19104, 0 },
+ { "PhyAddr", 5, 5 },
+ { "RegAddr", 0, 5 },
+ { "MI_DATA", 0x19108, 0 },
+ { "MI_OP", 0x1910c, 0 },
+ { "Busy", 31, 1 },
+ { "St", 3, 2 },
+ { "Inc", 2, 1 },
+ { "Op", 0, 2 },
+ { NULL }
+};
+
+struct reg_info t6_uart_regs[] = {
+ { "UART_CONFIG", 0x19110, 0 },
+ { "StopBits", 22, 2 },
+ { "Parity", 20, 2 },
+ { "DataBits", 16, 4 },
+ { "ClkDiv", 0, 12 },
+ { NULL }
+};
+
+struct reg_info t6_pmu_regs[] = {
+ { "PMU_PART_CG_PWRMODE", 0x19120, 0 },
+ { "PL_DIS_PRTY_CHK", 20, 1 },
+ { "SGE_Part_CGEn", 19, 1 },
+ { "PDP_Part_CGEn", 18, 1 },
+ { "TP_Part_CGEn", 17, 1 },
+ { "EDC0_Part_CGEn", 16, 1 },
+ { "EDC1_Part_CGEn", 15, 1 },
+ { "LE_Part_CGEn", 14, 1 },
+ { "MA_Part_CGEn", 13, 1 },
+ { "PCIE_Part_CGEn", 10, 1 },
+ { "InitPowerMode", 0, 2 },
+ { "PMU_SLEEPMODE_WAKEUP", 0x19124, 0 },
+ { "GlobalDeepSleepEn", 6, 1 },
+ { "HWWakeUpEn", 5, 1 },
+ { "Port3SleepMode", 4, 1 },
+ { "Port2SleepMode", 3, 1 },
+ { "Port1SleepMode", 2, 1 },
+ { "Port0SleepMode", 1, 1 },
+ { "WakeUp", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_ulp_rx_regs[] = {
+ { "ULP_RX_CTL", 0x19150, 0 },
+ { "PCMD1Threshold", 24, 8 },
+ { "PCMD0Threshold", 16, 8 },
+ { "disable_0B_STAG_ERR", 14, 1 },
+ { "RDMA_0b_wr_opcode", 10, 4 },
+ { "RDMA_0b_wr_pass", 9, 1 },
+ { "STAG_RQE", 8, 1 },
+ { "RDMA_State_En", 7, 1 },
+ { "Crc1_En", 6, 1 },
+ { "RDMA_0b_wr_cqe", 5, 1 },
+ { "PCIE_Atrb_En", 4, 1 },
+ { "RDMA_permissive_mode", 3, 1 },
+ { "PagePodME", 2, 1 },
+ { "IscsiTagTcb", 1, 1 },
+ { "TddpTagTcb", 0, 1 },
+ { "ULP_RX_INT_ENABLE", 0x19154, 0 },
+ { "SE_CNT_MISMATCH_1", 26, 1 },
+ { "SE_CNT_MISMATCH_0", 25, 1 },
+ { "ENABLE_CTX_1", 24, 1 },
+ { "ENABLE_CTX_0", 23, 1 },
+ { "ENABLE_FF", 22, 1 },
+ { "ENABLE_APF_1", 21, 1 },
+ { "ENABLE_APF_0", 20, 1 },
+ { "ENABLE_AF_1", 19, 1 },
+ { "ENABLE_AF_0", 18, 1 },
+ { "ENABLE_DDPDF_1", 17, 1 },
+ { "ENABLE_DDPMF_1", 16, 1 },
+ { "ENABLE_MEMRF_1", 15, 1 },
+ { "ENABLE_PRSDF_1", 14, 1 },
+ { "ENABLE_DDPDF_0", 13, 1 },
+ { "ENABLE_DDPMF_0", 12, 1 },
+ { "ENABLE_MEMRF_0", 11, 1 },
+ { "ENABLE_PRSDF_0", 10, 1 },
+ { "ENABLE_PCMDF_1", 9, 1 },
+ { "ENABLE_TPTCF_1", 8, 1 },
+ { "ENABLE_DDPCF_1", 7, 1 },
+ { "ENABLE_MPARF_1", 6, 1 },
+ { "ENABLE_MPARC_1", 5, 1 },
+ { "ENABLE_PCMDF_0", 4, 1 },
+ { "ENABLE_TPTCF_0", 3, 1 },
+ { "ENABLE_DDPCF_0", 2, 1 },
+ { "ENABLE_MPARF_0", 1, 1 },
+ { "ENABLE_MPARC_0", 0, 1 },
+ { "ULP_RX_INT_CAUSE", 0x19158, 0 },
+ { "SE_CNT_MISMATCH_1", 26, 1 },
+ { "SE_CNT_MISMATCH_0", 25, 1 },
+ { "CAUSE_CTX_1", 24, 1 },
+ { "CAUSE_CTX_0", 23, 1 },
+ { "CAUSE_FF", 22, 1 },
+ { "CAUSE_APF_1", 21, 1 },
+ { "CAUSE_APF_0", 20, 1 },
+ { "CAUSE_AF_1", 19, 1 },
+ { "CAUSE_AF_0", 18, 1 },
+ { "CAUSE_DDPDF_1", 17, 1 },
+ { "CAUSE_DDPMF_1", 16, 1 },
+ { "CAUSE_MEMRF_1", 15, 1 },
+ { "CAUSE_PRSDF_1", 14, 1 },
+ { "CAUSE_DDPDF_0", 13, 1 },
+ { "CAUSE_DDPMF_0", 12, 1 },
+ { "CAUSE_MEMRF_0", 11, 1 },
+ { "CAUSE_PRSDF_0", 10, 1 },
+ { "CAUSE_PCMDF_1", 9, 1 },
+ { "CAUSE_TPTCF_1", 8, 1 },
+ { "CAUSE_DDPCF_1", 7, 1 },
+ { "CAUSE_MPARF_1", 6, 1 },
+ { "CAUSE_MPARC_1", 5, 1 },
+ { "CAUSE_PCMDF_0", 4, 1 },
+ { "CAUSE_TPTCF_0", 3, 1 },
+ { "CAUSE_DDPCF_0", 2, 1 },
+ { "CAUSE_MPARF_0", 1, 1 },
+ { "CAUSE_MPARC_0", 0, 1 },
+ { "ULP_RX_ISCSI_LLIMIT", 0x1915c, 0 },
+ { "IscsiLlimit", 6, 26 },
+ { "ULP_RX_ISCSI_ULIMIT", 0x19160, 0 },
+ { "IscsiUlimit", 6, 26 },
+ { "ULP_RX_ISCSI_TAGMASK", 0x19164, 0 },
+ { "IscsiTagMask", 6, 26 },
+ { "ULP_RX_ISCSI_PSZ", 0x19168, 0 },
+ { "Hpz3", 24, 4 },
+ { "Hpz2", 16, 4 },
+ { "Hpz1", 8, 4 },
+ { "Hpz0", 0, 4 },
+ { "ULP_RX_TDDP_LLIMIT", 0x1916c, 0 },
+ { "TddpLlimit", 6, 26 },
+ { "ULP_RX_TDDP_ULIMIT", 0x19170, 0 },
+ { "TddpUlimit", 6, 26 },
+ { "ULP_RX_TDDP_TAGMASK", 0x19174, 0 },
+ { "TddpTagMask", 6, 26 },
+ { "ULP_RX_TDDP_PSZ", 0x19178, 0 },
+ { "Hpz3", 24, 4 },
+ { "Hpz2", 16, 4 },
+ { "Hpz1", 8, 4 },
+ { "Hpz0", 0, 4 },
+ { "ULP_RX_STAG_LLIMIT", 0x1917c, 0 },
+ { "ULP_RX_STAG_ULIMIT", 0x19180, 0 },
+ { "ULP_RX_RQ_LLIMIT", 0x19184, 0 },
+ { "ULP_RX_RQ_ULIMIT", 0x19188, 0 },
+ { "ULP_RX_PBL_LLIMIT", 0x1918c, 0 },
+ { "ULP_RX_PBL_ULIMIT", 0x19190, 0 },
+ { "ULP_RX_CTX_BASE", 0x19194, 0 },
+ { "ULP_RX_PERR_ENABLE", 0x1919c, 0 },
+ { "PERR_SE_CNT_MISMATCH_1", 26, 1 },
+ { "PERR_SE_CNT_MISMATCH_0", 25, 1 },
+ { "PERR_ENABLE_CTX_1", 24, 1 },
+ { "PERR_ENABLE_CTX_0", 23, 1 },
+ { "PERR_ENABLE_FF", 22, 1 },
+ { "PERR_ENABLE_APF_1", 21, 1 },
+ { "PERR_ENABLE_APF_0", 20, 1 },
+ { "PERR_ENABLE_AF_1", 19, 1 },
+ { "PERR_ENABLE_AF_0", 18, 1 },
+ { "PERR_ENABLE_DDPDF_1", 17, 1 },
+ { "PERR_ENABLE_DDPMF_1", 16, 1 },
+ { "PERR_ENABLE_MEMRF_1", 15, 1 },
+ { "PERR_ENABLE_PRSDF_1", 14, 1 },
+ { "PERR_ENABLE_DDPDF_0", 13, 1 },
+ { "PERR_ENABLE_DDPMF_0", 12, 1 },
+ { "PERR_ENABLE_MEMRF_0", 11, 1 },
+ { "PERR_ENABLE_PRSDF_0", 10, 1 },
+ { "PERR_ENABLE_PCMDF_1", 9, 1 },
+ { "PERR_ENABLE_TPTCF_1", 8, 1 },
+ { "PERR_ENABLE_DDPCF_1", 7, 1 },
+ { "PERR_ENABLE_MPARF_1", 6, 1 },
+ { "PERR_ENABLE_MPARC_1", 5, 1 },
+ { "PERR_ENABLE_PCMDF_0", 4, 1 },
+ { "PERR_ENABLE_TPTCF_0", 3, 1 },
+ { "PERR_ENABLE_DDPCF_0", 2, 1 },
+ { "PERR_ENABLE_MPARF_0", 1, 1 },
+ { "PERR_ENABLE_MPARC_0", 0, 1 },
+ { "ULP_RX_PERR_INJECT", 0x191a0, 0 },
+ { "MemSel", 1, 5 },
+ { "InjectDataErr", 0, 1 },
+ { "ULP_RX_RQUDP_LLIMIT", 0x191a4, 0 },
+ { "ULP_RX_RQUDP_ULIMIT", 0x191a8, 0 },
+ { "ULP_RX_CTX_ACC_CH0", 0x191ac, 0 },
+ { "REQ", 21, 1 },
+ { "WB", 20, 1 },
+ { "TID", 0, 20 },
+ { "ULP_RX_CTX_ACC_CH1", 0x191b0, 0 },
+ { "REQ", 21, 1 },
+ { "WB", 20, 1 },
+ { "TID", 0, 20 },
+ { "ULP_RX_SE_CNT_ERR", 0x191d0, 0 },
+ { "ERR_CH1", 4, 4 },
+ { "ERR_CH0", 0, 4 },
+ { "ULP_RX_SE_CNT_CLR", 0x191d4, 0 },
+ { "CLR_CH0", 4, 4 },
+ { "CLR_CH1", 0, 4 },
+ { "ULP_RX_SE_CNT_CH0", 0x191d8, 0 },
+ { "SOP_CNT_OUT0", 28, 4 },
+ { "EOP_CNT_OUT0", 24, 4 },
+ { "SOP_CNT_AL0", 20, 4 },
+ { "EOP_CNT_AL0", 16, 4 },
+ { "SOP_CNT_MR0", 12, 4 },
+ { "EOP_CNT_MR0", 8, 4 },
+ { "SOP_CNT_IN0", 4, 4 },
+ { "EOP_CNT_IN0", 0, 4 },
+ { "ULP_RX_SE_CNT_CH1", 0x191dc, 0 },
+ { "SOP_CNT_OUT1", 28, 4 },
+ { "EOP_CNT_OUT1", 24, 4 },
+ { "SOP_CNT_AL1", 20, 4 },
+ { "EOP_CNT_AL1", 16, 4 },
+ { "SOP_CNT_MR1", 12, 4 },
+ { "EOP_CNT_MR1", 8, 4 },
+ { "SOP_CNT_IN1", 4, 4 },
+ { "EOP_CNT_IN1", 0, 4 },
+ { "ULP_RX_DBG_CTL", 0x191e0, 0 },
+ { "EN_DBG_H", 17, 1 },
+ { "EN_DBG_L", 16, 1 },
+ { "SEL_H", 8, 8 },
+ { "SEL_L", 0, 8 },
+ { "ULP_RX_DBG_DATAH", 0x191e4, 0 },
+ { "ULP_RX_DBG_DATAL", 0x191e8, 0 },
+ { "ULP_RX_LA_CHNL", 0x19238, 0 },
+ { "ULP_RX_LA_CTL", 0x1923c, 0 },
+ { "ULP_RX_LA_RDPTR", 0x19240, 0 },
+ { "ULP_RX_LA_RDDATA", 0x19244, 0 },
+ { "ULP_RX_LA_WRPTR", 0x19248, 0 },
+ { "ULP_RX_LA_RESERVED", 0x1924c, 0 },
+ { "ULP_RX_CQE_GEN_EN", 0x19250, 0 },
+ { "Termimate_msg", 1, 1 },
+ { "Terminate_with_err", 0, 1 },
+ { "ULP_RX_ATOMIC_OPCODES", 0x19254, 0 },
+ { "atomic_req_qno", 22, 2 },
+ { "atomic_rsp_qno", 20, 2 },
+ { "immediate_qno", 18, 2 },
+ { "immediate_with_se_qno", 16, 2 },
+ { "atomic_wr_opcode", 12, 4 },
+ { "atomic_rd_opcode", 8, 4 },
+ { "immediate_opcode", 4, 4 },
+ { "immediate_with_se_opcode", 0, 4 },
+ { "ULP_RX_T10_CRC_ENDIAN_SWITCHING", 0x19258, 0 },
+ { "ULP_RX_MISC_FEATURE_ENABLE", 0x1925c, 0 },
+ { "iscsi_dcrc_error_cmp_en", 25, 1 },
+ { "IscsiTagPI", 24, 1 },
+ { "ddp_version_1", 22, 2 },
+ { "ddp_version_0", 20, 2 },
+ { "rdma_version_1", 18, 2 },
+ { "rdma_version_0", 16, 2 },
+ { "pbl_bound_check_w_pglen", 15, 1 },
+ { "zbyte_fix_disable", 14, 1 },
+ { "t10_offset_update_en", 13, 1 },
+ { "ulp_insert_pi", 12, 1 },
+ { "pdu_dpi", 11, 1 },
+ { "iscsi_eff_offset_en", 10, 1 },
+ { "iscsi_all_cmp_mode", 9, 1 },
+ { "iscsi_enable_hdr_cmd", 8, 1 },
+ { "iscsi_force_cmp_mode", 7, 1 },
+ { "iscsi_enable_cmp_mode", 6, 1 },
+ { "pio_rdma_send_rqe", 5, 1 },
+ { "terminate_status_en", 4, 1 },
+ { "multiple_pref_enable", 3, 1 },
+ { "umudp_pbl_pref_enable", 2, 1 },
+ { "rdma_pbl_pref_en", 1, 1 },
+ { "sdc_crc_prot_en", 0, 1 },
+ { "ULP_RX_CH0_CGEN", 0x19260, 0 },
+ { "BYPASS_CGEN", 7, 1 },
+ { "TDDP_CGEN", 6, 1 },
+ { "ISCSI_CGEN", 5, 1 },
+ { "RDMA_CGEN", 4, 1 },
+ { "CHANNEL_CGEN", 3, 1 },
+ { "All_DataPath_CGEN", 2, 1 },
+ { "T10Diff_DataPath_CGEN", 1, 1 },
+ { "Rdma_DataPath_CGEN", 0, 1 },
+ { "ULP_RX_CH1_CGEN", 0x19264, 0 },
+ { "BYPASS_CGEN", 7, 1 },
+ { "TDDP_CGEN", 6, 1 },
+ { "ISCSI_CGEN", 5, 1 },
+ { "RDMA_CGEN", 4, 1 },
+ { "CHANNEL_CGEN", 3, 1 },
+ { "All_DataPath_CGEN", 2, 1 },
+ { "T10Diff_DataPath_CGEN", 1, 1 },
+ { "Rdma_DataPath_CGEN", 0, 1 },
+ { "ULP_RX_RFE_DISABLE", 0x19268, 0 },
+ { "ULP_RX_INT_ENABLE_2", 0x1926c, 0 },
+ { "ULPRX2MA_IntfPerr", 8, 1 },
+ { "ALN_SDC_ERR_1", 7, 1 },
+ { "ALN_SDC_ERR_0", 6, 1 },
+ { "PF_UNTAGGED_TPT_1", 5, 1 },
+ { "PF_UNTAGGED_TPT_0", 4, 1 },
+ { "PF_PBL_1", 3, 1 },
+ { "PF_PBL_0", 2, 1 },
+ { "DDP_HINT_1", 1, 1 },
+ { "DDP_HINT_0", 0, 1 },
+ { "ULP_RX_INT_CAUSE_2", 0x19270, 0 },
+ { "ULPRX2MA_IntfPerr", 8, 1 },
+ { "ALN_SDC_ERR_1", 7, 1 },
+ { "ALN_SDC_ERR_0", 6, 1 },
+ { "PF_UNTAGGED_TPT_1", 5, 1 },
+ { "PF_UNTAGGED_TPT_0", 4, 1 },
+ { "PF_PBL_1", 3, 1 },
+ { "PF_PBL_0", 2, 1 },
+ { "DDP_HINT_1", 1, 1 },
+ { "DDP_HINT_0", 0, 1 },
+ { "ULP_RX_PERR_ENABLE_2", 0x19274, 0 },
+ { "ENABLE_ULPRX2MA_IntfPerr", 8, 1 },
+ { "ENABLE_ALN_SDC_ERR_1", 7, 1 },
+ { "ENABLE_ALN_SDC_ERR_0", 6, 1 },
+ { "ENABLE_PF_UNTAGGED_TPT_1", 5, 1 },
+ { "ENABLE_PF_UNTAGGED_TPT_0", 4, 1 },
+ { "ENABLE_PF_PBL_1", 3, 1 },
+ { "ENABLE_PF_PBL_0", 2, 1 },
+ { "ENABLE_DDP_HINT_1", 1, 1 },
+ { "ENABLE_DDP_HINT_0", 0, 1 },
+ { "ULP_RX_RQE_PBL_MULTIPLE_OUTSTANDING_CNT", 0x19278, 0 },
+ { "ULP_RX_ATOMIC_LEN", 0x1927c, 0 },
+ { "atomic_rpl_len", 16, 8 },
+ { "atomic_req_len", 8, 8 },
+ { "atomic_immediate_len", 0, 8 },
+ { "ULP_RX_CGEN_GLOBAL", 0x19280, 0 },
+ { "ULP_RX_CTX_SKIP_MA_REQ", 0x19284, 0 },
+ { "clear_ctx_err_cnt1", 3, 1 },
+ { "clear_ctx_err_cnt0", 2, 1 },
+ { "skip_ma_req_en1", 1, 1 },
+ { "skip_ma_req_en0", 0, 1 },
+ { "ULP_RX_CHNL0_CTX_ERROR_COUNT_PER_TID", 0x19288, 0 },
+ { "ULP_RX_CHNL1_CTX_ERROR_COUNT_PER_TID", 0x1928c, 0 },
+ { "ULP_RX_MSN_CHECK_ENABLE", 0x19290, 0 },
+ { "Rd_or_Term_msn_check_enable", 2, 1 },
+ { "atomic_op_msn_check_enable", 1, 1 },
+ { "send_msn_check_enable", 0, 1 },
+ { "ULP_RX_TLS_PP_LLIMIT", 0x192a4, 0 },
+ { "TlsPpLlimit", 6, 26 },
+ { "ULP_RX_TLS_PP_ULIMIT", 0x192a8, 0 },
+ { "TlsPpUlimit", 6, 26 },
+ { "ULP_RX_TLS_KEY_LLIMIT", 0x192ac, 0 },
+ { "TlsKeyLlimit", 8, 24 },
+ { "ULP_RX_TLS_KEY_ULIMIT", 0x192b0, 0 },
+ { "TlsKeyUlimit", 8, 24 },
+ { "ULP_RX_TLS_CTL", 0x192bc, 0 },
+ { "TlsPerrEn", 4, 1 },
+ { "TlsDisableIFuse", 2, 1 },
+ { "TlsDisableCFuse", 1, 1 },
+ { "TlsDisable", 0, 1 },
+ { "ULP_RX_TLS_IND_CMD", 0x19348, 0 },
+ { "ULP_RX_TLS_IND_DATA", 0x1934c, 0 },
+ { NULL }
+};
+
+struct reg_info t6_sf_regs[] = {
+ { "SF_DATA", 0x193f8, 0 },
+ { "SF_OP", 0x193fc, 0 },
+ { "Busy", 31, 1 },
+ { "Lock", 4, 1 },
+ { "Cont", 3, 1 },
+ { "ByteCnt", 1, 2 },
+ { "Op", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_pl_regs[] = {
+ { "PL_PF_INT_CAUSE", 0x1e3c0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1e3c4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1e3c8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1e7c0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1e7c4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1e7c8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1ebc0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1ebc4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1ebc8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1efc0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1efc4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1efc8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1f3c0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1f3c4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1f3c8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1f7c0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1f7c4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1f7c8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1fbc0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1fbc4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1fbc8, 0 },
+ { "PL_PF_INT_CAUSE", 0x1ffc0, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_INT_ENABLE", 0x1ffc4, 0 },
+ { "SW", 3, 1 },
+ { "CIM", 1, 1 },
+ { "MPS", 0, 1 },
+ { "PL_PF_CTL", 0x1ffc8, 0 },
+ { "PL_WHOAMI", 0x19400, 0 },
+ { "PortxMap", 24, 3 },
+ { "SourceBus", 16, 2 },
+ { "SourcePF", 9, 3 },
+ { "IsVF", 8, 1 },
+ { "VFID", 0, 8 },
+ { "PL_PERR_CAUSE", 0x19404, 0 },
+ { "UART", 28, 1 },
+ { "ULP_TX", 27, 1 },
+ { "SGE", 26, 1 },
+ { "HMA", 25, 1 },
+ { "CPL_SWITCH", 24, 1 },
+ { "ULP_RX", 23, 1 },
+ { "PM_RX", 22, 1 },
+ { "PM_TX", 21, 1 },
+ { "MA", 20, 1 },
+ { "TP", 19, 1 },
+ { "LE", 18, 1 },
+ { "EDC1", 17, 1 },
+ { "EDC0", 16, 1 },
+ { "MC0", 15, 1 },
+ { "PCIE", 14, 1 },
+ { "PMU", 13, 1 },
+ { "MAC", 9, 1 },
+ { "SMB", 8, 1 },
+ { "SF", 7, 1 },
+ { "PL", 6, 1 },
+ { "NCSI", 5, 1 },
+ { "MPS", 4, 1 },
+ { "MI", 3, 1 },
+ { "DBG", 2, 1 },
+ { "I2CM", 1, 1 },
+ { "CIM", 0, 1 },
+ { "PL_PERR_ENABLE", 0x19408, 0 },
+ { "UART", 28, 1 },
+ { "ULP_TX", 27, 1 },
+ { "SGE", 26, 1 },
+ { "HMA", 25, 1 },
+ { "CPL_SWITCH", 24, 1 },
+ { "ULP_RX", 23, 1 },
+ { "PM_RX", 22, 1 },
+ { "PM_TX", 21, 1 },
+ { "MA", 20, 1 },
+ { "TP", 19, 1 },
+ { "LE", 18, 1 },
+ { "EDC1", 17, 1 },
+ { "EDC0", 16, 1 },
+ { "MC0", 15, 1 },
+ { "PCIE", 14, 1 },
+ { "PMU", 13, 1 },
+ { "MAC", 9, 1 },
+ { "SMB", 8, 1 },
+ { "SF", 7, 1 },
+ { "PL", 6, 1 },
+ { "NCSI", 5, 1 },
+ { "MPS", 4, 1 },
+ { "MI", 3, 1 },
+ { "DBG", 2, 1 },
+ { "I2CM", 1, 1 },
+ { "CIM", 0, 1 },
+ { "PL_INT_CAUSE", 0x1940c, 0 },
+ { "FLR", 30, 1 },
+ { "SW_CIM", 29, 1 },
+ { "UART", 28, 1 },
+ { "ULP_TX", 27, 1 },
+ { "SGE", 26, 1 },
+ { "HMA", 25, 1 },
+ { "CPL_SWITCH", 24, 1 },
+ { "ULP_RX", 23, 1 },
+ { "PM_RX", 22, 1 },
+ { "PM_TX", 21, 1 },
+ { "MA", 20, 1 },
+ { "TP", 19, 1 },
+ { "LE", 18, 1 },
+ { "EDC1", 17, 1 },
+ { "EDC0", 16, 1 },
+ { "MC0", 15, 1 },
+ { "PCIE", 14, 1 },
+ { "PMU", 13, 1 },
+ { "MAC1", 10, 1 },
+ { "MAC0", 9, 1 },
+ { "SMB", 8, 1 },
+ { "SF", 7, 1 },
+ { "PL", 6, 1 },
+ { "NCSI", 5, 1 },
+ { "MPS", 4, 1 },
+ { "MI", 3, 1 },
+ { "DBG", 2, 1 },
+ { "I2CM", 1, 1 },
+ { "CIM", 0, 1 },
+ { "PL_INT_ENABLE", 0x19410, 0 },
+ { "FLR", 30, 1 },
+ { "SW_CIM", 29, 1 },
+ { "UART", 28, 1 },
+ { "ULP_TX", 27, 1 },
+ { "SGE", 26, 1 },
+ { "HMA", 25, 1 },
+ { "CPL_SWITCH", 24, 1 },
+ { "ULP_RX", 23, 1 },
+ { "PM_RX", 22, 1 },
+ { "PM_TX", 21, 1 },
+ { "MA", 20, 1 },
+ { "TP", 19, 1 },
+ { "LE", 18, 1 },
+ { "EDC1", 17, 1 },
+ { "EDC0", 16, 1 },
+ { "MC0", 15, 1 },
+ { "PCIE", 14, 1 },
+ { "PMU", 13, 1 },
+ { "MAC1", 10, 1 },
+ { "MAC0", 9, 1 },
+ { "SMB", 8, 1 },
+ { "SF", 7, 1 },
+ { "PL", 6, 1 },
+ { "NCSI", 5, 1 },
+ { "MPS", 4, 1 },
+ { "MI", 3, 1 },
+ { "DBG", 2, 1 },
+ { "I2CM", 1, 1 },
+ { "CIM", 0, 1 },
+ { "PL_INT_MAP0", 0x19414, 0 },
+ { "MapNCSI", 16, 9 },
+ { "MapDefault", 0, 9 },
+ { "PL_INT_MAP1", 0x19418, 0 },
+ { "MapMAC1", 16, 9 },
+ { "MapMAC0", 0, 9 },
+ { "PL_INT_MAP3", 0x19420, 0 },
+ { "MapMI", 16, 9 },
+ { "MapSMB", 0, 9 },
+ { "PL_INT_MAP4", 0x19424, 0 },
+ { "MapDBG", 16, 9 },
+ { "MapI2CM", 0, 9 },
+ { "PL_RST", 0x19428, 0 },
+ { "AutoPciePause", 4, 1 },
+ { "FatalPerrEn", 3, 1 },
+ { "SWIntCIM", 2, 1 },
+ { "PIORst", 1, 1 },
+ { "PIORstMode", 0, 1 },
+ { "PL_PL_INT_CAUSE", 0x19430, 0 },
+ { "PL_BusPerr", 6, 1 },
+ { "FatalPerr", 4, 1 },
+ { "InvalidAccess", 3, 1 },
+ { "Timeout", 2, 1 },
+ { "PLErr", 1, 1 },
+ { "PL_PL_INT_ENABLE", 0x19434, 0 },
+ { "PL_BusPerr", 6, 1 },
+ { "FatalPerr", 4, 1 },
+ { "InvalidAccess", 3, 1 },
+ { "Timeout", 2, 1 },
+ { "PLErr", 1, 1 },
+ { "PL_PL_PERR_ENABLE", 0x19438, 0 },
+ { "PL_BusPerr", 6, 1 },
+ { "PL_REV", 0x1943c, 0 },
+ { "ChipID", 4, 4 },
+ { "Rev", 0, 4 },
+ { "PL_PCIE_LINK", 0x19440, 0 },
+ { "LN0_AESTAT", 27, 3 },
+ { "LN0_AECMD", 24, 3 },
+ { "StateCfgInitF", 16, 8 },
+ { "StateCfgInit", 12, 4 },
+ { "PHY_STATUS", 10, 1 },
+ { "SPEED", 8, 2 },
+ { "PERstTimeout", 7, 1 },
+ { "LTSSMEnable", 6, 1 },
+ { "LTSSM", 0, 6 },
+ { "PL_PCIE_CTL_STAT", 0x19444, 0 },
+ { "Status", 16, 16 },
+ { "Control", 0, 16 },
+ { "PL_SEMAPHORE_CTL", 0x1944c, 0 },
+ { "LockStatus", 16, 8 },
+ { "OwnerOverride", 8, 1 },
+ { "EnablePF", 0, 8 },
+ { "PL_SEMAPHORE_LOCK", 0x19450, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x19454, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x19458, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x1945c, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x19460, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x19464, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x19468, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_SEMAPHORE_LOCK", 0x1946c, 0 },
+ { "Lock", 31, 1 },
+ { "SourceBus", 3, 2 },
+ { "SourcePF", 0, 3 },
+ { "PL_PORTX_MAP", 0x19474, 0 },
+ { "MAP7", 28, 3 },
+ { "MAP6", 24, 3 },
+ { "MAP5", 20, 3 },
+ { "MAP4", 16, 3 },
+ { "MAP3", 12, 3 },
+ { "MAP2", 8, 3 },
+ { "MAP1", 4, 3 },
+ { "MAP0", 0, 3 },
+ { "PL_VF_SLICE_L", 0x19490, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x19498, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194a0, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194a8, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194b0, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194b8, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194c0, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_L", 0x194c8, 0 },
+ { "LimitAddr", 16, 10 },
+ { "BaseAddr", 0, 10 },
+ { "PL_VF_SLICE_H", 0x19494, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x1949c, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194a4, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194ac, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194b4, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194bc, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194c4, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_VF_SLICE_H", 0x194cc, 0 },
+ { "ModIndx", 16, 3 },
+ { "ModOffset", 0, 10 },
+ { "PL_TIMEOUT_CTL", 0x194f0, 0 },
+ { "PerrCapture", 16, 1 },
+ { "Timeout", 0, 16 },
+ { "PL_TIMEOUT_STATUS0", 0x194f4, 0 },
+ { "Addr", 2, 28 },
+ { "PL_TIMEOUT_STATUS1", 0x194f8, 0 },
+ { "Valid", 31, 1 },
+ { "ValidPerr", 30, 1 },
+ { "Write", 22, 1 },
+ { "Bus", 20, 2 },
+ { "PF", 16, 3 },
+ { "VFID", 0, 9 },
+ { NULL }
+};
+
+struct reg_info t6_le_regs[] = {
+ { "LE_DB_ID", 0x19c00, 0 },
+ { "LE_DB_CONFIG", 0x19c04, 0 },
+ { "CHK_FUL_TUP_ZERO", 27, 1 },
+ { "PRI_HASH", 26, 1 },
+ { "EXTN_HASH_IPV4", 25, 1 },
+ { "PROTOCOLMASKEN", 24, 1 },
+ { "SRVRSRAMEN", 22, 1 },
+ { "HASHEN", 20, 1 },
+ { "ASLIPCOMPEN_IPV4", 18, 1 },
+ { "BUILD", 16, 1 },
+ { "IGNR_TUP_ZERO", 9, 1 },
+ { "IGNR_LIP_ZERO", 8, 1 },
+ { "CLCAM_INIT_BUSY", 7, 1 },
+ { "CLCAM_INIT", 6, 1 },
+ { "MTCAM_INIT_BUSY", 5, 1 },
+ { "MTCAM_INIT", 4, 1 },
+ { "REGION_EN", 0, 4 },
+ { "LE_DB_EXEC_CTRL", 0x19c08, 0 },
+ { "TPDB_IF_PAUSE_ACK", 10, 1 },
+ { "TPDB_IF_PAUSE_REQ", 9, 1 },
+ { "ERRSTOP_EN", 8, 1 },
+ { "CMDLIMIT", 0, 8 },
+ { "LE_DB_PS_CTRL", 0x19c0c, 0 },
+ { "SRAMDEEPSLEEP_STAT", 11, 1 },
+ { "CLTCAMDEEPSLEEP_STAT", 10, 1 },
+ { "TCAMDEEPSLEEP_STAT", 9, 1 },
+ { "SRAMDEEPSLEEP", 8, 1 },
+ { "CLTCAMDEEPSLEEP", 7, 1 },
+ { "TCAMDEEPSLEEP", 6, 1 },
+ { "SRVRAMCLKOFF", 5, 1 },
+ { "HASHCLKOFF", 4, 1 },
+ { "LE_DB_ACTIVE_TABLE_START_INDEX", 0x19c10, 0 },
+ { "LE_DB_NORM_FILT_TABLE_START_INDEX", 0x19c14, 0 },
+ { "LE_DB_SRVR_START_INDEX", 0x19c18, 0 },
+ { "LE_DB_HPRI_FILT_TABLE_START_INDEX", 0x19c1c, 0 },
+ { "LE_DB_ACT_CNT_IPV4", 0x19c20, 0 },
+ { "LE_DB_ACT_CNT_IPV6", 0x19c24, 0 },
+ { "LE_DB_ACT_CNT_IPV4_TCAM", 0x19c94, 0 },
+ { "LE_DB_ACT_CNT_IPV6_TCAM", 0x19c98, 0 },
+ { "LE_DB_REQ_RSP_CNT", 0x19ce4, 0 },
+ { "RspCnt", 16, 16 },
+ { "ReqCnt", 0, 16 },
+ { "LE_HASH_COLLISION", 0x19fc4, 0 },
+ { "LE_GLOBAL_COLLISION", 0x19fc8, 0 },
+ { "LE_DB_HASH_CONFIG", 0x19c28, 0 },
+ { "NUMHASHBKT", 20, 5 },
+ { "HASHTBLSIZE", 3, 17 },
+ { "LE_DB_MIN_NUM_ACTV_TCAM_ENTRIES", 0x19c2c, 0 },
+ { "LE_DB_MAX_NUM_HASH_ENTRIES", 0x19c70, 0 },
+ { "LE_DB_RSP_CODE_0", 0x19c74, 0 },
+ { "SUCCESS", 25, 5 },
+ { "TCAM_ACTV_SUCC", 20, 5 },
+ { "HASH_ACTV_SUCC", 15, 5 },
+ { "TCAM_SRVR_HIT", 10, 5 },
+ { "SRAM_SRVR_HIT", 5, 5 },
+ { "TCAM_ACTV_HIT", 0, 5 },
+ { "LE_DB_RSP_CODE_1", 0x19c78, 0 },
+ { "HASH_ACTV_HIT", 25, 5 },
+ { "MISS", 20, 5 },
+ { "NORM_FILT_HIT", 15, 5 },
+ { "HPRI_FILT_HIT", 10, 5 },
+ { "ACTV_OPEN_ERR", 5, 5 },
+ { "ACTV_FULL_ERR", 0, 5 },
+ { "LE_DB_RSP_CODE_2", 0x19c7c, 0 },
+ { "SRCH_RGN_HIT", 25, 5 },
+ { "CLIP_FAIL", 20, 5 },
+ { "LIP_ZERO_ERR", 15, 5 },
+ { "UNKNOWN_CMD", 10, 5 },
+ { "CMD_TID_ERR", 5, 5 },
+ { "INTERNAL_ERR", 0, 5 },
+ { "LE_DB_RSP_CODE_3", 0x19c80, 0 },
+ { "SRAM_SRVR_HIT_ACTF", 25, 5 },
+ { "TCAM_SRVR_HIT_ACTF", 20, 5 },
+ { "INVLDRD", 15, 5 },
+ { "TUPLZERO", 10, 5 },
+ { "LE_DB_HASH_TBL_BASE_ADDR", 0x19c30, 0 },
+ { "HASHTBLADDR", 4, 28 },
+ { "LE_TCAM_SIZE", 0x19c34, 0 },
+ { "LE_DB_INT_ENABLE", 0x19c38, 0 },
+ { "ClipSubErr", 29, 1 },
+ { "ClCamFifoerr", 28, 1 },
+ { "HashTblMemCrcErr", 27, 1 },
+ { "CTcamInvldEnt", 26, 1 },
+ { "TcamInvldEnt", 25, 1 },
+ { "TotCntErr", 24, 1 },
+ { "CmdPrsrIntErr", 23, 1 },
+ { "CmdTidErr", 22, 1 },
+ { "ActRgnFull", 21, 1 },
+ { "ActCntIPv6Tzero", 20, 1 },
+ { "ActCntIPv4Tzero", 19, 1 },
+ { "ActCntIPv6zero", 18, 1 },
+ { "ActCntIPv4zero", 17, 1 },
+ { "MaifwrIntPerr", 16, 1 },
+ { "HashTblMemAccErr", 15, 1 },
+ { "TcamCrcErr", 14, 1 },
+ { "TcamIntPerr", 13, 1 },
+ { "VfSramPerr", 12, 1 },
+ { "SrvSramPerr", 11, 1 },
+ { "SsramIntPerr", 10, 1 },
+ { "ClCamIntPerr", 9, 1 },
+ { "ClCamCrcParErr", 8, 1 },
+ { "HashTblAccFail", 7, 1 },
+ { "TcamAccFail", 6, 1 },
+ { "SrvSramAccFail", 5, 1 },
+ { "ClipTcamAccFail", 4, 1 },
+ { "UnknownCmd", 3, 1 },
+ { "LIP0", 2, 1 },
+ { "LIPMiss", 1, 1 },
+ { "PipelineErr", 0, 1 },
+ { "LE_DB_INT_CAUSE", 0x19c3c, 0 },
+ { "ClipSubErr", 29, 1 },
+ { "ClCamFifoerr", 28, 1 },
+ { "HashTblMemCrcErr", 27, 1 },
+ { "CTcamInvldEnt", 26, 1 },
+ { "TcamInvldEnt", 25, 1 },
+ { "TotCntErr", 24, 1 },
+ { "CmdPrsrIntErr", 23, 1 },
+ { "CmdTidErr", 22, 1 },
+ { "ActRgnFull", 21, 1 },
+ { "ActCntIPv6Tzero", 20, 1 },
+ { "ActCntIPv4Tzero", 19, 1 },
+ { "ActCntIPv6zero", 18, 1 },
+ { "ActCntIPv4zero", 17, 1 },
+ { "MaifwrIntPerr", 16, 1 },
+ { "HashTblMemAccErr", 15, 1 },
+ { "TcamCrcErr", 14, 1 },
+ { "TcamIntPerr", 13, 1 },
+ { "VfSramPerr", 12, 1 },
+ { "SrvSramPerr", 11, 1 },
+ { "SsramIntPerr", 10, 1 },
+ { "ClCamIntPerr", 9, 1 },
+ { "ClCamCrcParErr", 8, 1 },
+ { "HashTblAccFail", 7, 1 },
+ { "TcamAccFail", 6, 1 },
+ { "SrvSramAccFail", 5, 1 },
+ { "ClipTcamAccFail", 4, 1 },
+ { "UnknownCmd", 3, 1 },
+ { "LIP0", 2, 1 },
+ { "LIPMiss", 1, 1 },
+ { "PipelineErr", 0, 1 },
+ { "LE_PERR_ENABLE", 0x19cf8, 0 },
+ { "BkChkPeriod", 22, 10 },
+ { "TcamBkChkEn", 21, 1 },
+ { "MaifwrIntPerr", 16, 1 },
+ { "HashTblMemAccErr", 15, 1 },
+ { "TcamCrcErr", 14, 1 },
+ { "TcamIntPerr", 13, 1 },
+ { "VfSramPerr", 12, 1 },
+ { "SrvSramPerr", 11, 1 },
+ { "SsramIntPerr", 10, 1 },
+ { "ClCamIntPerr", 9, 1 },
+ { "ClCamCrcParErr", 8, 1 },
+ { "HashTblAccFail", 7, 1 },
+ { "TcamAccFail", 6, 1 },
+ { "SrvSramAccFail", 5, 1 },
+ { "ClipTcamAccFail", 4, 1 },
+ { "ClCamFifoerr", 2, 1 },
+ { "HashTblMemCrcErr", 1, 1 },
+ { "PipelineErr", 0, 1 },
+ { "LE_DB_ERR_CMD_TID", 0x19c48, 0 },
+ { "ERR_CID", 22, 8 },
+ { "ERR_PROT", 20, 2 },
+ { "ERR_TID", 0, 20 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c50, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c54, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c58, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c5c, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c60, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c64, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c68, 0 },
+ { "LE_DB_DBG_MATCH_DATA_MASK", 0x19c6c, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19ca0, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19ca4, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19ca8, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19cac, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19cb0, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19cb4, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19cb8, 0 },
+ { "LE_DB_DBG_MATCH_DATA", 0x19cbc, 0 },
+ { "LE_DB_DBG_MATCH_CMD_IDX_MASK", 0x19c40, 0 },
+ { "CMD_CMP_MASK", 20, 5 },
+ { "TID_CMP_MASK", 0, 20 },
+ { "LE_DB_DBG_MATCH_CMD_IDX_DATA", 0x19c44, 0 },
+ { "CMD_CMP", 20, 5 },
+ { "TID_CMP", 0, 20 },
+ { "LE_DB_DBGI_CONFIG", 0x19cf0, 0 },
+ { "DBGICMDRANGE", 22, 3 },
+ { "DBGICMDMSKREAD", 21, 1 },
+ { "DBGICMDSEARCH", 20, 1 },
+ { "DBGICMDREAD", 19, 1 },
+ { "DBGICMDLEARN", 18, 1 },
+ { "DBGICMDWRITE", 17, 1 },
+ { "DBGICMDIPv6", 16, 1 },
+ { "DBGICMDBUSY", 3, 1 },
+ { "DBGICMDSTRT", 2, 1 },
+ { "DBGICMDMODE", 0, 2 },
+ { "LE_DB_DBGI_REQ_CMD", 0x19cf4, 0 },
+ { "DBGICMD", 20, 4 },
+ { "DBGITID", 0, 20 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d00, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d04, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d08, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d0c, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d10, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d14, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d18, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d1c, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d20, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d24, 0 },
+ { "LE_DB_DBGI_REQ_DATA", 0x19d28, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d50, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d54, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d58, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d5c, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d60, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d64, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d68, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d6c, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d70, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d74, 0 },
+ { "LE_DB_DBGI_REQ_MASK", 0x19d78, 0 },
+ { "LE_DB_DBGI_RSP_STATUS", 0x19d94, 0 },
+ { "DBGIRspTid", 12, 20 },
+ { "DBGIRspMsg", 8, 4 },
+ { "DBGIRspLearn", 2, 1 },
+ { "DBGIRspHit", 1, 1 },
+ { "DBGIRspValid", 0, 1 },
+ { "LE_DBG_SEL", 0x19d98, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19da0, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19da4, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19da8, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19dac, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19db0, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19db4, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19db8, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19dbc, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19dc0, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19dc4, 0 },
+ { "LE_DB_DBGI_RSP_DATA", 0x19dc8, 0 },
+ { "LE_DB_TCAM_TID_BASE", 0x19df0, 0 },
+ { "LE_DB_CLCAM_TID_BASE", 0x19df4, 0 },
+ { "LE_DB_HASH_TID_BASE", 0x19df8, 0 },
+ { "LE_DB_SSRAM_TID_BASE", 0x19dfc, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV4", 0x19e00, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV4", 0x19e04, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV4", 0x19e08, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV4", 0x19e0c, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV4", 0x19e10, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e50, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e54, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e58, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e5c, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e60, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e64, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e68, 0 },
+ { "LE_DB_ACTIVE_MASK_IPV6", 0x19e6c, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19ea0, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19ea4, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19ea8, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19eac, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19eb0, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19eb4, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19eb8, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV4", 0x19ebc, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ec4, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ec8, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ecc, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ed0, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ed4, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ed8, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19edc, 0 },
+ { "LE_DB_HASH_MASK_GEN_IPV6", 0x19ee0, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV4", 0x19ee4, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV4", 0x19ee8, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV4", 0x19eec, 0 },
+ { "LE_DB_PSV_FILTER_MASK_FLT_IPV4", 0x19ef0, 0 },
+ { "LE_DB_PSV_FILTER_MASK_FLT_IPV4", 0x19ef4, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f04, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f08, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f0c, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f10, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f14, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f18, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f1c, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f20, 0 },
+ { "LE_DB_PSV_FILTER_MASK_TUP_IPV6", 0x19f24, 0 },
+ { "LE_DB_PSV_FILTER_MASK_FLT_IPV6", 0x19f28, 0 },
+ { "LE_DB_PSV_FILTER_MASK_FLT_IPV6", 0x19f2c, 0 },
+ { "LE_DB_SRVR_SRAM_CONFIG", 0x19f34, 0 },
+ { "PRI_HFILT", 4, 1 },
+ { "PRI_SRVR", 3, 1 },
+ { "PRI_FILT", 2, 1 },
+ { "SRVRINITBUSY", 1, 1 },
+ { "SRVRINIT", 0, 1 },
+ { "LE_DB_SRVR_VF_SRCH_TABLE_CTRL", 0x19f38, 0 },
+ { "VFLUTBUSY", 10, 1 },
+ { "VFLUTSTART", 9, 1 },
+ { "RDWR", 8, 1 },
+ { "VFINDEX", 0, 8 },
+ { "LE_DB_SRVR_VF_SRCH_TABLE_DATA", 0x19f3c, 0 },
+ { "SRCHHADDR", 12, 12 },
+ { "SRCHLADDR", 0, 12 },
+ { "LE_DB_SECOND_ACTIVE_MASK_IPV4", 0x19f40, 0 },
+ { "LE_DB_SECOND_ACTIVE_MASK_IPV4", 0x19f44, 0 },
+ { "LE_DB_SECOND_ACTIVE_MASK_IPV4", 0x19f48, 0 },
+ { "LE_DB_SECOND_ACTIVE_MASK_IPV4", 0x19f4c, 0 },
+ { "LE_DB_SECOND_ACTIVE_MASK_IPV4", 0x19f50, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19f90, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19f94, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19f98, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19f9c, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19fa0, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19fa4, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19fa8, 0 },
+ { "LE_DB_SECOND_GEN_HASH_MASK_IPV4", 0x19fac, 0 },
+ { "LE_DEBUG_LA_CONFIG", 0x19fd0, 0 },
+ { "LE_REQ_DEBUG_LA_DATA", 0x19fd4, 0 },
+ { "LE_REQ_DEBUG_LA_WRPTR", 0x19fd8, 0 },
+ { "LE_RSP_DEBUG_LA_DATA", 0x19fdc, 0 },
+ { "LE_RSP_DEBUG_LA_WRPTR", 0x19fe0, 0 },
+ { "LE_DEBUG_LA_SEL_DATA", 0x19fe4, 0 },
+ { NULL }
+};
+
+struct reg_info t6_ncsi_regs[] = {
+ { "NCSI_PORT_CFGREG", 0x1a000, 0 },
+ { "WireEn", 28, 4 },
+ { "strp_crc", 24, 4 },
+ { "rx_halt", 22, 1 },
+ { "flush_rx_fifo", 21, 1 },
+ { "hw_arb_en", 20, 1 },
+ { "soft_pkg_sel", 19, 1 },
+ { "err_discard_en", 18, 1 },
+ { "max_pkt_size", 4, 14 },
+ { "rx_byte_swap", 3, 1 },
+ { "tx_byte_swap", 2, 1 },
+ { "NCSI_RST_CTRL", 0x1a004, 0 },
+ { "mac_ref_rst", 2, 1 },
+ { "mac_rx_rst", 1, 1 },
+ { "mac_tx_rst", 0, 1 },
+ { "NCSI_CH0_SADDR_LOW", 0x1a010, 0 },
+ { "NCSI_CH0_SADDR_HIGH", 0x1a014, 0 },
+ { "CHO_SADDR_EN", 31, 1 },
+ { "CH0_SADDR_HIGH", 0, 16 },
+ { "NCSI_CH1_SADDR_LOW", 0x1a018, 0 },
+ { "NCSI_CH1_SADDR_HIGH", 0x1a01c, 0 },
+ { "CH1_SADDR_EN", 31, 1 },
+ { "CH1_SADDR_HIGH", 0, 16 },
+ { "NCSI_CH2_SADDR_LOW", 0x1a020, 0 },
+ { "NCSI_CH2_SADDR_HIGH", 0x1a024, 0 },
+ { "CH2_SADDR_EN", 31, 1 },
+ { "CH2_SADDR_HIGH", 0, 16 },
+ { "NCSI_CH3_SADDR_LOW", 0x1a028, 0 },
+ { "NCSI_CH3_SADDR_HIGH", 0x1a02c, 0 },
+ { "CH3_SADDR_EN", 31, 1 },
+ { "CH3_SADDR_HIGH", 0, 16 },
+ { "NCSI_WORK_REQHDR_0", 0x1a030, 0 },
+ { "NCSI_WORK_REQHDR_1", 0x1a034, 0 },
+ { "NCSI_WORK_REQHDR_2", 0x1a038, 0 },
+ { "NCSI_WORK_REQHDR_3", 0x1a03c, 0 },
+ { "NCSI_MPS_HDR_LO", 0x1a040, 0 },
+ { "NCSI_MPS_HDR_HI", 0x1a044, 0 },
+ { "NCSI_CTL", 0x1a048, 0 },
+ { "STRIP_OVLAN", 3, 1 },
+ { "bmc_drop_non_bc", 2, 1 },
+ { "bmc_rx_fwd_all", 1, 1 },
+ { "FWD_BMC", 0, 1 },
+ { "NCSI_NCSI_ETYPE", 0x1a04c, 0 },
+ { "NCSI_RX_FIFO_CNT", 0x1a050, 0 },
+ { "NCSI_RX_ERR_CNT", 0x1a054, 0 },
+ { "NCSI_RX_OF_CNT", 0x1a058, 0 },
+ { "NCSI_RX_MS_CNT", 0x1a05c, 0 },
+ { "NCSI_RX_IE_CNT", 0x1a060, 0 },
+ { "NCSI_MPS_DEMUX_CNT", 0x1a064, 0 },
+ { "MPS2CIM_CNT", 16, 9 },
+ { "MPS2BMC_CNT", 0, 9 },
+ { "NCSI_CIM_DEMUX_CNT", 0x1a068, 0 },
+ { "CIM2MPS_CNT", 16, 9 },
+ { "CIM2BMC_CNT", 0, 9 },
+ { "NCSI_TX_FIFO_CNT", 0x1a06c, 0 },
+ { "NCSI_SE_CNT_CTL", 0x1a0b0, 0 },
+ { "NCSI_SE_CNT_MPS", 0x1a0b4, 0 },
+ { "NCSI_SE_CNT_CIM", 0x1a0b8, 0 },
+ { "NCSI_BUS_DEBUG", 0x1a0bc, 0 },
+ { "NCSI_LA_RDPTR", 0x1a0c0, 0 },
+ { "NCSI_LA_RDDATA", 0x1a0c4, 0 },
+ { "NCSI_LA_WRPTR", 0x1a0c8, 0 },
+ { "NCSI_LA_RESERVED", 0x1a0cc, 0 },
+ { "NCSI_LA_CTL", 0x1a0d0, 0 },
+ { "NCSI_INT_ENABLE", 0x1a0d4, 0 },
+ { "CIM_DM_prty_err", 8, 1 },
+ { "MPS_DM_prty_err", 7, 1 },
+ { "token", 6, 1 },
+ { "arb_done", 5, 1 },
+ { "arb_started", 4, 1 },
+ { "WOL", 3, 1 },
+ { "MACInt", 2, 1 },
+ { "TXFIFO_prty_err", 1, 1 },
+ { "RXFIFO_prty_err", 0, 1 },
+ { "NCSI_INT_CAUSE", 0x1a0d8, 0 },
+ { "CIM_DM_prty_err", 8, 1 },
+ { "MPS_DM_prty_err", 7, 1 },
+ { "token", 6, 1 },
+ { "arb_done", 5, 1 },
+ { "arb_started", 4, 1 },
+ { "WOL", 3, 1 },
+ { "MACInt", 2, 1 },
+ { "TXFIFO_prty_err", 1, 1 },
+ { "RXFIFO_prty_err", 0, 1 },
+ { "NCSI_STATUS", 0x1a0dc, 0 },
+ { "Master", 1, 1 },
+ { "arb_status", 0, 1 },
+ { "NCSI_PAUSE_CTRL", 0x1a0e0, 0 },
+ { "NCSI_PAUSE_TIMEOUT", 0x1a0e4, 0 },
+ { "NCSI_PAUSE_WM", 0x1a0ec, 0 },
+ { "PauseHWM", 16, 11 },
+ { "PauseLWM", 0, 11 },
+ { "NCSI_DEBUG", 0x1a0f0, 0 },
+ { "TxFIFO_empty", 4, 1 },
+ { "TxFIFO_full", 3, 1 },
+ { "PKG_ID", 0, 3 },
+ { "NCSI_PERR_INJECT", 0x1a0f4, 0 },
+ { "MemSel", 1, 1 },
+ { "InjectDataErr", 0, 1 },
+ { "NCSI_PERR_ENABLE", 0x1a0f8, 0 },
+ { "CIM_DM_prty_err", 8, 1 },
+ { "MPS_DM_prty_err", 7, 1 },
+ { "TXFIFO_prty_err", 1, 1 },
+ { "RXFIFO_prty_err", 0, 1 },
+ { "NCSI_MACB_NETWORK_CTRL", 0x1a100, 0 },
+ { "TxSndZeroPause", 12, 1 },
+ { "TxSndPause", 11, 1 },
+ { "TxStop", 10, 1 },
+ { "TxStart", 9, 1 },
+ { "BackPress", 8, 1 },
+ { "StatWrEn", 7, 1 },
+ { "IncrStat", 6, 1 },
+ { "ClearStat", 5, 1 },
+ { "EnMgmtPort", 4, 1 },
+ { "TxEn", 3, 1 },
+ { "RxEn", 2, 1 },
+ { "LoopLocal", 1, 1 },
+ { "LoopPHY", 0, 1 },
+ { "NCSI_MACB_NETWORK_CFG", 0x1a104, 0 },
+ { "PClkDiv128", 22, 1 },
+ { "CopyPause", 21, 1 },
+ { "NonStdPreOK", 20, 1 },
+ { "NoFCS", 19, 1 },
+ { "RxEnHalfDup", 18, 1 },
+ { "NoCopyFCS", 17, 1 },
+ { "LenChkEn", 16, 1 },
+ { "RxBufOffset", 14, 2 },
+ { "PauseEn", 13, 1 },
+ { "RetryTest", 12, 1 },
+ { "PClkDiv", 10, 2 },
+ { "ExtClass", 9, 1 },
+ { "En1536Frame", 8, 1 },
+ { "UCastHashEn", 7, 1 },
+ { "MCastHashEn", 6, 1 },
+ { "RxBCastDis", 5, 1 },
+ { "CopyAllFrames", 4, 1 },
+ { "JumboEn", 3, 1 },
+ { "SerEn", 2, 1 },
+ { "FullDuplex", 1, 1 },
+ { "Speed", 0, 1 },
+ { "NCSI_MACB_NETWORK_STATUS", 0x1a108, 0 },
+ { "PHYMgmtStatus", 2, 1 },
+ { "MDIStatus", 1, 1 },
+ { "LinkStatus", 0, 1 },
+ { "NCSI_MACB_TX_STATUS", 0x1a114, 0 },
+ { "UnderrunErr", 6, 1 },
+ { "TxComplete", 5, 1 },
+ { "BufferExhausted", 4, 1 },
+ { "TxProgress", 3, 1 },
+ { "RetryLimit", 2, 1 },
+ { "ColEvent", 1, 1 },
+ { "UsedBitRead", 0, 1 },
+ { "NCSI_MACB_RX_BUF_QPTR", 0x1a118, 0 },
+ { "RxBufQPtr", 2, 30 },
+ { "NCSI_MACB_TX_BUF_QPTR", 0x1a11c, 0 },
+ { "TxBufQPtr", 2, 30 },
+ { "NCSI_MACB_RX_STATUS", 0x1a120, 0 },
+ { "RxOverrunErr", 2, 1 },
+ { "FrameRcvd", 1, 1 },
+ { "NoRxBuf", 0, 1 },
+ { "NCSI_MACB_INT_STATUS", 0x1a124, 0 },
+ { "PauseTimeZero", 13, 1 },
+ { "PauseRcvd", 12, 1 },
+ { "HRespNotOK", 11, 1 },
+ { "RxOverrun", 10, 1 },
+ { "LinkChange", 9, 1 },
+ { "TxComplete", 7, 1 },
+ { "TxBufErr", 6, 1 },
+ { "RetryLimitErr", 5, 1 },
+ { "TxBufUnderrun", 4, 1 },
+ { "TxUsedBitRead", 3, 1 },
+ { "RxUsedBitRead", 2, 1 },
+ { "RxComplete", 1, 1 },
+ { "MgmtFrameSent", 0, 1 },
+ { "NCSI_MACB_INT_EN", 0x1a128, 0 },
+ { "PauseTimeZero", 13, 1 },
+ { "PauseRcvd", 12, 1 },
+ { "HRespNotOK", 11, 1 },
+ { "RxOverrun", 10, 1 },
+ { "LinkChange", 9, 1 },
+ { "TxComplete", 7, 1 },
+ { "TxBufErr", 6, 1 },
+ { "RetryLimitErr", 5, 1 },
+ { "TxBufUnderrun", 4, 1 },
+ { "TxUsedBitRead", 3, 1 },
+ { "RxUsedBitRead", 2, 1 },
+ { "RxComplete", 1, 1 },
+ { "MgmtFrameSent", 0, 1 },
+ { "NCSI_MACB_INT_DIS", 0x1a12c, 0 },
+ { "PauseTimeZero", 13, 1 },
+ { "PauseRcvd", 12, 1 },
+ { "HRespNotOK", 11, 1 },
+ { "RxOverrun", 10, 1 },
+ { "LinkChange", 9, 1 },
+ { "TxComplete", 7, 1 },
+ { "TxBufErr", 6, 1 },
+ { "RetryLimitErr", 5, 1 },
+ { "TxBufUnderrun", 4, 1 },
+ { "TxUsedBitRead", 3, 1 },
+ { "RxUsedBitRead", 2, 1 },
+ { "RxComplete", 1, 1 },
+ { "MgmtFrameSent", 0, 1 },
+ { "NCSI_MACB_INT_MASK", 0x1a130, 0 },
+ { "PauseTimeZero", 13, 1 },
+ { "PauseRcvd", 12, 1 },
+ { "HRespNotOK", 11, 1 },
+ { "RxOverrun", 10, 1 },
+ { "LinkChange", 9, 1 },
+ { "TxComplete", 7, 1 },
+ { "TxBufErr", 6, 1 },
+ { "RetryLimitErr", 5, 1 },
+ { "TxBufUnderrun", 4, 1 },
+ { "TxUsedBitRead", 3, 1 },
+ { "RxUsedBitRead", 2, 1 },
+ { "RxComplete", 1, 1 },
+ { "MgmtFrameSent", 0, 1 },
+ { "NCSI_MACB_PAUSE_TIME", 0x1a138, 0 },
+ { "NCSI_MACB_PAUSE_FRAMES_RCVD", 0x1a13c, 0 },
+ { "NCSI_MACB_TX_FRAMES_OK", 0x1a140, 0 },
+ { "NCSI_MACB_SINGLE_COL_FRAMES", 0x1a144, 0 },
+ { "NCSI_MACB_MUL_COL_FRAMES", 0x1a148, 0 },
+ { "NCSI_MACB_RX_FRAMES_OK", 0x1a14c, 0 },
+ { "NCSI_MACB_FCS_ERR", 0x1a150, 0 },
+ { "NCSI_MACB_ALIGN_ERR", 0x1a154, 0 },
+ { "NCSI_MACB_DEF_TX_FRAMES", 0x1a158, 0 },
+ { "NCSI_MACB_LATE_COL", 0x1a15c, 0 },
+ { "NCSI_MACB_EXCESSIVE_COL", 0x1a160, 0 },
+ { "NCSI_MACB_TX_UNDERRUN_ERR", 0x1a164, 0 },
+ { "NCSI_MACB_CARRIER_SENSE_ERR", 0x1a168, 0 },
+ { "NCSI_MACB_RX_RESOURCE_ERR", 0x1a16c, 0 },
+ { "NCSI_MACB_RX_OVERRUN_ERR", 0x1a170, 0 },
+ { "NCSI_MACB_RX_SYMBOL_ERR", 0x1a174, 0 },
+ { "NCSI_MACB_RX_OVERSIZE_FRAME", 0x1a178, 0 },
+ { "NCSI_MACB_RX_JABBER_ERR", 0x1a17c, 0 },
+ { "NCSI_MACB_RX_UNDERSIZE_FRAME", 0x1a180, 0 },
+ { "NCSI_MACB_SQE_TEST_ERR", 0x1a184, 0 },
+ { "NCSI_MACB_LENGTH_ERR", 0x1a188, 0 },
+ { "NCSI_MACB_TX_PAUSE_FRAMES", 0x1a18c, 0 },
+ { "NCSI_MACB_HASH_LOW", 0x1a190, 0 },
+ { "NCSI_MACB_HASH_HIGH", 0x1a194, 0 },
+ { "NCSI_MACB_SPECIFIC_1_LOW", 0x1a198, 0 },
+ { "NCSI_MACB_SPECIFIC_1_HIGH", 0x1a19c, 0 },
+ { "NCSI_MACB_SPECIFIC_2_LOW", 0x1a1a0, 0 },
+ { "NCSI_MACB_SPECIFIC_2_HIGH", 0x1a1a4, 0 },
+ { "NCSI_MACB_SPECIFIC_3_LOW", 0x1a1a8, 0 },
+ { "NCSI_MACB_SPECIFIC_3_HIGH", 0x1a1ac, 0 },
+ { "NCSI_MACB_SPECIFIC_4_LOW", 0x1a1b0, 0 },
+ { "NCSI_MACB_SPECIFIC_4_HIGH", 0x1a1b4, 0 },
+ { "NCSI_MACB_TYPE_ID", 0x1a1b8, 0 },
+ { "NCSI_MACB_TX_PAUSE_QUANTUM", 0x1a1bc, 0 },
+ { "NCSI_MACB_USER_IO", 0x1a1c0, 0 },
+ { "UserProgInput", 16, 16 },
+ { "UserProgOutput", 0, 16 },
+ { "NCSI_MACB_WOL_CFG", 0x1a1c4, 0 },
+ { "MCHashEn", 19, 1 },
+ { "Specific1En", 18, 1 },
+ { "ARPEn", 17, 1 },
+ { "MagicPktEn", 16, 1 },
+ { "ARPIPAddr", 0, 16 },
+ { "NCSI_MACB_REV_STATUS", 0x1a1fc, 0 },
+ { "PartRef", 16, 16 },
+ { "DesRev", 0, 16 },
+ { NULL }
+};
+
+struct reg_info t6_mac_regs[] = {
+ { "MAC_PORT_CFG", 0x30800, 0 },
+ { "MAC_Clk_Sel", 29, 3 },
+ { "Ena_err_rsp", 28, 1 },
+ { "SinkTx", 27, 1 },
+ { "SinkTxOnLinkDown", 26, 1 },
+ { "debug_clr", 25, 1 },
+ { "LoopNoFwd", 24, 1 },
+ { "pll_sel", 23, 1 },
+ { "port_map", 20, 3 },
+ { "Smux_Rx_Loop", 19, 1 },
+ { "Rx_Lane_Swap", 18, 1 },
+ { "Tx_Lane_Swap", 17, 1 },
+ { "Aec_pat_data", 15, 1 },
+ { "Signal_Det", 14, 1 },
+ { "macclk_sel", 13, 1 },
+ { "xgmii_sel", 12, 1 },
+ { "debug_port_sel", 10, 2 },
+ { "SmuxTxSel", 9, 1 },
+ { "SmuxRxSel", 8, 1 },
+ { "Enable_25G", 7, 1 },
+ { "Enable_50G", 6, 1 },
+ { "PortSpeed", 4, 2 },
+ { "Rx_Byte_Swap", 3, 1 },
+ { "Tx_Byte_Swap", 2, 1 },
+ { "debug_tx_rx_sel", 1, 1 },
+ { "Port_Sel", 0, 1 },
+ { "MAC_PORT_RESET_CTRL", 0x30804, 0 },
+ { "TWGDSK_HSSC16B", 31, 1 },
+ { "EEE_RESET", 30, 1 },
+ { "PTP_TIMER", 29, 1 },
+ { "MtipRefReset", 28, 1 },
+ { "MAC100G40G_RESET", 27, 1 },
+ { "MAC10G1G_RESET", 26, 1 },
+ { "MtipRegReset", 25, 1 },
+ { "PCS1G_RESET", 24, 1 },
+ { "AEC3Reset", 23, 1 },
+ { "AEC2Reset", 22, 1 },
+ { "AEC1Reset", 21, 1 },
+ { "AEC0Reset", 20, 1 },
+ { "AET3Reset", 19, 1 },
+ { "AET2Reset", 18, 1 },
+ { "AET1Reset", 17, 1 },
+ { "AET0Reset", 16, 1 },
+ { "PCS10G_RESET", 15, 1 },
+ { "PCS40G_RESET", 14, 1 },
+ { "PCS100G_RESET", 13, 1 },
+ { "TXIF_Reset", 12, 1 },
+ { "RXIF_Reset", 11, 1 },
+ { "AuxExt_Reset", 10, 1 },
+ { "MtipSd3TxRst", 9, 1 },
+ { "MtipSd2TxRst", 8, 1 },
+ { "MtipSd1TxRst", 7, 1 },
+ { "MtipSd0TxRst", 6, 1 },
+ { "MtipSd3RxRst", 5, 1 },
+ { "MtipSd2RxRst", 4, 1 },
+ { "MtipSd1RxRst", 3, 1 },
+ { "WOL_Reset", 2, 1 },
+ { "MtipSd0RxRst", 1, 1 },
+ { "HSS_Reset", 0, 1 },
+ { "MAC_PORT_LED_CFG", 0x30808, 0 },
+ { "Led1_Cfg1", 14, 2 },
+ { "Led0_Cfg1", 12, 2 },
+ { "Led1_tlo", 11, 1 },
+ { "Led1_thi", 10, 1 },
+ { "Led0_tlo", 9, 1 },
+ { "Led0_thi", 8, 1 },
+ { "Led1_Cfg", 5, 3 },
+ { "Led1_Polarity_Inv", 4, 1 },
+ { "Led0_Cfg", 1, 3 },
+ { "Led0_Polarity_Inv", 0, 1 },
+ { "MAC_PORT_LED_COUNTHI", 0x3080c, 0 },
+ { "MAC_PORT_LED_COUNTLO", 0x30810, 0 },
+ { "MAC_PORT_CFG3", 0x30814, 0 },
+ { "REF_Clk_Sel", 30, 2 },
+ { "sgmii_sd_sig_det", 29, 1 },
+ { "sgmii_sgpcs_ena", 28, 1 },
+ { "FPGA_PTP_PORT", 26, 2 },
+ { "FCSDisCtrl", 25, 1 },
+ { "SigDetCtrl", 24, 1 },
+ { "tx_lane", 23, 1 },
+ { "rx_lane", 22, 1 },
+ { "se_clr", 21, 1 },
+ { "an_ena", 17, 4 },
+ { "sd_rx_clk_ena", 13, 4 },
+ { "sd_tx_clk_ena", 9, 4 },
+ { "SGMIISEL", 8, 1 },
+ { "HSSPLLSEL", 4, 4 },
+ { "HSSC16C20SEL", 0, 4 },
+ { "MAC_PORT_CFG2", 0x30818, 0 },
+ { "Rx_Polarity_Inv", 28, 4 },
+ { "Tx_Polarity_Inv", 24, 4 },
+ { "InstanceNum", 22, 2 },
+ { "StopOnPerr", 21, 1 },
+ { "an_data_ctl", 19, 1 },
+ { "PatEn", 18, 1 },
+ { "MagicEn", 17, 1 },
+ { "T5_AEC_PMA_TX_READY", 4, 4 },
+ { "T5_AEC_PMA_RX_READY", 0, 4 },
+ { "MAC_PORT_PKT_COUNT", 0x3081c, 0 },
+ { "tx_sop_count", 24, 8 },
+ { "tx_eop_count", 16, 8 },
+ { "rx_sop_count", 8, 8 },
+ { "rx_eop_count", 0, 8 },
+ { "MAC_PORT_CFG4", 0x30820, 0 },
+ { "AEC3_RX_WIDTH", 14, 2 },
+ { "AEC2_RX_WIDTH", 12, 2 },
+ { "AEC1_RX_WIDTH", 10, 2 },
+ { "AEC0_RX_WIDTH", 8, 2 },
+ { "AEC3_TX_WIDTH", 6, 2 },
+ { "AEC2_TX_WIDTH", 4, 2 },
+ { "AEC1_TX_WIDTH", 2, 2 },
+ { "AEC0_TX_WIDTH", 0, 2 },
+ { "MAC_PORT_MAGIC_MACID_LO", 0x30824, 0 },
+ { "MAC_PORT_MAGIC_MACID_HI", 0x30828, 0 },
+ { "MAC_PORT_MTIP_RESET_CTRL", 0x3082c, 0 },
+ { "an_reset_sd_tx_clk", 31, 1 },
+ { "an_reset_sd_rx_clk", 30, 1 },
+ { "sgmii_reset_tx_clk", 29, 1 },
+ { "sgmii_reset_rx_clk", 28, 1 },
+ { "sgmii_reset_ref_clk", 27, 1 },
+ { "pcs10g_reset_xfi_rxclk", 26, 1 },
+ { "pcs10g_reset_xfi_txclk", 25, 1 },
+ { "pcs10g_reset_sd_tx_clk", 24, 1 },
+ { "pcs10g_reset_sd_rx_clk", 23, 1 },
+ { "pcs40g_reset_rxclk", 22, 1 },
+ { "pcs40g_reset_sd_tx_clk", 21, 1 },
+ { "pcs40g_reset_sd0_rx_clk", 20, 1 },
+ { "pcs40g_reset_sd1_rx_clk", 19, 1 },
+ { "pcs40g_reset_sd2_rx_clk", 18, 1 },
+ { "pcs40g_reset_sd3_rx_clk", 17, 1 },
+ { "pcs100g_reset_cgmii_rxclk", 16, 1 },
+ { "pcs100g_reset_cgmii_txclk", 15, 1 },
+ { "pcs100g_reset_tx_clk", 14, 1 },
+ { "pcs100g_reset_sd0_rx_clk", 13, 1 },
+ { "pcs100g_reset_sd1_rx_clk", 12, 1 },
+ { "pcs100g_reset_sd2_rx_clk", 11, 1 },
+ { "pcs100g_reset_sd3_rx_clk", 10, 1 },
+ { "mac40g100g_reset_txclk", 9, 1 },
+ { "mac40g100g_reset_rxclk", 8, 1 },
+ { "mac40g100g_reset_ff_tx_clk", 7, 1 },
+ { "mac40g100g_reset_ff_rx_clk", 6, 1 },
+ { "mac40g100g_reset_ts_clk", 5, 1 },
+ { "mac1g10g_reset_rxclk", 4, 1 },
+ { "mac1g10g_reset_txclk", 3, 1 },
+ { "mac1g10g_reset_ff_rx_clk", 2, 1 },
+ { "mac1g10g_reset_ff_tx_clk", 1, 1 },
+ { "xgmii_clk_reset", 0, 1 },
+ { "MAC_PORT_MTIP_GATE_CTRL", 0x30830, 0 },
+ { "an_gate_sd_tx_clk", 31, 1 },
+ { "an_gate_sd_rx_clk", 30, 1 },
+ { "sgmii_gate_tx_clk", 29, 1 },
+ { "sgmii_gate_rx_clk", 28, 1 },
+ { "sgmii_gate_ref_clk", 27, 1 },
+ { "pcs10g_gate_xfi_rxclk", 26, 1 },
+ { "pcs10g_gate_xfi_txclk", 25, 1 },
+ { "pcs10g_gate_sd_tx_clk", 24, 1 },
+ { "pcs10g_gate_sd_rx_clk", 23, 1 },
+ { "pcs40g_gate_rxclk", 22, 1 },
+ { "pcs40g_gate_sd_tx_clk", 21, 1 },
+ { "pcs40g_gate_sd_rx_clk", 20, 1 },
+ { "pcs100g_gate_cgmii_rxclk", 19, 1 },
+ { "pcs100g_gate_cgmii_txclk", 18, 1 },
+ { "pcs100g_gate_tx_clk", 17, 1 },
+ { "pcs100g_gate_sd_rx_clk", 16, 1 },
+ { "mac40g100g_gate_txclk", 15, 1 },
+ { "mac40g100g_gate_rxclk", 14, 1 },
+ { "mac40g100g_gate_ff_tx_clk", 13, 1 },
+ { "mac40g100g_gate_ff_rx_clk", 12, 1 },
+ { "mac40g100g_ts_clk", 11, 1 },
+ { "mac1g10g_gate_rxclk", 10, 1 },
+ { "mac1g10g_gate_txclk", 9, 1 },
+ { "mac1g10g_gate_ff_rx_clk", 8, 1 },
+ { "mac1g10g_gate_ff_tx_clk", 7, 1 },
+ { "aec_rx", 6, 1 },
+ { "aec_tx", 5, 1 },
+ { "pcs100g_clk_enable", 4, 1 },
+ { "pcs40g_clk_enable", 3, 1 },
+ { "pcs10g_clk_enable", 2, 1 },
+ { "pcs1g_clk_enable", 1, 1 },
+ { "an_clk_enable", 0, 1 },
+ { "MAC_PORT_LINK_STATUS", 0x30834, 0 },
+ { "hi_ber", 7, 1 },
+ { "an_done", 6, 1 },
+ { "align_done", 5, 1 },
+ { "block_lock", 4, 1 },
+ { "remflt", 3, 1 },
+ { "locflt", 2, 1 },
+ { "linkup", 1, 1 },
+ { "linkdn", 0, 1 },
+ { "MAC_PORT_AEC_ADD_CTL_STAT_0", 0x30838, 0 },
+ { "AEC_SYS_LANE_TYPE_3", 11, 1 },
+ { "AEC_SYS_LANE_TYPE_2", 10, 1 },
+ { "AEC_SYS_LANE_TYPE_1", 9, 1 },
+ { "AEC_SYS_LANE_TYPE_0", 8, 1 },
+ { "AEC_SYS_LANE_SELECT_3", 6, 2 },
+ { "AEC_SYS_LANE_SELECT_2", 4, 2 },
+ { "AEC_SYS_LANE_SELECT_1", 2, 2 },
+ { "AEC_SYS_LANE_SELECT_O", 0, 2 },
+ { "MAC_PORT_AEC_ADD_CTL_STAT_1", 0x3083c, 0 },
+ { "AEC_RX_UNKNOWN_LANE_3", 11, 1 },
+ { "AEC_RX_UNKNOWN_LANE_2", 10, 1 },
+ { "AEC_RX_UNKNOWN_LANE_1", 9, 1 },
+ { "AEC_RX_UNKNOWN_LANE_0", 8, 1 },
+ { "AEC_RX_LANE_ID_3", 6, 2 },
+ { "AEC_RX_LANE_ID_2", 4, 2 },
+ { "AEC_RX_LANE_ID_1", 2, 2 },
+ { "AEC_RX_LANE_ID_O", 0, 2 },
+ { "MAC_PORT_AEC_XGMII_TIMER_LO_40G", 0x30840, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_HI_40G", 0x30844, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_LO_100G", 0x30848, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_HI_100G", 0x3084c, 0 },
+ { "MAC_PORT_AEC_DEBUG_LO_0", 0x30850, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_0", 0x30854, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_1", 0x30858, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_1", 0x3085c, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_2", 0x30860, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_2", 0x30864, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_3", 0x30868, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_3", 0x3086c, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_MAC_DEBUG_RO", 0x30870, 0 },
+ { "mac40g100g_tx_underflow", 13, 1 },
+ { "mac1g10g_magic_ind", 12, 1 },
+ { "mac1g10g_ff_rx_empty", 11, 1 },
+ { "mac1g10g_ff_tx_ovr_err", 10, 1 },
+ { "mac1g10g_if_mode_ena", 8, 2 },
+ { "mac1g10g_mii_ena_10", 7, 1 },
+ { "mac1g10g_pause_on", 6, 1 },
+ { "mac1g10g_pfc_mode", 5, 1 },
+ { "mac1g10g_rx_sfd_o", 4, 1 },
+ { "mac1g10g_tx_empty", 3, 1 },
+ { "mac1g10g_tx_sfd_o", 2, 1 },
+ { "mac1g10g_tx_ts_frm_out", 1, 1 },
+ { "mac1g10g_tx_underflow", 0, 1 },
+ { "MAC_PORT_MAC_CTRL_RW", 0x30874, 0 },
+ { "mac40g100g_ff_tx_pfc_xoff", 17, 8 },
+ { "mac40g100g_tx_loc_fault", 16, 1 },
+ { "mac40g100g_tx_rem_fault", 15, 1 },
+ { "mac40g_loop_bck", 14, 1 },
+ { "mac1g10g_magic_ena", 13, 1 },
+ { "mac1g10g_if_mode_set", 11, 2 },
+ { "mac1g10g_tx_loc_fault", 10, 1 },
+ { "mac1g10g_tx_rem_fault", 9, 1 },
+ { "mac1g10g_xoff_gen", 1, 8 },
+ { "mac1g_loop_bck", 0, 1 },
+ { "MAC_PORT_PCS_DEBUG0_RO", 0x30878, 0 },
+ { "fpga_lock", 26, 4 },
+ { "an_done", 25, 1 },
+ { "an_int", 24, 1 },
+ { "an_pcs_rx_clk_ena", 23, 1 },
+ { "an_pcs_tx_clk_ena", 22, 1 },
+ { "an_select", 17, 5 },
+ { "an_prog", 16, 1 },
+ { "pcs40g_block_lock", 12, 4 },
+ { "pcs40g_ber_timer_done", 11, 1 },
+ { "pcs10g_fec_locked", 10, 1 },
+ { "pcs10g_block_lock", 9, 1 },
+ { "sgmii_gmii_col", 8, 1 },
+ { "sgmii_gmii_crs", 7, 1 },
+ { "sgmii_sd_loopback", 6, 1 },
+ { "sgmii_sg_an_done", 5, 1 },
+ { "sgmii_sg_hd", 4, 1 },
+ { "sgmii_sg_page_rx", 3, 1 },
+ { "sgmii_sg_rx_sync", 2, 1 },
+ { "sgmii_sg_speed", 0, 2 },
+ { "MAC_PORT_PCS_CTRL_RW", 0x3087c, 0 },
+ { "tx_li_fault", 31, 1 },
+ { "pad", 30, 1 },
+ { "blk_stb_val", 22, 8 },
+ { "debug_sel", 18, 4 },
+ { "sgmii_loop", 15, 3 },
+ { "an_dis_timer", 14, 1 },
+ { "pcs100g_ber_timer_short", 13, 1 },
+ { "pcs100g_tx_lane_thresh", 9, 4 },
+ { "pcs100g_vl_intvl", 8, 1 },
+ { "sgmii_tx_lane_ckmult", 4, 3 },
+ { "sgmii_tx_lane_thresh", 0, 4 },
+ { "MAC_PORT_PCS_DEBUG1_RO", 0x30880, 0 },
+ { "pcs100g_align_lock", 21, 1 },
+ { "pcs100g_ber_timer_done", 20, 1 },
+ { "pcs100g_block_lock", 0, 20 },
+ { "MAC_PORT_PERR_INT_EN_100G", 0x30884, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_PERR_INT_CAUSE_100G", 0x30888, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_PERR_ENABLE_100G", 0x3088c, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_MAC_STAT_DEBUG", 0x30890, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM0", 0x30894, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM1", 0x30898, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM2", 0x3089c, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM3", 0x308a0, 0 },
+ { "MAC_PORT_MAC_AN_STATE_STATUS", 0x308a4, 0 },
+ { "MAC_PORT_EPIO_DATA0", 0x308c0, 0 },
+ { "MAC_PORT_EPIO_DATA1", 0x308c4, 0 },
+ { "MAC_PORT_EPIO_DATA2", 0x308c8, 0 },
+ { "MAC_PORT_EPIO_DATA3", 0x308cc, 0 },
+ { "MAC_PORT_EPIO_OP", 0x308d0, 0 },
+ { "Busy", 31, 1 },
+ { "Write", 8, 1 },
+ { "Address", 0, 8 },
+ { "MAC_PORT_WOL_STATUS", 0x308d4, 0 },
+ { "MagicDetected", 31, 1 },
+ { "PatDetected", 30, 1 },
+ { "ClearMagic", 4, 1 },
+ { "ClearMatch", 3, 1 },
+ { "MatchedFilter", 0, 3 },
+ { "MAC_PORT_INT_EN", 0x308d8, 0 },
+ { "pps", 30, 1 },
+ { "tx_ts_avail", 29, 1 },
+ { "single_alarm", 28, 1 },
+ { "periodic_alarm", 27, 1 },
+ { "PatDetWake", 26, 1 },
+ { "MagicWake", 25, 1 },
+ { "SigDetChg", 24, 1 },
+ { "AE_Train_Local", 22, 1 },
+ { "HSSPLL_LOCK", 21, 1 },
+ { "HSSPRT_READY", 20, 1 },
+ { "AutoNeg_Done", 19, 1 },
+ { "PCS_Link_Good", 12, 1 },
+ { "PCS_Link_Fail", 11, 1 },
+ { "RxFifoOverFlow", 10, 1 },
+ { "HSSPRBSErr", 9, 1 },
+ { "HSSEyeQual", 8, 1 },
+ { "RemoteFault", 7, 1 },
+ { "LocalFault", 6, 1 },
+ { "MAC_Link_Down", 5, 1 },
+ { "MAC_Link_Up", 4, 1 },
+ { "an_page_rcvd", 2, 1 },
+ { "TxFifo_prty_err", 1, 1 },
+ { "RxFifo_prty_err", 0, 1 },
+ { "MAC_PORT_INT_CAUSE", 0x308dc, 0 },
+ { "pps", 30, 1 },
+ { "tx_ts_avail", 29, 1 },
+ { "single_alarm", 28, 1 },
+ { "periodic_alarm", 27, 1 },
+ { "PatDetWake", 26, 1 },
+ { "MagicWake", 25, 1 },
+ { "SigDetChg", 24, 1 },
+ { "AE_Train_Local", 22, 1 },
+ { "HSSPLL_LOCK", 21, 1 },
+ { "HSSPRT_READY", 20, 1 },
+ { "AutoNeg_Done", 19, 1 },
+ { "PCS_Link_Good", 12, 1 },
+ { "PCS_Link_Fail", 11, 1 },
+ { "RxFifoOverFlow", 10, 1 },
+ { "HSSPRBSErr", 9, 1 },
+ { "HSSEyeQual", 8, 1 },
+ { "RemoteFault", 7, 1 },
+ { "LocalFault", 6, 1 },
+ { "MAC_Link_Down", 5, 1 },
+ { "MAC_Link_Up", 4, 1 },
+ { "an_page_rcvd", 2, 1 },
+ { "TxFifo_prty_err", 1, 1 },
+ { "RxFifo_prty_err", 0, 1 },
+ { "MAC_PORT_PERR_INT_EN", 0x308e0, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_INT_CAUSE", 0x308e4, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_ENABLE", 0x308e8, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_INJECT", 0x308ec, 0 },
+ { "MemSel", 1, 6 },
+ { "InjectDataErr", 0, 1 },
+ { "MAC_PORT_HSS_CFG0", 0x308f0, 0 },
+ { "TXDTS", 31, 1 },
+ { "TXCTS", 30, 1 },
+ { "TXBTS", 29, 1 },
+ { "TXATS", 28, 1 },
+ { "TXDOBS", 27, 1 },
+ { "TXCOBS", 26, 1 },
+ { "TXBOBS", 25, 1 },
+ { "TXAOBS", 24, 1 },
+ { "HSSREFCLKVALIDA", 20, 1 },
+ { "HSSREFCLKVALIDB", 19, 1 },
+ { "HSSRESYNCA", 18, 1 },
+ { "HSSAVDHI", 17, 1 },
+ { "HSSRESYNCB", 16, 1 },
+ { "HSSRECCALA", 15, 1 },
+ { "HSSRXACMODE", 14, 1 },
+ { "HSSRECCALB", 13, 1 },
+ { "HSSPLLBYPA", 12, 1 },
+ { "HSSPLLBYPB", 11, 1 },
+ { "HSSPDWNPLLA", 10, 1 },
+ { "HSSPDWNPLLB", 9, 1 },
+ { "HSSVCOSELA", 8, 1 },
+ { "HSSVCOSELB", 7, 1 },
+ { "HSSCALCOMP", 6, 1 },
+ { "HSSCALENAB", 5, 1 },
+ { "HSSEXTC16SEL", 4, 1 },
+ { "MAC_PORT_HSS_CFG1", 0x308f4, 0 },
+ { "RXACONFIGSEL", 30, 2 },
+ { "RXAQUIET", 29, 1 },
+ { "RXAREFRESH", 28, 1 },
+ { "RXBCONFIGSEL", 26, 2 },
+ { "RXBQUIET", 25, 1 },
+ { "RXBREFRESH", 24, 1 },
+ { "RXCCONFIGSEL", 22, 2 },
+ { "RXCQUIET", 21, 1 },
+ { "RXCREFRESH", 20, 1 },
+ { "RXDCONFIGSEL", 18, 2 },
+ { "RXDQUIET", 17, 1 },
+ { "RXDREFRESH", 16, 1 },
+ { "TXACONFIGSEL", 14, 2 },
+ { "TXAQUIET", 13, 1 },
+ { "TXAREFRESH", 12, 1 },
+ { "TXBCONFIGSEL", 10, 2 },
+ { "TXBQUIET", 9, 1 },
+ { "TXBREFRESH", 8, 1 },
+ { "TXCCONFIGSEL", 6, 2 },
+ { "TXCQUIET", 5, 1 },
+ { "TXCREFRESH", 4, 1 },
+ { "TXDCONFIGSEL", 2, 2 },
+ { "TXDQUIET", 1, 1 },
+ { "TXDREFRESH", 0, 1 },
+ { "MAC_PORT_HSS_CFG2", 0x308f8, 0 },
+ { "RXAASSTCLK", 31, 1 },
+ { "T5RXAPRBSRST", 30, 1 },
+ { "RXBASSTCLK", 29, 1 },
+ { "T5RXBPRBSRST", 28, 1 },
+ { "RXCASSTCLK", 27, 1 },
+ { "T5RXCPRBSRST", 26, 1 },
+ { "RXDASSTCLK", 25, 1 },
+ { "T5RXDPRBSRST", 24, 1 },
+ { "RXDDATASYNC", 23, 1 },
+ { "RXCDATASYNC", 22, 1 },
+ { "RXBDATASYNC", 21, 1 },
+ { "RXADATASYNC", 20, 1 },
+ { "RXDEARLYIN", 19, 1 },
+ { "RXDLATEIN", 18, 1 },
+ { "RXDPHSLOCK", 17, 1 },
+ { "RXDPHSDNIN", 16, 1 },
+ { "RXDPHSUPIN", 15, 1 },
+ { "RXCEARLYIN", 14, 1 },
+ { "RXCLATEIN", 13, 1 },
+ { "RXCPHSLOCK", 12, 1 },
+ { "RXCPHSDNIN", 11, 1 },
+ { "RXCPHSUPIN", 10, 1 },
+ { "RXBEARLYIN", 9, 1 },
+ { "RXBLATEIN", 8, 1 },
+ { "RXBPHSLOCK", 7, 1 },
+ { "RXBPHSDNIN", 6, 1 },
+ { "RXBPHSUPIN", 5, 1 },
+ { "RXAEARLYIN", 4, 1 },
+ { "RXALATEIN", 3, 1 },
+ { "RXAPHSLOCK", 2, 1 },
+ { "RXAPHSDNIN", 1, 1 },
+ { "RXAPHSUPIN", 0, 1 },
+ { "MAC_PORT_HSS_CFG3", 0x308fc, 0 },
+ { "HSSCALSSTN", 22, 6 },
+ { "HSSCALSSTP", 16, 6 },
+ { "HSSPLLCONFIGB", 8, 8 },
+ { "HSSPLLCONFIGA", 0, 8 },
+ { "MAC_PORT_HSS_CFG4", 0x30900, 0 },
+ { "HSSREFDIVA", 24, 4 },
+ { "HSSREFDIVB", 20, 4 },
+ { "HSSPLLDIV2B", 19, 1 },
+ { "HSSPLLDIV2A", 18, 1 },
+ { "HSSDIVSELA", 9, 9 },
+ { "HSSDIVSELB", 0, 9 },
+ { "MAC_PORT_HSS_STATUS", 0x30904, 0 },
+ { "RXDERROFLOW", 19, 1 },
+ { "RXCERROFLOW", 18, 1 },
+ { "RXBERROFLOW", 17, 1 },
+ { "RXAERROFLOW", 16, 1 },
+ { "RXDPRBSSYNC", 15, 1 },
+ { "RXCPRBSSYNC", 14, 1 },
+ { "RXBPRBSSYNC", 13, 1 },
+ { "RXAPRBSSYNC", 12, 1 },
+ { "RXDPRBSERR", 11, 1 },
+ { "RXCPRBSERR", 10, 1 },
+ { "RXBPRBSERR", 9, 1 },
+ { "RXAPRBSERR", 8, 1 },
+ { "RXDSIGDET", 7, 1 },
+ { "RXCSIGDET", 6, 1 },
+ { "RXBSIGDET", 5, 1 },
+ { "RXASIGDET", 4, 1 },
+ { "HSSPLLLOCKB", 3, 1 },
+ { "HSSPLLLOCKA", 2, 1 },
+ { "HSSPRTREADYB", 1, 1 },
+ { "HSSPRTREADYA", 0, 1 },
+ { "MAC_PORT_HSS_EEE_STATUS", 0x30908, 0 },
+ { "RXAQUIET_STATUS", 15, 1 },
+ { "RXAREFRESH_STATUS", 14, 1 },
+ { "RXBQUIET_STATUS", 13, 1 },
+ { "RXBREFRESH_STATUS", 12, 1 },
+ { "RXCQUIET_STATUS", 11, 1 },
+ { "RXCREFRESH_STATUS", 10, 1 },
+ { "RXDQUIET_STATUS", 9, 1 },
+ { "RXDREFRESH_STATUS", 8, 1 },
+ { "TXAQUIET_STATUS", 7, 1 },
+ { "TXAREFRESH_STATUS", 6, 1 },
+ { "TXBQUIET_STATUS", 5, 1 },
+ { "TXBREFRESH_STATUS", 4, 1 },
+ { "TXCQUIET_STATUS", 3, 1 },
+ { "TXCREFRESH_STATUS", 2, 1 },
+ { "TXDQUIET_STATUS", 1, 1 },
+ { "TXDREFRESH_STATUS", 0, 1 },
+ { "MAC_PORT_HSS_SIGDET_STATUS", 0x3090c, 0 },
+ { "MAC_PORT_HSS_PL_CTL", 0x30910, 0 },
+ { "TOV", 16, 8 },
+ { "TSU", 8, 8 },
+ { "IPW", 0, 8 },
+ { "MAC_PORT_RUNT_FRAME", 0x30914, 0 },
+ { "runtclear", 16, 1 },
+ { "runt", 0, 16 },
+ { "MAC_PORT_EEE_STATUS", 0x30918, 0 },
+ { "eee_tx_10g_state", 10, 2 },
+ { "eee_rx_10g_state", 8, 2 },
+ { "eee_tx_1g_state", 6, 2 },
+ { "eee_rx_1g_state", 4, 2 },
+ { "pma_rx_refresh", 3, 1 },
+ { "pma_rx_quiet", 2, 1 },
+ { "pma_tx_refresh", 1, 1 },
+ { "pma_tx_quiet", 0, 1 },
+ { "MAC_PORT_CGEN", 0x3091c, 0 },
+ { "CGEN", 8, 1 },
+ { "sd7_CGEN", 7, 1 },
+ { "sd6_CGEN", 6, 1 },
+ { "sd5_CGEN", 5, 1 },
+ { "sd4_CGEN", 4, 1 },
+ { "sd3_CGEN", 3, 1 },
+ { "sd2_CGEN", 2, 1 },
+ { "sd1_CGEN", 1, 1 },
+ { "sd0_CGEN", 0, 1 },
+ { "MAC_PORT_CGEN_MTIP", 0x30920, 0 },
+ { "MACSEG5_CGEN", 11, 1 },
+ { "PCSSEG5_CGEN", 10, 1 },
+ { "MACSEG4_CGEN", 9, 1 },
+ { "PCSSEG4_CGEN", 8, 1 },
+ { "MACSEG3_CGEN", 7, 1 },
+ { "PCSSEG3_CGEN", 6, 1 },
+ { "MACSEG2_CGEN", 5, 1 },
+ { "PCSSEG2_CGEN", 4, 1 },
+ { "MACSEG1_CGEN", 3, 1 },
+ { "PCSSEG1_CGEN", 2, 1 },
+ { "MACSEG0_CGEN", 1, 1 },
+ { "PCSSEG0_CGEN", 0, 1 },
+ { "MAC_PORT_TX_TS_ID", 0x30924, 0 },
+ { "MAC_PORT_TX_TS_VAL_LO", 0x30928, 0 },
+ { "MAC_PORT_TX_TS_VAL_HI", 0x3092c, 0 },
+ { "MAC_PORT_EEE_CTL", 0x30930, 0 },
+ { "EEE_CTRL", 2, 30 },
+ { "TICK_START", 1, 1 },
+ { "En", 0, 1 },
+ { "MAC_PORT_EEE_TX_CTL", 0x30934, 0 },
+ { "WAKE_TIMER", 16, 16 },
+ { "HSS_TIMER", 5, 4 },
+ { "HSS_CTL", 4, 1 },
+ { "LPI_ACTIVE", 3, 1 },
+ { "LPI_TXHOLD", 2, 1 },
+ { "LPI_REQ", 1, 1 },
+ { "EEE_TX_RESET", 0, 1 },
+ { "MAC_PORT_EEE_RX_CTL", 0x30938, 0 },
+ { "WAKE_TIMER", 16, 16 },
+ { "HSS_TIMER", 5, 4 },
+ { "HSS_CTL", 4, 1 },
+ { "LPI_IND", 1, 1 },
+ { "EEE_RX_RESET", 0, 1 },
+ { "MAC_PORT_EEE_TX_10G_SLEEP_TIMER", 0x3093c, 0 },
+ { "MAC_PORT_EEE_TX_10G_QUIET_TIMER", 0x30940, 0 },
+ { "MAC_PORT_EEE_TX_10G_WAKE_TIMER", 0x30944, 0 },
+ { "MAC_PORT_EEE_TX_1G_SLEEP_TIMER", 0x30948, 0 },
+ { "MAC_PORT_EEE_TX_1G_QUIET_TIMER", 0x3094c, 0 },
+ { "MAC_PORT_EEE_TX_1G_REFRESH_TIMER", 0x30950, 0 },
+ { "MAC_PORT_EEE_RX_10G_QUIET_TIMER", 0x30954, 0 },
+ { "MAC_PORT_EEE_RX_10G_WAKE_TIMER", 0x30958, 0 },
+ { "MAC_PORT_EEE_RX_10G_WF_TIMER", 0x3095c, 0 },
+ { "MAC_PORT_EEE_RX_1G_QUIET_TIMER", 0x30960, 0 },
+ { "MAC_PORT_EEE_RX_1G_WAKE_TIMER", 0x30964, 0 },
+ { "MAC_PORT_EEE_WF_COUNT", 0x30968, 0 },
+ { "wake_cnt_clr", 16, 1 },
+ { "wake_cnt", 0, 16 },
+ { "MAC_PORT_PTP_TIMER_RD0_LO", 0x3096c, 0 },
+ { "MAC_PORT_PTP_TIMER_RD0_HI", 0x30970, 0 },
+ { "MAC_PORT_PTP_TIMER_RD1_LO", 0x30974, 0 },
+ { "MAC_PORT_PTP_TIMER_RD1_HI", 0x30978, 0 },
+ { "MAC_PORT_PTP_TIMER_WR_LO", 0x3097c, 0 },
+ { "MAC_PORT_PTP_TIMER_WR_HI", 0x30980, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_0", 0x30984, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_1", 0x30988, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_2", 0x3098c, 0 },
+ { "MAC_PORT_PTP_SUM_LO", 0x30990, 0 },
+ { "MAC_PORT_PTP_SUM_HI", 0x30994, 0 },
+ { "MAC_PORT_PTP_TIMER_INCR0", 0x30998, 0 },
+ { "Y", 16, 16 },
+ { "X", 0, 16 },
+ { "MAC_PORT_PTP_TIMER_INCR1", 0x3099c, 0 },
+ { "Y_TICK", 16, 16 },
+ { "X_TICK", 0, 16 },
+ { "MAC_PORT_PTP_DRIFT_ADJUST_COUNT", 0x309a0, 0 },
+ { "MAC_PORT_PTP_OFFSET_ADJUST_FINE", 0x309a4, 0 },
+ { "B", 16, 16 },
+ { "A", 0, 16 },
+ { "MAC_PORT_PTP_OFFSET_ADJUST_TOTAL", 0x309a8, 0 },
+ { "MAC_PORT_PTP_CFG", 0x309ac, 0 },
+ { "ALARM_EN", 21, 1 },
+ { "ALARM_START", 20, 1 },
+ { "PPS_EN", 19, 1 },
+ { "FRZ", 18, 1 },
+ { "OFFSER_ADJUST_SIGN", 17, 1 },
+ { "ADD_OFFSET", 16, 1 },
+ { "CYCLE1", 8, 8 },
+ { "Q", 0, 8 },
+ { "MAC_PORT_PTP_PPS", 0x309b0, 0 },
+ { "MAC_PORT_PTP_SINGLE_ALARM", 0x309b4, 0 },
+ { "MAC_PORT_PTP_PERIODIC_ALARM", 0x309b8, 0 },
+ { "MAC_PORT_PTP_STATUS", 0x309bc, 0 },
+ { "MAC_PORT_MTIP_REVISION", 0x30a00, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_SCRATCH", 0x30a04, 0 },
+ { "MAC_PORT_MTIP_COMMAND_CONFIG", 0x30a08, 0 },
+ { "TX_FLUSH", 22, 1 },
+ { "RX_SFD_ANY", 21, 1 },
+ { "PAUSE_PFC_COMP", 20, 1 },
+ { "PFC_MODE", 19, 1 },
+ { "RS_COL_CNT_EXT", 18, 1 },
+ { "NO_LGTH_CHECK", 17, 1 },
+ { "SEND_IDLE", 16, 1 },
+ { "PHY_TXENA", 15, 1 },
+ { "RX_ERR_DISC", 14, 1 },
+ { "CMD_FRAME_ENA", 13, 1 },
+ { "SW_RESET", 12, 1 },
+ { "TX_PAD_EN", 11, 1 },
+ { "LOOPBACK_EN", 10, 1 },
+ { "TX_ADDR_INS", 9, 1 },
+ { "PAUSE_IGNORE", 8, 1 },
+ { "PAUSE_FWD", 7, 1 },
+ { "CRC_FWD", 6, 1 },
+ { "PAD_EN", 5, 1 },
+ { "PROMIS_EN", 4, 1 },
+ { "WAN_MODE", 3, 1 },
+ { "RX_ENA", 1, 1 },
+ { "TX_ENA", 0, 1 },
+ { "MAC_PORT_MTIP_MAC_ADDR_0", 0x30a0c, 0 },
+ { "MAC_PORT_MTIP_MAC_ADDR_1", 0x30a10, 0 },
+ { "MAC_PORT_MTIP_FRM_LENGTH", 0x30a14, 0 },
+ { "MAC_PORT_MTIP_RX_FIFO_SECTIONS", 0x30a1c, 0 },
+ { "AVAIL", 16, 16 },
+ { "EMPTY", 0, 16 },
+ { "MAC_PORT_MTIP_TX_FIFO_SECTIONS", 0x30a20, 0 },
+ { "AVAIL", 16, 16 },
+ { "EMPTY", 0, 16 },
+ { "MAC_PORT_MTIP_RX_FIFO_ALMOST_F_E", 0x30a24, 0 },
+ { "AlmstFull", 16, 16 },
+ { "AlmstEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_TX_FIFO_ALMOST_F_E", 0x30a28, 0 },
+ { "AlmstFull", 16, 16 },
+ { "AlmstEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_HASHTABLE_LOAD", 0x30a2c, 0 },
+ { "ENABLE", 8, 1 },
+ { "ADDR", 0, 6 },
+ { "MAC_PORT_MTIP_MAC_STATUS", 0x30a40, 0 },
+ { "TS_AVAIL", 3, 1 },
+ { "PHY_LOS", 2, 1 },
+ { "RX_REM_FAULT", 1, 1 },
+ { "RX_LOC_FAULT", 0, 1 },
+ { "MAC_PORT_MTIP_TX_IPG_LENGTH", 0x30a44, 0 },
+ { "MAC_PORT_MTIP_MAC_CREDIT_TRIGGER", 0x30a48, 0 },
+ { "MAC_PORT_MTIP_INIT_CREDIT", 0x30a4c, 0 },
+ { "MAC_PORT_MTIP_CURRENT_CREDIT", 0x30a50, 0 },
+ { "MAC_PORT_RX_PAUSE_STATUS", 0x30a74, 0 },
+ { "MAC_PORT_MTIP_TS_TIMESTAMP", 0x30a7c, 0 },
+ { "MAC_PORT_AFRAMESTRANSMITTEDOK", 0x30a80, 0 },
+ { "MAC_PORT_AFRAMESTRANSMITTEDOKHI", 0x30a84, 0 },
+ { "MAC_PORT_AFRAMESRECEIVEDOK", 0x30a88, 0 },
+ { "MAC_PORT_AFRAMESRECEIVEDOKHI", 0x30a8c, 0 },
+ { "MAC_PORT_AFRAMECHECKSEQUENCEERRORS", 0x30a90, 0 },
+ { "MAC_PORT_AFRAMECHECKSEQUENCEERRORSHI", 0x30a94, 0 },
+ { "MAC_PORT_AALIGNMENTERRORS", 0x30a98, 0 },
+ { "MAC_PORT_AALIGNMENTERRORSHI", 0x30a9c, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESTRANSMITTED", 0x30aa0, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESTRANSMITTEDHI", 0x30aa4, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESRECEIVED", 0x30aa8, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESRECEIVEDHI", 0x30aac, 0 },
+ { "MAC_PORT_AFRAMETOOLONGERRORS", 0x30ab0, 0 },
+ { "MAC_PORT_AFRAMETOOLONGERRORSHI", 0x30ab4, 0 },
+ { "MAC_PORT_AINRANGELENGTHERRORS", 0x30ab8, 0 },
+ { "MAC_PORT_AINRANGELENGTHERRORSHI", 0x30abc, 0 },
+ { "MAC_PORT_VLANTRANSMITTEDOK", 0x30ac0, 0 },
+ { "MAC_PORT_VLANTRANSMITTEDOKHI", 0x30ac4, 0 },
+ { "MAC_PORT_VLANRECEIVEDOK", 0x30ac8, 0 },
+ { "MAC_PORT_VLANRECEIVEDOKHI", 0x30acc, 0 },
+ { "MAC_PORT_AOCTETSTRANSMITTEDOK", 0x30ad0, 0 },
+ { "MAC_PORT_AOCTETSTRANSMITTEDOKHI", 0x30ad4, 0 },
+ { "MAC_PORT_AOCTETSRECEIVEDOK", 0x30ad8, 0 },
+ { "MAC_PORT_AOCTETSRECEIVEDOKHI", 0x30adc, 0 },
+ { "MAC_PORT_IFINUCASTPKTS", 0x30ae0, 0 },
+ { "MAC_PORT_IFINUCASTPKTSHI", 0x30ae4, 0 },
+ { "MAC_PORT_IFINMULTICASTPKTS", 0x30ae8, 0 },
+ { "MAC_PORT_IFINMULTICASTPKTSHI", 0x30aec, 0 },
+ { "MAC_PORT_IFINBROADCASTPKTS", 0x30af0, 0 },
+ { "MAC_PORT_IFINBROADCASTPKTSHI", 0x30af4, 0 },
+ { "MAC_PORT_IFOUTERRORS", 0x30af8, 0 },
+ { "MAC_PORT_IFOUTERRORSHI", 0x30afc, 0 },
+ { "MAC_PORT_IFOUTUCASTPKTS", 0x30b08, 0 },
+ { "MAC_PORT_IFOUTUCASTPKTSHI", 0x30b0c, 0 },
+ { "MAC_PORT_IFOUTMULTICASTPKTS", 0x30b10, 0 },
+ { "MAC_PORT_IFOUTMULTICASTPKTSHI", 0x30b14, 0 },
+ { "MAC_PORT_IFOUTBROADCASTPKTS", 0x30b18, 0 },
+ { "MAC_PORT_IFOUTBROADCASTPKTSHI", 0x30b1c, 0 },
+ { "MAC_PORT_ETHERSTATSDROPEVENTS", 0x30b20, 0 },
+ { "MAC_PORT_ETHERSTATSDROPEVENTSHI", 0x30b24, 0 },
+ { "MAC_PORT_ETHERSTATSOCTETS", 0x30b28, 0 },
+ { "MAC_PORT_ETHERSTATSOCTETSHI", 0x30b2c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS", 0x30b30, 0 },
+ { "MAC_PORT_ETHERSTATSPKTSHI", 0x30b34, 0 },
+ { "MAC_PORT_ETHERSTATSUNDERSIZEPKTS", 0x30b38, 0 },
+ { "MAC_PORT_ETHERSTATSUNDERSIZEPKTSHI", 0x30b3c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS64OCTETS", 0x30b40, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS64OCTETSHI", 0x30b44, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS65TO127OCTETS", 0x30b48, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS65TO127OCTETSHI", 0x30b4c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS128TO255OCTETS", 0x30b50, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS128TO255OCTETSHI", 0x30b54, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS256TO511OCTETS", 0x30b58, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS256TO511OCTETSHI", 0x30b5c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS512TO1023OCTETS", 0x30b60, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS512TO1023OCTETSHI", 0x30b64, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1024TO1518OCTETS", 0x30b68, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x30b6c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1519TOMAXOCTETS", 0x30b70, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1519TOMAXOCTETSHI", 0x30b74, 0 },
+ { "MAC_PORT_ETHERSTATSOVERSIZEPKTS", 0x30b78, 0 },
+ { "MAC_PORT_ETHERSTATSOVERSIZEPKTSHI", 0x30b7c, 0 },
+ { "MAC_PORT_ETHERSTATSJABBERS", 0x30b80, 0 },
+ { "MAC_PORT_ETHERSTATSJABBERSHI", 0x30b84, 0 },
+ { "MAC_PORT_ETHERSTATSFRAGMENTS", 0x30b88, 0 },
+ { "MAC_PORT_ETHERSTATSFRAGMENTSHI", 0x30b8c, 0 },
+ { "MAC_PORT_IFINERRORS", 0x30b90, 0 },
+ { "MAC_PORT_IFINERRORSHI", 0x30b94, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_0", 0x30b98, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_0HI", 0x30b9c, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_1", 0x30ba0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_1HI", 0x30ba4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_2", 0x30ba8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_2HI", 0x30bac, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_3", 0x30bb0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_3HI", 0x30bb4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_4", 0x30bb8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_4HI", 0x30bbc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_5", 0x30bc0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_5HI", 0x30bc4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_6", 0x30bc8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_6HI", 0x30bcc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_7", 0x30bd0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_7HI", 0x30bd4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_0", 0x30bd8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_0HI", 0x30bdc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_1", 0x30be0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_1HI", 0x30be4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_2", 0x30be8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_2HI", 0x30bec, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_3", 0x30bf0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_3HI", 0x30bf4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_4", 0x30bf8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_4HI", 0x30bfc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_5", 0x30c00, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_5HI", 0x30c04, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_6", 0x30c08, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_6HI", 0x30c0c, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_7", 0x30c10, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_7HI", 0x30c14, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESTRANSMITTED", 0x30c18, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESTRANSMITTEDHI", 0x30c1c, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESRECEIVED", 0x30c20, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESRECEIVEDHI", 0x30c24, 0 },
+ { "MAC_PORT_MTIP_1G10G_REVISION", 0x30d00, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_1G10G_SCRATCH", 0x30d04, 0 },
+ { "MAC_PORT_MTIP_1G10G_COMMAND_CONFIG", 0x30d08, 0 },
+ { "SHORT_DISCARD", 25, 1 },
+ { "REG_LOWP_RXEMPTY", 24, 1 },
+ { "TX_LOWP_ENA", 23, 1 },
+ { "TX_FLUSH", 22, 1 },
+ { "SFD_ANY", 21, 1 },
+ { "PAUSE_PFC_COMP", 20, 1 },
+ { "PFC_MODE", 19, 1 },
+ { "COL_CNT_ExT", 18, 1 },
+ { "NO_LGTH_CHECK", 17, 1 },
+ { "FORCE_SEND_IDLE", 16, 1 },
+ { "PHY_TXENA", 15, 1 },
+ { "RX_ERR_DISC", 14, 1 },
+ { "CNTL_FRM_ENA", 13, 1 },
+ { "SW_RESET", 12, 1 },
+ { "TX_PAD_EN", 11, 1 },
+ { "LOOP_ENA", 10, 1 },
+ { "TX_ADDR_INS", 9, 1 },
+ { "PAUSE_IGNORE", 8, 1 },
+ { "PAUSE_FWD", 7, 1 },
+ { "CRC_FWD", 6, 1 },
+ { "PAD_EN", 5, 1 },
+ { "PROMIS_EN", 4, 1 },
+ { "WAN_MODE", 3, 1 },
+ { "RX_ENAMAC", 1, 1 },
+ { "TX_ENAMAC", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_MAC_ADDR_0", 0x30d0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_MAC_ADDR_1", 0x30d10, 0 },
+ { "MAC_PORT_MTIP_1G10G_FRM_LENGTH_TX_MTU", 0x30d14, 0 },
+ { "SET_LEN", 16, 16 },
+ { "FRM_LEN_SET", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_FIFO_SECTIONS", 0x30d1c, 0 },
+ { "EMPTY", 16, 16 },
+ { "AVAIL", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_TX_FIFO_SECTIONS", 0x30d20, 0 },
+ { "EMPTY", 16, 16 },
+ { "AVAIL", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_FIFO_ALMOST_F_E", 0x30d24, 0 },
+ { "AlmostFull", 16, 16 },
+ { "AlmostEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_TX_FIFO_ALMOST_F_E", 0x30d28, 0 },
+ { "AlmostFull", 16, 16 },
+ { "AlmostEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_HASHTABLE_LOAD", 0x30d2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_CFG_STATUS", 0x30d30, 0 },
+ { "Clk_divisor", 7, 9 },
+ { "ENA_CLAUSE", 6, 1 },
+ { "PREAMBLE_DISABLE", 5, 1 },
+ { "Hold_time_setting", 2, 3 },
+ { "MDIO_read_error", 1, 1 },
+ { "MDIO_Busy", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_COMMAND", 0x30d34, 0 },
+ { "READ_MODE", 15, 1 },
+ { "POST_INCR_READ", 14, 1 },
+ { "Port_PHY_Addr", 5, 5 },
+ { "Device_Reg_Addr", 0, 5 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_DATA", 0x30d38, 0 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_REGADDR", 0x30d3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_STATUS", 0x30d40, 0 },
+ { "RX_LINT_FAULT", 7, 1 },
+ { "RX_EMPTY", 6, 1 },
+ { "TX_EMPTY", 5, 1 },
+ { "RX_LOWP", 4, 1 },
+ { "TS_AVAIL", 3, 1 },
+ { "PHY_LOS", 2, 1 },
+ { "RX_REM_FAULT", 1, 1 },
+ { "RX_LOC_FAULT", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_TX_IPG_LENGTH", 0x30d44, 0 },
+ { "MAC_PORT_MTIP_1G10G_CREDIT_TRIGGER", 0x30d48, 0 },
+ { "MAC_PORT_MTIP_1G10G_INIT_CREDIT", 0x30d4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_CL01_PAUSE_QUANTA", 0x30d54, 0 },
+ { "CL1_PAUSE_QUANTA", 16, 16 },
+ { "CL0_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL23_PAUSE_QUANTA", 0x30d58, 0 },
+ { "CL3_PAUSE_QUANTA", 16, 16 },
+ { "CL2_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL45_PAUSE_QUANTA", 0x30d5c, 0 },
+ { "CL5_PAUSE_QUANTA", 16, 16 },
+ { "CL4_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL67_PAUSE_QUANTA", 0x30d60, 0 },
+ { "CL7_PAUSE_QUANTA", 16, 16 },
+ { "CL6_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL01_QUANTA_THRESH", 0x30d64, 0 },
+ { "CL1_QUANTA_THRESH", 16, 16 },
+ { "CL0_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL23_QUANTA_THRESH", 0x30d68, 0 },
+ { "CL3_QUANTA_THRESH", 16, 16 },
+ { "CL2_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL45_QUANTA_THRESH", 0x30d6c, 0 },
+ { "CL5_QUANTA_THRESH", 16, 16 },
+ { "CL4_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL67_QUANTA_THRESH", 0x30d70, 0 },
+ { "CL7_QUANTA_THRESH", 16, 16 },
+ { "CL6_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_PAUSE_STATUS", 0x30d74, 0 },
+ { "MAC_PORT_MTIP_1G10G_TS_TIMESTAMP", 0x30d7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_STATN_CONFIG", 0x30de0, 0 },
+ { "CLEAR", 2, 1 },
+ { "CLEAR_ON_READ", 1, 1 },
+ { "SATURATE", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOCTETS", 0x30e00, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOCTETSHI", 0x30e04, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_OCTETSOK", 0x30e08, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_OCTETSOKHI", 0x30e0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AALIGNMENTERRORS", 0x30e10, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AALIGNMENTERRORSHI", 0x30e14, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_APAUSEMACCTRLFRAMES", 0x30e18, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_APAUSEMACCTRLFRAMESHI", 0x30e1c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_FRAMESOK", 0x30e20, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_FRAMESOKHI", 0x30e24, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_CRCERRORS", 0x30e28, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_CRCERRORSHI", 0x30e2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_VLANOK", 0x30e30, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_VLANOKHI", 0x30e34, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINERRORS", 0x30e38, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINERRORSHI", 0x30e3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINUCASTPKTS", 0x30e40, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINUCASTPKTSHI", 0x30e44, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINMULTICASTPKTS", 0x30e48, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINMULTICASTPKTSHI", 0x30e4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINBROADCASTPKTS", 0x30e50, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINBROADCASTPKTSHI", 0x30e54, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSDROPEVENTS", 0x30e58, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSDROPEVENTSHI", 0x30e5c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS", 0x30e60, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTSHI", 0x30e64, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSUNDERSIZEPKTS", 0x30e68, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSUNDERSIZEPKTSHI", 0x30e6c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS64OCTETS", 0x30e70, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS64OCTETSHI", 0x30e74, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS65TO127OCTETS", 0x30e78, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS65TO127OCTETSHI", 0x30e7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS128TO255OCTETS", 0x30e80, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS128TO255OCTETSHI", 0x30e84, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS256TO511OCTETS", 0x30e88, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS256TO511OCTETSHI", 0x30e8c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS512TO1023OCTETS", 0x30e90, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS512TO1023OCTETSHI", 0x30e94, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1024TO1518OCTETS", 0x30e98, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x30e9c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1519TOMAX", 0x30ea0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1519TOMAXHI", 0x30ea4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOVERSIZEPKTS", 0x30ea8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOVERSIZEPKTSHI", 0x30eac, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSJABBERS", 0x30eb0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSJABBERSHI", 0x30eb4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSFRAGMENTS", 0x30eb8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSFRAGMENTSHI", 0x30ebc, 0 },
+ { "MAC_PORT_MTIP_1G10G_AMACCONTROLFRAMESRECEIVED", 0x30ec0, 0 },
+ { "MAC_PORT_MTIP_1G10G_AMACCONTROLFRAMESRECEIVEDHI", 0x30ec4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AFRAMETOOLONG", 0x30ec8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AFRAMETOOLONGHI", 0x30ecc, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AINRANGELENGTHERRORS", 0x30ed0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AINRANGELENGTHERRORSHI", 0x30ed4, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSOCTETS", 0x30f00, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSOCTETSHI", 0x30f04, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_OCTETSOK", 0x30f08, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_OCTETSOKHI", 0x30f0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AALIGNMENTERRORS", 0x30f10, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AALIGNMENTERRORSHI", 0x30f14, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_APAUSEMACCTRLFRAMES", 0x30f18, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_APAUSEMACCTRLFRAMESHI", 0x30f1c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_FRAMESOK", 0x30f20, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_FRAMESOKHI", 0x30f24, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_CRCERRORS", 0x30f28, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_CRCERRORSHI", 0x30f2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_VLANOK", 0x30f30, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_VLANOKHI", 0x30f34, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFOUTERRORS", 0x30f38, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFOUTERRORSHI", 0x30f3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFUCASTPKTS", 0x30f40, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFUCASTPKTSHI", 0x30f44, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFMULTICASTPKTS", 0x30f48, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFMULTICASTPKTSHI", 0x30f4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFBROADCASTPKTS", 0x30f50, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFBROADCASTPKTSHI", 0x30f54, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSDROPEVENTS", 0x30f58, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSDROPEVENTSHI", 0x30f5c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS", 0x30f60, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTSHI", 0x30f64, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSUNDERSIZEPKTS", 0x30f68, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSUNDERSIZEPKTSHI", 0x30f6c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS64OCTETS", 0x30f70, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS64OCTETSHI", 0x30f74, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS65TO127OCTETS", 0x30f78, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS65TO127OCTETSHI", 0x30f7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS128TO255OCTETS", 0x30f80, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS128TO255OCTETSHI", 0x30f84, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS256TO511OCTETS", 0x30f88, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS256TO511OCTETSHI", 0x30f8c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS512TO1023OCTETS", 0x30f90, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS512TO1023OCTETSHI", 0x30f94, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS1024TO1518OCTETS", 0x30f98, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x30f9c, 0 },
+ { "MAC_PORT_MTIP_1G10G_ETHERSTATSPKTS1519TOTX_MTU", 0x30fa0, 0 },
+ { "MAC_PORT_MTIP_1G10G_ETHERSTATSPKTS1519TOTX_MTUHI", 0x30fa4, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AMACCONTROLFRAMES", 0x30fc0, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AMACCONTROLFRAMESHI", 0x30fc4, 0 },
+ { "MAC_PORT_MTIP_1G10G_IF_MODE", 0x31000, 0 },
+ { "MII_ENA_10", 4, 1 },
+ { "IF_MODE", 0, 2 },
+ { "MAC_PORT_MTIP_1G10G_IF_STATUS", 0x31004, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_0", 0x31080, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_0HI", 0x31084, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_1", 0x31088, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_1HI", 0x3108c, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_2", 0x31090, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_2HI", 0x31094, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_3", 0x31098, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_3HI", 0x3109c, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_4", 0x310a0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_4HI", 0x310a4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_5", 0x310a8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_5HI", 0x310ac, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_6", 0x310b0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_6HI", 0x310b4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_7", 0x310b8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_7HI", 0x310bc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_0", 0x310c0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_0HI", 0x310c4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_1", 0x310c8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_1HI", 0x310cc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_2", 0x310d0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_2HI", 0x310d4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_3", 0x310d8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_3HI", 0x310dc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_4", 0x310e0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_4HI", 0x310e4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_5", 0x310e8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_5HI", 0x310ec, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_6", 0x310f0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_6HI", 0x310f4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_7", 0x310f8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_7HI", 0x310fc, 0 },
+ { "MAC_PORT_MTIP_SGMII_CONTROL", 0x31200, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_Sel", 13, 1 },
+ { "AN_EN", 12, 1 },
+ { "PWR_DWN", 11, 1 },
+ { "Isolate", 10, 1 },
+ { "AN_RESTART", 9, 1 },
+ { "DUPLEx_MODE", 8, 1 },
+ { "Collision_Test", 7, 1 },
+ { "Speed_Sel1", 6, 1 },
+ { "MAC_PORT_MTIP_SGMII_STATUS", 0x31204, 0 },
+ { "100BaseT4", 15, 1 },
+ { "100BasexFullDplx", 14, 1 },
+ { "100BasexHalfDplx", 13, 1 },
+ { "10MbpsFullDplx", 12, 1 },
+ { "10MbpsHalfDplx", 11, 1 },
+ { "100BaseT2FullDplx", 10, 1 },
+ { "100BaseT2HalfDplx", 9, 1 },
+ { "ExtdStatus", 8, 1 },
+ { "AN_Complete", 5, 1 },
+ { "REM_FAULT", 4, 1 },
+ { "AN_Ability", 3, 1 },
+ { "LINK_STATUS", 2, 1 },
+ { "JabberDetect", 1, 1 },
+ { "ExtdCapability", 0, 1 },
+ { "MAC_PORT_MTIP_SGMII_PHY_IDENTIFIER_0", 0x31208, 0 },
+ { "MAC_PORT_MTIP_SGMII_PHY_IDENTIFIER_1", 0x3120c, 0 },
+ { "MAC_PORT_MTIP_SGMII_DEV_ABILITY", 0x31210, 0 },
+ { "NP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "RF2", 13, 1 },
+ { "RF1", 12, 1 },
+ { "PS2", 8, 1 },
+ { "PS1", 7, 1 },
+ { "HD", 6, 1 },
+ { "FD", 5, 1 },
+ { "MAC_PORT_MTIP_SGMII_PARTNER_ABILITY", 0x31214, 0 },
+ { "CuLinkStatus", 15, 1 },
+ { "ACK", 14, 1 },
+ { "CuDplxStatus", 12, 1 },
+ { "CuSpeed", 10, 2 },
+ { "MAC_PORT_MTIP_SGMII_AN_EXPANSION", 0x31218, 0 },
+ { "Next_Page_Able", 2, 1 },
+ { "PAGE_RECEIVE", 1, 1 },
+ { "MAC_PORT_MTIP_SGMII_NP_TX", 0x3121c, 0 },
+ { "MAC_PORT_MTIP_SGMII_LP_NP_RX", 0x31220, 0 },
+ { "MAC_PORT_MTIP_SGMII_EXTENDED_STATUS", 0x3123c, 0 },
+ { "MAC_PORT_MTIP_SGMII_SCRATCH", 0x31240, 0 },
+ { "MAC_PORT_MTIP_SGMII_REV", 0x31244, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_SGMII_LINK_TIMER_LO", 0x31248, 0 },
+ { "MAC_PORT_MTIP_SGMII_LINK_TIMER_HI", 0x3124c, 0 },
+ { "MAC_PORT_MTIP_SGMII_IF_MODE", 0x31250, 0 },
+ { "SGMII_DUPLEx", 4, 1 },
+ { "SGMII_SPEED", 2, 2 },
+ { "USE_SGMII_AN", 1, 1 },
+ { "SGMII_ENA", 0, 1 },
+ { "MAC_PORT_MTIP_SGMII_DECODE_ERROR", 0x31254, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_CONTROL_1", 0x31300, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_SEL", 13, 1 },
+ { "Low_Power", 11, 1 },
+ { "Speed_SEL1", 6, 1 },
+ { "Speed_SEL2", 2, 4 },
+ { "MAC_PORT_MTIP_KR_PCS_STATUS_1", 0x31304, 0 },
+ { "TX_LPI", 11, 1 },
+ { "RX_LPI", 10, 1 },
+ { "TX_LPI_ACTIVE", 9, 1 },
+ { "RX_LPI_ACTIVE", 8, 1 },
+ { "Fault", 7, 1 },
+ { "PCS_RX_Link_STAT", 2, 1 },
+ { "Low_power_Ability", 1, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICE_IDENTIFIER_1", 0x31308, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICE_IDENTIFIER_2", 0x3130c, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_SPEED_ABILITY", 0x31310, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICES_IN_PACKAGELO", 0x31314, 0 },
+ { "Auto_Negotiation_Present", 7, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_Present", 1, 1 },
+ { "Clause_22_Reg_Present", 0, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICES_IN_PACKAGEHI", 0x31318, 0 },
+ { "Auto_Negotiation_Present", 7, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_Present", 1, 1 },
+ { "Clause_22_Reg_Present", 0, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_CONTROL_2", 0x3131c, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_STATUS_2", 0x31320, 0 },
+ { "Device_Present", 14, 2 },
+ { "Transmit_Fault", 11, 1 },
+ { "Receive_Fault", 10, 1 },
+ { "10GBASE_W_Capable", 2, 1 },
+ { "10GBASE_x_Capable", 1, 1 },
+ { "10GBASE_R_Capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_PACKAGE_IDENTIFIER_LO", 0x31338, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_PACKAGE_IDENTIFIER_HI", 0x3133c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_STATUS_1", 0x31380, 0 },
+ { "10GBASE_R_RX_Link_Status", 12, 1 },
+ { "PRBS9_Pttrn_Tstng_Ability", 3, 1 },
+ { "PRBS31_Pttrn_Tstng_Ability", 2, 1 },
+ { "10GBASE_R_PCS_High_BER", 1, 1 },
+ { "10GBASE_R_PCS_Block_Lock", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_STATUS_2", 0x31384, 0 },
+ { "Latched_Block_Lock", 15, 1 },
+ { "Latched_High_BER", 14, 1 },
+ { "BERBER_Counter", 8, 6 },
+ { "ErrBlkCnt", 0, 8 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_0", 0x31388, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_1", 0x3138c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_2", 0x31390, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_3", 0x31394, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_0", 0x31398, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_1", 0x3139c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_2", 0x313a0, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_3", 0x313a4, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_CONTROL", 0x313a8, 0 },
+ { "PRBS9_TX_Tst_Pttrn_En", 6, 1 },
+ { "PRBS31_RX_Tst_Pttrn_En", 5, 1 },
+ { "PRBS31_TX_Tst_Pttrn_En", 4, 1 },
+ { "TX_Test_Pattern_En", 3, 1 },
+ { "RX_Test_Pattern_En", 2, 1 },
+ { "Test_Pattern_Select", 1, 1 },
+ { "Data_Pattern_Select", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_ERROR_COUNTER", 0x313ac, 0 },
+ { "MAC_PORT_MTIP_KR_VENDOR_SPECIFIC_PCS_STATUS", 0x313b4, 0 },
+ { "Transmit_FIFO_Fault", 1, 1 },
+ { "Receive_FIFO_Fault", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_CONTROL_1", 0x31400, 0 },
+ { "RESET", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_selection", 13, 1 },
+ { "Low_power", 11, 1 },
+ { "Speed_selection1", 6, 1 },
+ { "Speed_selection2", 2, 4 },
+ { "MAC_PORT_MTIP_KR4_STATUS_1", 0x31404, 0 },
+ { "Fault", 7, 1 },
+ { "Receive_link_STAT", 2, 1 },
+ { "Low_power_ability", 1, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICE_ID0", 0x31408, 0 },
+ { "MAC_PORT_MTIP_KR4_DEVICE_ID1", 0x3140c, 0 },
+ { "DEVICE_ID1", 16, 16 },
+ { "MAC_PORT_MTIP_KR4_SPEED_ABILITY", 0x31410, 0 },
+ { "100G_capable", 3, 1 },
+ { "40G_capable", 2, 1 },
+ { "10PASS_TS_2Base_TL_capable", 1, 1 },
+ { "10G_capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICES_IN_PKG1", 0x31414, 0 },
+ { "TC_present", 6, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_present", 1, 1 },
+ { "Clause_22_reg", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICES_IN_PKG2", 0x31418, 0 },
+ { "Vendor_specific_device", 15, 1 },
+ { "Vendor_specific_device1", 14, 1 },
+ { "Clause_22_ExT", 13, 1 },
+ { "MAC_PORT_MTIP_KR4_CONTROL_2", 0x3141c, 0 },
+ { "MAC_PORT_MTIP_KR4_STATUS_2", 0x31420, 0 },
+ { "Device_present", 14, 2 },
+ { "Transmit_fault", 11, 1 },
+ { "Receive_fault", 10, 1 },
+ { "100GBase_R_capable", 5, 1 },
+ { "40GBase_R_capable", 4, 1 },
+ { "10GBase_T_capable", 3, 1 },
+ { "10GBase_W_capable", 2, 1 },
+ { "10GBase_x_capable", 1, 1 },
+ { "10GBase_R_capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_PKG_ID0", 0x31438, 0 },
+ { "MAC_PORT_MTIP_KR4_PKG_ID1", 0x3143c, 0 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_STATUS_1", 0x31480, 0 },
+ { "RX_link_status", 12, 1 },
+ { "High_BER", 1, 1 },
+ { "Block_lock", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_STATUS_2", 0x31484, 0 },
+ { "Latched_bl_lk", 15, 1 },
+ { "Latched_hg_br", 14, 1 },
+ { "Ber_cnt", 8, 6 },
+ { "Err_bl_cnt", 0, 8 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_TEST_CONTROL", 0x314a8, 0 },
+ { "TX_TP_EN", 3, 1 },
+ { "RX_TP_EN", 2, 1 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_TEST_ERR_CNT", 0x314ac, 0 },
+ { "MAC_PORT_MTIP_KR4_BER_HIGH_ORDER_CNT", 0x314b0, 0 },
+ { "MAC_PORT_MTIP_KR4_ERR_BLK_HIGH_ORDER_CNT", 0x314b4, 0 },
+ { "HI_ORDER_CNT_EN", 15, 1 },
+ { "ERR_BLK_CNTR", 0, 14 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_1", 0x314c8, 0 },
+ { "LANE_ALIGN_STATUS", 12, 1 },
+ { "LANE_3_BLK_LCK", 3, 1 },
+ { "LANE_2_BLK_LC32_6431K", 2, 1 },
+ { "LANE_1_BLK_LCK", 1, 1 },
+ { "LANE_0_BLK_LCK", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_2", 0x314cc, 0 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_3", 0x314d0, 0 },
+ { "LANE_3_ALIGN_MRKR_LCK", 3, 1 },
+ { "LANE_2_ALIGN_MRKR_LCK", 2, 1 },
+ { "LANE_1_ALIGN_MRKR_LCK", 1, 1 },
+ { "LANE_0_ALIGN_MRKR_LCK", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_4", 0x314d4, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_0", 0x31720, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_1", 0x31724, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_2", 0x31728, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_3", 0x3172c, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_0_MAPPING", 0x31a40, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_1_MAPPING", 0x31a44, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_2_MAPPING", 0x31a48, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_3_MAPPING", 0x31a4c, 0 },
+ { "MAC_PORT_MTIP_KR4_SCRATCH", 0x31af0, 0 },
+ { "MAC_PORT_MTIP_KR4_CORE_REVISION", 0x31af4, 0 },
+ { "MAC_PORT_MTIP_KR4_VL_INTVL", 0x31af8, 0 },
+ { "MAC_PORT_MTIP_KR4_TX_LANE_THRESH", 0x31afc, 0 },
+ { "MAC_PORT_MTIP_CR4_CONTROL_1", 0x31b00, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_selection", 13, 1 },
+ { "Low_power", 11, 1 },
+ { "Speed_selection1", 6, 1 },
+ { "Speed_selection2", 2, 4 },
+ { "MAC_PORT_MTIP_CR4_STATUS_1", 0x31b04, 0 },
+ { "Fault", 7, 1 },
+ { "RX_Link_Status", 2, 1 },
+ { "Low_power_ability", 1, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICE_ID0", 0x31b08, 0 },
+ { "MAC_PORT_MTIP_CR4_DEVICE_ID1", 0x31b0c, 0 },
+ { "MAC_PORT_MTIP_CR4_SPEED_ABILITY", 0x31b10, 0 },
+ { "100G_capable", 8, 1 },
+ { "40G_capable", 7, 1 },
+ { "10PASS_TS_2Base_TL_capable", 1, 1 },
+ { "10G_capable", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICES_IN_PKG1", 0x31b14, 0 },
+ { "TC_present", 6, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_present", 1, 1 },
+ { "Clause22reg_present", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICES_IN_PKG2", 0x31b18, 0 },
+ { "VSD_2_PRESENT", 15, 1 },
+ { "VSD_1_PRESENT", 14, 1 },
+ { "Clause22_ExT_Present", 13, 1 },
+ { "MAC_PORT_MTIP_CR4_CONTROL_2", 0x31b1c, 0 },
+ { "MAC_PORT_MTIP_CR4_STATUS_2", 0x31b20, 0 },
+ { "Device_present", 14, 2 },
+ { "Transmit_fault", 11, 1 },
+ { "Receive_fault", 10, 1 },
+ { "100GBase_R_capable", 5, 1 },
+ { "40GBase_R_capable", 4, 1 },
+ { "10GBase_T_capable", 3, 1 },
+ { "10GBase_W_capable", 2, 1 },
+ { "10GBase_x_capable", 1, 1 },
+ { "10GBase_R_capable", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_PKG_ID0", 0x31b38, 0 },
+ { "MAC_PORT_MTIP_CR4_PKG_ID1", 0x31b3c, 0 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_STATUS_1", 0x31b80, 0 },
+ { "RX_Link_STAT", 12, 1 },
+ { "High_BER", 1, 1 },
+ { "Block_Lock", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_STATUS_2", 0x31b84, 0 },
+ { "Latched_block_lock", 15, 1 },
+ { "Latched_high_BER", 14, 1 },
+ { "BER_counter", 8, 6 },
+ { "Errored_blocks_cntr", 0, 8 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_TEST_CONTROL", 0x31ba8, 0 },
+ { "Scrambled_ID_TP_EN", 7, 1 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_TEST_ERR_CNT", 0x31bac, 0 },
+ { "MAC_PORT_MTIP_CR4_BER_HIGH_ORDER_CNT", 0x31bb0, 0 },
+ { "MAC_PORT_MTIP_CR4_ERR_BLK_HIGH_ORDER_CNT", 0x31bb4, 0 },
+ { "Hi_ORDER_CNT_Present", 15, 1 },
+ { "ERR_BLKS_CNTR", 0, 14 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_1", 0x31bc8, 0 },
+ { "LANE_ALIGN_STAT", 12, 1 },
+ { "Lane_7_blck_lck", 7, 1 },
+ { "Lane_6_blck_lck", 6, 1 },
+ { "Lane_5_blck_lck", 5, 1 },
+ { "Lane_4_blck_lck", 4, 1 },
+ { "Lane_3_blck_lck", 3, 1 },
+ { "Lane_2_blck_lck", 2, 1 },
+ { "Lane_1_blck_lck", 1, 1 },
+ { "Lane_0_blck_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_2", 0x31bcc, 0 },
+ { "Lane_19_blck_lck", 11, 1 },
+ { "Lane_18_blck_lck", 10, 1 },
+ { "Lane_17_blck_lck", 9, 1 },
+ { "Lane_16_blck_lck", 8, 1 },
+ { "Lane_15_blck_lck", 7, 1 },
+ { "Lane_14_blck_lck", 6, 1 },
+ { "Lane_13_blck_lck", 5, 1 },
+ { "Lane_12_blck_lck", 4, 1 },
+ { "Lane_11_blck_lck", 3, 1 },
+ { "Lane_10_blck_lck", 2, 1 },
+ { "Lane_9_blck_lck", 1, 1 },
+ { "Lane_8_blck_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_3", 0x31bd0, 0 },
+ { "Lane7_algn_mrkr_lck", 7, 1 },
+ { "Lane6_algn_mrkr_lck", 6, 1 },
+ { "Lane5_algn_mrkr_lck", 5, 1 },
+ { "Lane4_algn_mrkr_lck", 4, 1 },
+ { "Lane3_algn_mrkr_lck", 3, 1 },
+ { "Lane2_algn_mrkr_lck", 2, 1 },
+ { "Lane1_algn_mrkr_lck", 1, 1 },
+ { "Lane0_algn_mrkr_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_4", 0x31bd4, 0 },
+ { "Lane19_algn_mrkr_lck", 11, 1 },
+ { "Lane18_algn_mrkr_lck", 10, 1 },
+ { "Lane17_algn_mrkr_lck", 9, 1 },
+ { "Lane16_algn_mrkr_lck", 8, 1 },
+ { "Lane15_algn_mrkr_lck", 7, 1 },
+ { "Lane14_algn_mrkr_lck", 6, 1 },
+ { "Lane13_algn_mrkr_lck", 5, 1 },
+ { "Lane12_algn_mrkr_lck", 4, 1 },
+ { "Lane11_algn_mrkr_lck", 3, 1 },
+ { "Lane10_algn_mrkr_lck", 2, 1 },
+ { "Lane9_algn_mrkr_lck", 1, 1 },
+ { "Lane8_algn_mrkr_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_0", 0x31e20, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_1", 0x31e24, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_2", 0x31e28, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_3", 0x31e2c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_4", 0x31e30, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_5", 0x31e34, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_6", 0x31e38, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_7", 0x31e3c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_8", 0x31e40, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_9", 0x31e44, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_10", 0x31e48, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_11", 0x31e4c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_12", 0x31e50, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_13", 0x31e54, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_14", 0x31e58, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_15", 0x31e5c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_16", 0x31e60, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_17", 0x31e64, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_18", 0x31e68, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_19", 0x31e6c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_0_MAPPING", 0x32140, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_1_MAPPING", 0x32144, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_2_MAPPING", 0x32148, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_3_MAPPING", 0x3214c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_4_MAPPING", 0x32150, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_5_MAPPING", 0x32154, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_6_MAPPING", 0x32158, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_7_MAPPING", 0x3215c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_8_MAPPING", 0x32160, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_9_MAPPING", 0x32164, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_10_MAPPING", 0x32168, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_11_MAPPING", 0x3216c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_12_MAPPING", 0x32170, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_13_MAPPING", 0x32174, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_14_MAPPING", 0x32178, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_15_MAPPING", 0x3217c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_16_MAPPING", 0x32180, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_17_MAPPING", 0x32184, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_18_MAPPING", 0x32188, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_19_MAPPING", 0x3218c, 0 },
+ { "MAC_PORT_MTIP_CR4_SCRATCH", 0x321f0, 0 },
+ { "MAC_PORT_MTIP_CR4_CORE_REVISION", 0x321f4, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_CONTROL", 0x32200, 0 },
+ { "RS_FEC_Bypass_Error_Indication", 1, 1 },
+ { "RS_FEC_Bypass_Correction", 0, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_STATUS", 0x32204, 0 },
+ { "RS_FEC_PCS_align_status", 15, 1 },
+ { "fec_align_status", 14, 1 },
+ { "RS_FEC_high_SER", 2, 1 },
+ { "RS_FEC_bypass_error_indication_ability", 1, 1 },
+ { "RS_FEC_bypass_correction_ability", 0, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_CCW_LO", 0x32208, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_CCW_HI", 0x3220c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_NCCW_LO", 0x32210, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_NCCW_HI", 0x32214, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_LANEMAPRS_FEC_NCCW_HI", 0x32218, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR0_LO", 0x32228, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR0_HI", 0x3222c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR1_LO", 0x32230, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR1_HI", 0x32234, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR2_LO", 0x32238, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR2_HI", 0x3223c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR3_LO", 0x32240, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR3_HI", 0x32244, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_CONTROL", 0x32400, 0 },
+ { "RS_FEC_enabled_status", 15, 1 },
+ { "RS_FEC_Enable", 2, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_INFO_1", 0x32404, 0 },
+ { "deskew_empty", 12, 4 },
+ { "fec_align_status_lh", 10, 1 },
+ { "tx_dp_overflow", 9, 1 },
+ { "rx_dp_overflow", 8, 1 },
+ { "tx_datapath_restart", 7, 1 },
+ { "rx_datapath_restart", 6, 1 },
+ { "marker_check_restart", 5, 1 },
+ { "fec_align_status_ll", 4, 1 },
+ { "amps_lock", 0, 4 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_INFO_2", 0x32408, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_REVISION", 0x3240c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_KEY", 0x32410, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_SYMBOLS", 0x32414, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_PATTERN", 0x32418, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_TRIGGER", 0x3241c, 0 },
+ { "MAC_PORT_MTIP_FEC_ABILITY", 0x32618, 0 },
+ { "BASE_R_FEC_Error_Indication_Ability", 1, 1 },
+ { "BASE_R_FEC_Ability", 0, 1 },
+ { "MAC_PORT_FEC_CONTROL", 0x3261c, 0 },
+ { "fec_en_err_ind", 1, 1 },
+ { "fec_en", 0, 1 },
+ { "MAC_PORT_FEC_STATUS", 0x32620, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC0_CERR_CNT_0", 0x32624, 0 },
+ { "MAC_PORT_MTIP_FEC0_CERR_CNT_1", 0x32628, 0 },
+ { "MAC_PORT_MTIP_FEC0_NCERR_CNT_0", 0x3262c, 0 },
+ { "MAC_PORT_MTIP_FEC0_NCERR_CNT_1", 0x32630, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS1", 0x32664, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC1_CERR_CNT_0", 0x32668, 0 },
+ { "MAC_PORT_MTIP_FEC1_CERR_CNT_1", 0x3266c, 0 },
+ { "MAC_PORT_MTIP_FEC1_NCERR_CNT_0", 0x32670, 0 },
+ { "MAC_PORT_MTIP_FEC1_NCERR_CNT_1", 0x32674, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS2", 0x326a8, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC2_CERR_CNT_0", 0x326ac, 0 },
+ { "MAC_PORT_MTIP_FEC2_CERR_CNT_1", 0x326b0, 0 },
+ { "MAC_PORT_MTIP_FEC2_NCERR_CNT_0", 0x326b4, 0 },
+ { "MAC_PORT_MTIP_FEC2_NCERR_CNT_1", 0x326b8, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS3", 0x326ec, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC3_CERR_CNT_0", 0x326f0, 0 },
+ { "MAC_PORT_MTIP_FEC3_CERR_CNT_1", 0x326f4, 0 },
+ { "MAC_PORT_MTIP_FEC3_NCERR_CNT_0", 0x326f8, 0 },
+ { "MAC_PORT_MTIP_FEC3_NCERR_CNT_1", 0x326fc, 0 },
+ { "MAC_PORT_BEAN_CTL", 0x32c00, 0 },
+ { "AN_RESET", 15, 1 },
+ { "EXT_NXP_CTRL", 13, 1 },
+ { "BEAN_EN", 12, 1 },
+ { "RESTART_BEAN", 9, 1 },
+ { "MAC_PORT_BEAN_STATUS", 0x32c04, 0 },
+ { "PDF", 9, 1 },
+ { "EXT_NXP_STATUS", 7, 1 },
+ { "PAGE_RCVD", 6, 1 },
+ { "BEAN_COMPLETE", 5, 1 },
+ { "REM_FAULT_STATUS", 4, 1 },
+ { "BEAN_ABILITY", 3, 1 },
+ { "LINK_STATUS", 2, 1 },
+ { "LP_BEAN_ABILITY", 0, 1 },
+ { "MAC_PORT_BEAN_ABILITY_0", 0x32c08, 0 },
+ { "NXP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "REM_FAULT", 13, 1 },
+ { "PAUSE_ABILITY", 10, 3 },
+ { "ECHO_NONCE", 5, 5 },
+ { "SELECTOR", 0, 5 },
+ { "MAC_PORT_BEAN_ABILITY_1", 0x32c0c, 0 },
+ { "TECH_ABILITY_1", 5, 11 },
+ { "TX_NONCE", 0, 5 },
+ { "MAC_PORT_BEAN_ABILITY_2", 0x32c10, 0 },
+ { "T5_FEC_ABILITY", 14, 2 },
+ { "TECH_ABILITY_2", 0, 14 },
+ { "MAC_PORT_BEAN_REM_ABILITY_0", 0x32c14, 0 },
+ { "NXP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "REM_FAULT", 13, 1 },
+ { "PAUSE_ABILITY", 10, 3 },
+ { "ECHO_NONCE", 5, 5 },
+ { "SELECTOR", 0, 5 },
+ { "MAC_PORT_BEAN_REM_ABILITY_1", 0x32c18, 0 },
+ { "TECH_ABILITY_1", 5, 11 },
+ { "TX_NONCE", 0, 5 },
+ { "MAC_PORT_BEAN_REM_ABILITY_2", 0x32c1c, 0 },
+ { "T5_FEC_ABILITY", 14, 2 },
+ { "TECH_ABILITY_2", 0, 14 },
+ { "MAC_PORT_BEAN_MS_COUNT", 0x32c20, 0 },
+ { "MAC_PORT_BEAN_XNP_0", 0x32c24, 0 },
+ { "XNP", 15, 1 },
+ { "ACKNOWLEDGE", 14, 1 },
+ { "MP", 13, 1 },
+ { "ACK2", 12, 1 },
+ { "TOGGLE", 11, 1 },
+ { "MU", 0, 11 },
+ { "MAC_PORT_BEAN_XNP_1", 0x32c28, 0 },
+ { "MAC_PORT_BEAN_XNP_2", 0x32c2c, 0 },
+ { "MAC_PORT_LP_BEAN_XNP_0", 0x32c30, 0 },
+ { "XNP", 15, 1 },
+ { "ACKNOWLEDGE", 14, 1 },
+ { "MP", 13, 1 },
+ { "ACK2", 12, 1 },
+ { "TOGGLE", 11, 1 },
+ { "MU", 0, 11 },
+ { "MAC_PORT_LP_BEAN_XNP_1", 0x32c34, 0 },
+ { "MAC_PORT_LP_BEAN_XNP_2", 0x32c38, 0 },
+ { "MAC_PORT_BEAN_ETH_STATUS", 0x32c3c, 0 },
+ { "100GCR4", 11, 1 },
+ { "100GKR4", 10, 1 },
+ { "100GKP4", 9, 1 },
+ { "100GCR10", 8, 1 },
+ { "40GCR4", 6, 1 },
+ { "40GKR4", 5, 1 },
+ { "FEC", 4, 1 },
+ { "10GKR", 3, 1 },
+ { "10GKX4", 2, 1 },
+ { "1GKX", 1, 1 },
+ { "MAC_PORT_AE_RX_COEF_REQ", 0x32a00, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT", 0x32a04, 0 },
+ { "T5_AE0_RXSTAT_RDY", 15, 1 },
+ { "T5_AE0_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE0_RXSTAT_FEC", 13, 1 },
+ { "T5_AE0_RXSTAT_TF", 12, 1 },
+ { "T5_AE0_RXSTAT_C3", 6, 2 },
+ { "T5_AE0_RXSTAT_C2", 4, 2 },
+ { "T5_AE0_RXSTAT_C1", 2, 2 },
+ { "T5_AE0_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ", 0x32a08, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT", 0x32a0c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE", 0x32a10, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL", 0x32a14, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL", 0x32a18, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE", 0x32a1c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_1", 0x32a20, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_1", 0x32a24, 0 },
+ { "T5_AE1_RXSTAT_RDY", 15, 1 },
+ { "T5_AE1_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE1_RXSTAT_FEC", 13, 1 },
+ { "T5_AE1_RXSTAT_TF", 12, 1 },
+ { "T5_AE1_RXSTAT_C3", 6, 2 },
+ { "T5_AE1_RXSTAT_C2", 4, 2 },
+ { "T5_AE1_RXSTAT_C1", 2, 2 },
+ { "T5_AE1_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_1", 0x32a28, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_1", 0x32a2c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_1", 0x32a30, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_1", 0x32a34, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_1", 0x32a38, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_1", 0x32a3c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_2", 0x32a40, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_2", 0x32a44, 0 },
+ { "T5_AE2_RXSTAT_RDY", 15, 1 },
+ { "T5_AE2_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE2_RXSTAT_FEC", 13, 1 },
+ { "T5_AE2_RXSTAT_TF", 12, 1 },
+ { "T5_AE2_RXSTAT_C3", 6, 2 },
+ { "T5_AE2_RXSTAT_C2", 4, 2 },
+ { "T5_AE2_RXSTAT_C1", 2, 2 },
+ { "T5_AE2_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_2", 0x32a48, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_2", 0x32a4c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_2", 0x32a50, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_2", 0x32a54, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_2", 0x32a58, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_2", 0x32a5c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_3", 0x32a60, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_3", 0x32a64, 0 },
+ { "T5_AE3_RXSTAT_RDY", 15, 1 },
+ { "T5_AE3_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE3_RXSTAT_FEC", 13, 1 },
+ { "T5_AE3_RXSTAT_TF", 12, 1 },
+ { "T5_AE3_RXSTAT_C3", 6, 2 },
+ { "T5_AE3_RXSTAT_C2", 4, 2 },
+ { "T5_AE3_RXSTAT_C1", 2, 2 },
+ { "T5_AE3_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_3", 0x32a68, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_3", 0x32a6c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_3", 0x32a70, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_3", 0x32a74, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_3", 0x32a78, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_3", 0x32a7c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_TX_DIS", 0x32a80, 0 },
+ { "MAC_PORT_AE_KR_CTRL", 0x32a84, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET", 0x32a88, 0 },
+ { "MAC_PORT_AE_KR_STATUS", 0x32a8c, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_1", 0x32a90, 0 },
+ { "MAC_PORT_AE_KR_CTRL_1", 0x32a94, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_1", 0x32a98, 0 },
+ { "MAC_PORT_AE_KR_STATUS_1", 0x32a9c, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_2", 0x32aa0, 0 },
+ { "MAC_PORT_AE_KR_CTRL_2", 0x32aa4, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_2", 0x32aa8, 0 },
+ { "MAC_PORT_AE_KR_STATUS_2", 0x32aac, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_3", 0x32ab0, 0 },
+ { "MAC_PORT_AE_KR_CTRL_3", 0x32ab4, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_3", 0x32ab8, 0 },
+ { "MAC_PORT_AE_KR_STATUS_3", 0x32abc, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_0", 0x32b00, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_0", 0x32b04, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_0", 0x32b08, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_0", 0x32b0c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_0", 0x32b10, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_20", 0x32b14, 0 },
+ { "MAC_PORT_AET_LIMITS0", 0x32b18, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_1", 0x32b20, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_1", 0x32b24, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_1", 0x32b28, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_1", 0x32b2c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_1", 0x32b30, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_21", 0x32b34, 0 },
+ { "MAC_PORT_AET_LIMITS1", 0x32b38, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_2", 0x32b40, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_2", 0x32b44, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_2", 0x32b48, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_2", 0x32b4c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_2", 0x32b50, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_22", 0x32b54, 0 },
+ { "MAC_PORT_AET_LIMITS2", 0x32b58, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_3", 0x32b60, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_3", 0x32b64, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_3", 0x32b68, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_3", 0x32b6c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_3", 0x32b70, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_23", 0x32b74, 0 },
+ { "MAC_PORT_AET_LIMITS3", 0x32b78, 0 },
+ { "MAC_PORT_ANALOG_TEST_MUX", 0x33814, 0 },
+ { "MAC_PORT_PLLREFSEL_CONTROL", 0x33854, 0 },
+ { "MAC_PORT_REFISINK_CONTROL", 0x33858, 0 },
+ { "MAC_PORT_REFISRC_CONTROL", 0x3385c, 0 },
+ { "MAC_PORT_REFVREG_CONTROL", 0x33860, 0 },
+ { "MAC_PORT_VBGENDOC_CONTROL", 0x33864, 0 },
+ { "BGCLKSEL", 2, 1 },
+ { "VBGENDOC", 0, 2 },
+ { "MAC_PORT_VREFTUNE_CONTROL", 0x33868, 0 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_CONTROL", 0x33880, 0 },
+ { "FRCCAL_COMP", 6, 1 },
+ { "FRCERR", 5, 1 },
+ { "CAL_BISTENAB", 4, 1 },
+ { "RCAL_RESET", 0, 1 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_1", 0x33884, 0 },
+ { "RCALBENAB", 3, 1 },
+ { "RCALBUSY", 2, 1 },
+ { "RCALERR", 1, 1 },
+ { "RCALCOMP", 0, 1 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_2", 0x33888, 0 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_3", 0x3388c, 0 },
+ { "MAC_PORT_INEQUALITY_CONTROL_AND_RESULT", 0x338c0, 0 },
+ { "ISGT", 7, 1 },
+ { "ISLT", 6, 1 },
+ { "ISEQ", 5, 1 },
+ { "ISVAL", 3, 2 },
+ { "GTORLT", 1, 2 },
+ { "INEQ", 0, 1 },
+ { "MAC_PORT_INEQUALITY_LOW_LIMIT", 0x338c4, 0 },
+ { "MAC_PORT_INEQUALITY_LOW_LIMIT_MASK", 0x338c8, 0 },
+ { "MAC_PORT_INEQUALITY_HIGH_LIMIT", 0x338cc, 0 },
+ { "MAC_PORT_INEQUALITY_HIGH_LIMIT_MASK", 0x338d0, 0 },
+ { "MAC_PORT_MACRO_TEST_CONTROL_6", 0x338e8, 0 },
+ { "JTAGMD", 3, 1 },
+ { "RXACMODE", 2, 1 },
+ { "HSSACJPC", 1, 1 },
+ { "HSSACJAC", 0, 1 },
+ { "MAC_PORT_MACRO_TEST_CONTROL_5", 0x338ec, 0 },
+ { "REFVALIDD", 6, 1 },
+ { "REFVALIDC", 5, 1 },
+ { "REFVALIDB", 4, 1 },
+ { "REFVALIDA", 3, 1 },
+ { "REFSELRESET", 2, 1 },
+ { "SOFTRESET", 1, 1 },
+ { "MACROTEST", 0, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_0", 0x33b00, 0 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_1", 0x33b04, 0 },
+ { "LDET", 4, 1 },
+ { "CCERR", 3, 1 },
+ { "CCCMP", 2, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_2", 0x33b08, 0 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_3", 0x33b0c, 0 },
+ { "FMIN", 3, 1 },
+ { "FMAX", 2, 1 },
+ { "CVHOLD", 1, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_4", 0x33b10, 0 },
+ { "CMETH", 2, 1 },
+ { "RECAL", 1, 1 },
+ { "CCLD", 0, 1 },
+ { "MAC_PORT_PLLA_POWER_CONTROL", 0x33b24, 0 },
+ { "SPWRENA", 1, 1 },
+ { "NPWRENA", 0, 1 },
+ { "MAC_PORT_PLLA_CHARGE_PUMP_CONTROL", 0x33b28, 0 },
+ { "MAC_PORT_PLLA_PLL_MICELLANEOUS_CONTROL", 0x33b38, 0 },
+ { "MAC_PORT_PLLA_PCLK_CONTROL", 0x33b3c, 0 },
+ { "SPEDIV", 3, 5 },
+ { "PCKSEL", 0, 3 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_CONTROL", 0x33b40, 0 },
+ { "EMIL", 2, 1 },
+ { "EMID", 1, 1 },
+ { "EMIS", 0, 1 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_1", 0x33b44, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_2", 0x33b48, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_3", 0x33b4c, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_4", 0x33b50, 0 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_4", 0x33bf0, 0 },
+ { "PLLDIVA", 4, 1 },
+ { "REFDIV", 0, 4 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_3", 0x33bf4, 0 },
+ { "RESYNC", 6, 1 },
+ { "RXCLKSEL", 5, 1 },
+ { "FRCBAND", 4, 1 },
+ { "PLLBYP", 3, 1 },
+ { "VCOSEL", 1, 1 },
+ { "DIVSEL8", 0, 1 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_2", 0x33bf8, 0 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_1", 0x33bfc, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_0", 0x33c00, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_1", 0x33c04, 0 },
+ { "LDET", 4, 1 },
+ { "CCERR", 3, 1 },
+ { "CCCMP", 2, 1 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_2", 0x33c08, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_3", 0x33c0c, 0 },
+ { "FMIN", 3, 1 },
+ { "FMAX", 2, 1 },
+ { "CVHOLD", 1, 1 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_4", 0x33c10, 0 },
+ { "CMETH", 2, 1 },
+ { "RECAL", 1, 1 },
+ { "CCLD", 0, 1 },
+ { "MAC_PORT_PLLB_POWER_CONTROL", 0x33c24, 0 },
+ { "SPWRENA", 1, 1 },
+ { "NPWRENA", 0, 1 },
+ { "MAC_PORT_PLLB_CHARGE_PUMP_CONTROL", 0x33c28, 0 },
+ { "MAC_PORT_PLLB_PLL_MICELLANEOUS_CONTROL", 0x33c38, 0 },
+ { "MAC_PORT_PLLB_PCLK_CONTROL", 0x33c3c, 0 },
+ { "SPEDIV", 3, 5 },
+ { "PCKSEL", 0, 3 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_CONTROL", 0x33c40, 0 },
+ { "EMIL", 2, 1 },
+ { "EMID", 1, 1 },
+ { "EMIS", 0, 1 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_1", 0x33c44, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_2", 0x33c48, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_3", 0x33c4c, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_4", 0x33c50, 0 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_4", 0x33cf0, 0 },
+ { "PLLDIVA", 4, 1 },
+ { "REFDIV", 0, 4 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_3", 0x33cf4, 0 },
+ { "RESYNC", 6, 1 },
+ { "RXCLKSEL", 5, 1 },
+ { "FRCBAND", 4, 1 },
+ { "PLLBYP", 3, 1 },
+ { "VCOSEL", 1, 1 },
+ { "DIVSEL8", 0, 1 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_2", 0x33cf8, 0 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_1", 0x33cfc, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_CONFIGURATION_MODE", 0x33000, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TEST_CONTROL", 0x33004, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_COEFFICIENT_CONTROL", 0x33008, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DRIVER_MODE_CONTROL", 0x3300c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x33010, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x33014, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x33018, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3301c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_0_COEFFICIENT", 0x33020, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_1_COEFFICIENT", 0x33024, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_2_COEFFICIENT", 0x33028, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_3_COEFFICIENT", 0x3302c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_POLARITY", 0x33034, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x33038, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3303c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x33040, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x33044, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x33048, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3304c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_APPLIED_TUNE_REGISTER", 0x33050, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x33058, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_4X_SEGMENT_APPLIED", 0x33060, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_2X_SEGMENT_APPLIED", 0x33064, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_1X_SEGMENT_APPLIED", 0x33068, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3306c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x33070, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x33074, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x33078, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3307c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x33080, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x33084, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x33088, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3308c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AZ_CONTROL", 0x3309c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_CONTROL", 0x330a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_OVERRIDE", 0x330a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_APPLIED", 0x330a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_TIME_OUT", 0x330ac, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SIGN_OVERRIDE", 0x330c0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x330c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x330cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x330d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x330d8, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x330dc, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x330e0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_5", 0x330ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_4", 0x330f0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_3", 0x330f4, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_2", 0x330f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_1", 0x330fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x30000, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x30008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x30010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_INIT_EXTENDED", 0x30018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x30020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_INIT_EXTENDED", 0x30028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x30030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x30038, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x30040, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_INIT_EXTENDED", 0x30048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x30050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3005c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x30060, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x30068, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x30070, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_CONFIGURATION_MODE", 0x33100, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TEST_CONTROL", 0x33104, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_COEFFICIENT_CONTROL", 0x33108, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DRIVER_MODE_CONTROL", 0x3310c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x33110, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x33114, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x33118, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3311c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_0_COEFFICIENT", 0x33120, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_1_COEFFICIENT", 0x33124, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_2_COEFFICIENT", 0x33128, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_3_COEFFICIENT", 0x3312c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_POLARITY", 0x33134, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x33138, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3313c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x33140, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x33144, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x33148, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3314c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_APPLIED_TUNE_REGISTER", 0x33150, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x33158, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_4X_SEGMENT_APPLIED", 0x33160, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_2X_SEGMENT_APPLIED", 0x33164, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_1X_SEGMENT_APPLIED", 0x33168, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3316c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x33170, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x33174, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x33178, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3317c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x33180, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x33184, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x33188, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3318c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AZ_CONTROL", 0x3319c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_CONTROL", 0x331a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_OVERRIDE", 0x331a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_APPLIED", 0x331a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_TIME_OUT", 0x331ac, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SIGN_OVERRIDE", 0x331c0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x331c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x331cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x331d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x331d8, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x331dc, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x331e0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_5", 0x331ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_4", 0x331f0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_3", 0x331f4, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_2", 0x331f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_1", 0x331fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x30000, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x30008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x30010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_INIT_EXTENDED", 0x30018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x30020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_INIT_EXTENDED", 0x30028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x30030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x30038, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x30040, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_INIT_EXTENDED", 0x30048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x30050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3005c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x30060, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x30068, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x30070, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_CONFIGURATION_MODE", 0x33400, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TEST_CONTROL", 0x33404, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_COEFFICIENT_CONTROL", 0x33408, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DRIVER_MODE_CONTROL", 0x3340c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x33410, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x33414, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x33418, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3341c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_0_COEFFICIENT", 0x33420, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_1_COEFFICIENT", 0x33424, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_2_COEFFICIENT", 0x33428, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_3_COEFFICIENT", 0x3342c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_POLARITY", 0x33434, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x33438, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3343c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x33440, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x33444, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x33448, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3344c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_APPLIED_TUNE_REGISTER", 0x33450, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x33458, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_4X_SEGMENT_APPLIED", 0x33460, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_2X_SEGMENT_APPLIED", 0x33464, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_1X_SEGMENT_APPLIED", 0x33468, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3346c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x33470, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x33474, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x33478, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3347c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x33480, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x33484, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x33488, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3348c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AZ_CONTROL", 0x3349c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_CONTROL", 0x334a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_OVERRIDE", 0x334a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_APPLIED", 0x334a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_TIME_OUT", 0x334ac, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SIGN_OVERRIDE", 0x334c0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x334c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x334cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x334d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x334d8, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x334dc, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x334e0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_5", 0x334ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_4", 0x334f0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_3", 0x334f4, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_2", 0x334f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_1", 0x334fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x30000, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x30008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x30010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_INIT_EXTENDED", 0x30018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x30020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_INIT_EXTENDED", 0x30028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x30030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x30038, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x30040, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_INIT_EXTENDED", 0x30048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x30050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3005c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x30060, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x30068, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x30070, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_CONFIGURATION_MODE", 0x33500, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TEST_CONTROL", 0x33504, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_COEFFICIENT_CONTROL", 0x33508, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DRIVER_MODE_CONTROL", 0x3350c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x33510, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x33514, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x33518, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3351c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_0_COEFFICIENT", 0x33520, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_1_COEFFICIENT", 0x33524, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_2_COEFFICIENT", 0x33528, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_3_COEFFICIENT", 0x3352c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_POLARITY", 0x33534, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x33538, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3353c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x33540, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x33544, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x33548, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3354c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_APPLIED_TUNE_REGISTER", 0x33550, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x33558, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_4X_SEGMENT_APPLIED", 0x33560, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_2X_SEGMENT_APPLIED", 0x33564, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_1X_SEGMENT_APPLIED", 0x33568, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3356c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x33570, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x33574, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x33578, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3357c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x33580, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x33584, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x33588, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3358c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AZ_CONTROL", 0x3359c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_CONTROL", 0x335a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_OVERRIDE", 0x335a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_APPLIED", 0x335a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_TIME_OUT", 0x335ac, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SIGN_OVERRIDE", 0x335c0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x335c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x335cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x335d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x335d8, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x335dc, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x335e0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_5", 0x335ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_4", 0x335f0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_3", 0x335f4, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_2", 0x335f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_1", 0x335fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x30000, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x30008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x30010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_INIT_EXTENDED", 0x30018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x30020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_INIT_EXTENDED", 0x30028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x30030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x30038, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x30040, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_INIT_EXTENDED", 0x30048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x30050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3005c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x30060, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x30068, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x30070, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_CONFIGURATION_MODE", 0x33900, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TEST_CONTROL", 0x33904, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_COEFFICIENT_CONTROL", 0x33908, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DRIVER_MODE_CONTROL", 0x3390c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x33910, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x33914, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x33918, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3391c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_0_COEFFICIENT", 0x33920, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_1_COEFFICIENT", 0x33924, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_2_COEFFICIENT", 0x33928, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_3_COEFFICIENT", 0x3392c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_POLARITY", 0x33934, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x33938, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3393c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x33940, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x33944, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x33948, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3394c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_APPLIED_TUNE_REGISTER", 0x33950, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x33958, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_4X_SEGMENT_APPLIED", 0x33960, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_2X_SEGMENT_APPLIED", 0x33964, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_1X_SEGMENT_APPLIED", 0x33968, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3396c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x33970, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x33974, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x33978, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3397c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x33980, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x33984, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x33988, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3398c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AZ_CONTROL", 0x3399c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_CONTROL", 0x339a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_OVERRIDE", 0x339a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_APPLIED", 0x339a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_TIME_OUT", 0x339ac, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SIGN_OVERRIDE", 0x339c0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x339c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x339cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x339d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x339d8, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x339dc, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x339e0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_5", 0x339ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_4", 0x339f0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_3", 0x339f4, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_2", 0x339f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_1", 0x339fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x30000, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x30008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x30010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_INIT_EXTENDED", 0x30018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x30020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_INIT_EXTENDED", 0x30028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x30030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x30038, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x30040, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_INIT_EXTENDED", 0x30048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x30050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3005c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x30060, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x30068, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x30070, 0 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_CONFIGURATION_MODE", 0x33200, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_TEST_CONTROL", 0x33204, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_CONTROL", 0x33208, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_OFFSET_CONTROL", 0x3320c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_POSITION_1", 0x33210, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_POSITION_2", 0x33214, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x33218, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3321c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_CONTROL", 0x33220, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_SAMPLE_SNAPSHOT_1", 0x33224, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKA_DFE_SAMPLE_SNAPSHOT_2", 0x33228, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_1", 0x3322c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_2", 0x33230, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_3", 0x33234, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x33238, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_IQAMP_CONTROL_1", 0x3323c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_IQAMP_CONTROL_2", 0x33240, 0 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x33244, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACAP_AND_DACAN", 0x33248, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACA_MIN", 0x3324c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_ADAC_CONTROL", 0x33250, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_AC_COUPLING_CONTROL", 0x33254, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_AC_COUPLING_VALUE", 0x33258, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKA_DFE_H1H2H3_LOCAL_OFFSET", 0x3325c, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x33260, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PEAKED_INTEGRATOR", 0x33264, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKA_CDR_ANALOG_SWITCH", 0x33268, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKA_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3326c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKA_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x33270, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DYNAMIC_DATA_CENTERING_DDC", 0x33274, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_INTERNAL_STATUS", 0x33278, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_1", 0x3327c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_2", 0x33280, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_OFFSET_CHANNEL", 0x33284, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_OFFSET_VALUE", 0x33288, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKA_H_COEFFICIENBT_BIST", 0x3328c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKA_AC_CAPACITOR_BIST", 0x33290, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_LOFF_CONTROL_REGISTER", 0x33298, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_SIGDET_CONTROL", 0x3329c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_ANALOG_CONTROL_SWITCH", 0x332a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKA_INTEGRATOR_DAC_OFFSET", 0x332a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_CONTROL", 0x332a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS", 0x332ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x332b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x332b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x332b8, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_3", 0x332bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP_CONTROL", 0x332c0, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP", 0x332c4, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP_ENABLE", 0x32a00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKA_DFE_H1", 0x32a04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKA_DFE_H2", 0x32a08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_H3", 0x32a0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H4", 0x32a10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H5", 0x32a14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H6_AND_H7", 0x32a18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H8_AND_H9", 0x32a1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H10_AND_H11", 0x32a20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H12_13", 0x32a24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H14_15", 0x32a28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x32a2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_INTERNAL_STATUS_2", 0x332e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKA_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x332e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DCD_CONTROL", 0x332ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DCC_CONTROL", 0x332f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_QCC_CONTROL", 0x332f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x332f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_MACRO_TEST_CONTROL_1", 0x332fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_CONFIGURATION_MODE", 0x33300, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_TEST_CONTROL", 0x33304, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_CONTROL", 0x33308, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_OFFSET_CONTROL", 0x3330c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_POSITION_1", 0x33310, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_POSITION_2", 0x33314, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x33318, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3331c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_CONTROL", 0x33320, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_SAMPLE_SNAPSHOT_1", 0x33324, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKB_DFE_SAMPLE_SNAPSHOT_2", 0x33328, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_1", 0x3332c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_2", 0x33330, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_3", 0x33334, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x33338, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_IQAMP_CONTROL_1", 0x3333c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_IQAMP_CONTROL_2", 0x33340, 0 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x33344, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACAP_AND_DACAN", 0x33348, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACA_MIN", 0x3334c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_ADAC_CONTROL", 0x33350, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_AC_COUPLING_CONTROL", 0x33354, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_AC_COUPLING_VALUE", 0x33358, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKB_DFE_H1H2H3_LOCAL_OFFSET", 0x3335c, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x33360, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PEAKED_INTEGRATOR", 0x33364, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKB_CDR_ANALOG_SWITCH", 0x33368, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKB_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3336c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKB_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x33370, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DYNAMIC_DATA_CENTERING_DDC", 0x33374, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_INTERNAL_STATUS", 0x33378, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_1", 0x3337c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_2", 0x33380, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_OFFSET_CHANNEL", 0x33384, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_OFFSET_VALUE", 0x33388, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKB_H_COEFFICIENBT_BIST", 0x3338c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKB_AC_CAPACITOR_BIST", 0x33390, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_LOFF_CONTROL_REGISTER", 0x33398, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_SIGDET_CONTROL", 0x3339c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_ANALOG_CONTROL_SWITCH", 0x333a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKB_INTEGRATOR_DAC_OFFSET", 0x333a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_CONTROL", 0x333a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS", 0x333ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x333b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x333b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x333b8, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_3", 0x333bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP_CONTROL", 0x333c0, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP", 0x333c4, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP_ENABLE", 0x32b00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKB_DFE_H1", 0x32b04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKB_DFE_H2", 0x32b08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_H3", 0x32b0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H4", 0x32b10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H5", 0x32b14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H6_AND_H7", 0x32b18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H8_AND_H9", 0x32b1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H10_AND_H11", 0x32b20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H12_13", 0x32b24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H14_15", 0x32b28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x32b2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_INTERNAL_STATUS_2", 0x333e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKB_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x333e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DCD_CONTROL", 0x333ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DCC_CONTROL", 0x333f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_QCC_CONTROL", 0x333f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x333f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_MACRO_TEST_CONTROL_1", 0x333fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_CONFIGURATION_MODE", 0x33600, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_TEST_CONTROL", 0x33604, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_CONTROL", 0x33608, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_OFFSET_CONTROL", 0x3360c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_POSITION_1", 0x33610, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_POSITION_2", 0x33614, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x33618, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3361c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_CONTROL", 0x33620, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_SAMPLE_SNAPSHOT_1", 0x33624, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKC_DFE_SAMPLE_SNAPSHOT_2", 0x33628, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_1", 0x3362c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_2", 0x33630, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_3", 0x33634, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x33638, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_IQAMP_CONTROL_1", 0x3363c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_IQAMP_CONTROL_2", 0x33640, 0 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x33644, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACAP_AND_DACAN", 0x33648, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACA_MIN", 0x3364c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_ADAC_CONTROL", 0x33650, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_AC_COUPLING_CONTROL", 0x33654, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_AC_COUPLING_VALUE", 0x33658, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKC_DFE_H1H2H3_LOCAL_OFFSET", 0x3365c, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x33660, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PEAKED_INTEGRATOR", 0x33664, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKC_CDR_ANALOG_SWITCH", 0x33668, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKC_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3366c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKC_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x33670, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DYNAMIC_DATA_CENTERING_DDC", 0x33674, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_INTERNAL_STATUS", 0x33678, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_1", 0x3367c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_2", 0x33680, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_OFFSET_CHANNEL", 0x33684, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_OFFSET_VALUE", 0x33688, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKC_H_COEFFICIENBT_BIST", 0x3368c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKC_AC_CAPACITOR_BIST", 0x33690, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_LOFF_CONTROL_REGISTER", 0x33698, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_SIGDET_CONTROL", 0x3369c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_ANALOG_CONTROL_SWITCH", 0x336a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKC_INTEGRATOR_DAC_OFFSET", 0x336a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_CONTROL", 0x336a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS", 0x336ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x336b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x336b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x336b8, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_3", 0x336bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP_CONTROL", 0x336c0, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP", 0x336c4, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP_ENABLE", 0x32e00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKC_DFE_H1", 0x32e04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKC_DFE_H2", 0x32e08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_H3", 0x32e0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H4", 0x32e10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H5", 0x32e14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H6_AND_H7", 0x32e18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H8_AND_H9", 0x32e1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H10_AND_H11", 0x32e20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H12_13", 0x32e24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H14_15", 0x32e28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x32e2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_INTERNAL_STATUS_2", 0x336e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKC_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x336e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DCD_CONTROL", 0x336ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DCC_CONTROL", 0x336f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_QCC_CONTROL", 0x336f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x336f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_MACRO_TEST_CONTROL_1", 0x336fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_CONFIGURATION_MODE", 0x33700, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_TEST_CONTROL", 0x33704, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_CONTROL", 0x33708, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_OFFSET_CONTROL", 0x3370c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_POSITION_1", 0x33710, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_POSITION_2", 0x33714, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x33718, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3371c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_CONTROL", 0x33720, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_SAMPLE_SNAPSHOT_1", 0x33724, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKD_DFE_SAMPLE_SNAPSHOT_2", 0x33728, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_1", 0x3372c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_2", 0x33730, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_3", 0x33734, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x33738, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_IQAMP_CONTROL_1", 0x3373c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_IQAMP_CONTROL_2", 0x33740, 0 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x33744, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACAP_AND_DACAN", 0x33748, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACA_MIN", 0x3374c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_ADAC_CONTROL", 0x33750, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_AC_COUPLING_CONTROL", 0x33754, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_AC_COUPLING_VALUE", 0x33758, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKD_DFE_H1H2H3_LOCAL_OFFSET", 0x3375c, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x33760, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PEAKED_INTEGRATOR", 0x33764, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKD_CDR_ANALOG_SWITCH", 0x33768, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKD_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3376c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKD_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x33770, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DYNAMIC_DATA_CENTERING_DDC", 0x33774, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_INTERNAL_STATUS", 0x33778, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_1", 0x3377c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_2", 0x33780, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_OFFSET_CHANNEL", 0x33784, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_OFFSET_VALUE", 0x33788, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKD_H_COEFFICIENBT_BIST", 0x3378c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKD_AC_CAPACITOR_BIST", 0x33790, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_LOFF_CONTROL_REGISTER", 0x33798, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_SIGDET_CONTROL", 0x3379c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_ANALOG_CONTROL_SWITCH", 0x337a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKD_INTEGRATOR_DAC_OFFSET", 0x337a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_CONTROL", 0x337a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS", 0x337ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x337b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x337b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x337b8, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_3", 0x337bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP_CONTROL", 0x337c0, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP", 0x337c4, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP_ENABLE", 0x32f00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKD_DFE_H1", 0x32f04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKD_DFE_H2", 0x32f08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_H3", 0x32f0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H4", 0x32f10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H5", 0x32f14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H6_AND_H7", 0x32f18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H8_AND_H9", 0x32f1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H10_AND_H11", 0x32f20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H12_13", 0x32f24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H14_15", 0x32f28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x32f2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_INTERNAL_STATUS_2", 0x337e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKD_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x337e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DCD_CONTROL", 0x337ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DCC_CONTROL", 0x337f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_QCC_CONTROL", 0x337f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x337f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_MACRO_TEST_CONTROL_1", 0x337fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_CONFIGURATION_MODE", 0x33a00, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_TEST_CONTROL", 0x33a04, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_CONTROL", 0x33a08, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_OFFSET_CONTROL", 0x33a0c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_POSITION_1", 0x33a10, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_POSITION_2", 0x33a14, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x33a18, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x33a1c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_CONTROL", 0x33a20, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_SAMPLE_SNAPSHOT_1", 0x33a24, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_SAMPLE_SNAPSHOT_2", 0x33a28, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_1", 0x33a2c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_2", 0x33a30, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_3", 0x33a34, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x33a38, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_IQAMP_CONTROL_1", 0x33a3c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_IQAMP_CONTROL_2", 0x33a40, 0 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x33a44, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACAP_AND_DACAN", 0x33a48, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACA_MIN", 0x33a4c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_ADAC_CONTROL", 0x33a50, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_AC_COUPLING_CONTROL", 0x33a54, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_AC_COUPLING_VALUE", 0x33a58, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1H2H3_LOCAL_OFFSET", 0x33a5c, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x33a60, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PEAKED_INTEGRATOR", 0x33a64, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_CDR_ANALOG_SWITCH", 0x33a68, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x33a6c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINK_BCST_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x33a70, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DYNAMIC_DATA_CENTERING_DDC", 0x33a74, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_INTERNAL_STATUS", 0x33a78, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_1", 0x33a7c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_2", 0x33a80, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_OFFSET_CHANNEL", 0x33a84, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_OFFSET_VALUE", 0x33a88, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_H_COEFFICIENBT_BIST", 0x33a8c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_AC_CAPACITOR_BIST", 0x33a90, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_LOFF_CONTROL_REGISTER", 0x33a98, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_SIGDET_CONTROL", 0x33a9c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_ANALOG_CONTROL_SWITCH", 0x33aa0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_INTEGRATOR_DAC_OFFSET", 0x33aa4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_CONTROL", 0x33aa8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS", 0x33aac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x33ab0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x33ab4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x33ab8, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_3", 0x33abc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP_CONTROL", 0x33ac0, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP", 0x33ac4, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP_ENABLE", 0x33200, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1", 0x33204, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H2", 0x33208, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H3", 0x3320c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H4", 0x33210, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H5", 0x33214, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H6_AND_H7", 0x33218, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H8_AND_H9", 0x3321c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H10_AND_H11", 0x33220, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H12_13", 0x33224, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H14_15", 0x33228, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x3322c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_INTERNAL_STATUS_2", 0x33ae4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x33ae8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DCD_CONTROL", 0x33aec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DCC_CONTROL", 0x33af0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_QCC_CONTROL", 0x33af4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x33af8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_MACRO_TEST_CONTROL_1", 0x33afc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_CFG", 0x34800, 0 },
+ { "MAC_Clk_Sel", 29, 3 },
+ { "Ena_err_rsp", 28, 1 },
+ { "SinkTx", 27, 1 },
+ { "SinkTxOnLinkDown", 26, 1 },
+ { "debug_clr", 25, 1 },
+ { "LoopNoFwd", 24, 1 },
+ { "pll_sel", 23, 1 },
+ { "port_map", 20, 3 },
+ { "Smux_Rx_Loop", 19, 1 },
+ { "Rx_Lane_Swap", 18, 1 },
+ { "Tx_Lane_Swap", 17, 1 },
+ { "Aec_pat_data", 15, 1 },
+ { "Signal_Det", 14, 1 },
+ { "macclk_sel", 13, 1 },
+ { "xgmii_sel", 12, 1 },
+ { "debug_port_sel", 10, 2 },
+ { "SmuxTxSel", 9, 1 },
+ { "SmuxRxSel", 8, 1 },
+ { "Enable_25G", 7, 1 },
+ { "Enable_50G", 6, 1 },
+ { "PortSpeed", 4, 2 },
+ { "Rx_Byte_Swap", 3, 1 },
+ { "Tx_Byte_Swap", 2, 1 },
+ { "debug_tx_rx_sel", 1, 1 },
+ { "Port_Sel", 0, 1 },
+ { "MAC_PORT_RESET_CTRL", 0x34804, 0 },
+ { "TWGDSK_HSSC16B", 31, 1 },
+ { "EEE_RESET", 30, 1 },
+ { "PTP_TIMER", 29, 1 },
+ { "MtipRefReset", 28, 1 },
+ { "MAC100G40G_RESET", 27, 1 },
+ { "MAC10G1G_RESET", 26, 1 },
+ { "MtipRegReset", 25, 1 },
+ { "PCS1G_RESET", 24, 1 },
+ { "AEC3Reset", 23, 1 },
+ { "AEC2Reset", 22, 1 },
+ { "AEC1Reset", 21, 1 },
+ { "AEC0Reset", 20, 1 },
+ { "AET3Reset", 19, 1 },
+ { "AET2Reset", 18, 1 },
+ { "AET1Reset", 17, 1 },
+ { "AET0Reset", 16, 1 },
+ { "PCS10G_RESET", 15, 1 },
+ { "PCS40G_RESET", 14, 1 },
+ { "PCS100G_RESET", 13, 1 },
+ { "TXIF_Reset", 12, 1 },
+ { "RXIF_Reset", 11, 1 },
+ { "AuxExt_Reset", 10, 1 },
+ { "MtipSd3TxRst", 9, 1 },
+ { "MtipSd2TxRst", 8, 1 },
+ { "MtipSd1TxRst", 7, 1 },
+ { "MtipSd0TxRst", 6, 1 },
+ { "MtipSd3RxRst", 5, 1 },
+ { "MtipSd2RxRst", 4, 1 },
+ { "MtipSd1RxRst", 3, 1 },
+ { "WOL_Reset", 2, 1 },
+ { "MtipSd0RxRst", 1, 1 },
+ { "HSS_Reset", 0, 1 },
+ { "MAC_PORT_LED_CFG", 0x34808, 0 },
+ { "Led1_Cfg1", 14, 2 },
+ { "Led0_Cfg1", 12, 2 },
+ { "Led1_tlo", 11, 1 },
+ { "Led1_thi", 10, 1 },
+ { "Led0_tlo", 9, 1 },
+ { "Led0_thi", 8, 1 },
+ { "Led1_Cfg", 5, 3 },
+ { "Led1_Polarity_Inv", 4, 1 },
+ { "Led0_Cfg", 1, 3 },
+ { "Led0_Polarity_Inv", 0, 1 },
+ { "MAC_PORT_LED_COUNTHI", 0x3480c, 0 },
+ { "MAC_PORT_LED_COUNTLO", 0x34810, 0 },
+ { "MAC_PORT_CFG3", 0x34814, 0 },
+ { "REF_Clk_Sel", 30, 2 },
+ { "sgmii_sd_sig_det", 29, 1 },
+ { "sgmii_sgpcs_ena", 28, 1 },
+ { "FPGA_PTP_PORT", 26, 2 },
+ { "FCSDisCtrl", 25, 1 },
+ { "SigDetCtrl", 24, 1 },
+ { "tx_lane", 23, 1 },
+ { "rx_lane", 22, 1 },
+ { "se_clr", 21, 1 },
+ { "an_ena", 17, 4 },
+ { "sd_rx_clk_ena", 13, 4 },
+ { "sd_tx_clk_ena", 9, 4 },
+ { "SGMIISEL", 8, 1 },
+ { "HSSPLLSEL", 4, 4 },
+ { "HSSC16C20SEL", 0, 4 },
+ { "MAC_PORT_CFG2", 0x34818, 0 },
+ { "Rx_Polarity_Inv", 28, 4 },
+ { "Tx_Polarity_Inv", 24, 4 },
+ { "InstanceNum", 22, 2 },
+ { "StopOnPerr", 21, 1 },
+ { "an_data_ctl", 19, 1 },
+ { "PatEn", 18, 1 },
+ { "MagicEn", 17, 1 },
+ { "T5_AEC_PMA_TX_READY", 4, 4 },
+ { "T5_AEC_PMA_RX_READY", 0, 4 },
+ { "MAC_PORT_PKT_COUNT", 0x3481c, 0 },
+ { "tx_sop_count", 24, 8 },
+ { "tx_eop_count", 16, 8 },
+ { "rx_sop_count", 8, 8 },
+ { "rx_eop_count", 0, 8 },
+ { "MAC_PORT_CFG4", 0x34820, 0 },
+ { "AEC3_RX_WIDTH", 14, 2 },
+ { "AEC2_RX_WIDTH", 12, 2 },
+ { "AEC1_RX_WIDTH", 10, 2 },
+ { "AEC0_RX_WIDTH", 8, 2 },
+ { "AEC3_TX_WIDTH", 6, 2 },
+ { "AEC2_TX_WIDTH", 4, 2 },
+ { "AEC1_TX_WIDTH", 2, 2 },
+ { "AEC0_TX_WIDTH", 0, 2 },
+ { "MAC_PORT_MAGIC_MACID_LO", 0x34824, 0 },
+ { "MAC_PORT_MAGIC_MACID_HI", 0x34828, 0 },
+ { "MAC_PORT_MTIP_RESET_CTRL", 0x3482c, 0 },
+ { "an_reset_sd_tx_clk", 31, 1 },
+ { "an_reset_sd_rx_clk", 30, 1 },
+ { "sgmii_reset_tx_clk", 29, 1 },
+ { "sgmii_reset_rx_clk", 28, 1 },
+ { "sgmii_reset_ref_clk", 27, 1 },
+ { "pcs10g_reset_xfi_rxclk", 26, 1 },
+ { "pcs10g_reset_xfi_txclk", 25, 1 },
+ { "pcs10g_reset_sd_tx_clk", 24, 1 },
+ { "pcs10g_reset_sd_rx_clk", 23, 1 },
+ { "pcs40g_reset_rxclk", 22, 1 },
+ { "pcs40g_reset_sd_tx_clk", 21, 1 },
+ { "pcs40g_reset_sd0_rx_clk", 20, 1 },
+ { "pcs40g_reset_sd1_rx_clk", 19, 1 },
+ { "pcs40g_reset_sd2_rx_clk", 18, 1 },
+ { "pcs40g_reset_sd3_rx_clk", 17, 1 },
+ { "pcs100g_reset_cgmii_rxclk", 16, 1 },
+ { "pcs100g_reset_cgmii_txclk", 15, 1 },
+ { "pcs100g_reset_tx_clk", 14, 1 },
+ { "pcs100g_reset_sd0_rx_clk", 13, 1 },
+ { "pcs100g_reset_sd1_rx_clk", 12, 1 },
+ { "pcs100g_reset_sd2_rx_clk", 11, 1 },
+ { "pcs100g_reset_sd3_rx_clk", 10, 1 },
+ { "mac40g100g_reset_txclk", 9, 1 },
+ { "mac40g100g_reset_rxclk", 8, 1 },
+ { "mac40g100g_reset_ff_tx_clk", 7, 1 },
+ { "mac40g100g_reset_ff_rx_clk", 6, 1 },
+ { "mac40g100g_reset_ts_clk", 5, 1 },
+ { "mac1g10g_reset_rxclk", 4, 1 },
+ { "mac1g10g_reset_txclk", 3, 1 },
+ { "mac1g10g_reset_ff_rx_clk", 2, 1 },
+ { "mac1g10g_reset_ff_tx_clk", 1, 1 },
+ { "xgmii_clk_reset", 0, 1 },
+ { "MAC_PORT_MTIP_GATE_CTRL", 0x34830, 0 },
+ { "an_gate_sd_tx_clk", 31, 1 },
+ { "an_gate_sd_rx_clk", 30, 1 },
+ { "sgmii_gate_tx_clk", 29, 1 },
+ { "sgmii_gate_rx_clk", 28, 1 },
+ { "sgmii_gate_ref_clk", 27, 1 },
+ { "pcs10g_gate_xfi_rxclk", 26, 1 },
+ { "pcs10g_gate_xfi_txclk", 25, 1 },
+ { "pcs10g_gate_sd_tx_clk", 24, 1 },
+ { "pcs10g_gate_sd_rx_clk", 23, 1 },
+ { "pcs40g_gate_rxclk", 22, 1 },
+ { "pcs40g_gate_sd_tx_clk", 21, 1 },
+ { "pcs40g_gate_sd_rx_clk", 20, 1 },
+ { "pcs100g_gate_cgmii_rxclk", 19, 1 },
+ { "pcs100g_gate_cgmii_txclk", 18, 1 },
+ { "pcs100g_gate_tx_clk", 17, 1 },
+ { "pcs100g_gate_sd_rx_clk", 16, 1 },
+ { "mac40g100g_gate_txclk", 15, 1 },
+ { "mac40g100g_gate_rxclk", 14, 1 },
+ { "mac40g100g_gate_ff_tx_clk", 13, 1 },
+ { "mac40g100g_gate_ff_rx_clk", 12, 1 },
+ { "mac40g100g_ts_clk", 11, 1 },
+ { "mac1g10g_gate_rxclk", 10, 1 },
+ { "mac1g10g_gate_txclk", 9, 1 },
+ { "mac1g10g_gate_ff_rx_clk", 8, 1 },
+ { "mac1g10g_gate_ff_tx_clk", 7, 1 },
+ { "aec_rx", 6, 1 },
+ { "aec_tx", 5, 1 },
+ { "pcs100g_clk_enable", 4, 1 },
+ { "pcs40g_clk_enable", 3, 1 },
+ { "pcs10g_clk_enable", 2, 1 },
+ { "pcs1g_clk_enable", 1, 1 },
+ { "an_clk_enable", 0, 1 },
+ { "MAC_PORT_LINK_STATUS", 0x34834, 0 },
+ { "hi_ber", 7, 1 },
+ { "an_done", 6, 1 },
+ { "align_done", 5, 1 },
+ { "block_lock", 4, 1 },
+ { "remflt", 3, 1 },
+ { "locflt", 2, 1 },
+ { "linkup", 1, 1 },
+ { "linkdn", 0, 1 },
+ { "MAC_PORT_AEC_ADD_CTL_STAT_0", 0x34838, 0 },
+ { "AEC_SYS_LANE_TYPE_3", 11, 1 },
+ { "AEC_SYS_LANE_TYPE_2", 10, 1 },
+ { "AEC_SYS_LANE_TYPE_1", 9, 1 },
+ { "AEC_SYS_LANE_TYPE_0", 8, 1 },
+ { "AEC_SYS_LANE_SELECT_3", 6, 2 },
+ { "AEC_SYS_LANE_SELECT_2", 4, 2 },
+ { "AEC_SYS_LANE_SELECT_1", 2, 2 },
+ { "AEC_SYS_LANE_SELECT_O", 0, 2 },
+ { "MAC_PORT_AEC_ADD_CTL_STAT_1", 0x3483c, 0 },
+ { "AEC_RX_UNKNOWN_LANE_3", 11, 1 },
+ { "AEC_RX_UNKNOWN_LANE_2", 10, 1 },
+ { "AEC_RX_UNKNOWN_LANE_1", 9, 1 },
+ { "AEC_RX_UNKNOWN_LANE_0", 8, 1 },
+ { "AEC_RX_LANE_ID_3", 6, 2 },
+ { "AEC_RX_LANE_ID_2", 4, 2 },
+ { "AEC_RX_LANE_ID_1", 2, 2 },
+ { "AEC_RX_LANE_ID_O", 0, 2 },
+ { "MAC_PORT_AEC_XGMII_TIMER_LO_40G", 0x34840, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_HI_40G", 0x34844, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_LO_100G", 0x34848, 0 },
+ { "MAC_PORT_AEC_XGMII_TIMER_HI_100G", 0x3484c, 0 },
+ { "MAC_PORT_AEC_DEBUG_LO_0", 0x34850, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_0", 0x34854, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_1", 0x34858, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_1", 0x3485c, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_2", 0x34860, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_2", 0x34864, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_AEC_DEBUG_LO_3", 0x34868, 0 },
+ { "CTL_FSM_CUR_STATE", 28, 3 },
+ { "CIN_FSM_CUR_STATE", 26, 2 },
+ { "CRI_FSM_CUR_STATE", 23, 3 },
+ { "CU_C3_ACK_VALUE", 21, 2 },
+ { "CU_C2_ACK_VALUE", 19, 2 },
+ { "CU_C1_ACK_VALUE", 17, 2 },
+ { "CU_C0_ACK_VALUE", 15, 2 },
+ { "CX_INIT", 13, 1 },
+ { "CX_PRESET", 12, 1 },
+ { "CUF_C3_UPDATE", 9, 2 },
+ { "CUF_C2_UPDATE", 7, 2 },
+ { "CUF_C1_UPDATE", 5, 2 },
+ { "CUF_C0_UPDATE", 3, 2 },
+ { "REG_FPH_ATTR_TXUPDAT_VALID", 2, 1 },
+ { "REG_FPH_ATTR_TXSTAT_VALID", 1, 1 },
+ { "REG_MAN_DEC_REQ", 0, 1 },
+ { "MAC_PORT_AEC_DEBUG_HI_3", 0x3486c, 0 },
+ { "FC_LSNA_", 12, 1 },
+ { "CUF_C0_FSM_DEBUG", 9, 3 },
+ { "CUF_C1_FSM_DEBUG", 6, 3 },
+ { "CUF_C2_FSM_DEBUG", 3, 3 },
+ { "LCK_FSM_CUR_STATE", 0, 3 },
+ { "MAC_PORT_MAC_DEBUG_RO", 0x34870, 0 },
+ { "mac40g100g_tx_underflow", 13, 1 },
+ { "mac1g10g_magic_ind", 12, 1 },
+ { "mac1g10g_ff_rx_empty", 11, 1 },
+ { "mac1g10g_ff_tx_ovr_err", 10, 1 },
+ { "mac1g10g_if_mode_ena", 8, 2 },
+ { "mac1g10g_mii_ena_10", 7, 1 },
+ { "mac1g10g_pause_on", 6, 1 },
+ { "mac1g10g_pfc_mode", 5, 1 },
+ { "mac1g10g_rx_sfd_o", 4, 1 },
+ { "mac1g10g_tx_empty", 3, 1 },
+ { "mac1g10g_tx_sfd_o", 2, 1 },
+ { "mac1g10g_tx_ts_frm_out", 1, 1 },
+ { "mac1g10g_tx_underflow", 0, 1 },
+ { "MAC_PORT_MAC_CTRL_RW", 0x34874, 0 },
+ { "mac40g100g_ff_tx_pfc_xoff", 17, 8 },
+ { "mac40g100g_tx_loc_fault", 16, 1 },
+ { "mac40g100g_tx_rem_fault", 15, 1 },
+ { "mac40g_loop_bck", 14, 1 },
+ { "mac1g10g_magic_ena", 13, 1 },
+ { "mac1g10g_if_mode_set", 11, 2 },
+ { "mac1g10g_tx_loc_fault", 10, 1 },
+ { "mac1g10g_tx_rem_fault", 9, 1 },
+ { "mac1g10g_xoff_gen", 1, 8 },
+ { "mac1g_loop_bck", 0, 1 },
+ { "MAC_PORT_PCS_DEBUG0_RO", 0x34878, 0 },
+ { "fpga_lock", 26, 4 },
+ { "an_done", 25, 1 },
+ { "an_int", 24, 1 },
+ { "an_pcs_rx_clk_ena", 23, 1 },
+ { "an_pcs_tx_clk_ena", 22, 1 },
+ { "an_select", 17, 5 },
+ { "an_prog", 16, 1 },
+ { "pcs40g_block_lock", 12, 4 },
+ { "pcs40g_ber_timer_done", 11, 1 },
+ { "pcs10g_fec_locked", 10, 1 },
+ { "pcs10g_block_lock", 9, 1 },
+ { "sgmii_gmii_col", 8, 1 },
+ { "sgmii_gmii_crs", 7, 1 },
+ { "sgmii_sd_loopback", 6, 1 },
+ { "sgmii_sg_an_done", 5, 1 },
+ { "sgmii_sg_hd", 4, 1 },
+ { "sgmii_sg_page_rx", 3, 1 },
+ { "sgmii_sg_rx_sync", 2, 1 },
+ { "sgmii_sg_speed", 0, 2 },
+ { "MAC_PORT_PCS_CTRL_RW", 0x3487c, 0 },
+ { "tx_li_fault", 31, 1 },
+ { "pad", 30, 1 },
+ { "blk_stb_val", 22, 8 },
+ { "debug_sel", 18, 4 },
+ { "sgmii_loop", 15, 3 },
+ { "an_dis_timer", 14, 1 },
+ { "pcs100g_ber_timer_short", 13, 1 },
+ { "pcs100g_tx_lane_thresh", 9, 4 },
+ { "pcs100g_vl_intvl", 8, 1 },
+ { "sgmii_tx_lane_ckmult", 4, 3 },
+ { "sgmii_tx_lane_thresh", 0, 4 },
+ { "MAC_PORT_PCS_DEBUG1_RO", 0x34880, 0 },
+ { "pcs100g_align_lock", 21, 1 },
+ { "pcs100g_ber_timer_done", 20, 1 },
+ { "pcs100g_block_lock", 0, 20 },
+ { "MAC_PORT_PERR_INT_EN_100G", 0x34884, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_PERR_INT_CAUSE_100G", 0x34888, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_PERR_ENABLE_100G", 0x3488c, 0 },
+ { "Perr_rx_fec100g_dly", 29, 1 },
+ { "Perr_rx_fec100g", 28, 1 },
+ { "Perr_rx3_fec100g_dk", 27, 1 },
+ { "Perr_rx2_fec100g_dk", 26, 1 },
+ { "Perr_rx1_fec100g_dk", 25, 1 },
+ { "Perr_rx0_fec100g_dk", 24, 1 },
+ { "Perr_tx3_pcs100g", 23, 1 },
+ { "Perr_tx2_pcs100g", 22, 1 },
+ { "Perr_tx1_pcs100g", 21, 1 },
+ { "Perr_tx0_pcs100g", 20, 1 },
+ { "Perr_rx19_pcs100g", 19, 1 },
+ { "Perr_rx18_pcs100g", 18, 1 },
+ { "Perr_rx17_pcs100g", 17, 1 },
+ { "Perr_rx16_pcs100g", 16, 1 },
+ { "Perr_rx15_pcs100g", 15, 1 },
+ { "Perr_rx14_pcs100g", 14, 1 },
+ { "Perr_rx13_pcs100g", 13, 1 },
+ { "Perr_rx12_pcs100g", 12, 1 },
+ { "Perr_rx11_pcs100g", 11, 1 },
+ { "Perr_rx10_pcs100g", 10, 1 },
+ { "Perr_rx9_pcs100g", 9, 1 },
+ { "Perr_rx8_pcs100g", 8, 1 },
+ { "Perr_rx7_pcs100g", 7, 1 },
+ { "Perr_rx6_pcs100g", 6, 1 },
+ { "Perr_rx5_pcs100g", 5, 1 },
+ { "Perr_rx4_pcs100g", 4, 1 },
+ { "Perr_rx3_pcs100g", 3, 1 },
+ { "Perr_rx2_pcs100g", 2, 1 },
+ { "Perr_rx1_pcs100g", 1, 1 },
+ { "Perr_rx0_pcs100g", 0, 1 },
+ { "MAC_PORT_MAC_STAT_DEBUG", 0x34890, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM0", 0x34894, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM1", 0x34898, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM2", 0x3489c, 0 },
+ { "MAC_PORT_MAC_25G_50G_AM3", 0x348a0, 0 },
+ { "MAC_PORT_MAC_AN_STATE_STATUS", 0x348a4, 0 },
+ { "MAC_PORT_EPIO_DATA0", 0x348c0, 0 },
+ { "MAC_PORT_EPIO_DATA1", 0x348c4, 0 },
+ { "MAC_PORT_EPIO_DATA2", 0x348c8, 0 },
+ { "MAC_PORT_EPIO_DATA3", 0x348cc, 0 },
+ { "MAC_PORT_EPIO_OP", 0x348d0, 0 },
+ { "Busy", 31, 1 },
+ { "Write", 8, 1 },
+ { "Address", 0, 8 },
+ { "MAC_PORT_WOL_STATUS", 0x348d4, 0 },
+ { "MagicDetected", 31, 1 },
+ { "PatDetected", 30, 1 },
+ { "ClearMagic", 4, 1 },
+ { "ClearMatch", 3, 1 },
+ { "MatchedFilter", 0, 3 },
+ { "MAC_PORT_INT_EN", 0x348d8, 0 },
+ { "pps", 30, 1 },
+ { "tx_ts_avail", 29, 1 },
+ { "single_alarm", 28, 1 },
+ { "periodic_alarm", 27, 1 },
+ { "PatDetWake", 26, 1 },
+ { "MagicWake", 25, 1 },
+ { "SigDetChg", 24, 1 },
+ { "AE_Train_Local", 22, 1 },
+ { "HSSPLL_LOCK", 21, 1 },
+ { "HSSPRT_READY", 20, 1 },
+ { "AutoNeg_Done", 19, 1 },
+ { "PCS_Link_Good", 12, 1 },
+ { "PCS_Link_Fail", 11, 1 },
+ { "RxFifoOverFlow", 10, 1 },
+ { "HSSPRBSErr", 9, 1 },
+ { "HSSEyeQual", 8, 1 },
+ { "RemoteFault", 7, 1 },
+ { "LocalFault", 6, 1 },
+ { "MAC_Link_Down", 5, 1 },
+ { "MAC_Link_Up", 4, 1 },
+ { "an_page_rcvd", 2, 1 },
+ { "TxFifo_prty_err", 1, 1 },
+ { "RxFifo_prty_err", 0, 1 },
+ { "MAC_PORT_INT_CAUSE", 0x348dc, 0 },
+ { "pps", 30, 1 },
+ { "tx_ts_avail", 29, 1 },
+ { "single_alarm", 28, 1 },
+ { "periodic_alarm", 27, 1 },
+ { "PatDetWake", 26, 1 },
+ { "MagicWake", 25, 1 },
+ { "SigDetChg", 24, 1 },
+ { "AE_Train_Local", 22, 1 },
+ { "HSSPLL_LOCK", 21, 1 },
+ { "HSSPRT_READY", 20, 1 },
+ { "AutoNeg_Done", 19, 1 },
+ { "PCS_Link_Good", 12, 1 },
+ { "PCS_Link_Fail", 11, 1 },
+ { "RxFifoOverFlow", 10, 1 },
+ { "HSSPRBSErr", 9, 1 },
+ { "HSSEyeQual", 8, 1 },
+ { "RemoteFault", 7, 1 },
+ { "LocalFault", 6, 1 },
+ { "MAC_Link_Down", 5, 1 },
+ { "MAC_Link_Up", 4, 1 },
+ { "an_page_rcvd", 2, 1 },
+ { "TxFifo_prty_err", 1, 1 },
+ { "RxFifo_prty_err", 0, 1 },
+ { "MAC_PORT_PERR_INT_EN", 0x348e0, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_INT_CAUSE", 0x348e4, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_ENABLE", 0x348e8, 0 },
+ { "Perr_pkt_ram", 31, 1 },
+ { "Perr_mask_ram", 30, 1 },
+ { "Perr_crc_ram", 29, 1 },
+ { "rx_mac40g", 28, 1 },
+ { "tx_mac40g", 27, 1 },
+ { "rx_st_mac40g", 26, 1 },
+ { "tx_st_mac40g", 25, 1 },
+ { "tx_mac1g10g", 24, 1 },
+ { "rx_mac1g10g", 23, 1 },
+ { "rx_status_mac1g10g", 22, 1 },
+ { "rx_st_mac1g10g", 21, 1 },
+ { "tx_st_mac1g10g", 20, 1 },
+ { "Perr_tx0_pcs40g", 19, 1 },
+ { "Perr_tx1_pcs40g", 18, 1 },
+ { "Perr_tx2_pcs40g", 17, 1 },
+ { "Perr_tx3_pcs40g", 16, 1 },
+ { "Perr_tx0_fec40g", 15, 1 },
+ { "Perr_tx1_fec40g", 14, 1 },
+ { "Perr_tx2_fec40g", 13, 1 },
+ { "Perr_tx3_fec40g", 12, 1 },
+ { "Perr_rx0_pcs40g", 11, 1 },
+ { "Perr_rx1_pcs40g", 10, 1 },
+ { "Perr_rx2_pcs40g", 9, 1 },
+ { "Perr_rx3_pcs40g", 8, 1 },
+ { "Perr_rx0_fec40g", 7, 1 },
+ { "Perr_rx1_fec40g", 6, 1 },
+ { "Perr_rx2_fec40g", 5, 1 },
+ { "Perr_rx3_fec40g", 4, 1 },
+ { "Perr_rx_pcs10g_lpbk", 3, 1 },
+ { "Perr_rx_pcs10g", 2, 1 },
+ { "Perr_rx_pcs1g", 1, 1 },
+ { "Perr_tx_pcs1g", 0, 1 },
+ { "MAC_PORT_PERR_INJECT", 0x348ec, 0 },
+ { "MemSel", 1, 6 },
+ { "InjectDataErr", 0, 1 },
+ { "MAC_PORT_HSS_CFG0", 0x348f0, 0 },
+ { "TXDTS", 31, 1 },
+ { "TXCTS", 30, 1 },
+ { "TXBTS", 29, 1 },
+ { "TXATS", 28, 1 },
+ { "TXDOBS", 27, 1 },
+ { "TXCOBS", 26, 1 },
+ { "TXBOBS", 25, 1 },
+ { "TXAOBS", 24, 1 },
+ { "HSSREFCLKVALIDA", 20, 1 },
+ { "HSSREFCLKVALIDB", 19, 1 },
+ { "HSSRESYNCA", 18, 1 },
+ { "HSSAVDHI", 17, 1 },
+ { "HSSRESYNCB", 16, 1 },
+ { "HSSRECCALA", 15, 1 },
+ { "HSSRXACMODE", 14, 1 },
+ { "HSSRECCALB", 13, 1 },
+ { "HSSPLLBYPA", 12, 1 },
+ { "HSSPLLBYPB", 11, 1 },
+ { "HSSPDWNPLLA", 10, 1 },
+ { "HSSPDWNPLLB", 9, 1 },
+ { "HSSVCOSELA", 8, 1 },
+ { "HSSVCOSELB", 7, 1 },
+ { "HSSCALCOMP", 6, 1 },
+ { "HSSCALENAB", 5, 1 },
+ { "HSSEXTC16SEL", 4, 1 },
+ { "MAC_PORT_HSS_CFG1", 0x348f4, 0 },
+ { "RXACONFIGSEL", 30, 2 },
+ { "RXAQUIET", 29, 1 },
+ { "RXAREFRESH", 28, 1 },
+ { "RXBCONFIGSEL", 26, 2 },
+ { "RXBQUIET", 25, 1 },
+ { "RXBREFRESH", 24, 1 },
+ { "RXCCONFIGSEL", 22, 2 },
+ { "RXCQUIET", 21, 1 },
+ { "RXCREFRESH", 20, 1 },
+ { "RXDCONFIGSEL", 18, 2 },
+ { "RXDQUIET", 17, 1 },
+ { "RXDREFRESH", 16, 1 },
+ { "TXACONFIGSEL", 14, 2 },
+ { "TXAQUIET", 13, 1 },
+ { "TXAREFRESH", 12, 1 },
+ { "TXBCONFIGSEL", 10, 2 },
+ { "TXBQUIET", 9, 1 },
+ { "TXBREFRESH", 8, 1 },
+ { "TXCCONFIGSEL", 6, 2 },
+ { "TXCQUIET", 5, 1 },
+ { "TXCREFRESH", 4, 1 },
+ { "TXDCONFIGSEL", 2, 2 },
+ { "TXDQUIET", 1, 1 },
+ { "TXDREFRESH", 0, 1 },
+ { "MAC_PORT_HSS_CFG2", 0x348f8, 0 },
+ { "RXAASSTCLK", 31, 1 },
+ { "T5RXAPRBSRST", 30, 1 },
+ { "RXBASSTCLK", 29, 1 },
+ { "T5RXBPRBSRST", 28, 1 },
+ { "RXCASSTCLK", 27, 1 },
+ { "T5RXCPRBSRST", 26, 1 },
+ { "RXDASSTCLK", 25, 1 },
+ { "T5RXDPRBSRST", 24, 1 },
+ { "RXDDATASYNC", 23, 1 },
+ { "RXCDATASYNC", 22, 1 },
+ { "RXBDATASYNC", 21, 1 },
+ { "RXADATASYNC", 20, 1 },
+ { "RXDEARLYIN", 19, 1 },
+ { "RXDLATEIN", 18, 1 },
+ { "RXDPHSLOCK", 17, 1 },
+ { "RXDPHSDNIN", 16, 1 },
+ { "RXDPHSUPIN", 15, 1 },
+ { "RXCEARLYIN", 14, 1 },
+ { "RXCLATEIN", 13, 1 },
+ { "RXCPHSLOCK", 12, 1 },
+ { "RXCPHSDNIN", 11, 1 },
+ { "RXCPHSUPIN", 10, 1 },
+ { "RXBEARLYIN", 9, 1 },
+ { "RXBLATEIN", 8, 1 },
+ { "RXBPHSLOCK", 7, 1 },
+ { "RXBPHSDNIN", 6, 1 },
+ { "RXBPHSUPIN", 5, 1 },
+ { "RXAEARLYIN", 4, 1 },
+ { "RXALATEIN", 3, 1 },
+ { "RXAPHSLOCK", 2, 1 },
+ { "RXAPHSDNIN", 1, 1 },
+ { "RXAPHSUPIN", 0, 1 },
+ { "MAC_PORT_HSS_CFG3", 0x348fc, 0 },
+ { "HSSCALSSTN", 22, 6 },
+ { "HSSCALSSTP", 16, 6 },
+ { "HSSPLLCONFIGB", 8, 8 },
+ { "HSSPLLCONFIGA", 0, 8 },
+ { "MAC_PORT_HSS_CFG4", 0x34900, 0 },
+ { "HSSREFDIVA", 24, 4 },
+ { "HSSREFDIVB", 20, 4 },
+ { "HSSPLLDIV2B", 19, 1 },
+ { "HSSPLLDIV2A", 18, 1 },
+ { "HSSDIVSELA", 9, 9 },
+ { "HSSDIVSELB", 0, 9 },
+ { "MAC_PORT_HSS_STATUS", 0x34904, 0 },
+ { "RXDERROFLOW", 19, 1 },
+ { "RXCERROFLOW", 18, 1 },
+ { "RXBERROFLOW", 17, 1 },
+ { "RXAERROFLOW", 16, 1 },
+ { "RXDPRBSSYNC", 15, 1 },
+ { "RXCPRBSSYNC", 14, 1 },
+ { "RXBPRBSSYNC", 13, 1 },
+ { "RXAPRBSSYNC", 12, 1 },
+ { "RXDPRBSERR", 11, 1 },
+ { "RXCPRBSERR", 10, 1 },
+ { "RXBPRBSERR", 9, 1 },
+ { "RXAPRBSERR", 8, 1 },
+ { "RXDSIGDET", 7, 1 },
+ { "RXCSIGDET", 6, 1 },
+ { "RXBSIGDET", 5, 1 },
+ { "RXASIGDET", 4, 1 },
+ { "HSSPLLLOCKB", 3, 1 },
+ { "HSSPLLLOCKA", 2, 1 },
+ { "HSSPRTREADYB", 1, 1 },
+ { "HSSPRTREADYA", 0, 1 },
+ { "MAC_PORT_HSS_EEE_STATUS", 0x34908, 0 },
+ { "RXAQUIET_STATUS", 15, 1 },
+ { "RXAREFRESH_STATUS", 14, 1 },
+ { "RXBQUIET_STATUS", 13, 1 },
+ { "RXBREFRESH_STATUS", 12, 1 },
+ { "RXCQUIET_STATUS", 11, 1 },
+ { "RXCREFRESH_STATUS", 10, 1 },
+ { "RXDQUIET_STATUS", 9, 1 },
+ { "RXDREFRESH_STATUS", 8, 1 },
+ { "TXAQUIET_STATUS", 7, 1 },
+ { "TXAREFRESH_STATUS", 6, 1 },
+ { "TXBQUIET_STATUS", 5, 1 },
+ { "TXBREFRESH_STATUS", 4, 1 },
+ { "TXCQUIET_STATUS", 3, 1 },
+ { "TXCREFRESH_STATUS", 2, 1 },
+ { "TXDQUIET_STATUS", 1, 1 },
+ { "TXDREFRESH_STATUS", 0, 1 },
+ { "MAC_PORT_HSS_SIGDET_STATUS", 0x3490c, 0 },
+ { "MAC_PORT_HSS_PL_CTL", 0x34910, 0 },
+ { "TOV", 16, 8 },
+ { "TSU", 8, 8 },
+ { "IPW", 0, 8 },
+ { "MAC_PORT_RUNT_FRAME", 0x34914, 0 },
+ { "runtclear", 16, 1 },
+ { "runt", 0, 16 },
+ { "MAC_PORT_EEE_STATUS", 0x34918, 0 },
+ { "eee_tx_10g_state", 10, 2 },
+ { "eee_rx_10g_state", 8, 2 },
+ { "eee_tx_1g_state", 6, 2 },
+ { "eee_rx_1g_state", 4, 2 },
+ { "pma_rx_refresh", 3, 1 },
+ { "pma_rx_quiet", 2, 1 },
+ { "pma_tx_refresh", 1, 1 },
+ { "pma_tx_quiet", 0, 1 },
+ { "MAC_PORT_CGEN", 0x3491c, 0 },
+ { "CGEN", 8, 1 },
+ { "sd7_CGEN", 7, 1 },
+ { "sd6_CGEN", 6, 1 },
+ { "sd5_CGEN", 5, 1 },
+ { "sd4_CGEN", 4, 1 },
+ { "sd3_CGEN", 3, 1 },
+ { "sd2_CGEN", 2, 1 },
+ { "sd1_CGEN", 1, 1 },
+ { "sd0_CGEN", 0, 1 },
+ { "MAC_PORT_CGEN_MTIP", 0x34920, 0 },
+ { "MACSEG5_CGEN", 11, 1 },
+ { "PCSSEG5_CGEN", 10, 1 },
+ { "MACSEG4_CGEN", 9, 1 },
+ { "PCSSEG4_CGEN", 8, 1 },
+ { "MACSEG3_CGEN", 7, 1 },
+ { "PCSSEG3_CGEN", 6, 1 },
+ { "MACSEG2_CGEN", 5, 1 },
+ { "PCSSEG2_CGEN", 4, 1 },
+ { "MACSEG1_CGEN", 3, 1 },
+ { "PCSSEG1_CGEN", 2, 1 },
+ { "MACSEG0_CGEN", 1, 1 },
+ { "PCSSEG0_CGEN", 0, 1 },
+ { "MAC_PORT_TX_TS_ID", 0x34924, 0 },
+ { "MAC_PORT_TX_TS_VAL_LO", 0x34928, 0 },
+ { "MAC_PORT_TX_TS_VAL_HI", 0x3492c, 0 },
+ { "MAC_PORT_EEE_CTL", 0x34930, 0 },
+ { "EEE_CTRL", 2, 30 },
+ { "TICK_START", 1, 1 },
+ { "En", 0, 1 },
+ { "MAC_PORT_EEE_TX_CTL", 0x34934, 0 },
+ { "WAKE_TIMER", 16, 16 },
+ { "HSS_TIMER", 5, 4 },
+ { "HSS_CTL", 4, 1 },
+ { "LPI_ACTIVE", 3, 1 },
+ { "LPI_TXHOLD", 2, 1 },
+ { "LPI_REQ", 1, 1 },
+ { "EEE_TX_RESET", 0, 1 },
+ { "MAC_PORT_EEE_RX_CTL", 0x34938, 0 },
+ { "WAKE_TIMER", 16, 16 },
+ { "HSS_TIMER", 5, 4 },
+ { "HSS_CTL", 4, 1 },
+ { "LPI_IND", 1, 1 },
+ { "EEE_RX_RESET", 0, 1 },
+ { "MAC_PORT_EEE_TX_10G_SLEEP_TIMER", 0x3493c, 0 },
+ { "MAC_PORT_EEE_TX_10G_QUIET_TIMER", 0x34940, 0 },
+ { "MAC_PORT_EEE_TX_10G_WAKE_TIMER", 0x34944, 0 },
+ { "MAC_PORT_EEE_TX_1G_SLEEP_TIMER", 0x34948, 0 },
+ { "MAC_PORT_EEE_TX_1G_QUIET_TIMER", 0x3494c, 0 },
+ { "MAC_PORT_EEE_TX_1G_REFRESH_TIMER", 0x34950, 0 },
+ { "MAC_PORT_EEE_RX_10G_QUIET_TIMER", 0x34954, 0 },
+ { "MAC_PORT_EEE_RX_10G_WAKE_TIMER", 0x34958, 0 },
+ { "MAC_PORT_EEE_RX_10G_WF_TIMER", 0x3495c, 0 },
+ { "MAC_PORT_EEE_RX_1G_QUIET_TIMER", 0x34960, 0 },
+ { "MAC_PORT_EEE_RX_1G_WAKE_TIMER", 0x34964, 0 },
+ { "MAC_PORT_EEE_WF_COUNT", 0x34968, 0 },
+ { "wake_cnt_clr", 16, 1 },
+ { "wake_cnt", 0, 16 },
+ { "MAC_PORT_PTP_TIMER_RD0_LO", 0x3496c, 0 },
+ { "MAC_PORT_PTP_TIMER_RD0_HI", 0x34970, 0 },
+ { "MAC_PORT_PTP_TIMER_RD1_LO", 0x34974, 0 },
+ { "MAC_PORT_PTP_TIMER_RD1_HI", 0x34978, 0 },
+ { "MAC_PORT_PTP_TIMER_WR_LO", 0x3497c, 0 },
+ { "MAC_PORT_PTP_TIMER_WR_HI", 0x34980, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_0", 0x34984, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_1", 0x34988, 0 },
+ { "MAC_PORT_PTP_TIMER_OFFSET_2", 0x3498c, 0 },
+ { "MAC_PORT_PTP_SUM_LO", 0x34990, 0 },
+ { "MAC_PORT_PTP_SUM_HI", 0x34994, 0 },
+ { "MAC_PORT_PTP_TIMER_INCR0", 0x34998, 0 },
+ { "Y", 16, 16 },
+ { "X", 0, 16 },
+ { "MAC_PORT_PTP_TIMER_INCR1", 0x3499c, 0 },
+ { "Y_TICK", 16, 16 },
+ { "X_TICK", 0, 16 },
+ { "MAC_PORT_PTP_DRIFT_ADJUST_COUNT", 0x349a0, 0 },
+ { "MAC_PORT_PTP_OFFSET_ADJUST_FINE", 0x349a4, 0 },
+ { "B", 16, 16 },
+ { "A", 0, 16 },
+ { "MAC_PORT_PTP_OFFSET_ADJUST_TOTAL", 0x349a8, 0 },
+ { "MAC_PORT_PTP_CFG", 0x349ac, 0 },
+ { "ALARM_EN", 21, 1 },
+ { "ALARM_START", 20, 1 },
+ { "PPS_EN", 19, 1 },
+ { "FRZ", 18, 1 },
+ { "OFFSER_ADJUST_SIGN", 17, 1 },
+ { "ADD_OFFSET", 16, 1 },
+ { "CYCLE1", 8, 8 },
+ { "Q", 0, 8 },
+ { "MAC_PORT_PTP_PPS", 0x349b0, 0 },
+ { "MAC_PORT_PTP_SINGLE_ALARM", 0x349b4, 0 },
+ { "MAC_PORT_PTP_PERIODIC_ALARM", 0x349b8, 0 },
+ { "MAC_PORT_PTP_STATUS", 0x349bc, 0 },
+ { "MAC_PORT_MTIP_REVISION", 0x34a00, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_SCRATCH", 0x34a04, 0 },
+ { "MAC_PORT_MTIP_COMMAND_CONFIG", 0x34a08, 0 },
+ { "TX_FLUSH", 22, 1 },
+ { "RX_SFD_ANY", 21, 1 },
+ { "PAUSE_PFC_COMP", 20, 1 },
+ { "PFC_MODE", 19, 1 },
+ { "RS_COL_CNT_EXT", 18, 1 },
+ { "NO_LGTH_CHECK", 17, 1 },
+ { "SEND_IDLE", 16, 1 },
+ { "PHY_TXENA", 15, 1 },
+ { "RX_ERR_DISC", 14, 1 },
+ { "CMD_FRAME_ENA", 13, 1 },
+ { "SW_RESET", 12, 1 },
+ { "TX_PAD_EN", 11, 1 },
+ { "LOOPBACK_EN", 10, 1 },
+ { "TX_ADDR_INS", 9, 1 },
+ { "PAUSE_IGNORE", 8, 1 },
+ { "PAUSE_FWD", 7, 1 },
+ { "CRC_FWD", 6, 1 },
+ { "PAD_EN", 5, 1 },
+ { "PROMIS_EN", 4, 1 },
+ { "WAN_MODE", 3, 1 },
+ { "RX_ENA", 1, 1 },
+ { "TX_ENA", 0, 1 },
+ { "MAC_PORT_MTIP_MAC_ADDR_0", 0x34a0c, 0 },
+ { "MAC_PORT_MTIP_MAC_ADDR_1", 0x34a10, 0 },
+ { "MAC_PORT_MTIP_FRM_LENGTH", 0x34a14, 0 },
+ { "MAC_PORT_MTIP_RX_FIFO_SECTIONS", 0x34a1c, 0 },
+ { "AVAIL", 16, 16 },
+ { "EMPTY", 0, 16 },
+ { "MAC_PORT_MTIP_TX_FIFO_SECTIONS", 0x34a20, 0 },
+ { "AVAIL", 16, 16 },
+ { "EMPTY", 0, 16 },
+ { "MAC_PORT_MTIP_RX_FIFO_ALMOST_F_E", 0x34a24, 0 },
+ { "AlmstFull", 16, 16 },
+ { "AlmstEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_TX_FIFO_ALMOST_F_E", 0x34a28, 0 },
+ { "AlmstFull", 16, 16 },
+ { "AlmstEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_HASHTABLE_LOAD", 0x34a2c, 0 },
+ { "ENABLE", 8, 1 },
+ { "ADDR", 0, 6 },
+ { "MAC_PORT_MTIP_MAC_STATUS", 0x34a40, 0 },
+ { "TS_AVAIL", 3, 1 },
+ { "PHY_LOS", 2, 1 },
+ { "RX_REM_FAULT", 1, 1 },
+ { "RX_LOC_FAULT", 0, 1 },
+ { "MAC_PORT_MTIP_TX_IPG_LENGTH", 0x34a44, 0 },
+ { "MAC_PORT_MTIP_MAC_CREDIT_TRIGGER", 0x34a48, 0 },
+ { "MAC_PORT_MTIP_INIT_CREDIT", 0x34a4c, 0 },
+ { "MAC_PORT_MTIP_CURRENT_CREDIT", 0x34a50, 0 },
+ { "MAC_PORT_RX_PAUSE_STATUS", 0x34a74, 0 },
+ { "MAC_PORT_MTIP_TS_TIMESTAMP", 0x34a7c, 0 },
+ { "MAC_PORT_AFRAMESTRANSMITTEDOK", 0x34a80, 0 },
+ { "MAC_PORT_AFRAMESTRANSMITTEDOKHI", 0x34a84, 0 },
+ { "MAC_PORT_AFRAMESRECEIVEDOK", 0x34a88, 0 },
+ { "MAC_PORT_AFRAMESRECEIVEDOKHI", 0x34a8c, 0 },
+ { "MAC_PORT_AFRAMECHECKSEQUENCEERRORS", 0x34a90, 0 },
+ { "MAC_PORT_AFRAMECHECKSEQUENCEERRORSHI", 0x34a94, 0 },
+ { "MAC_PORT_AALIGNMENTERRORS", 0x34a98, 0 },
+ { "MAC_PORT_AALIGNMENTERRORSHI", 0x34a9c, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESTRANSMITTED", 0x34aa0, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESTRANSMITTEDHI", 0x34aa4, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESRECEIVED", 0x34aa8, 0 },
+ { "MAC_PORT_APAUSEMACCTRLFRAMESRECEIVEDHI", 0x34aac, 0 },
+ { "MAC_PORT_AFRAMETOOLONGERRORS", 0x34ab0, 0 },
+ { "MAC_PORT_AFRAMETOOLONGERRORSHI", 0x34ab4, 0 },
+ { "MAC_PORT_AINRANGELENGTHERRORS", 0x34ab8, 0 },
+ { "MAC_PORT_AINRANGELENGTHERRORSHI", 0x34abc, 0 },
+ { "MAC_PORT_VLANTRANSMITTEDOK", 0x34ac0, 0 },
+ { "MAC_PORT_VLANTRANSMITTEDOKHI", 0x34ac4, 0 },
+ { "MAC_PORT_VLANRECEIVEDOK", 0x34ac8, 0 },
+ { "MAC_PORT_VLANRECEIVEDOKHI", 0x34acc, 0 },
+ { "MAC_PORT_AOCTETSTRANSMITTEDOK", 0x34ad0, 0 },
+ { "MAC_PORT_AOCTETSTRANSMITTEDOKHI", 0x34ad4, 0 },
+ { "MAC_PORT_AOCTETSRECEIVEDOK", 0x34ad8, 0 },
+ { "MAC_PORT_AOCTETSRECEIVEDOKHI", 0x34adc, 0 },
+ { "MAC_PORT_IFINUCASTPKTS", 0x34ae0, 0 },
+ { "MAC_PORT_IFINUCASTPKTSHI", 0x34ae4, 0 },
+ { "MAC_PORT_IFINMULTICASTPKTS", 0x34ae8, 0 },
+ { "MAC_PORT_IFINMULTICASTPKTSHI", 0x34aec, 0 },
+ { "MAC_PORT_IFINBROADCASTPKTS", 0x34af0, 0 },
+ { "MAC_PORT_IFINBROADCASTPKTSHI", 0x34af4, 0 },
+ { "MAC_PORT_IFOUTERRORS", 0x34af8, 0 },
+ { "MAC_PORT_IFOUTERRORSHI", 0x34afc, 0 },
+ { "MAC_PORT_IFOUTUCASTPKTS", 0x34b08, 0 },
+ { "MAC_PORT_IFOUTUCASTPKTSHI", 0x34b0c, 0 },
+ { "MAC_PORT_IFOUTMULTICASTPKTS", 0x34b10, 0 },
+ { "MAC_PORT_IFOUTMULTICASTPKTSHI", 0x34b14, 0 },
+ { "MAC_PORT_IFOUTBROADCASTPKTS", 0x34b18, 0 },
+ { "MAC_PORT_IFOUTBROADCASTPKTSHI", 0x34b1c, 0 },
+ { "MAC_PORT_ETHERSTATSDROPEVENTS", 0x34b20, 0 },
+ { "MAC_PORT_ETHERSTATSDROPEVENTSHI", 0x34b24, 0 },
+ { "MAC_PORT_ETHERSTATSOCTETS", 0x34b28, 0 },
+ { "MAC_PORT_ETHERSTATSOCTETSHI", 0x34b2c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS", 0x34b30, 0 },
+ { "MAC_PORT_ETHERSTATSPKTSHI", 0x34b34, 0 },
+ { "MAC_PORT_ETHERSTATSUNDERSIZEPKTS", 0x34b38, 0 },
+ { "MAC_PORT_ETHERSTATSUNDERSIZEPKTSHI", 0x34b3c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS64OCTETS", 0x34b40, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS64OCTETSHI", 0x34b44, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS65TO127OCTETS", 0x34b48, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS65TO127OCTETSHI", 0x34b4c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS128TO255OCTETS", 0x34b50, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS128TO255OCTETSHI", 0x34b54, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS256TO511OCTETS", 0x34b58, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS256TO511OCTETSHI", 0x34b5c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS512TO1023OCTETS", 0x34b60, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS512TO1023OCTETSHI", 0x34b64, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1024TO1518OCTETS", 0x34b68, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x34b6c, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1519TOMAXOCTETS", 0x34b70, 0 },
+ { "MAC_PORT_ETHERSTATSPKTS1519TOMAXOCTETSHI", 0x34b74, 0 },
+ { "MAC_PORT_ETHERSTATSOVERSIZEPKTS", 0x34b78, 0 },
+ { "MAC_PORT_ETHERSTATSOVERSIZEPKTSHI", 0x34b7c, 0 },
+ { "MAC_PORT_ETHERSTATSJABBERS", 0x34b80, 0 },
+ { "MAC_PORT_ETHERSTATSJABBERSHI", 0x34b84, 0 },
+ { "MAC_PORT_ETHERSTATSFRAGMENTS", 0x34b88, 0 },
+ { "MAC_PORT_ETHERSTATSFRAGMENTSHI", 0x34b8c, 0 },
+ { "MAC_PORT_IFINERRORS", 0x34b90, 0 },
+ { "MAC_PORT_IFINERRORSHI", 0x34b94, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_0", 0x34b98, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_0HI", 0x34b9c, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_1", 0x34ba0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_1HI", 0x34ba4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_2", 0x34ba8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_2HI", 0x34bac, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_3", 0x34bb0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_3HI", 0x34bb4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_4", 0x34bb8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_4HI", 0x34bbc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_5", 0x34bc0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_5HI", 0x34bc4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_6", 0x34bc8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_6HI", 0x34bcc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_7", 0x34bd0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESTRANSMITTED_7HI", 0x34bd4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_0", 0x34bd8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_0HI", 0x34bdc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_1", 0x34be0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_1HI", 0x34be4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_2", 0x34be8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_2HI", 0x34bec, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_3", 0x34bf0, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_3HI", 0x34bf4, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_4", 0x34bf8, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_4HI", 0x34bfc, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_5", 0x34c00, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_5HI", 0x34c04, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_6", 0x34c08, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_6HI", 0x34c0c, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_7", 0x34c10, 0 },
+ { "MAC_PORT_ACBFCPAUSEFRAMESRECEIVED_7HI", 0x34c14, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESTRANSMITTED", 0x34c18, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESTRANSMITTEDHI", 0x34c1c, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESRECEIVED", 0x34c20, 0 },
+ { "MAC_PORT_AMACCONTROLFRAMESRECEIVEDHI", 0x34c24, 0 },
+ { "MAC_PORT_MTIP_1G10G_REVISION", 0x34d00, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_1G10G_SCRATCH", 0x34d04, 0 },
+ { "MAC_PORT_MTIP_1G10G_COMMAND_CONFIG", 0x34d08, 0 },
+ { "SHORT_DISCARD", 25, 1 },
+ { "REG_LOWP_RXEMPTY", 24, 1 },
+ { "TX_LOWP_ENA", 23, 1 },
+ { "TX_FLUSH", 22, 1 },
+ { "SFD_ANY", 21, 1 },
+ { "PAUSE_PFC_COMP", 20, 1 },
+ { "PFC_MODE", 19, 1 },
+ { "COL_CNT_ExT", 18, 1 },
+ { "NO_LGTH_CHECK", 17, 1 },
+ { "FORCE_SEND_IDLE", 16, 1 },
+ { "PHY_TXENA", 15, 1 },
+ { "RX_ERR_DISC", 14, 1 },
+ { "CNTL_FRM_ENA", 13, 1 },
+ { "SW_RESET", 12, 1 },
+ { "TX_PAD_EN", 11, 1 },
+ { "LOOP_ENA", 10, 1 },
+ { "TX_ADDR_INS", 9, 1 },
+ { "PAUSE_IGNORE", 8, 1 },
+ { "PAUSE_FWD", 7, 1 },
+ { "CRC_FWD", 6, 1 },
+ { "PAD_EN", 5, 1 },
+ { "PROMIS_EN", 4, 1 },
+ { "WAN_MODE", 3, 1 },
+ { "RX_ENAMAC", 1, 1 },
+ { "TX_ENAMAC", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_MAC_ADDR_0", 0x34d0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_MAC_ADDR_1", 0x34d10, 0 },
+ { "MAC_PORT_MTIP_1G10G_FRM_LENGTH_TX_MTU", 0x34d14, 0 },
+ { "SET_LEN", 16, 16 },
+ { "FRM_LEN_SET", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_FIFO_SECTIONS", 0x34d1c, 0 },
+ { "EMPTY", 16, 16 },
+ { "AVAIL", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_TX_FIFO_SECTIONS", 0x34d20, 0 },
+ { "EMPTY", 16, 16 },
+ { "AVAIL", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_FIFO_ALMOST_F_E", 0x34d24, 0 },
+ { "AlmostFull", 16, 16 },
+ { "AlmostEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_TX_FIFO_ALMOST_F_E", 0x34d28, 0 },
+ { "AlmostFull", 16, 16 },
+ { "AlmostEmpty", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_HASHTABLE_LOAD", 0x34d2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_CFG_STATUS", 0x34d30, 0 },
+ { "Clk_divisor", 7, 9 },
+ { "ENA_CLAUSE", 6, 1 },
+ { "PREAMBLE_DISABLE", 5, 1 },
+ { "Hold_time_setting", 2, 3 },
+ { "MDIO_read_error", 1, 1 },
+ { "MDIO_Busy", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_COMMAND", 0x34d34, 0 },
+ { "READ_MODE", 15, 1 },
+ { "POST_INCR_READ", 14, 1 },
+ { "Port_PHY_Addr", 5, 5 },
+ { "Device_Reg_Addr", 0, 5 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_DATA", 0x34d38, 0 },
+ { "MAC_PORT_MTIP_1G10G_MDIO_REGADDR", 0x34d3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_STATUS", 0x34d40, 0 },
+ { "RX_LINT_FAULT", 7, 1 },
+ { "RX_EMPTY", 6, 1 },
+ { "TX_EMPTY", 5, 1 },
+ { "RX_LOWP", 4, 1 },
+ { "TS_AVAIL", 3, 1 },
+ { "PHY_LOS", 2, 1 },
+ { "RX_REM_FAULT", 1, 1 },
+ { "RX_LOC_FAULT", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_TX_IPG_LENGTH", 0x34d44, 0 },
+ { "MAC_PORT_MTIP_1G10G_CREDIT_TRIGGER", 0x34d48, 0 },
+ { "MAC_PORT_MTIP_1G10G_INIT_CREDIT", 0x34d4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_CL01_PAUSE_QUANTA", 0x34d54, 0 },
+ { "CL1_PAUSE_QUANTA", 16, 16 },
+ { "CL0_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL23_PAUSE_QUANTA", 0x34d58, 0 },
+ { "CL3_PAUSE_QUANTA", 16, 16 },
+ { "CL2_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL45_PAUSE_QUANTA", 0x34d5c, 0 },
+ { "CL5_PAUSE_QUANTA", 16, 16 },
+ { "CL4_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL67_PAUSE_QUANTA", 0x34d60, 0 },
+ { "CL7_PAUSE_QUANTA", 16, 16 },
+ { "CL6_PAUSE_QUANTA", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL01_QUANTA_THRESH", 0x34d64, 0 },
+ { "CL1_QUANTA_THRESH", 16, 16 },
+ { "CL0_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL23_QUANTA_THRESH", 0x34d68, 0 },
+ { "CL3_QUANTA_THRESH", 16, 16 },
+ { "CL2_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL45_QUANTA_THRESH", 0x34d6c, 0 },
+ { "CL5_QUANTA_THRESH", 16, 16 },
+ { "CL4_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_CL67_QUANTA_THRESH", 0x34d70, 0 },
+ { "CL7_QUANTA_THRESH", 16, 16 },
+ { "CL6_QUANTA_THRESH", 0, 16 },
+ { "MAC_PORT_MTIP_1G10G_RX_PAUSE_STATUS", 0x34d74, 0 },
+ { "MAC_PORT_MTIP_1G10G_TS_TIMESTAMP", 0x34d7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_STATN_CONFIG", 0x34de0, 0 },
+ { "CLEAR", 2, 1 },
+ { "CLEAR_ON_READ", 1, 1 },
+ { "SATURATE", 0, 1 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOCTETS", 0x34e00, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOCTETSHI", 0x34e04, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_OCTETSOK", 0x34e08, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_OCTETSOKHI", 0x34e0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AALIGNMENTERRORS", 0x34e10, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AALIGNMENTERRORSHI", 0x34e14, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_APAUSEMACCTRLFRAMES", 0x34e18, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_APAUSEMACCTRLFRAMESHI", 0x34e1c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_FRAMESOK", 0x34e20, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_FRAMESOKHI", 0x34e24, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_CRCERRORS", 0x34e28, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_CRCERRORSHI", 0x34e2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_VLANOK", 0x34e30, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_VLANOKHI", 0x34e34, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINERRORS", 0x34e38, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINERRORSHI", 0x34e3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINUCASTPKTS", 0x34e40, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINUCASTPKTSHI", 0x34e44, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINMULTICASTPKTS", 0x34e48, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINMULTICASTPKTSHI", 0x34e4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINBROADCASTPKTS", 0x34e50, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_IFINBROADCASTPKTSHI", 0x34e54, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSDROPEVENTS", 0x34e58, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSDROPEVENTSHI", 0x34e5c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS", 0x34e60, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTSHI", 0x34e64, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSUNDERSIZEPKTS", 0x34e68, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSUNDERSIZEPKTSHI", 0x34e6c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS64OCTETS", 0x34e70, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS64OCTETSHI", 0x34e74, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS65TO127OCTETS", 0x34e78, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS65TO127OCTETSHI", 0x34e7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS128TO255OCTETS", 0x34e80, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS128TO255OCTETSHI", 0x34e84, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS256TO511OCTETS", 0x34e88, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS256TO511OCTETSHI", 0x34e8c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS512TO1023OCTETS", 0x34e90, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS512TO1023OCTETSHI", 0x34e94, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1024TO1518OCTETS", 0x34e98, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x34e9c, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1519TOMAX", 0x34ea0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSPKTS1519TOMAXHI", 0x34ea4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOVERSIZEPKTS", 0x34ea8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSOVERSIZEPKTSHI", 0x34eac, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSJABBERS", 0x34eb0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSJABBERSHI", 0x34eb4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSFRAGMENTS", 0x34eb8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_ETHERSTATSFRAGMENTSHI", 0x34ebc, 0 },
+ { "MAC_PORT_MTIP_1G10G_AMACCONTROLFRAMESRECEIVED", 0x34ec0, 0 },
+ { "MAC_PORT_MTIP_1G10G_AMACCONTROLFRAMESRECEIVEDHI", 0x34ec4, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AFRAMETOOLONG", 0x34ec8, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AFRAMETOOLONGHI", 0x34ecc, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AINRANGELENGTHERRORS", 0x34ed0, 0 },
+ { "MAC_PORT_MTIP_1G10G_RX_AINRANGELENGTHERRORSHI", 0x34ed4, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSOCTETS", 0x34f00, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSOCTETSHI", 0x34f04, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_OCTETSOK", 0x34f08, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_OCTETSOKHI", 0x34f0c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AALIGNMENTERRORS", 0x34f10, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AALIGNMENTERRORSHI", 0x34f14, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_APAUSEMACCTRLFRAMES", 0x34f18, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_APAUSEMACCTRLFRAMESHI", 0x34f1c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_FRAMESOK", 0x34f20, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_FRAMESOKHI", 0x34f24, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_CRCERRORS", 0x34f28, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_CRCERRORSHI", 0x34f2c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_VLANOK", 0x34f30, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_VLANOKHI", 0x34f34, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFOUTERRORS", 0x34f38, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFOUTERRORSHI", 0x34f3c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFUCASTPKTS", 0x34f40, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFUCASTPKTSHI", 0x34f44, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFMULTICASTPKTS", 0x34f48, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFMULTICASTPKTSHI", 0x34f4c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFBROADCASTPKTS", 0x34f50, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_IFBROADCASTPKTSHI", 0x34f54, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSDROPEVENTS", 0x34f58, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSDROPEVENTSHI", 0x34f5c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS", 0x34f60, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTSHI", 0x34f64, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSUNDERSIZEPKTS", 0x34f68, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSUNDERSIZEPKTSHI", 0x34f6c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS64OCTETS", 0x34f70, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS64OCTETSHI", 0x34f74, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS65TO127OCTETS", 0x34f78, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS65TO127OCTETSHI", 0x34f7c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS128TO255OCTETS", 0x34f80, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS128TO255OCTETSHI", 0x34f84, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS256TO511OCTETS", 0x34f88, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS256TO511OCTETSHI", 0x34f8c, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS512TO1023OCTETS", 0x34f90, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS512TO1023OCTETSHI", 0x34f94, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS1024TO1518OCTETS", 0x34f98, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_ETHERSTATSPKTS1024TO1518OCTETSHI", 0x34f9c, 0 },
+ { "MAC_PORT_MTIP_1G10G_ETHERSTATSPKTS1519TOTX_MTU", 0x34fa0, 0 },
+ { "MAC_PORT_MTIP_1G10G_ETHERSTATSPKTS1519TOTX_MTUHI", 0x34fa4, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AMACCONTROLFRAMES", 0x34fc0, 0 },
+ { "MAC_PORT_MTIP_1G10G_TX_AMACCONTROLFRAMESHI", 0x34fc4, 0 },
+ { "MAC_PORT_MTIP_1G10G_IF_MODE", 0x35000, 0 },
+ { "MII_ENA_10", 4, 1 },
+ { "IF_MODE", 0, 2 },
+ { "MAC_PORT_MTIP_1G10G_IF_STATUS", 0x35004, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_0", 0x35080, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_0HI", 0x35084, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_1", 0x35088, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_1HI", 0x3508c, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_2", 0x35090, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_2HI", 0x35094, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_3", 0x35098, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_3HI", 0x3509c, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_4", 0x350a0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_4HI", 0x350a4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_5", 0x350a8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_5HI", 0x350ac, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_6", 0x350b0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_6HI", 0x350b4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_7", 0x350b8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESRECEIVED_7HI", 0x350bc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_0", 0x350c0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_0HI", 0x350c4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_1", 0x350c8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_1HI", 0x350cc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_2", 0x350d0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_2HI", 0x350d4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_3", 0x350d8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_3HI", 0x350dc, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_4", 0x350e0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_4HI", 0x350e4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_5", 0x350e8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_5HI", 0x350ec, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_6", 0x350f0, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_6HI", 0x350f4, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_7", 0x350f8, 0 },
+ { "MAC_PORT_MTIP_1G10G_PFCFRAMESTRANSMITTED_7HI", 0x350fc, 0 },
+ { "MAC_PORT_MTIP_SGMII_CONTROL", 0x35200, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_Sel", 13, 1 },
+ { "AN_EN", 12, 1 },
+ { "PWR_DWN", 11, 1 },
+ { "Isolate", 10, 1 },
+ { "AN_RESTART", 9, 1 },
+ { "DUPLEx_MODE", 8, 1 },
+ { "Collision_Test", 7, 1 },
+ { "Speed_Sel1", 6, 1 },
+ { "MAC_PORT_MTIP_SGMII_STATUS", 0x35204, 0 },
+ { "100BaseT4", 15, 1 },
+ { "100BasexFullDplx", 14, 1 },
+ { "100BasexHalfDplx", 13, 1 },
+ { "10MbpsFullDplx", 12, 1 },
+ { "10MbpsHalfDplx", 11, 1 },
+ { "100BaseT2FullDplx", 10, 1 },
+ { "100BaseT2HalfDplx", 9, 1 },
+ { "ExtdStatus", 8, 1 },
+ { "AN_Complete", 5, 1 },
+ { "REM_FAULT", 4, 1 },
+ { "AN_Ability", 3, 1 },
+ { "LINK_STATUS", 2, 1 },
+ { "JabberDetect", 1, 1 },
+ { "ExtdCapability", 0, 1 },
+ { "MAC_PORT_MTIP_SGMII_PHY_IDENTIFIER_0", 0x35208, 0 },
+ { "MAC_PORT_MTIP_SGMII_PHY_IDENTIFIER_1", 0x3520c, 0 },
+ { "MAC_PORT_MTIP_SGMII_DEV_ABILITY", 0x35210, 0 },
+ { "NP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "RF2", 13, 1 },
+ { "RF1", 12, 1 },
+ { "PS2", 8, 1 },
+ { "PS1", 7, 1 },
+ { "HD", 6, 1 },
+ { "FD", 5, 1 },
+ { "MAC_PORT_MTIP_SGMII_PARTNER_ABILITY", 0x35214, 0 },
+ { "CuLinkStatus", 15, 1 },
+ { "ACK", 14, 1 },
+ { "CuDplxStatus", 12, 1 },
+ { "CuSpeed", 10, 2 },
+ { "MAC_PORT_MTIP_SGMII_AN_EXPANSION", 0x35218, 0 },
+ { "Next_Page_Able", 2, 1 },
+ { "PAGE_RECEIVE", 1, 1 },
+ { "MAC_PORT_MTIP_SGMII_NP_TX", 0x3521c, 0 },
+ { "MAC_PORT_MTIP_SGMII_LP_NP_RX", 0x35220, 0 },
+ { "MAC_PORT_MTIP_SGMII_EXTENDED_STATUS", 0x3523c, 0 },
+ { "MAC_PORT_MTIP_SGMII_SCRATCH", 0x35240, 0 },
+ { "MAC_PORT_MTIP_SGMII_REV", 0x35244, 0 },
+ { "CUSTREV", 16, 16 },
+ { "VER", 8, 8 },
+ { "REV", 0, 8 },
+ { "MAC_PORT_MTIP_SGMII_LINK_TIMER_LO", 0x35248, 0 },
+ { "MAC_PORT_MTIP_SGMII_LINK_TIMER_HI", 0x3524c, 0 },
+ { "MAC_PORT_MTIP_SGMII_IF_MODE", 0x35250, 0 },
+ { "SGMII_DUPLEx", 4, 1 },
+ { "SGMII_SPEED", 2, 2 },
+ { "USE_SGMII_AN", 1, 1 },
+ { "SGMII_ENA", 0, 1 },
+ { "MAC_PORT_MTIP_SGMII_DECODE_ERROR", 0x35254, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_CONTROL_1", 0x35300, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_SEL", 13, 1 },
+ { "Low_Power", 11, 1 },
+ { "Speed_SEL1", 6, 1 },
+ { "Speed_SEL2", 2, 4 },
+ { "MAC_PORT_MTIP_KR_PCS_STATUS_1", 0x35304, 0 },
+ { "TX_LPI", 11, 1 },
+ { "RX_LPI", 10, 1 },
+ { "TX_LPI_ACTIVE", 9, 1 },
+ { "RX_LPI_ACTIVE", 8, 1 },
+ { "Fault", 7, 1 },
+ { "PCS_RX_Link_STAT", 2, 1 },
+ { "Low_power_Ability", 1, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICE_IDENTIFIER_1", 0x35308, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICE_IDENTIFIER_2", 0x3530c, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_SPEED_ABILITY", 0x35310, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICES_IN_PACKAGELO", 0x35314, 0 },
+ { "Auto_Negotiation_Present", 7, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_Present", 1, 1 },
+ { "Clause_22_Reg_Present", 0, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_DEVICES_IN_PACKAGEHI", 0x35318, 0 },
+ { "Auto_Negotiation_Present", 7, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_Present", 1, 1 },
+ { "Clause_22_Reg_Present", 0, 1 },
+ { "MAC_PORT_MTIP_KR_PCS_CONTROL_2", 0x3531c, 0 },
+ { "MAC_PORT_MTIP_KR_PCS_STATUS_2", 0x35320, 0 },
+ { "Device_Present", 14, 2 },
+ { "Transmit_Fault", 11, 1 },
+ { "Receive_Fault", 10, 1 },
+ { "10GBASE_W_Capable", 2, 1 },
+ { "10GBASE_x_Capable", 1, 1 },
+ { "10GBASE_R_Capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_PACKAGE_IDENTIFIER_LO", 0x35338, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_PACKAGE_IDENTIFIER_HI", 0x3533c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_STATUS_1", 0x35380, 0 },
+ { "10GBASE_R_RX_Link_Status", 12, 1 },
+ { "PRBS9_Pttrn_Tstng_Ability", 3, 1 },
+ { "PRBS31_Pttrn_Tstng_Ability", 2, 1 },
+ { "10GBASE_R_PCS_High_BER", 1, 1 },
+ { "10GBASE_R_PCS_Block_Lock", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_STATUS_2", 0x35384, 0 },
+ { "Latched_Block_Lock", 15, 1 },
+ { "Latched_High_BER", 14, 1 },
+ { "BERBER_Counter", 8, 6 },
+ { "ErrBlkCnt", 0, 8 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_0", 0x35388, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_1", 0x3538c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_2", 0x35390, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_A_3", 0x35394, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_0", 0x35398, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_1", 0x3539c, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_2", 0x353a0, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_SEED_B_3", 0x353a4, 0 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_CONTROL", 0x353a8, 0 },
+ { "PRBS9_TX_Tst_Pttrn_En", 6, 1 },
+ { "PRBS31_RX_Tst_Pttrn_En", 5, 1 },
+ { "PRBS31_TX_Tst_Pttrn_En", 4, 1 },
+ { "TX_Test_Pattern_En", 3, 1 },
+ { "RX_Test_Pattern_En", 2, 1 },
+ { "Test_Pattern_Select", 1, 1 },
+ { "Data_Pattern_Select", 0, 1 },
+ { "MAC_PORT_MTIP_KR_10GBASE_R_PCS_TEST_PATTERN_ERROR_COUNTER", 0x353ac, 0 },
+ { "MAC_PORT_MTIP_KR_VENDOR_SPECIFIC_PCS_STATUS", 0x353b4, 0 },
+ { "Transmit_FIFO_Fault", 1, 1 },
+ { "Receive_FIFO_Fault", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_CONTROL_1", 0x35400, 0 },
+ { "RESET", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_selection", 13, 1 },
+ { "Low_power", 11, 1 },
+ { "Speed_selection1", 6, 1 },
+ { "Speed_selection2", 2, 4 },
+ { "MAC_PORT_MTIP_KR4_STATUS_1", 0x35404, 0 },
+ { "Fault", 7, 1 },
+ { "Receive_link_STAT", 2, 1 },
+ { "Low_power_ability", 1, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICE_ID0", 0x35408, 0 },
+ { "MAC_PORT_MTIP_KR4_DEVICE_ID1", 0x3540c, 0 },
+ { "DEVICE_ID1", 16, 16 },
+ { "MAC_PORT_MTIP_KR4_SPEED_ABILITY", 0x35410, 0 },
+ { "100G_capable", 3, 1 },
+ { "40G_capable", 2, 1 },
+ { "10PASS_TS_2Base_TL_capable", 1, 1 },
+ { "10G_capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICES_IN_PKG1", 0x35414, 0 },
+ { "TC_present", 6, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_present", 1, 1 },
+ { "Clause_22_reg", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_DEVICES_IN_PKG2", 0x35418, 0 },
+ { "Vendor_specific_device", 15, 1 },
+ { "Vendor_specific_device1", 14, 1 },
+ { "Clause_22_ExT", 13, 1 },
+ { "MAC_PORT_MTIP_KR4_CONTROL_2", 0x3541c, 0 },
+ { "MAC_PORT_MTIP_KR4_STATUS_2", 0x35420, 0 },
+ { "Device_present", 14, 2 },
+ { "Transmit_fault", 11, 1 },
+ { "Receive_fault", 10, 1 },
+ { "100GBase_R_capable", 5, 1 },
+ { "40GBase_R_capable", 4, 1 },
+ { "10GBase_T_capable", 3, 1 },
+ { "10GBase_W_capable", 2, 1 },
+ { "10GBase_x_capable", 1, 1 },
+ { "10GBase_R_capable", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_PKG_ID0", 0x35438, 0 },
+ { "MAC_PORT_MTIP_KR4_PKG_ID1", 0x3543c, 0 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_STATUS_1", 0x35480, 0 },
+ { "RX_link_status", 12, 1 },
+ { "High_BER", 1, 1 },
+ { "Block_lock", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_STATUS_2", 0x35484, 0 },
+ { "Latched_bl_lk", 15, 1 },
+ { "Latched_hg_br", 14, 1 },
+ { "Ber_cnt", 8, 6 },
+ { "Err_bl_cnt", 0, 8 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_TEST_CONTROL", 0x354a8, 0 },
+ { "TX_TP_EN", 3, 1 },
+ { "RX_TP_EN", 2, 1 },
+ { "MAC_PORT_MTIP_KR4_BASE_R_TEST_ERR_CNT", 0x354ac, 0 },
+ { "MAC_PORT_MTIP_KR4_BER_HIGH_ORDER_CNT", 0x354b0, 0 },
+ { "MAC_PORT_MTIP_KR4_ERR_BLK_HIGH_ORDER_CNT", 0x354b4, 0 },
+ { "HI_ORDER_CNT_EN", 15, 1 },
+ { "ERR_BLK_CNTR", 0, 14 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_1", 0x354c8, 0 },
+ { "LANE_ALIGN_STATUS", 12, 1 },
+ { "LANE_3_BLK_LCK", 3, 1 },
+ { "LANE_2_BLK_LC32_6431K", 2, 1 },
+ { "LANE_1_BLK_LCK", 1, 1 },
+ { "LANE_0_BLK_LCK", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_2", 0x354cc, 0 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_3", 0x354d0, 0 },
+ { "LANE_3_ALIGN_MRKR_LCK", 3, 1 },
+ { "LANE_2_ALIGN_MRKR_LCK", 2, 1 },
+ { "LANE_1_ALIGN_MRKR_LCK", 1, 1 },
+ { "LANE_0_ALIGN_MRKR_LCK", 0, 1 },
+ { "MAC_PORT_MTIP_KR4_MULTI_LANE_ALIGN_STATUS_4", 0x354d4, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_0", 0x35720, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_1", 0x35724, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_2", 0x35728, 0 },
+ { "MAC_PORT_MTIP_KR4_BIP_ERR_CNT_LANE_3", 0x3572c, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_0_MAPPING", 0x35a40, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_1_MAPPING", 0x35a44, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_2_MAPPING", 0x35a48, 0 },
+ { "MAC_PORT_MTIP_KR4_LANE_3_MAPPING", 0x35a4c, 0 },
+ { "MAC_PORT_MTIP_KR4_SCRATCH", 0x35af0, 0 },
+ { "MAC_PORT_MTIP_KR4_CORE_REVISION", 0x35af4, 0 },
+ { "MAC_PORT_MTIP_KR4_VL_INTVL", 0x35af8, 0 },
+ { "MAC_PORT_MTIP_KR4_TX_LANE_THRESH", 0x35afc, 0 },
+ { "MAC_PORT_MTIP_CR4_CONTROL_1", 0x35b00, 0 },
+ { "Reset", 15, 1 },
+ { "Loopback", 14, 1 },
+ { "Speed_selection", 13, 1 },
+ { "Low_power", 11, 1 },
+ { "Speed_selection1", 6, 1 },
+ { "Speed_selection2", 2, 4 },
+ { "MAC_PORT_MTIP_CR4_STATUS_1", 0x35b04, 0 },
+ { "Fault", 7, 1 },
+ { "RX_Link_Status", 2, 1 },
+ { "Low_power_ability", 1, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICE_ID0", 0x35b08, 0 },
+ { "MAC_PORT_MTIP_CR4_DEVICE_ID1", 0x35b0c, 0 },
+ { "MAC_PORT_MTIP_CR4_SPEED_ABILITY", 0x35b10, 0 },
+ { "100G_capable", 8, 1 },
+ { "40G_capable", 7, 1 },
+ { "10PASS_TS_2Base_TL_capable", 1, 1 },
+ { "10G_capable", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICES_IN_PKG1", 0x35b14, 0 },
+ { "TC_present", 6, 1 },
+ { "DTE_xS_present", 5, 1 },
+ { "PHY_xS_present", 4, 1 },
+ { "PCS_present", 3, 1 },
+ { "WIS_present", 2, 1 },
+ { "PMD_PMA_present", 1, 1 },
+ { "Clause22reg_present", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_DEVICES_IN_PKG2", 0x35b18, 0 },
+ { "VSD_2_PRESENT", 15, 1 },
+ { "VSD_1_PRESENT", 14, 1 },
+ { "Clause22_ExT_Present", 13, 1 },
+ { "MAC_PORT_MTIP_CR4_CONTROL_2", 0x35b1c, 0 },
+ { "MAC_PORT_MTIP_CR4_STATUS_2", 0x35b20, 0 },
+ { "Device_present", 14, 2 },
+ { "Transmit_fault", 11, 1 },
+ { "Receive_fault", 10, 1 },
+ { "100GBase_R_capable", 5, 1 },
+ { "40GBase_R_capable", 4, 1 },
+ { "10GBase_T_capable", 3, 1 },
+ { "10GBase_W_capable", 2, 1 },
+ { "10GBase_x_capable", 1, 1 },
+ { "10GBase_R_capable", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_PKG_ID0", 0x35b38, 0 },
+ { "MAC_PORT_MTIP_CR4_PKG_ID1", 0x35b3c, 0 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_STATUS_1", 0x35b80, 0 },
+ { "RX_Link_STAT", 12, 1 },
+ { "High_BER", 1, 1 },
+ { "Block_Lock", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_STATUS_2", 0x35b84, 0 },
+ { "Latched_block_lock", 15, 1 },
+ { "Latched_high_BER", 14, 1 },
+ { "BER_counter", 8, 6 },
+ { "Errored_blocks_cntr", 0, 8 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_TEST_CONTROL", 0x35ba8, 0 },
+ { "Scrambled_ID_TP_EN", 7, 1 },
+ { "MAC_PORT_MTIP_CR4_BASE_R_TEST_ERR_CNT", 0x35bac, 0 },
+ { "MAC_PORT_MTIP_CR4_BER_HIGH_ORDER_CNT", 0x35bb0, 0 },
+ { "MAC_PORT_MTIP_CR4_ERR_BLK_HIGH_ORDER_CNT", 0x35bb4, 0 },
+ { "Hi_ORDER_CNT_Present", 15, 1 },
+ { "ERR_BLKS_CNTR", 0, 14 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_1", 0x35bc8, 0 },
+ { "LANE_ALIGN_STAT", 12, 1 },
+ { "Lane_7_blck_lck", 7, 1 },
+ { "Lane_6_blck_lck", 6, 1 },
+ { "Lane_5_blck_lck", 5, 1 },
+ { "Lane_4_blck_lck", 4, 1 },
+ { "Lane_3_blck_lck", 3, 1 },
+ { "Lane_2_blck_lck", 2, 1 },
+ { "Lane_1_blck_lck", 1, 1 },
+ { "Lane_0_blck_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_2", 0x35bcc, 0 },
+ { "Lane_19_blck_lck", 11, 1 },
+ { "Lane_18_blck_lck", 10, 1 },
+ { "Lane_17_blck_lck", 9, 1 },
+ { "Lane_16_blck_lck", 8, 1 },
+ { "Lane_15_blck_lck", 7, 1 },
+ { "Lane_14_blck_lck", 6, 1 },
+ { "Lane_13_blck_lck", 5, 1 },
+ { "Lane_12_blck_lck", 4, 1 },
+ { "Lane_11_blck_lck", 3, 1 },
+ { "Lane_10_blck_lck", 2, 1 },
+ { "Lane_9_blck_lck", 1, 1 },
+ { "Lane_8_blck_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_3", 0x35bd0, 0 },
+ { "Lane7_algn_mrkr_lck", 7, 1 },
+ { "Lane6_algn_mrkr_lck", 6, 1 },
+ { "Lane5_algn_mrkr_lck", 5, 1 },
+ { "Lane4_algn_mrkr_lck", 4, 1 },
+ { "Lane3_algn_mrkr_lck", 3, 1 },
+ { "Lane2_algn_mrkr_lck", 2, 1 },
+ { "Lane1_algn_mrkr_lck", 1, 1 },
+ { "Lane0_algn_mrkr_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_MULTI_LANE_ALIGN_STATUS_4", 0x35bd4, 0 },
+ { "Lane19_algn_mrkr_lck", 11, 1 },
+ { "Lane18_algn_mrkr_lck", 10, 1 },
+ { "Lane17_algn_mrkr_lck", 9, 1 },
+ { "Lane16_algn_mrkr_lck", 8, 1 },
+ { "Lane15_algn_mrkr_lck", 7, 1 },
+ { "Lane14_algn_mrkr_lck", 6, 1 },
+ { "Lane13_algn_mrkr_lck", 5, 1 },
+ { "Lane12_algn_mrkr_lck", 4, 1 },
+ { "Lane11_algn_mrkr_lck", 3, 1 },
+ { "Lane10_algn_mrkr_lck", 2, 1 },
+ { "Lane9_algn_mrkr_lck", 1, 1 },
+ { "Lane8_algn_mrkr_lck", 0, 1 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_0", 0x35e20, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_1", 0x35e24, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_2", 0x35e28, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_3", 0x35e2c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_4", 0x35e30, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_5", 0x35e34, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_6", 0x35e38, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_7", 0x35e3c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_8", 0x35e40, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_9", 0x35e44, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_10", 0x35e48, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_11", 0x35e4c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_12", 0x35e50, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_13", 0x35e54, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_14", 0x35e58, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_15", 0x35e5c, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_16", 0x35e60, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_17", 0x35e64, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_18", 0x35e68, 0 },
+ { "MAC_PORT_MTIP_CR4_BIP_ERR_CNTLANE_19", 0x35e6c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_0_MAPPING", 0x36140, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_1_MAPPING", 0x36144, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_2_MAPPING", 0x36148, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_3_MAPPING", 0x3614c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_4_MAPPING", 0x36150, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_5_MAPPING", 0x36154, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_6_MAPPING", 0x36158, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_7_MAPPING", 0x3615c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_8_MAPPING", 0x36160, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_9_MAPPING", 0x36164, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_10_MAPPING", 0x36168, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_11_MAPPING", 0x3616c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_12_MAPPING", 0x36170, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_13_MAPPING", 0x36174, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_14_MAPPING", 0x36178, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_15_MAPPING", 0x3617c, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_16_MAPPING", 0x36180, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_17_MAPPING", 0x36184, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_18_MAPPING", 0x36188, 0 },
+ { "MAC_PORT_MTIP_CR4_LANE_19_MAPPING", 0x3618c, 0 },
+ { "MAC_PORT_MTIP_CR4_SCRATCH", 0x361f0, 0 },
+ { "MAC_PORT_MTIP_CR4_CORE_REVISION", 0x361f4, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_CONTROL", 0x36200, 0 },
+ { "RS_FEC_Bypass_Error_Indication", 1, 1 },
+ { "RS_FEC_Bypass_Correction", 0, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_STATUS", 0x36204, 0 },
+ { "RS_FEC_PCS_align_status", 15, 1 },
+ { "fec_align_status", 14, 1 },
+ { "RS_FEC_high_SER", 2, 1 },
+ { "RS_FEC_bypass_error_indication_ability", 1, 1 },
+ { "RS_FEC_bypass_correction_ability", 0, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_CCW_LO", 0x36208, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_CCW_HI", 0x3620c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_NCCW_LO", 0x36210, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_NCCW_HI", 0x36214, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_LANEMAPRS_FEC_NCCW_HI", 0x36218, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR0_LO", 0x36228, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR0_HI", 0x3622c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR1_LO", 0x36230, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR1_HI", 0x36234, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR2_LO", 0x36238, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR2_HI", 0x3623c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR3_LO", 0x36240, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_SYMBLERR3_HI", 0x36244, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_CONTROL", 0x36400, 0 },
+ { "RS_FEC_enabled_status", 15, 1 },
+ { "RS_FEC_Enable", 2, 1 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_INFO_1", 0x36404, 0 },
+ { "deskew_empty", 12, 4 },
+ { "fec_align_status_lh", 10, 1 },
+ { "tx_dp_overflow", 9, 1 },
+ { "rx_dp_overflow", 8, 1 },
+ { "tx_datapath_restart", 7, 1 },
+ { "rx_datapath_restart", 6, 1 },
+ { "marker_check_restart", 5, 1 },
+ { "fec_align_status_ll", 4, 1 },
+ { "amps_lock", 0, 4 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_INFO_2", 0x36408, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_REVISION", 0x3640c, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_KEY", 0x36410, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_SYMBOLS", 0x36414, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_PATTERN", 0x36418, 0 },
+ { "MAC_PORT_MTIP_RS_FEC_VENDOR_TX_TEST_TRIGGER", 0x3641c, 0 },
+ { "MAC_PORT_MTIP_FEC_ABILITY", 0x36618, 0 },
+ { "BASE_R_FEC_Error_Indication_Ability", 1, 1 },
+ { "BASE_R_FEC_Ability", 0, 1 },
+ { "MAC_PORT_FEC_CONTROL", 0x3661c, 0 },
+ { "fec_en_err_ind", 1, 1 },
+ { "fec_en", 0, 1 },
+ { "MAC_PORT_FEC_STATUS", 0x36620, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC0_CERR_CNT_0", 0x36624, 0 },
+ { "MAC_PORT_MTIP_FEC0_CERR_CNT_1", 0x36628, 0 },
+ { "MAC_PORT_MTIP_FEC0_NCERR_CNT_0", 0x3662c, 0 },
+ { "MAC_PORT_MTIP_FEC0_NCERR_CNT_1", 0x36630, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS1", 0x36664, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC1_CERR_CNT_0", 0x36668, 0 },
+ { "MAC_PORT_MTIP_FEC1_CERR_CNT_1", 0x3666c, 0 },
+ { "MAC_PORT_MTIP_FEC1_NCERR_CNT_0", 0x36670, 0 },
+ { "MAC_PORT_MTIP_FEC1_NCERR_CNT_1", 0x36674, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS2", 0x366a8, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC2_CERR_CNT_0", 0x366ac, 0 },
+ { "MAC_PORT_MTIP_FEC2_CERR_CNT_1", 0x366b0, 0 },
+ { "MAC_PORT_MTIP_FEC2_NCERR_CNT_0", 0x366b4, 0 },
+ { "MAC_PORT_MTIP_FEC2_NCERR_CNT_1", 0x366b8, 0 },
+ { "MAC_PORT_MTIP_FEC_STATUS3", 0x366ec, 0 },
+ { "FEC_LOCKED0", 1, 4 },
+ { "FEC_LOCKED", 0, 1 },
+ { "MAC_PORT_MTIP_FEC3_CERR_CNT_0", 0x366f0, 0 },
+ { "MAC_PORT_MTIP_FEC3_CERR_CNT_1", 0x366f4, 0 },
+ { "MAC_PORT_MTIP_FEC3_NCERR_CNT_0", 0x366f8, 0 },
+ { "MAC_PORT_MTIP_FEC3_NCERR_CNT_1", 0x366fc, 0 },
+ { "MAC_PORT_BEAN_CTL", 0x36c00, 0 },
+ { "AN_RESET", 15, 1 },
+ { "EXT_NXP_CTRL", 13, 1 },
+ { "BEAN_EN", 12, 1 },
+ { "RESTART_BEAN", 9, 1 },
+ { "MAC_PORT_BEAN_STATUS", 0x36c04, 0 },
+ { "PDF", 9, 1 },
+ { "EXT_NXP_STATUS", 7, 1 },
+ { "PAGE_RCVD", 6, 1 },
+ { "BEAN_COMPLETE", 5, 1 },
+ { "REM_FAULT_STATUS", 4, 1 },
+ { "BEAN_ABILITY", 3, 1 },
+ { "LINK_STATUS", 2, 1 },
+ { "LP_BEAN_ABILITY", 0, 1 },
+ { "MAC_PORT_BEAN_ABILITY_0", 0x36c08, 0 },
+ { "NXP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "REM_FAULT", 13, 1 },
+ { "PAUSE_ABILITY", 10, 3 },
+ { "ECHO_NONCE", 5, 5 },
+ { "SELECTOR", 0, 5 },
+ { "MAC_PORT_BEAN_ABILITY_1", 0x36c0c, 0 },
+ { "TECH_ABILITY_1", 5, 11 },
+ { "TX_NONCE", 0, 5 },
+ { "MAC_PORT_BEAN_ABILITY_2", 0x36c10, 0 },
+ { "T5_FEC_ABILITY", 14, 2 },
+ { "TECH_ABILITY_2", 0, 14 },
+ { "MAC_PORT_BEAN_REM_ABILITY_0", 0x36c14, 0 },
+ { "NXP", 15, 1 },
+ { "ACK", 14, 1 },
+ { "REM_FAULT", 13, 1 },
+ { "PAUSE_ABILITY", 10, 3 },
+ { "ECHO_NONCE", 5, 5 },
+ { "SELECTOR", 0, 5 },
+ { "MAC_PORT_BEAN_REM_ABILITY_1", 0x36c18, 0 },
+ { "TECH_ABILITY_1", 5, 11 },
+ { "TX_NONCE", 0, 5 },
+ { "MAC_PORT_BEAN_REM_ABILITY_2", 0x36c1c, 0 },
+ { "T5_FEC_ABILITY", 14, 2 },
+ { "TECH_ABILITY_2", 0, 14 },
+ { "MAC_PORT_BEAN_MS_COUNT", 0x36c20, 0 },
+ { "MAC_PORT_BEAN_XNP_0", 0x36c24, 0 },
+ { "XNP", 15, 1 },
+ { "ACKNOWLEDGE", 14, 1 },
+ { "MP", 13, 1 },
+ { "ACK2", 12, 1 },
+ { "TOGGLE", 11, 1 },
+ { "MU", 0, 11 },
+ { "MAC_PORT_BEAN_XNP_1", 0x36c28, 0 },
+ { "MAC_PORT_BEAN_XNP_2", 0x36c2c, 0 },
+ { "MAC_PORT_LP_BEAN_XNP_0", 0x36c30, 0 },
+ { "XNP", 15, 1 },
+ { "ACKNOWLEDGE", 14, 1 },
+ { "MP", 13, 1 },
+ { "ACK2", 12, 1 },
+ { "TOGGLE", 11, 1 },
+ { "MU", 0, 11 },
+ { "MAC_PORT_LP_BEAN_XNP_1", 0x36c34, 0 },
+ { "MAC_PORT_LP_BEAN_XNP_2", 0x36c38, 0 },
+ { "MAC_PORT_BEAN_ETH_STATUS", 0x36c3c, 0 },
+ { "100GCR4", 11, 1 },
+ { "100GKR4", 10, 1 },
+ { "100GKP4", 9, 1 },
+ { "100GCR10", 8, 1 },
+ { "40GCR4", 6, 1 },
+ { "40GKR4", 5, 1 },
+ { "FEC", 4, 1 },
+ { "10GKR", 3, 1 },
+ { "10GKX4", 2, 1 },
+ { "1GKX", 1, 1 },
+ { "MAC_PORT_AE_RX_COEF_REQ", 0x36a00, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT", 0x36a04, 0 },
+ { "T5_AE0_RXSTAT_RDY", 15, 1 },
+ { "T5_AE0_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE0_RXSTAT_FEC", 13, 1 },
+ { "T5_AE0_RXSTAT_TF", 12, 1 },
+ { "T5_AE0_RXSTAT_C3", 6, 2 },
+ { "T5_AE0_RXSTAT_C2", 4, 2 },
+ { "T5_AE0_RXSTAT_C1", 2, 2 },
+ { "T5_AE0_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ", 0x36a08, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT", 0x36a0c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE", 0x36a10, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL", 0x36a14, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL", 0x36a18, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE", 0x36a1c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_1", 0x36a20, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_1", 0x36a24, 0 },
+ { "T5_AE1_RXSTAT_RDY", 15, 1 },
+ { "T5_AE1_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE1_RXSTAT_FEC", 13, 1 },
+ { "T5_AE1_RXSTAT_TF", 12, 1 },
+ { "T5_AE1_RXSTAT_C3", 6, 2 },
+ { "T5_AE1_RXSTAT_C2", 4, 2 },
+ { "T5_AE1_RXSTAT_C1", 2, 2 },
+ { "T5_AE1_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_1", 0x36a28, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_1", 0x36a2c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_1", 0x36a30, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_1", 0x36a34, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_1", 0x36a38, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_1", 0x36a3c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_2", 0x36a40, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_2", 0x36a44, 0 },
+ { "T5_AE2_RXSTAT_RDY", 15, 1 },
+ { "T5_AE2_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE2_RXSTAT_FEC", 13, 1 },
+ { "T5_AE2_RXSTAT_TF", 12, 1 },
+ { "T5_AE2_RXSTAT_C3", 6, 2 },
+ { "T5_AE2_RXSTAT_C2", 4, 2 },
+ { "T5_AE2_RXSTAT_C1", 2, 2 },
+ { "T5_AE2_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_2", 0x36a48, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_2", 0x36a4c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_2", 0x36a50, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_2", 0x36a54, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_2", 0x36a58, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_2", 0x36a5c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_RX_COEF_REQ_3", 0x36a60, 0 },
+ { "RXREQ_CPRE", 13, 1 },
+ { "RXREQ_CINIT", 12, 1 },
+ { "T5_RXREQ_C3", 6, 2 },
+ { "T5_RXREQ_C2", 4, 2 },
+ { "T5_RXREQ_C1", 2, 2 },
+ { "T5_RXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_RX_COEF_STAT_3", 0x36a64, 0 },
+ { "T5_AE3_RXSTAT_RDY", 15, 1 },
+ { "T5_AE3_RXSTAT_LSNA", 14, 1 },
+ { "T5_AE3_RXSTAT_FEC", 13, 1 },
+ { "T5_AE3_RXSTAT_TF", 12, 1 },
+ { "T5_AE3_RXSTAT_C3", 6, 2 },
+ { "T5_AE3_RXSTAT_C2", 4, 2 },
+ { "T5_AE3_RXSTAT_C1", 2, 2 },
+ { "T5_AE3_RXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_REQ_3", 0x36a68, 0 },
+ { "TXREQ_CPRE", 13, 1 },
+ { "TXREQ_CINIT", 12, 1 },
+ { "TXREQ_FEC", 11, 1 },
+ { "T5_TXREQ_C3", 6, 2 },
+ { "T5_TXREQ_C2", 4, 2 },
+ { "T5_TXREQ_C1", 2, 2 },
+ { "T5_TXREQ_C0", 0, 2 },
+ { "MAC_PORT_AE_TX_COEF_STAT_3", 0x36a6c, 0 },
+ { "TXSTAT_RDY", 15, 1 },
+ { "T5_TXSTAT_C3", 6, 2 },
+ { "T5_TXSTAT_C2", 4, 2 },
+ { "T5_TXSTAT_C1", 2, 2 },
+ { "T5_TXSTAT_C0", 0, 2 },
+ { "MAC_PORT_AE_REG_MODE_3", 0x36a70, 0 },
+ { "SET_WAIT_TIMER", 13, 2 },
+ { "C2_C3_STATE_SEL", 12, 1 },
+ { "FFE4_EN", 11, 1 },
+ { "FEC_REQUEST", 10, 1 },
+ { "FEC_SUPPORTED", 9, 1 },
+ { "TX_FIXED", 8, 1 },
+ { "AET_RSVD", 7, 1 },
+ { "AET_ENABLE", 6, 1 },
+ { "MAN_DEC", 4, 2 },
+ { "MANUAL_RDY", 3, 1 },
+ { "MWT_DISABLE", 2, 1 },
+ { "MDIO_OVR", 1, 1 },
+ { "STICKY_MODE", 0, 1 },
+ { "MAC_PORT_AE_PRBS_CTL_3", 0x36a74, 0 },
+ { "PRBS_CHK_ERRCNT", 8, 8 },
+ { "PRBS_SYNCCNT", 5, 3 },
+ { "PRBS_CHK_SYNC", 4, 1 },
+ { "PRBS_CHK_RST", 3, 1 },
+ { "PRBS_CHK_OFF", 2, 1 },
+ { "PRBS_GEN_FRCERR", 1, 1 },
+ { "PRBS_GEN_OFF", 0, 1 },
+ { "MAC_PORT_AE_FSM_CTL_3", 0x36a78, 0 },
+ { "CIN_ENABLE", 15, 1 },
+ { "FSM_TR_LCL", 14, 1 },
+ { "FSM_GDMRK", 11, 3 },
+ { "FSM_BADMRK", 8, 3 },
+ { "FSM_TR_FAIL", 7, 1 },
+ { "FSM_TR_ACT", 6, 1 },
+ { "FSM_FRM_LCK", 5, 1 },
+ { "FSM_TR_COMP", 4, 1 },
+ { "MC_RX_RDY", 3, 1 },
+ { "FSM_CU_DIS", 2, 1 },
+ { "FSM_TR_RST", 1, 1 },
+ { "FSM_TR_EN", 0, 1 },
+ { "MAC_PORT_AE_FSM_STATE_3", 0x36a7c, 0 },
+ { "CC2FSM_STATE", 13, 3 },
+ { "CC1FSM_STATE", 10, 3 },
+ { "CC0FSM_STATE", 7, 3 },
+ { "FLFSM_STATE", 4, 3 },
+ { "TFSM_STATE", 0, 3 },
+ { "MAC_PORT_AE_TX_DIS", 0x36a80, 0 },
+ { "MAC_PORT_AE_KR_CTRL", 0x36a84, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET", 0x36a88, 0 },
+ { "MAC_PORT_AE_KR_STATUS", 0x36a8c, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_1", 0x36a90, 0 },
+ { "MAC_PORT_AE_KR_CTRL_1", 0x36a94, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_1", 0x36a98, 0 },
+ { "MAC_PORT_AE_KR_STATUS_1", 0x36a9c, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_2", 0x36aa0, 0 },
+ { "MAC_PORT_AE_KR_CTRL_2", 0x36aa4, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_2", 0x36aa8, 0 },
+ { "MAC_PORT_AE_KR_STATUS_2", 0x36aac, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AE_TX_DIS_3", 0x36ab0, 0 },
+ { "MAC_PORT_AE_KR_CTRL_3", 0x36ab4, 0 },
+ { "Training_Enable", 1, 1 },
+ { "Restart_Training", 0, 1 },
+ { "MAC_PORT_AE_RX_SIGDET_3", 0x36ab8, 0 },
+ { "MAC_PORT_AE_KR_STATUS_3", 0x36abc, 0 },
+ { "Training_Failure", 3, 1 },
+ { "Training", 2, 1 },
+ { "Frame_Lock", 1, 1 },
+ { "RX_Trained", 0, 1 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_0", 0x36b00, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_0", 0x36b04, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_0", 0x36b08, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_0", 0x36b0c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_0", 0x36b10, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_20", 0x36b14, 0 },
+ { "MAC_PORT_AET_LIMITS0", 0x36b18, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_1", 0x36b20, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_1", 0x36b24, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_1", 0x36b28, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_1", 0x36b2c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_1", 0x36b30, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_21", 0x36b34, 0 },
+ { "MAC_PORT_AET_LIMITS1", 0x36b38, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_2", 0x36b40, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_2", 0x36b44, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_2", 0x36b48, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_2", 0x36b4c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_2", 0x36b50, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_22", 0x36b54, 0 },
+ { "MAC_PORT_AET_LIMITS2", 0x36b58, 0 },
+ { "MAC_PORT_AET_STAGE_CONFIGURATION_3", 0x36b60, 0 },
+ { "INIT_METH", 12, 4 },
+ { "INIT_CNT", 8, 4 },
+ { "EN_ZFE", 7, 1 },
+ { "EN_GAIN_TOG", 6, 1 },
+ { "EN_AI_N0", 5, 1 },
+ { "EN_H1T_EQ", 3, 1 },
+ { "H1TEQ_GOAL", 0, 3 },
+ { "MAC_PORT_AET_SIGNAL_LOSS_DETECTION_3", 0x36b64, 0 },
+ { "FEC_CNV", 15, 1 },
+ { "EN_RETRY", 14, 1 },
+ { "DPC_METH", 12, 2 },
+ { "EN_P2", 11, 1 },
+ { "GAIN_TH", 6, 5 },
+ { "EN_SD_TH", 5, 1 },
+ { "EN_AMIN_TH", 4, 1 },
+ { "AMIN_TH", 0, 4 },
+ { "MAC_PORT_AET_ZFE_LIMITS_3", 0x36b68, 0 },
+ { "ACC_LIM", 8, 4 },
+ { "CNV_LIM", 4, 4 },
+ { "TOG_LIM", 0, 4 },
+ { "MAC_PORT_AET_BOOTSTRAP_LOOKUP_TABLE_3", 0x36b6c, 0 },
+ { "BOOT_LUT7", 12, 4 },
+ { "BOOT_LUT5", 8, 4 },
+ { "BOOT_LUT45", 4, 4 },
+ { "BOOT_LUT0123", 2, 2 },
+ { "BOOT_DEC_C0", 1, 1 },
+ { "MAC_PORT_AET_STATUS_3", 0x36b70, 0 },
+ { "CTRL_STAT", 8, 5 },
+ { "NEU_STATE", 4, 4 },
+ { "CTRL_STATE", 0, 4 },
+ { "MAC_PORT_AET_STATUS_23", 0x36b74, 0 },
+ { "MAC_PORT_AET_LIMITS3", 0x36b78, 0 },
+ { "MAC_PORT_ANALOG_TEST_MUX", 0x37814, 0 },
+ { "MAC_PORT_PLLREFSEL_CONTROL", 0x37854, 0 },
+ { "MAC_PORT_REFISINK_CONTROL", 0x37858, 0 },
+ { "MAC_PORT_REFISRC_CONTROL", 0x3785c, 0 },
+ { "MAC_PORT_REFVREG_CONTROL", 0x37860, 0 },
+ { "MAC_PORT_VBGENDOC_CONTROL", 0x37864, 0 },
+ { "BGCLKSEL", 2, 1 },
+ { "VBGENDOC", 0, 2 },
+ { "MAC_PORT_VREFTUNE_CONTROL", 0x37868, 0 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_CONTROL", 0x37880, 0 },
+ { "FRCCAL_COMP", 6, 1 },
+ { "FRCERR", 5, 1 },
+ { "CAL_BISTENAB", 4, 1 },
+ { "RCAL_RESET", 0, 1 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_1", 0x37884, 0 },
+ { "RCALBENAB", 3, 1 },
+ { "RCALBUSY", 2, 1 },
+ { "RCALERR", 1, 1 },
+ { "RCALCOMP", 0, 1 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_2", 0x37888, 0 },
+ { "MAC_PORT_IMPEDENCE_CALIBRATION_STATUS_3", 0x3788c, 0 },
+ { "MAC_PORT_INEQUALITY_CONTROL_AND_RESULT", 0x378c0, 0 },
+ { "ISGT", 7, 1 },
+ { "ISLT", 6, 1 },
+ { "ISEQ", 5, 1 },
+ { "ISVAL", 3, 2 },
+ { "GTORLT", 1, 2 },
+ { "INEQ", 0, 1 },
+ { "MAC_PORT_INEQUALITY_LOW_LIMIT", 0x378c4, 0 },
+ { "MAC_PORT_INEQUALITY_LOW_LIMIT_MASK", 0x378c8, 0 },
+ { "MAC_PORT_INEQUALITY_HIGH_LIMIT", 0x378cc, 0 },
+ { "MAC_PORT_INEQUALITY_HIGH_LIMIT_MASK", 0x378d0, 0 },
+ { "MAC_PORT_MACRO_TEST_CONTROL_6", 0x378e8, 0 },
+ { "JTAGMD", 3, 1 },
+ { "RXACMODE", 2, 1 },
+ { "HSSACJPC", 1, 1 },
+ { "HSSACJAC", 0, 1 },
+ { "MAC_PORT_MACRO_TEST_CONTROL_5", 0x378ec, 0 },
+ { "REFVALIDD", 6, 1 },
+ { "REFVALIDC", 5, 1 },
+ { "REFVALIDB", 4, 1 },
+ { "REFVALIDA", 3, 1 },
+ { "REFSELRESET", 2, 1 },
+ { "SOFTRESET", 1, 1 },
+ { "MACROTEST", 0, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_0", 0x37b00, 0 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_1", 0x37b04, 0 },
+ { "LDET", 4, 1 },
+ { "CCERR", 3, 1 },
+ { "CCCMP", 2, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_2", 0x37b08, 0 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_3", 0x37b0c, 0 },
+ { "FMIN", 3, 1 },
+ { "FMAX", 2, 1 },
+ { "CVHOLD", 1, 1 },
+ { "MAC_PORT_PLLA_VCO_COARSE_CALIBRATION_4", 0x37b10, 0 },
+ { "CMETH", 2, 1 },
+ { "RECAL", 1, 1 },
+ { "CCLD", 0, 1 },
+ { "MAC_PORT_PLLA_POWER_CONTROL", 0x37b24, 0 },
+ { "SPWRENA", 1, 1 },
+ { "NPWRENA", 0, 1 },
+ { "MAC_PORT_PLLA_CHARGE_PUMP_CONTROL", 0x37b28, 0 },
+ { "MAC_PORT_PLLA_PLL_MICELLANEOUS_CONTROL", 0x37b38, 0 },
+ { "MAC_PORT_PLLA_PCLK_CONTROL", 0x37b3c, 0 },
+ { "SPEDIV", 3, 5 },
+ { "PCKSEL", 0, 3 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_CONTROL", 0x37b40, 0 },
+ { "EMIL", 2, 1 },
+ { "EMID", 1, 1 },
+ { "EMIS", 0, 1 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_1", 0x37b44, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_2", 0x37b48, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_3", 0x37b4c, 0 },
+ { "MAC_PORT_PLLA_EYE_METRICS_INTERVAL_LIMIT_4", 0x37b50, 0 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_4", 0x37bf0, 0 },
+ { "PLLDIVA", 4, 1 },
+ { "REFDIV", 0, 4 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_3", 0x37bf4, 0 },
+ { "RESYNC", 6, 1 },
+ { "RXCLKSEL", 5, 1 },
+ { "FRCBAND", 4, 1 },
+ { "PLLBYP", 3, 1 },
+ { "VCOSEL", 1, 1 },
+ { "DIVSEL8", 0, 1 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_2", 0x37bf8, 0 },
+ { "MAC_PORT_PLLA_MACRO_TEST_CONTROL_1", 0x37bfc, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_0", 0x37c00, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_1", 0x37c04, 0 },
+ { "LDET", 4, 1 },
+ { "CCERR", 3, 1 },
+ { "CCCMP", 2, 1 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_2", 0x37c08, 0 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_3", 0x37c0c, 0 },
+ { "FMIN", 3, 1 },
+ { "FMAX", 2, 1 },
+ { "CVHOLD", 1, 1 },
+ { "MAC_PORT_PLLB_VCO_COARSE_CALIBRATION_4", 0x37c10, 0 },
+ { "CMETH", 2, 1 },
+ { "RECAL", 1, 1 },
+ { "CCLD", 0, 1 },
+ { "MAC_PORT_PLLB_POWER_CONTROL", 0x37c24, 0 },
+ { "SPWRENA", 1, 1 },
+ { "NPWRENA", 0, 1 },
+ { "MAC_PORT_PLLB_CHARGE_PUMP_CONTROL", 0x37c28, 0 },
+ { "MAC_PORT_PLLB_PLL_MICELLANEOUS_CONTROL", 0x37c38, 0 },
+ { "MAC_PORT_PLLB_PCLK_CONTROL", 0x37c3c, 0 },
+ { "SPEDIV", 3, 5 },
+ { "PCKSEL", 0, 3 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_CONTROL", 0x37c40, 0 },
+ { "EMIL", 2, 1 },
+ { "EMID", 1, 1 },
+ { "EMIS", 0, 1 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_1", 0x37c44, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_2", 0x37c48, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_3", 0x37c4c, 0 },
+ { "MAC_PORT_PLLB_EYE_METRICS_INTERVAL_LIMIT_4", 0x37c50, 0 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_4", 0x37cf0, 0 },
+ { "PLLDIVA", 4, 1 },
+ { "REFDIV", 0, 4 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_3", 0x37cf4, 0 },
+ { "RESYNC", 6, 1 },
+ { "RXCLKSEL", 5, 1 },
+ { "FRCBAND", 4, 1 },
+ { "PLLBYP", 3, 1 },
+ { "VCOSEL", 1, 1 },
+ { "DIVSEL8", 0, 1 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_2", 0x37cf8, 0 },
+ { "MAC_PORT_PLLB_MACRO_TEST_CONTROL_1", 0x37cfc, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_CONFIGURATION_MODE", 0x37000, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TEST_CONTROL", 0x37004, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_COEFFICIENT_CONTROL", 0x37008, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DRIVER_MODE_CONTROL", 0x3700c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x37010, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x37014, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x37018, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3701c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_0_COEFFICIENT", 0x37020, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_1_COEFFICIENT", 0x37024, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_2_COEFFICIENT", 0x37028, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_3_COEFFICIENT", 0x3702c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_POLARITY", 0x37034, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x37038, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3703c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x37040, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x37044, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x37048, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3704c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_APPLIED_TUNE_REGISTER", 0x37050, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x37058, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_4X_SEGMENT_APPLIED", 0x37060, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_2X_SEGMENT_APPLIED", 0x37064, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_1X_SEGMENT_APPLIED", 0x37068, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3706c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x37070, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x37074, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x37078, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3707c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x37080, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x37084, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x37088, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3708c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AZ_CONTROL", 0x3709c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_CONTROL", 0x370a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_OVERRIDE", 0x370a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_APPLIED", 0x370a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_DCC_TIME_OUT", 0x370ac, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SIGN_OVERRIDE", 0x370c0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x370c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x370cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x370d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x370d8, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x370dc, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x370e0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_5", 0x370ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_4", 0x370f0, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_3", 0x370f4, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_2", 0x370f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_MACRO_TEST_CONTROL_1", 0x370fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x34000, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x34008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x34010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_INIT_EXTENDED", 0x34018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x34020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_INIT_EXTENDED", 0x34028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x34030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x34038, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x34040, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_INIT_EXTENDED", 0x34048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x34050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3405c, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x34060, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x34068, 0 },
+ { "MAC_PORT_TX_LINKA_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x34070, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_CONFIGURATION_MODE", 0x37100, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TEST_CONTROL", 0x37104, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_COEFFICIENT_CONTROL", 0x37108, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DRIVER_MODE_CONTROL", 0x3710c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x37110, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x37114, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x37118, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3711c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_0_COEFFICIENT", 0x37120, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_1_COEFFICIENT", 0x37124, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_2_COEFFICIENT", 0x37128, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_3_COEFFICIENT", 0x3712c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_POLARITY", 0x37134, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x37138, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3713c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x37140, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x37144, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x37148, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3714c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_APPLIED_TUNE_REGISTER", 0x37150, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x37158, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_4X_SEGMENT_APPLIED", 0x37160, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_2X_SEGMENT_APPLIED", 0x37164, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_1X_SEGMENT_APPLIED", 0x37168, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3716c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x37170, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x37174, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x37178, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3717c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x37180, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x37184, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x37188, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3718c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AZ_CONTROL", 0x3719c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_CONTROL", 0x371a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_OVERRIDE", 0x371a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_APPLIED", 0x371a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_DCC_TIME_OUT", 0x371ac, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SIGN_OVERRIDE", 0x371c0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x371c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x371cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x371d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x371d8, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x371dc, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x371e0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_5", 0x371ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_4", 0x371f0, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_3", 0x371f4, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_2", 0x371f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_MACRO_TEST_CONTROL_1", 0x371fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x34000, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x34008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x34010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_INIT_EXTENDED", 0x34018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x34020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_INIT_EXTENDED", 0x34028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x34030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x34038, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x34040, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_INIT_EXTENDED", 0x34048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x34050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3405c, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x34060, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x34068, 0 },
+ { "MAC_PORT_TX_LINKB_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x34070, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_CONFIGURATION_MODE", 0x37400, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TEST_CONTROL", 0x37404, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_COEFFICIENT_CONTROL", 0x37408, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DRIVER_MODE_CONTROL", 0x3740c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x37410, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x37414, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x37418, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3741c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_0_COEFFICIENT", 0x37420, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_1_COEFFICIENT", 0x37424, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_2_COEFFICIENT", 0x37428, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_3_COEFFICIENT", 0x3742c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_POLARITY", 0x37434, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x37438, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3743c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x37440, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x37444, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x37448, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3744c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_APPLIED_TUNE_REGISTER", 0x37450, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x37458, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_4X_SEGMENT_APPLIED", 0x37460, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_2X_SEGMENT_APPLIED", 0x37464, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_1X_SEGMENT_APPLIED", 0x37468, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3746c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x37470, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x37474, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x37478, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3747c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x37480, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x37484, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x37488, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3748c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AZ_CONTROL", 0x3749c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_CONTROL", 0x374a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_OVERRIDE", 0x374a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_APPLIED", 0x374a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_DCC_TIME_OUT", 0x374ac, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SIGN_OVERRIDE", 0x374c0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x374c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x374cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x374d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x374d8, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x374dc, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x374e0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_5", 0x374ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_4", 0x374f0, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_3", 0x374f4, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_2", 0x374f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_MACRO_TEST_CONTROL_1", 0x374fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x34000, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x34008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x34010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_INIT_EXTENDED", 0x34018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x34020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_INIT_EXTENDED", 0x34028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x34030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x34038, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x34040, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_INIT_EXTENDED", 0x34048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x34050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3405c, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x34060, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x34068, 0 },
+ { "MAC_PORT_TX_LINKC_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x34070, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_CONFIGURATION_MODE", 0x37500, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TEST_CONTROL", 0x37504, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_COEFFICIENT_CONTROL", 0x37508, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DRIVER_MODE_CONTROL", 0x3750c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x37510, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x37514, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x37518, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3751c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_0_COEFFICIENT", 0x37520, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_1_COEFFICIENT", 0x37524, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_2_COEFFICIENT", 0x37528, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_3_COEFFICIENT", 0x3752c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_POLARITY", 0x37534, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x37538, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3753c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x37540, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x37544, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x37548, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3754c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_APPLIED_TUNE_REGISTER", 0x37550, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x37558, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_4X_SEGMENT_APPLIED", 0x37560, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_2X_SEGMENT_APPLIED", 0x37564, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_1X_SEGMENT_APPLIED", 0x37568, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3756c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x37570, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x37574, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x37578, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3757c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x37580, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x37584, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x37588, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3758c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AZ_CONTROL", 0x3759c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_CONTROL", 0x375a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_OVERRIDE", 0x375a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_APPLIED", 0x375a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_DCC_TIME_OUT", 0x375ac, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SIGN_OVERRIDE", 0x375c0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x375c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x375cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x375d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x375d8, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x375dc, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x375e0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_5", 0x375ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_4", 0x375f0, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_3", 0x375f4, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_2", 0x375f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_MACRO_TEST_CONTROL_1", 0x375fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x34000, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x34008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x34010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_INIT_EXTENDED", 0x34018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x34020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_INIT_EXTENDED", 0x34028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x34030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x34038, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x34040, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_INIT_EXTENDED", 0x34048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x34050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3405c, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x34060, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x34068, 0 },
+ { "MAC_PORT_TX_LINKD_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x34070, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_CONFIGURATION_MODE", 0x37900, 0 },
+ { "T5_TX_LINKEN", 15, 1 },
+ { "T5_TX_LINKRST", 14, 1 },
+ { "T5_TX_CFGWRT", 13, 1 },
+ { "T5_TX_CFGPTR", 11, 2 },
+ { "T5_TX_CFGEXT", 10, 1 },
+ { "T5_TX_CFGACT", 9, 1 },
+ { "T5_TX_RSYNCC", 8, 1 },
+ { "T5_TX_PLLSEL", 6, 2 },
+ { "T5_TX_RXLOOP", 5, 1 },
+ { "T5_TX_ENFFE4", 4, 1 },
+ { "T5_TX_BWSEL", 2, 2 },
+ { "T5_TX_RTSEL", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TEST_CONTROL", 0x37904, 0 },
+ { "SPSEL", 11, 3 },
+ { "FRCERR", 10, 1 },
+ { "ERROR", 9, 1 },
+ { "SYNC", 8, 1 },
+ { "P7CHK", 5, 1 },
+ { "PRST", 4, 1 },
+ { "TPGMD", 3, 1 },
+ { "TPSEL", 0, 3 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_COEFFICIENT_CONTROL", 0x37908, 0 },
+ { "ZCALOVRD", 8, 1 },
+ { "SASMODE", 7, 1 },
+ { "AEPOL", 6, 1 },
+ { "AESRC", 5, 1 },
+ { "EQMODE", 4, 1 },
+ { "OCOEF", 3, 1 },
+ { "COEFRST", 2, 1 },
+ { "ALOAD", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DRIVER_MODE_CONTROL", 0x3790c, 0 },
+ { "T5DRVHIZ", 5, 1 },
+ { "T5SLEW", 2, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DRIVER_OVERRIDE_CONTROL", 0x37910, 0 },
+ { "T5DCCEN", 4, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCLK_ROTATOR_OVERRIDE", 0x37914, 0 },
+ { "RSTEP", 15, 1 },
+ { "RLOCK", 14, 1 },
+ { "RPOS", 8, 6 },
+ { "DCLKSAM", 7, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_IMPEDANCE_CALIBRATION_OVERRIDE", 0x37918, 0 },
+ { "CALSSTN", 8, 6 },
+ { "CALSSTP", 0, 6 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCLK_DRIFT_TOLERANCE", 0x3791c, 0 },
+ { "DRTOL", 2, 3 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_0_COEFFICIENT", 0x37920, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_1_COEFFICIENT", 0x37924, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_2_COEFFICIENT", 0x37928, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_3_COEFFICIENT", 0x3792c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_POLARITY", 0x37934, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_COMMAND", 0x37938, 0 },
+ { "CPREST", 13, 1 },
+ { "CINIT", 12, 1 },
+ { "SASCMD", 10, 2 },
+ { "C0UPDT", 6, 2 },
+ { "C3UPDT", 4, 2 },
+ { "C2UPDT", 2, 2 },
+ { "C1UPDT", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_ADAPTIVE_EQUALIZATION_STATUS", 0x3793c, 0 },
+ { "C0STAT", 6, 2 },
+ { "C3STAT", 4, 2 },
+ { "C2STAT", 2, 2 },
+ { "C1STAT", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_0_COEFFICIENT_OVERRIDE", 0x37940, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_1_COEFFICIENT_OVERRIDE", 0x37944, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_2_COEFFICIENT_OVERRIDE", 0x37948, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_TAP_3_COEFFICIENT_OVERRIDE", 0x3794c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_APPLIED_TUNE_REGISTER", 0x37950, 0 },
+ { "ATUNEN", 8, 8 },
+ { "ATUNEP", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_ANALOG_DIAGNOSTICS_REGISTER", 0x37958, 0 },
+ { "DCCCOMPINV", 8, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_4X_SEGMENT_APPLIED", 0x37960, 0 },
+ { "AS4X7", 14, 2 },
+ { "AS4X6", 12, 2 },
+ { "AS4X5", 10, 2 },
+ { "AS4X4", 8, 2 },
+ { "AS4X3", 6, 2 },
+ { "AS4X2", 4, 2 },
+ { "AS4X1", 2, 2 },
+ { "AS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_2X_SEGMENT_APPLIED", 0x37964, 0 },
+ { "AS2X3", 6, 2 },
+ { "AS2X2", 4, 2 },
+ { "AS2X1", 2, 2 },
+ { "AS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_1X_SEGMENT_APPLIED", 0x37968, 0 },
+ { "AS1X7", 14, 2 },
+ { "AS1X6", 12, 2 },
+ { "AS1X5", 10, 2 },
+ { "AS1X4", 8, 2 },
+ { "AS1X3", 6, 2 },
+ { "AS1X2", 4, 2 },
+ { "AS1X1", 2, 2 },
+ { "AS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_4X_TERMINATION_APPLIED", 0x3796c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_2X1X_TERMINATION_APPLIED", 0x37970, 0 },
+ { "AT2X", 8, 4 },
+ { "AT4X", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SIGN_APPLIED_REGISTER", 0x37974, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_EXTENDED_ADDRESS_DATA", 0x37978, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_EXTENDED_ADDRESS_ADDR", 0x3797c, 0 },
+ { "XADDR", 1, 5 },
+ { "XWR", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_1_0", 0x37980, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_3_2", 0x37984, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_5_4", 0x37988, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_PATTERN_BUFFER_BYTES_7_6", 0x3798c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AZ_CONTROL", 0x3799c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_CONTROL", 0x379a0, 0 },
+ { "DCCTIMEDOUT", 15, 1 },
+ { "DCCTIMEEN", 13, 2 },
+ { "DCCLOCK", 11, 2 },
+ { "DCCOFFSET", 8, 3 },
+ { "DCCSTEP", 6, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_OVERRIDE", 0x379a4, 0 },
+ { "DCCOUT", 12, 1 },
+ { "DCCCLK", 11, 1 },
+ { "DCCHOLD", 10, 1 },
+ { "DCCSIGN", 8, 2 },
+ { "DCCAMP", 1, 7 },
+ { "DCCOEN", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_APPLIED", 0x379a8, 0 },
+ { "DCCASIGN", 7, 2 },
+ { "DCCAAMP", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_DCC_TIME_OUT", 0x379ac, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SIGN_OVERRIDE", 0x379c0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_4X_OVERRIDE", 0x379c8, 0 },
+ { "OS4X7", 14, 2 },
+ { "OS4X6", 12, 2 },
+ { "OS4X5", 10, 2 },
+ { "OS4X4", 8, 2 },
+ { "OS4X3", 6, 2 },
+ { "OS4X2", 4, 2 },
+ { "OS4X1", 2, 2 },
+ { "OS4X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_2X_OVERRIDE", 0x379cc, 0 },
+ { "OS2X3", 6, 2 },
+ { "OS2X2", 4, 2 },
+ { "OS2X1", 2, 2 },
+ { "OS2X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_SEGMENT_1X_OVERRIDE", 0x379d0, 0 },
+ { "OS1X7", 14, 2 },
+ { "OS1X6", 12, 2 },
+ { "OS1X5", 10, 2 },
+ { "OS1X4", 8, 2 },
+ { "OS1X3", 6, 2 },
+ { "OS1X2", 4, 2 },
+ { "OS1X1", 2, 2 },
+ { "OS1X0", 0, 2 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_4X_TERMINATION_OVERRIDE", 0x379d8, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_2X_TERMINATION_OVERRIDE", 0x379dc, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_TAP_SEGMENT_1X_TERMINATION_OVERRIDE", 0x379e0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_5", 0x379ec, 0 },
+ { "ERRORP", 15, 1 },
+ { "ERRORN", 14, 1 },
+ { "TESTENA", 13, 1 },
+ { "TUNEBIT", 10, 3 },
+ { "DATAPOS", 8, 2 },
+ { "SEGSEL", 3, 5 },
+ { "TAPSEL", 1, 2 },
+ { "DATASIGN", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_4", 0x379f0, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_3", 0x379f4, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_2", 0x379f8, 0 },
+ { "AECMDVAL", 14, 1 },
+ { "AECMD1312", 12, 2 },
+ { "AECMD70", 0, 8 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_MACRO_TEST_CONTROL_1", 0x379fc, 0 },
+ { "SDOVRDEN", 15, 1 },
+ { "BSOUTN", 7, 1 },
+ { "BSOUTP", 6, 1 },
+ { "BSIN", 5, 1 },
+ { "JTAGAMPL", 3, 2 },
+ { "JTAGTS", 2, 1 },
+ { "TS", 1, 1 },
+ { "OBS", 0, 1 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_STEP_SIZE_EXTENDED", 0x34000, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_802_3AP_C0_INIT_EXTENDED", 0x34008, 0 },
+ { "C0PRESET", 8, 7 },
+ { "C0INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C0_LIMIT_EXTENDED", 0x34010, 0 },
+ { "C0MAX", 8, 7 },
+ { "C0MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_INIT_EXTENDED", 0x34018, 0 },
+ { "C1PRESET", 8, 7 },
+ { "C1INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_LIMIT_EXTENDED", 0x34020, 0 },
+ { "C1MAX", 8, 7 },
+ { "C1MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_INIT_EXTENDED", 0x34028, 0 },
+ { "C2PRESET", 8, 7 },
+ { "C2INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_LIMIT_EXTENDED", 0x34030, 0 },
+ { "C2MAX", 8, 7 },
+ { "C2MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_VM_LIMIT_EXTENDED", 0x34038, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_V2_LIMIT_EXTENDED", 0x34040, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_INIT_EXTENDED", 0x34048, 0 },
+ { "C3PRESET", 8, 7 },
+ { "C3INIT1", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_LIMIT_EXTENDED", 0x34050, 0 },
+ { "C3MAX", 8, 7 },
+ { "C3MIN", 0, 7 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C0_INIT2_EXTENDED", 0x3405c, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C1_INIT2_EXTENDED", 0x34060, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C2_INIT2_EXTENDED", 0x34068, 0 },
+ { "MAC_PORT_TX_LINK_BCST_TRANSMIT_AE_C3_INIT2_EXTENDED", 0x34070, 0 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_CONFIGURATION_MODE", 0x37200, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_TEST_CONTROL", 0x37204, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_CONTROL", 0x37208, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_OFFSET_CONTROL", 0x3720c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_POSITION_1", 0x37210, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_POSITION_2", 0x37214, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x37218, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKA_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3721c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_CONTROL", 0x37220, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_SAMPLE_SNAPSHOT_1", 0x37224, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKA_DFE_SAMPLE_SNAPSHOT_2", 0x37228, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_1", 0x3722c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_2", 0x37230, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_VGA_CONTROL_3", 0x37234, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x37238, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_IQAMP_CONTROL_1", 0x3723c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_IQAMP_CONTROL_2", 0x37240, 0 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x37244, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACAP_AND_DACAN", 0x37248, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DACA_MIN", 0x3724c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_ADAC_CONTROL", 0x37250, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_AC_COUPLING_CONTROL", 0x37254, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_AC_COUPLING_VALUE", 0x37258, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKA_DFE_H1H2H3_LOCAL_OFFSET", 0x3725c, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x37260, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKA_PEAKED_INTEGRATOR", 0x37264, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKA_CDR_ANALOG_SWITCH", 0x37268, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKA_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3726c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKA_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x37270, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DYNAMIC_DATA_CENTERING_DDC", 0x37274, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_INTERNAL_STATUS", 0x37278, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_1", 0x3727c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_2", 0x37280, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_OFFSET_CHANNEL", 0x37284, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_OFFSET_VALUE", 0x37288, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKA_H_COEFFICIENBT_BIST", 0x3728c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKA_AC_CAPACITOR_BIST", 0x37290, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_LOFF_CONTROL_REGISTER", 0x37298, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_SIGDET_CONTROL", 0x3729c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_ANALOG_CONTROL_SWITCH", 0x372a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKA_INTEGRATOR_DAC_OFFSET", 0x372a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_CONTROL", 0x372a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS", 0x372ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x372b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x372b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKA_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x372b8, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_FUNCTION_CONTROL_3", 0x372bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP_CONTROL", 0x372c0, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP", 0x372c4, 0 },
+ { "MAC_PORT_RX_LINKA_DFE_TAP_ENABLE", 0x36a00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKA_DFE_H1", 0x36a04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKA_DFE_H2", 0x36a08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKA_DFE_H3", 0x36a0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H4", 0x36a10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H5", 0x36a14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H6_AND_H7", 0x36a18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H8_AND_H9", 0x36a1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H10_AND_H11", 0x36a20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H12_13", 0x36a24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H14_15", 0x36a28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKA_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x36a2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_INTERNAL_STATUS_2", 0x372e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKA_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x372e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DCD_CONTROL", 0x372ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_DCC_CONTROL", 0x372f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_QCC_CONTROL", 0x372f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x372f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKA_RECEIVER_MACRO_TEST_CONTROL_1", 0x372fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_CONFIGURATION_MODE", 0x37300, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_TEST_CONTROL", 0x37304, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_CONTROL", 0x37308, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_OFFSET_CONTROL", 0x3730c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_POSITION_1", 0x37310, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_POSITION_2", 0x37314, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x37318, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKB_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3731c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_CONTROL", 0x37320, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_SAMPLE_SNAPSHOT_1", 0x37324, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKB_DFE_SAMPLE_SNAPSHOT_2", 0x37328, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_1", 0x3732c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_2", 0x37330, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_VGA_CONTROL_3", 0x37334, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x37338, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_IQAMP_CONTROL_1", 0x3733c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_IQAMP_CONTROL_2", 0x37340, 0 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x37344, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACAP_AND_DACAN", 0x37348, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DACA_MIN", 0x3734c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_ADAC_CONTROL", 0x37350, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_AC_COUPLING_CONTROL", 0x37354, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_AC_COUPLING_VALUE", 0x37358, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKB_DFE_H1H2H3_LOCAL_OFFSET", 0x3735c, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x37360, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKB_PEAKED_INTEGRATOR", 0x37364, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKB_CDR_ANALOG_SWITCH", 0x37368, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKB_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3736c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKB_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x37370, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DYNAMIC_DATA_CENTERING_DDC", 0x37374, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_INTERNAL_STATUS", 0x37378, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_1", 0x3737c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_2", 0x37380, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_OFFSET_CHANNEL", 0x37384, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_OFFSET_VALUE", 0x37388, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKB_H_COEFFICIENBT_BIST", 0x3738c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKB_AC_CAPACITOR_BIST", 0x37390, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_LOFF_CONTROL_REGISTER", 0x37398, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_SIGDET_CONTROL", 0x3739c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_ANALOG_CONTROL_SWITCH", 0x373a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKB_INTEGRATOR_DAC_OFFSET", 0x373a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_CONTROL", 0x373a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS", 0x373ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x373b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x373b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKB_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x373b8, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_FUNCTION_CONTROL_3", 0x373bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP_CONTROL", 0x373c0, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP", 0x373c4, 0 },
+ { "MAC_PORT_RX_LINKB_DFE_TAP_ENABLE", 0x36b00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKB_DFE_H1", 0x36b04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKB_DFE_H2", 0x36b08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKB_DFE_H3", 0x36b0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H4", 0x36b10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H5", 0x36b14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H6_AND_H7", 0x36b18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H8_AND_H9", 0x36b1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H10_AND_H11", 0x36b20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H12_13", 0x36b24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H14_15", 0x36b28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKB_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x36b2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_INTERNAL_STATUS_2", 0x373e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKB_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x373e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DCD_CONTROL", 0x373ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_DCC_CONTROL", 0x373f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_QCC_CONTROL", 0x373f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x373f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKB_RECEIVER_MACRO_TEST_CONTROL_1", 0x373fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_CONFIGURATION_MODE", 0x37600, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_TEST_CONTROL", 0x37604, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_CONTROL", 0x37608, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_OFFSET_CONTROL", 0x3760c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_POSITION_1", 0x37610, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_POSITION_2", 0x37614, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x37618, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKC_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3761c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_CONTROL", 0x37620, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_SAMPLE_SNAPSHOT_1", 0x37624, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKC_DFE_SAMPLE_SNAPSHOT_2", 0x37628, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_1", 0x3762c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_2", 0x37630, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_VGA_CONTROL_3", 0x37634, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x37638, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_IQAMP_CONTROL_1", 0x3763c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_IQAMP_CONTROL_2", 0x37640, 0 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x37644, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACAP_AND_DACAN", 0x37648, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DACA_MIN", 0x3764c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_ADAC_CONTROL", 0x37650, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_AC_COUPLING_CONTROL", 0x37654, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_AC_COUPLING_VALUE", 0x37658, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKC_DFE_H1H2H3_LOCAL_OFFSET", 0x3765c, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x37660, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKC_PEAKED_INTEGRATOR", 0x37664, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKC_CDR_ANALOG_SWITCH", 0x37668, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKC_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3766c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKC_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x37670, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DYNAMIC_DATA_CENTERING_DDC", 0x37674, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_INTERNAL_STATUS", 0x37678, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_1", 0x3767c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_2", 0x37680, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_OFFSET_CHANNEL", 0x37684, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_OFFSET_VALUE", 0x37688, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKC_H_COEFFICIENBT_BIST", 0x3768c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKC_AC_CAPACITOR_BIST", 0x37690, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_LOFF_CONTROL_REGISTER", 0x37698, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_SIGDET_CONTROL", 0x3769c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_ANALOG_CONTROL_SWITCH", 0x376a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKC_INTEGRATOR_DAC_OFFSET", 0x376a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_CONTROL", 0x376a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS", 0x376ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x376b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x376b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKC_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x376b8, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_FUNCTION_CONTROL_3", 0x376bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP_CONTROL", 0x376c0, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP", 0x376c4, 0 },
+ { "MAC_PORT_RX_LINKC_DFE_TAP_ENABLE", 0x36e00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKC_DFE_H1", 0x36e04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKC_DFE_H2", 0x36e08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKC_DFE_H3", 0x36e0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H4", 0x36e10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H5", 0x36e14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H6_AND_H7", 0x36e18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H8_AND_H9", 0x36e1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H10_AND_H11", 0x36e20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H12_13", 0x36e24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H14_15", 0x36e28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKC_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x36e2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_INTERNAL_STATUS_2", 0x376e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKC_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x376e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DCD_CONTROL", 0x376ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_DCC_CONTROL", 0x376f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_QCC_CONTROL", 0x376f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x376f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKC_RECEIVER_MACRO_TEST_CONTROL_1", 0x376fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_CONFIGURATION_MODE", 0x37700, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_TEST_CONTROL", 0x37704, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_CONTROL", 0x37708, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_OFFSET_CONTROL", 0x3770c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_POSITION_1", 0x37710, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_POSITION_2", 0x37714, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x37718, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKD_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x3771c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_CONTROL", 0x37720, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_SAMPLE_SNAPSHOT_1", 0x37724, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINKD_DFE_SAMPLE_SNAPSHOT_2", 0x37728, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_1", 0x3772c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_2", 0x37730, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_VGA_CONTROL_3", 0x37734, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x37738, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_IQAMP_CONTROL_1", 0x3773c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_IQAMP_CONTROL_2", 0x37740, 0 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x37744, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACAP_AND_DACAN", 0x37748, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DACA_MIN", 0x3774c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_ADAC_CONTROL", 0x37750, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_AC_COUPLING_CONTROL", 0x37754, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_AC_COUPLING_VALUE", 0x37758, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINKD_DFE_H1H2H3_LOCAL_OFFSET", 0x3775c, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x37760, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINKD_PEAKED_INTEGRATOR", 0x37764, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINKD_CDR_ANALOG_SWITCH", 0x37768, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINKD_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x3776c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINKD_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x37770, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DYNAMIC_DATA_CENTERING_DDC", 0x37774, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_INTERNAL_STATUS", 0x37778, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_1", 0x3777c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_2", 0x37780, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_OFFSET_CHANNEL", 0x37784, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_OFFSET_VALUE", 0x37788, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINKD_H_COEFFICIENBT_BIST", 0x3778c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINKD_AC_CAPACITOR_BIST", 0x37790, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_LOFF_CONTROL_REGISTER", 0x37798, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_SIGDET_CONTROL", 0x3779c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_ANALOG_CONTROL_SWITCH", 0x377a0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINKD_INTEGRATOR_DAC_OFFSET", 0x377a4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_CONTROL", 0x377a8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS", 0x377ac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x377b0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x377b4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINKD_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x377b8, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_FUNCTION_CONTROL_3", 0x377bc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP_CONTROL", 0x377c0, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP", 0x377c4, 0 },
+ { "MAC_PORT_RX_LINKD_DFE_TAP_ENABLE", 0x36f00, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINKD_DFE_H1", 0x36f04, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINKD_DFE_H2", 0x36f08, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINKD_DFE_H3", 0x36f0c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H4", 0x36f10, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H5", 0x36f14, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H6_AND_H7", 0x36f18, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H8_AND_H9", 0x36f1c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H10_AND_H11", 0x36f20, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H12_13", 0x36f24, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H14_15", 0x36f28, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINKD_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x36f2c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_INTERNAL_STATUS_2", 0x377e4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINKD_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x377e8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DCD_CONTROL", 0x377ec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_DCC_CONTROL", 0x377f0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_QCC_CONTROL", 0x377f4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x377f8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINKD_RECEIVER_MACRO_TEST_CONTROL_1", 0x377fc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_CONFIGURATION_MODE", 0x37a00, 0 },
+ { "T5_RX_LINKEN", 15, 1 },
+ { "T5_RX_LINKRST", 14, 1 },
+ { "T5_RX_CFGWRT", 13, 1 },
+ { "T5_RX_CFGPTR", 11, 2 },
+ { "T5_RX_CFGEXT", 10, 1 },
+ { "T5_RX_CFGACT", 9, 1 },
+ { "T5_RX_MODE8023AZ", 8, 1 },
+ { "T5_RX_PLLSEL", 6, 2 },
+ { "T5_RX_DMSEL", 4, 2 },
+ { "T5_RX_BWSEL", 2, 2 },
+ { "T5_RX_RTSEL", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_TEST_CONTROL", 0x37a04, 0 },
+ { "APLYDCD", 15, 1 },
+ { "PPOL", 13, 2 },
+ { "PCLKSEL", 11, 2 },
+ { "FERRST", 10, 1 },
+ { "ERRST", 9, 1 },
+ { "SYNCST", 8, 1 },
+ { "WRPSM", 7, 1 },
+ { "WPLPEN", 6, 1 },
+ { "WRPMD", 5, 1 },
+ { "PRST", 4, 1 },
+ { "PCHKEN", 3, 1 },
+ { "PATSEL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_CONTROL", 0x37a08, 0 },
+ { "FTHROT", 12, 4 },
+ { "RTHROT", 11, 1 },
+ { "FILTCTL", 7, 4 },
+ { "RSRVO", 5, 2 },
+ { "EXTEL", 4, 1 },
+ { "RSTUCK", 3, 1 },
+ { "FRZFW", 2, 1 },
+ { "RSTFW", 1, 1 },
+ { "SSCEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_OFFSET_CONTROL", 0x37a0c, 0 },
+ { "H1ANOFST", 12, 4 },
+ { "RSNP", 11, 1 },
+ { "TSOEN", 10, 1 },
+ { "TMSCAL", 8, 2 },
+ { "APADJ", 7, 1 },
+ { "RSEL", 6, 1 },
+ { "PHOFFS", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_POSITION_1", 0x37a10, 0 },
+ { "ROTA", 8, 6 },
+ { "ROTD", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_POSITION_2", 0x37a14, 0 },
+ { "FREQFW", 8, 8 },
+ { "FWSNAP", 7, 1 },
+ { "ROTE", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_STATIC_PHASE_OFFSET_1", 0x37a18, 0 },
+ { "RCALER", 15, 1 },
+ { "RAOFFF", 8, 4 },
+ { "RAOFF", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_PHASE_ROTATOR_STATIC_PHASE_OFFSET_2", 0x37a1c, 0 },
+ { "RCALER", 15, 1 },
+ { "RDOFF", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_CONTROL", 0x37a20, 0 },
+ { "REQCMP", 15, 1 },
+ { "DFEREQ", 14, 1 },
+ { "SPCEN", 13, 1 },
+ { "GATEEN", 12, 1 },
+ { "SPIFMT", 8, 4 },
+ { "STNDBY", 5, 1 },
+ { "FRCH", 4, 1 },
+ { "NONRND", 3, 1 },
+ { "NONRNF", 2, 1 },
+ { "FSTLCK", 1, 1 },
+ { "DFERST", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_SAMPLE_SNAPSHOT_1", 0x37a24, 0 },
+ { "T5BYTE1", 8, 8 },
+ { "T5BYTE0", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_SAMPLE_SNAPSHOT_2", 0x37a28, 0 },
+ { "REQWOV", 15, 1 },
+ { "RASEL", 11, 3 },
+ { "T5_RX_SMODE", 8, 3 },
+ { "T5_RX_ADCORR", 7, 1 },
+ { "T5_RX_TRAINEN", 6, 1 },
+ { "T5_RX_ASAMPQ", 3, 3 },
+ { "T5_RX_ASAMP", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_1", 0x37a2c, 0 },
+ { "WRAPSEL", 15, 1 },
+ { "ACTL", 14, 1 },
+ { "PEAK", 9, 5 },
+ { "VOFFA", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_2", 0x37a30, 0 },
+ { "FVOFFSKP", 15, 1 },
+ { "FGAINCHK", 14, 1 },
+ { "FH1ACAL", 13, 1 },
+ { "FH1AFLTR", 11, 2 },
+ { "T5SHORTV", 10, 1 },
+ { "WGAIN", 8, 2 },
+ { "GAIN_STAT", 7, 1 },
+ { "T5VGAIN", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_VGA_CONTROL_3", 0x37a34, 0 },
+ { "HBND1", 10, 1 },
+ { "HBND0", 9, 1 },
+ { "VLCKD", 8, 1 },
+ { "VLCKDF", 7, 1 },
+ { "AMAXT", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_POWER_MANAGEMENT_CONTROL", 0x37a38, 0 },
+ { "PMCFG", 6, 2 },
+ { "PMOFFTIME", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_IQAMP_CONTROL_1", 0x37a3c, 0 },
+ { "SELI", 9, 1 },
+ { "SERVREF", 5, 3 },
+ { "IQAMP", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_IQAMP_CONTROL_2", 0x37a40, 0 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACAP_AND_DACAN_SELECTION", 0x37a44, 0 },
+ { "SAVEADAC", 8, 1 },
+ { "LOAD2", 7, 1 },
+ { "LOAD1", 6, 1 },
+ { "WRTACC2", 5, 1 },
+ { "WRTACC1", 4, 1 },
+ { "SELAPAN", 3, 1 },
+ { "DASEL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACAP_AND_DACAN", 0x37a48, 0 },
+ { "DACAN", 8, 8 },
+ { "DACAP", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DACA_MIN", 0x37a4c, 0 },
+ { "DACAZ", 8, 8 },
+ { "DACAM", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_ADAC_CONTROL", 0x37a50, 0 },
+ { "ADAC2", 8, 8 },
+ { "ADAC1", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_AC_COUPLING_CONTROL", 0x37a54, 0 },
+ { "FACCPLDYN", 13, 1 },
+ { "ACCPLGAIN", 10, 3 },
+ { "ACCPLREF", 8, 2 },
+ { "ACCPLSTEP", 6, 2 },
+ { "ACCPLASTEP", 1, 5 },
+ { "FACCPL", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_AC_COUPLING_VALUE", 0x37a58, 0 },
+ { "ACCPLMEANS", 15, 1 },
+ { "CDROVREN", 8, 1 },
+ { "ACCPLBIAS", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1H2H3_LOCAL_OFFSET", 0x37a5c, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1H2H3_LOCAL_OFFSET_VALUE", 0x37a60, 0 },
+ { "H1OX", 8, 6 },
+ { "H1EX", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_PEAKED_INTEGRATOR", 0x37a64, 0 },
+ { "PILOCK", 10, 1 },
+ { "UNPKPKA", 2, 6 },
+ { "UNPKVGA", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_CDR_ANALOG_SWITCH", 0x37a68, 0 },
+ { "OVRAC", 15, 1 },
+ { "OVRPK", 14, 1 },
+ { "OVRTAILS", 12, 2 },
+ { "OVRTAILV", 9, 3 },
+ { "OVRCAP", 8, 1 },
+ { "OVRDCDPRE", 7, 1 },
+ { "OVRDCDPST", 6, 1 },
+ { "DCVSCTMODE", 2, 1 },
+ { "CDRANLGSW", 0, 2 },
+ { "MAC_PORT_RX_LINK_BCST_PEAKING_AMPLIFIER_INTIALIZATION_CONTROL", 0x37a6c, 0 },
+ { "PFLAG", 5, 2 },
+ { "MAC_PORT_RX_LINK_BCST_DYNAMIC_AMPLITUDE_CENTERING_DAC_AND_DYNAMIC_PEAKING_CONTROL_DPC", 0x37a70, 0 },
+ { "DACCLIP", 15, 1 },
+ { "DPCFRZ", 14, 1 },
+ { "DPCCVG", 13, 1 },
+ { "DACCVG", 12, 1 },
+ { "DPCLKNQ", 11, 1 },
+ { "DPCWDFE", 10, 1 },
+ { "DPCWPK", 9, 1 },
+ { "BLKH1T", 8, 1 },
+ { "BLKOAE", 7, 1 },
+ { "H1TGT", 4, 3 },
+ { "OAE", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DYNAMIC_DATA_CENTERING_DDC", 0x37a74, 0 },
+ { "OLS", 11, 5 },
+ { "OES", 6, 5 },
+ { "BLKODEC", 5, 1 },
+ { "VIEWSCAN", 4, 1 },
+ { "ODEC", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_INTERNAL_STATUS", 0x37a78, 0 },
+ { "T5BER6VAL", 15, 1 },
+ { "T5BER6", 14, 1 },
+ { "T5BER3VAL", 13, 1 },
+ { "T5TOOFAST", 12, 1 },
+ { "ACCCMP", 11, 1 },
+ { "DCCCMP", 10, 1 },
+ { "T5DPCCMP", 9, 1 },
+ { "T5DACCMP", 8, 1 },
+ { "T5DDCCMP", 7, 1 },
+ { "T5AERRFLG", 6, 1 },
+ { "T5WERRFLG", 5, 1 },
+ { "T5TRCMP", 4, 1 },
+ { "T5VLCKF", 3, 1 },
+ { "T5ROCCMP", 2, 1 },
+ { "T5IQCMP", 1, 1 },
+ { "T5OCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_1", 0x37a7c, 0 },
+ { "FDPC", 15, 1 },
+ { "FDAC", 14, 1 },
+ { "FDDC", 13, 1 },
+ { "FNRND", 12, 1 },
+ { "FVGAIN", 11, 1 },
+ { "FVOFF", 10, 1 },
+ { "FSDET", 9, 1 },
+ { "FBER6", 8, 1 },
+ { "FROTO", 7, 1 },
+ { "FH4H5", 6, 1 },
+ { "FH2H3", 5, 1 },
+ { "FH1", 4, 1 },
+ { "FH1SN", 3, 1 },
+ { "FNRDF", 2, 1 },
+ { "FLOFF", 1, 1 },
+ { "FADAC", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_2", 0x37a80, 0 },
+ { "H25SPC", 15, 1 },
+ { "FDCCAL", 14, 1 },
+ { "FROTCAL", 13, 1 },
+ { "FIQAMP", 12, 1 },
+ { "FRPTCALF", 11, 1 },
+ { "FINTCALGS", 10, 1 },
+ { "FDCC", 9, 1 },
+ { "FTOOFAST", 8, 1 },
+ { "FDCD", 7, 1 },
+ { "FDINV", 6, 1 },
+ { "FHGS", 5, 1 },
+ { "FH6H12", 4, 1 },
+ { "FH1CAL", 3, 1 },
+ { "FINTCAL", 2, 1 },
+ { "FINTRCALDYN", 1, 1 },
+ { "FQCC", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_OFFSET_CHANNEL", 0x37a84, 0 },
+ { "QCCIND", 13, 1 },
+ { "DCDIND", 10, 3 },
+ { "DCCIND", 8, 2 },
+ { "CFSEL", 5, 1 },
+ { "LOFCH", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_OFFSET_VALUE", 0x37a88, 0 },
+ { "LOFU", 8, 7 },
+ { "LOFL", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_H_COEFFICIENBT_BIST", 0x37a8c, 0 },
+ { "HBISTMAN", 12, 1 },
+ { "HBISTRES", 11, 1 },
+ { "HBISTSP", 8, 3 },
+ { "HBISTEN", 7, 1 },
+ { "HBISTRST", 6, 1 },
+ { "HCOMP", 5, 1 },
+ { "HPASS", 4, 1 },
+ { "HSEL", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_AC_CAPACITOR_BIST", 0x37a90, 0 },
+ { "ACCCMP", 13, 1 },
+ { "ACCEN", 12, 1 },
+ { "ACCRST", 11, 1 },
+ { "ACCIND", 8, 3 },
+ { "ACCRD", 0, 8 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_LOFF_CONTROL_REGISTER", 0x37a98, 0 },
+ { "LFREG", 15, 1 },
+ { "LFRC", 14, 1 },
+ { "LGIDLE", 13, 1 },
+ { "LFTGT", 8, 5 },
+ { "LGTGT", 7, 1 },
+ { "LRDY", 6, 1 },
+ { "LIDLE", 5, 1 },
+ { "LCURR", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_SIGDET_CONTROL", 0x37a9c, 0 },
+ { "OFFSN", 13, 2 },
+ { "OFFAMP", 8, 5 },
+ { "SDACDC", 7, 1 },
+ { "SDPDN", 6, 1 },
+ { "SIGDET", 5, 1 },
+ { "SDLVL", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_ANALOG_CONTROL_SWITCH", 0x37aa0, 0 },
+ { "RX_OVRSUMPD", 15, 1 },
+ { "RX_OVRKBPD", 14, 1 },
+ { "RX_OVRDIVPD", 13, 1 },
+ { "RX_OFFVGADIS", 12, 1 },
+ { "RX_OFFACDIS", 11, 1 },
+ { "RX_VTERM", 10, 1 },
+ { "RX_DISSPY2D", 8, 1 },
+ { "RX_OBSOVEN", 7, 1 },
+ { "RX_LINKANLGSW", 0, 7 },
+ { "MAC_PORT_RX_LINK_BCST_INTEGRATOR_DAC_OFFSET", 0x37aa4, 0 },
+ { "INTDACEGS", 13, 3 },
+ { "INTDACE", 8, 5 },
+ { "INTDACGS", 6, 2 },
+ { "INTDAC", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_CONTROL", 0x37aa8, 0 },
+ { "BLKAZ", 15, 1 },
+ { "WIDTH", 10, 5 },
+ { "MINWDTH", 5, 5 },
+ { "MINAMP", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS", 0x37aac, 0 },
+ { "SMQM", 13, 3 },
+ { "SMQ", 5, 8 },
+ { "EMMD", 3, 2 },
+ { "EMBRDY", 2, 1 },
+ { "EMBUMP", 1, 1 },
+ { "EMEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_ERROR_COUNT", 0x37ab0, 0 },
+ { "EMSF", 13, 1 },
+ { "EMDATA59", 12, 1 },
+ { "EMCNT", 4, 8 },
+ { "EMOFLO", 2, 1 },
+ { "EMCRST", 1, 1 },
+ { "EMCEN", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_PDF_EYE_COUNT", 0x37ab4, 0 },
+ { "SM2RDY", 15, 1 },
+ { "SM2RST", 14, 1 },
+ { "APDF", 0, 12 },
+ { "MAC_PORT_RX_LINK_BCST_DIGITAL_EYE_METRICS_PATTERN_LENGTH", 0x37ab8, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_FUNCTION_CONTROL_3", 0x37abc, 0 },
+ { "FTIMEOUT", 15, 1 },
+ { "FROTCAL4", 14, 1 },
+ { "FDCD2", 13, 1 },
+ { "FPRBSPOLTOG", 12, 1 },
+ { "FPRBSOFF2", 11, 1 },
+ { "FDDCAL2", 10, 1 },
+ { "FDDCFLTR", 9, 1 },
+ { "FDAC6", 8, 1 },
+ { "FDDC5", 7, 1 },
+ { "FDDC3456", 6, 1 },
+ { "FSPY2DATA", 5, 1 },
+ { "FPHSLOCK", 4, 1 },
+ { "FCLKALGN", 3, 1 },
+ { "FCLKALDYN", 2, 1 },
+ { "FDFE", 1, 1 },
+ { "FPRBSOFF", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP_CONTROL", 0x37ac0, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP", 0x37ac4, 0 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_TAP_ENABLE", 0x37200, 0 },
+ { "INDEX", 1, 15 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1", 0x37204, 0 },
+ { "H1OSN", 13, 3 },
+ { "H1OMAG", 8, 5 },
+ { "H1ESN", 6, 2 },
+ { "H1EMAG", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H2", 0x37208, 0 },
+ { "H2OSN", 13, 2 },
+ { "H2OMAG", 8, 5 },
+ { "H2ESN", 5, 2 },
+ { "H2EMAG", 0, 5 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H3", 0x3720c, 0 },
+ { "H3OSN", 12, 2 },
+ { "H3OMAG", 8, 4 },
+ { "H3ESN", 4, 2 },
+ { "H3EMAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H4", 0x37210, 0 },
+ { "H4SN", 4, 2 },
+ { "H4MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H5", 0x37214, 0 },
+ { "H5GS", 6, 2 },
+ { "H5SN", 4, 2 },
+ { "H5MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H6_AND_H7", 0x37218, 0 },
+ { "H7GS", 14, 2 },
+ { "H7SN", 12, 2 },
+ { "H7MAG", 8, 4 },
+ { "H6GS", 6, 2 },
+ { "H6SN", 4, 2 },
+ { "H6MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H8_AND_H9", 0x3721c, 0 },
+ { "H9GS", 14, 2 },
+ { "H9SN", 12, 2 },
+ { "H9MAG", 8, 4 },
+ { "H8GS", 6, 2 },
+ { "H8SN", 4, 2 },
+ { "H8MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H10_AND_H11", 0x37220, 0 },
+ { "H11GS", 14, 2 },
+ { "H11SN", 12, 2 },
+ { "H11MAG", 8, 4 },
+ { "H10GS", 6, 2 },
+ { "H10SN", 4, 2 },
+ { "H10MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H12_13", 0x37224, 0 },
+ { "H13GS", 13, 3 },
+ { "H13SN", 10, 3 },
+ { "H13MAG", 8, 2 },
+ { "H12GS", 6, 2 },
+ { "H12SN", 4, 2 },
+ { "H12MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H14_15", 0x37228, 0 },
+ { "H15GS", 13, 3 },
+ { "H15SN", 10, 3 },
+ { "H15MAG", 8, 2 },
+ { "H14GS", 6, 2 },
+ { "H14SN", 4, 2 },
+ { "H14MAG", 0, 4 },
+ { "MAC_PORT_RX_LINK_BCST_DFE_H1ODD_DELTA_AND_H1EVEN_DELTA", 0x3722c, 0 },
+ { "H1ODELTA", 8, 5 },
+ { "H1EDELTA", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_INTERNAL_STATUS_2", 0x37ae4, 0 },
+ { "STNDBYSTAT", 15, 1 },
+ { "CALSDONE", 14, 1 },
+ { "ACISRCCMP", 5, 1 },
+ { "PRBSOFFCMP", 4, 1 },
+ { "CLKALGNCMP", 3, 1 },
+ { "ROTFCMP", 2, 1 },
+ { "DCDCMP", 1, 1 },
+ { "QCCCMP", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_AC_COUPLING_CURRENT_SOURCE_ADJUST", 0x37ae8, 0 },
+ { "FCSADJ", 6, 1 },
+ { "CSIND", 3, 2 },
+ { "CSVAL", 0, 3 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DCD_CONTROL", 0x37aec, 0 },
+ { "DCDTMDOUT", 15, 1 },
+ { "DCDTOEN", 14, 1 },
+ { "DCDLOCK", 13, 1 },
+ { "DCDSTEP", 11, 2 },
+ { "DCDALTWPDIS", 10, 1 },
+ { "DCDOVRDEN", 9, 1 },
+ { "DCCAOVRDEN", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_DCC_CONTROL", 0x37af0, 0 },
+ { "PRBSMODE", 14, 2 },
+ { "DCCSTEP", 10, 2 },
+ { "DCCOVRDEN", 9, 1 },
+ { "DCCLOCK", 8, 1 },
+ { "DCDSIGN", 6, 2 },
+ { "DCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_QCC_CONTROL", 0x37af4, 0 },
+ { "DCCQCCMODE", 15, 1 },
+ { "DCCQCCDYN", 14, 1 },
+ { "DCCQCCHOLD", 13, 1 },
+ { "QCCSTEP", 10, 2 },
+ { "QCCOVRDEN", 9, 1 },
+ { "QCCLOCK", 8, 1 },
+ { "QCCSIGN", 6, 2 },
+ { "QCDAMP", 0, 6 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_MACRO_TEST_CONTROL_REGISTER_2", 0x37af8, 0 },
+ { "TSTCMP", 15, 1 },
+ { "SDLSSD", 5, 1 },
+ { "DFEOBSBIAS", 4, 1 },
+ { "GBOFSTLSSD", 3, 1 },
+ { "RXDOBS", 2, 1 },
+ { "ACJZPT", 1, 1 },
+ { "ACJZNT", 0, 1 },
+ { "MAC_PORT_RX_LINK_BCST_RECEIVER_MACRO_TEST_CONTROL_1", 0x37afc, 0 },
+ { "CALMODEEDGE", 14, 1 },
+ { "TESTCAP", 13, 1 },
+ { "SNAPEN", 12, 1 },
+ { "ASYNCDIR", 11, 1 },
+ { "PHSLOCK", 10, 1 },
+ { "TESTMODE", 9, 1 },
+ { "CALMODE", 8, 1 },
+ { "ACJPDP", 3, 1 },
+ { "ACJPDN", 2, 1 },
+ { "LSSDT", 1, 1 },
+ { "MTHOLD", 0, 1 },
+ { NULL }
+};
+
+struct reg_info t6_mc_0_regs[] = {
+ { "MC_DDRPHY_PC_DP18_PLL_LOCK_STATUS", 0x47000, 0 },
+ { "DP18_PLL_LOCK", 1, 15 },
+ { "MC_DDRPHY_PC_AD32S_PLL_LOCK_STATUS", 0x47004, 0 },
+ { "AD32S_PLL_LOCK", 14, 2 },
+ { "MC_DDRPHY_PC_RANK_PAIR0", 0x47008, 0 },
+ { "RANK_PAIR0_PRI", 13, 3 },
+ { "RANK_PAIR0_PRI_V", 12, 1 },
+ { "RANK_PAIR0_SEC", 9, 3 },
+ { "RANK_PAIR0_SEC_V", 8, 1 },
+ { "RANK_PAIR1_PRI", 5, 3 },
+ { "RANK_PAIR1_PRI_V", 4, 1 },
+ { "RANK_PAIR1_SEC", 1, 3 },
+ { "RANK_PAIR1_SEC_V", 0, 1 },
+ { "MC_DDRPHY_PC_RANK_PAIR1", 0x4700c, 0 },
+ { "RANK_PAIR2_PRI", 13, 3 },
+ { "RANK_PAIR2_PRI_V", 12, 1 },
+ { "RANK_PAIR2_SEC", 9, 3 },
+ { "RANK_PAIR2_SEC_V", 8, 1 },
+ { "RANK_PAIR3_PRI", 5, 3 },
+ { "RANK_PAIR3_PRI_V", 4, 1 },
+ { "RANK_PAIR3_SEC", 1, 3 },
+ { "RANK_PAIR3_SEC_V", 0, 1 },
+ { "MC_DDRPHY_PC_BASE_CNTR0", 0x47010, 0 },
+ { "MC_DDRPHY_PC_RELOAD_VALUE0", 0x47014, 0 },
+ { "PERIODIC_CAL_REQ_EN", 15, 1 },
+ { "PERIODIC_RELOAD_VALUE0", 0, 15 },
+ { "MC_DDRPHY_PC_BASE_CNTR1", 0x47018, 0 },
+ { "MC_DDRPHY_PC_CAL_TIMER", 0x4701c, 0 },
+ { "MC_DDRPHY_PC_CAL_TIMER_RELOAD_VALUE", 0x47020, 0 },
+ { "MC_DDRPHY_PC_ZCAL_TIMER", 0x47024, 0 },
+ { "MC_DDRPHY_PC_ZCAL_TIMER_RELOAD_VALUE", 0x47028, 0 },
+ { "MC_DDRPHY_PC_PER_CAL_CONFIG", 0x4702c, 0 },
+ { "PER_ENA_RANK_PAIR", 12, 4 },
+ { "PER_ENA_ZCAL", 11, 1 },
+ { "PER_ENA_SYSCLK_ALIGN", 10, 1 },
+ { "ENA_PER_RD_CTR", 9, 1 },
+ { "ENA_PER_RDCLK_ALIGN", 8, 1 },
+ { "ENA_PER_DQS_ALIGN", 7, 1 },
+ { "PER_NEXT_RANK_PAIR", 5, 2 },
+ { "FAST_SIM_PER_CNTR", 4, 1 },
+ { "START_INIT_CAL", 3, 1 },
+ { "START_PER_CAL", 2, 1 },
+ { "MC_DDRPHY_PC_PER_ZCAL_CONFIG", 0x4703c, 0 },
+ { "PER_ZCAL_ENA_RANK", 8, 8 },
+ { "PER_ZCAL_NEXT_RANK", 5, 3 },
+ { "START_PER_ZCAL", 4, 1 },
+ { "MC_DDRPHY_PC_CONFIG0", 0x47030, 0 },
+ { "DDRPHY_PROTOCOL", 12, 4 },
+ { "DATA_MUX4_1MODE", 11, 1 },
+ { "SPAM_EN", 10, 1 },
+ { "DDR4_CMD_SIG_REDUCTION", 9, 1 },
+ { "SYSCLK_2X_MEMINTCLKO", 8, 1 },
+ { "LOW_LATENCY", 3, 1 },
+ { "DDR4_IPW_LOOP_DIS", 2, 1 },
+ { "DDR4_VLEVEL_BANK_GROUP", 1, 1 },
+ { "MC_DDRPHY_PC_CONFIG1", 0x47034, 0 },
+ { "WRITE_LATENCY_OFFSET", 12, 4 },
+ { "READ_LATENCY_OFFSET", 8, 4 },
+ { "MEMCTL_CIC_FAST", 7, 1 },
+ { "MEMCTL_CIS_IGNORE", 6, 1 },
+ { "DISABLE_MEMCTL_CAL", 5, 1 },
+ { "MEMORY_TYPE", 2, 3 },
+ { "DDR4_PDA_MODE", 1, 1 },
+ { "MC_DDRPHY_PC_RESETS", 0x47038, 0 },
+ { "PLL_RESET", 15, 1 },
+ { "SYSCLK_RESET", 14, 1 },
+ { "MC_DDRPHY_PC_ERROR_STATUS0", 0x47048, 0 },
+ { "RC_ERROR", 15, 1 },
+ { "WC_ERROR", 14, 1 },
+ { "SEQ_ERROR", 13, 1 },
+ { "CC_ERROR", 12, 1 },
+ { "APB_ERROR", 11, 1 },
+ { "PC_ERROR", 10, 1 },
+ { "MC_DDRPHY_PC_ERROR_MASK0", 0x4704c, 0 },
+ { "RC_ERROR_MASK", 15, 1 },
+ { "WC_ERROR_MASK", 14, 1 },
+ { "SEQ_ERROR_MASK", 13, 1 },
+ { "CC_ERROR_MASK", 12, 1 },
+ { "APB_ERROR_MASK", 11, 1 },
+ { "PC_ERROR_MASK", 10, 1 },
+ { "MC_DDRPHY_PC_IO_PVT_FET_CONTROL", 0x47050, 0 },
+ { "PVTP", 11, 5 },
+ { "PVTN", 6, 5 },
+ { "PVT_OVERRIDE", 5, 1 },
+ { "ENABLE_ZCAL", 4, 1 },
+ { "MC_DDRPHY_PC_VREF_DRV_CONTROL", 0x47054, 0 },
+ { "VREFDQ0DSGN", 15, 1 },
+ { "VREFDQ0D", 11, 4 },
+ { "VREFDQ1DSGN", 10, 1 },
+ { "VREFDQ1D", 6, 4 },
+ { "EN_ANALOG_PD", 3, 1 },
+ { "ANALOG_PD_DLY", 2, 1 },
+ { "ANALOG_PD_DIV", 0, 2 },
+ { "MC_DDRPHY_PC_INIT_CAL_CONFIG0", 0x47058, 0 },
+ { "ENA_WR_LEVEL", 15, 1 },
+ { "ENA_INITIAL_PAT_WR", 14, 1 },
+ { "ENA_DQS_ALIGN", 13, 1 },
+ { "ENA_RDCLK_ALIGN", 12, 1 },
+ { "ENA_READ_CTR", 11, 1 },
+ { "ENA_WRITE_CTR", 10, 1 },
+ { "ENA_INITIAL_COARSE_WR", 9, 1 },
+ { "ENA_COARSE_RD", 8, 1 },
+ { "ENA_CUSTOM_RD", 7, 1 },
+ { "ENA_CUSTOM_WR", 6, 1 },
+ { "ABORT_ON_CAL_ERROR", 5, 1 },
+ { "ENA_DIGITAL_EYE", 4, 1 },
+ { "ENA_RANK_PAIR", 0, 4 },
+ { "MC_DDRPHY_PC_INIT_CAL_CONFIG1", 0x4705c, 0 },
+ { "REFRESH_COUNT", 12, 4 },
+ { "REFRESH_CONTROL", 10, 2 },
+ { "REFRESH_ALL_RANKS", 9, 1 },
+ { "REFRESH_INTERVAL", 0, 7 },
+ { "MC_DDRPHY_PC_INIT_CAL_ERROR", 0x47060, 0 },
+ { "ERROR_WR_LEVEL", 15, 1 },
+ { "ERROR_INITIAL_PAT_WRITE", 14, 1 },
+ { "ERROR_DQS_ALIGN", 13, 1 },
+ { "ERROR_RDCLK_ALIGN", 12, 1 },
+ { "ERROR_READ_CTR", 11, 1 },
+ { "ERROR_WRITE_CTR", 10, 1 },
+ { "ERROR_INITIAL_COARSE_WR", 9, 1 },
+ { "ERROR_COARSE_RD", 8, 1 },
+ { "ERROR_CUSTOM_RD", 7, 1 },
+ { "ERROR_CUSTOM_WR", 6, 1 },
+ { "ERROR_DIGITAL_EYE", 5, 1 },
+ { "ERROR_RANK_PAIR", 0, 4 },
+ { "MC_DDRPHY_PC_INIT_CAL_MASK", 0x47068, 0 },
+ { "ERROR_WR_LEVEL_MASK", 15, 1 },
+ { "ERROR_INITIAL_PAT_WRITE_MASK", 14, 1 },
+ { "ERROR_DQS_ALIGN_MASK", 13, 1 },
+ { "ERROR_RDCLK_ALIGN_MASK", 12, 1 },
+ { "ERROR_READ_CTR_MASK", 11, 1 },
+ { "ERROR_WRITE_CTR_MASK", 10, 1 },
+ { "ERROR_INITIAL_COARSE_WR_MASK", 9, 1 },
+ { "ERROR_COARSE_RD_MASK", 8, 1 },
+ { "ERROR_CUSTOM_RD_MASK", 7, 1 },
+ { "ERROR_CUSTOM_WR_MASK", 6, 1 },
+ { "ERROR_DIGITAL_EYE_MASK", 5, 1 },
+ { "MC_DDRPHY_PC_INIT_CAL_STATUS", 0x47064, 0 },
+ { "INIT_CAL_COMPLETE", 12, 4 },
+ { "PER_CAL_ABORT", 6, 1 },
+ { "MC_DDRPHY_PC_IO_PVT_FET_STATUS", 0x4706c, 0 },
+ { "PVTP", 11, 5 },
+ { "PVTN", 6, 5 },
+ { "MC_DDRPHY_PC_MR0_PRI_RP", 0x47070, 0 },
+ { "MC_DDRPHY_PC_MR1_PRI_RP", 0x47074, 0 },
+ { "MC_DDRPHY_PC_MR2_PRI_RP", 0x47078, 0 },
+ { "MC_DDRPHY_PC_MR3_PRI_RP", 0x4707c, 0 },
+ { "MC_DDRPHY_PC_MR0_SEC_RP", 0x47080, 0 },
+ { "MC_DDRPHY_PC_MR1_SEC_RP", 0x47084, 0 },
+ { "MC_DDRPHY_PC_MR2_SEC_RP", 0x47088, 0 },
+ { "MC_DDRPHY_PC_MR3_SEC_RP", 0x4708c, 0 },
+ { "MC_DDRPHY_PC_RANK_GROUP", 0x47044, 0 },
+ { "ADDR_MIRROR_RP0_PRI", 15, 1 },
+ { "ADDR_MIRROR_RP0_SEC", 14, 1 },
+ { "ADDR_MIRROR_RP1_PRI", 13, 1 },
+ { "ADDR_MIRROR_RP1_SEC", 12, 1 },
+ { "ADDR_MIRROR_RP2_PRI", 11, 1 },
+ { "ADDR_MIRROR_RP2_SEC", 10, 1 },
+ { "ADDR_MIRROR_RP3_PRI", 9, 1 },
+ { "ADDR_MIRROR_RP3_SEC", 8, 1 },
+ { "RANK_GROUPING", 6, 2 },
+ { "ADDR_MIRROR_A3_A4", 5, 1 },
+ { "ADDR_MIRROR_A5_A6", 4, 1 },
+ { "ADDR_MIRROR_A7_A8", 3, 1 },
+ { "ADDR_MIRROR_A11_A13", 2, 1 },
+ { "ADDR_MIRROR_BA0_BA1", 1, 1 },
+ { "ADDR_MIRROR_BG0_BG1", 0, 1 },
+ { "MC_ADR_DDRPHY_ADR_BIT_ENABLE", 0x45800, 0 },
+ { "BIT_ENABLE_0_11", 4, 12 },
+ { "BIT_ENABLE_12_15", 0, 4 },
+ { "MC_ADR_DDRPHY_ADR_DIFFPAIR_ENABLE", 0x45804, 0 },
+ { "DI_ADR0_ADR1", 15, 1 },
+ { "DI_ADR2_ADR3", 14, 1 },
+ { "DI_ADR4_ADR5", 13, 1 },
+ { "DI_ADR6_ADR7", 12, 1 },
+ { "DI_ADR8_ADR9", 11, 1 },
+ { "DI_ADR10_ADR11", 10, 1 },
+ { "DI_ADR12_ADR13", 9, 1 },
+ { "DI_ADR14_ADR15", 8, 1 },
+ { "MC_ADR_DDRPHY_ADR_DELAY0", 0x45810, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY1", 0x45814, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY2", 0x45818, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY3", 0x4581c, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY4", 0x45820, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY5", 0x45824, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY6", 0x45828, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY7", 0x4582c, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DFT_WRAP_STATUS_CONTROL", 0x45830, 0 },
+ { "ADR_TEST_LANE_PAIR_FAIL", 8, 8 },
+ { "ADR_TEST_DATA_EN", 7, 1 },
+ { "ADR_TEST_MODE", 5, 2 },
+ { "ADR_TEST_4TO1_MODE", 4, 1 },
+ { "ADR_TEST_RESET", 3, 1 },
+ { "ADR_TEST_GEN_EN", 2, 1 },
+ { "ADR_TEST_CLEAR_ERROR", 1, 1 },
+ { "ADR_TEST_CHECK_EN", 0, 1 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN0", 0x45840, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN1", 0x45844, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN2", 0x45848, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN3", 0x4584c, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN0", 0x45850, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN1", 0x45854, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN2", 0x45858, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN3", 0x4585c, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_FET_SLICE_EN_MAP0", 0x45880, 0 },
+ { "SLICE_SEL_REG_BITS0_1", 14, 2 },
+ { "SLICE_SEL_REG_BITS2_3", 12, 2 },
+ { "SLICE_SEL_REG_BITS4_5", 10, 2 },
+ { "SLICE_SEL_REG_BITS6_7", 8, 2 },
+ { "SLICE_SEL_REG_BITS8_9", 6, 2 },
+ { "SLICE_SEL_REG_BITS10_11", 4, 2 },
+ { "SLICE_SEL_REG_BITS12_13", 2, 2 },
+ { "SLICE_SEL_REG_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_FET_SLICE_EN_MAP1", 0x45884, 0 },
+ { "SLICE_SEL_REG_BITS0_1", 14, 2 },
+ { "SLICE_SEL_REG_BITS2_3", 12, 2 },
+ { "SLICE_SEL_REG_BITS4_5", 10, 2 },
+ { "SLICE_SEL_REG_BITS6_7", 8, 2 },
+ { "SLICE_SEL_REG_BITS8_9", 6, 2 },
+ { "SLICE_SEL_REG_BITS10_11", 4, 2 },
+ { "SLICE_SEL_REG_BITS12_13", 2, 2 },
+ { "SLICE_SEL_REG_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE", 0x45860, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE_MAP0", 0x458a0, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE_MAP1", 0x458a4, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE", 0x45868, 0 },
+ { "SLEW_CTL0", 12, 4 },
+ { "SLEW_CTL1", 8, 4 },
+ { "SLEW_CTL2", 4, 4 },
+ { "SLEW_CTL3", 0, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE_MAP0", 0x458a8, 0 },
+ { "SLEW_CTL_SEL_BITS0_1", 14, 2 },
+ { "SLEW_CTL_SEL_BITS2_3", 12, 2 },
+ { "SLEW_CTL_SEL_BITS4_5", 10, 2 },
+ { "SLEW_CTL_SEL_BITS6_7", 8, 2 },
+ { "SLEW_CTL_SEL_BITS8_9", 6, 2 },
+ { "SLEW_CTL_SEL_BITS10_11", 4, 2 },
+ { "SLEW_CTL_SEL_BITS12_13", 2, 2 },
+ { "SLEW_CTL_SEL_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE_MAP1", 0x458ac, 0 },
+ { "SLEW_CTL_SEL_BITS0_1", 14, 2 },
+ { "SLEW_CTL_SEL_BITS2_3", 12, 2 },
+ { "SLEW_CTL_SEL_BITS4_5", 10, 2 },
+ { "SLEW_CTL_SEL_BITS6_7", 8, 2 },
+ { "SLEW_CTL_SEL_BITS8_9", 6, 2 },
+ { "SLEW_CTL_SEL_BITS10_11", 4, 2 },
+ { "SLEW_CTL_SEL_BITS12_13", 2, 2 },
+ { "SLEW_CTL_SEL_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_POWERDOWN_2", 0x458b0, 0 },
+ { "ADR_LANE_0_11_PD", 4, 12 },
+ { "ADR_LANE_12_15_PD", 0, 4 },
+ { "MC_ADR_DDRPHY_ADR_BIT_ENABLE", 0x45a00, 0 },
+ { "BIT_ENABLE_0_11", 4, 12 },
+ { "BIT_ENABLE_12_15", 0, 4 },
+ { "MC_ADR_DDRPHY_ADR_DIFFPAIR_ENABLE", 0x45a04, 0 },
+ { "DI_ADR0_ADR1", 15, 1 },
+ { "DI_ADR2_ADR3", 14, 1 },
+ { "DI_ADR4_ADR5", 13, 1 },
+ { "DI_ADR6_ADR7", 12, 1 },
+ { "DI_ADR8_ADR9", 11, 1 },
+ { "DI_ADR10_ADR11", 10, 1 },
+ { "DI_ADR12_ADR13", 9, 1 },
+ { "DI_ADR14_ADR15", 8, 1 },
+ { "MC_ADR_DDRPHY_ADR_DELAY0", 0x45a10, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY1", 0x45a14, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY2", 0x45a18, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY3", 0x45a1c, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY4", 0x45a20, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY5", 0x45a24, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY6", 0x45a28, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DELAY7", 0x45a2c, 0 },
+ { "ADR_DELAY_BITS1_7", 8, 7 },
+ { "ADR_DELAY_BITS9_15", 0, 7 },
+ { "MC_ADR_DDRPHY_ADR_DFT_WRAP_STATUS_CONTROL", 0x45a30, 0 },
+ { "ADR_TEST_LANE_PAIR_FAIL", 8, 8 },
+ { "ADR_TEST_DATA_EN", 7, 1 },
+ { "ADR_TEST_MODE", 5, 2 },
+ { "ADR_TEST_4TO1_MODE", 4, 1 },
+ { "ADR_TEST_RESET", 3, 1 },
+ { "ADR_TEST_GEN_EN", 2, 1 },
+ { "ADR_TEST_CLEAR_ERROR", 1, 1 },
+ { "ADR_TEST_CHECK_EN", 0, 1 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN0", 0x45a40, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN1", 0x45a44, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN2", 0x45a48, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_NFET_SLICE_EN3", 0x45a4c, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN0", 0x45a50, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN1", 0x45a54, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN2", 0x45a58, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_PFET_SLICE_EN3", 0x45a5c, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_FET_SLICE_EN_MAP0", 0x45a80, 0 },
+ { "SLICE_SEL_REG_BITS0_1", 14, 2 },
+ { "SLICE_SEL_REG_BITS2_3", 12, 2 },
+ { "SLICE_SEL_REG_BITS4_5", 10, 2 },
+ { "SLICE_SEL_REG_BITS6_7", 8, 2 },
+ { "SLICE_SEL_REG_BITS8_9", 6, 2 },
+ { "SLICE_SEL_REG_BITS10_11", 4, 2 },
+ { "SLICE_SEL_REG_BITS12_13", 2, 2 },
+ { "SLICE_SEL_REG_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_FET_SLICE_EN_MAP1", 0x45a84, 0 },
+ { "SLICE_SEL_REG_BITS0_1", 14, 2 },
+ { "SLICE_SEL_REG_BITS2_3", 12, 2 },
+ { "SLICE_SEL_REG_BITS4_5", 10, 2 },
+ { "SLICE_SEL_REG_BITS6_7", 8, 2 },
+ { "SLICE_SEL_REG_BITS8_9", 6, 2 },
+ { "SLICE_SEL_REG_BITS10_11", 4, 2 },
+ { "SLICE_SEL_REG_BITS12_13", 2, 2 },
+ { "SLICE_SEL_REG_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE", 0x45a60, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE_MAP0", 0x45aa0, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_POST_CURSOR_VALUE_MAP1", 0x45aa4, 0 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE", 0x45a68, 0 },
+ { "SLEW_CTL0", 12, 4 },
+ { "SLEW_CTL1", 8, 4 },
+ { "SLEW_CTL2", 4, 4 },
+ { "SLEW_CTL3", 0, 4 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE_MAP0", 0x45aa8, 0 },
+ { "SLEW_CTL_SEL_BITS0_1", 14, 2 },
+ { "SLEW_CTL_SEL_BITS2_3", 12, 2 },
+ { "SLEW_CTL_SEL_BITS4_5", 10, 2 },
+ { "SLEW_CTL_SEL_BITS6_7", 8, 2 },
+ { "SLEW_CTL_SEL_BITS8_9", 6, 2 },
+ { "SLEW_CTL_SEL_BITS10_11", 4, 2 },
+ { "SLEW_CTL_SEL_BITS12_13", 2, 2 },
+ { "SLEW_CTL_SEL_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_IO_SLEW_CTL_VALUE_MAP1", 0x45aac, 0 },
+ { "SLEW_CTL_SEL_BITS0_1", 14, 2 },
+ { "SLEW_CTL_SEL_BITS2_3", 12, 2 },
+ { "SLEW_CTL_SEL_BITS4_5", 10, 2 },
+ { "SLEW_CTL_SEL_BITS6_7", 8, 2 },
+ { "SLEW_CTL_SEL_BITS8_9", 6, 2 },
+ { "SLEW_CTL_SEL_BITS10_11", 4, 2 },
+ { "SLEW_CTL_SEL_BITS12_13", 2, 2 },
+ { "SLEW_CTL_SEL_BITS14_15", 0, 2 },
+ { "MC_ADR_DDRPHY_ADR_POWERDOWN_2", 0x45ab0, 0 },
+ { "ADR_LANE_0_11_PD", 4, 12 },
+ { "ADR_LANE_12_15_PD", 0, 4 },
+ { "MC_DDRPHY_AD32S_PLL_VREG_CONFIG_0", 0x460c0, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_AD32S_PLL_VREG_CONFIG_1", 0x460c4, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "VREG_VREGSPARE", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "INTERP_SIG_SLEW_0_3", 1, 4 },
+ { "ANALOG_WRAPON", 0, 1 },
+ { "MC_DDRPHY_AD32S_SYSCLK_CNTL_PR", 0x460c8, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESE", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "CE0DLTVCC", 0, 2 },
+ { "MC_DDRPHY_AD32S_MCCLK_WRCLK_PR_STATIC_OFFSET", 0x460cc, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_AD32S_SYSCLK_PR_VALUE_RO", 0x460d0, 0 },
+ { "SLEW_LATE_SAMPLE", 15, 1 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "SLEW_EARLY_SAMPLE", 6, 1 },
+ { "SLEW_DONE_STATUS", 4, 2 },
+ { "SLEW_CNTL", 0, 4 },
+ { "MC_DDRPHY_AD32S_OUTPUT_FORCE_ATEST_CNTL", 0x460d4, 0 },
+ { "FLUSH", 15, 1 },
+ { "FORCE_EN", 14, 1 },
+ { "AD32S_HS_PROBE_A_SEL", 8, 4 },
+ { "AD32S_HS_PROBE_B_SEL", 4, 4 },
+ { "ATEST1CTL0", 3, 1 },
+ { "ATEST1CTL1", 2, 1 },
+ { "ATEST1CTL2", 1, 1 },
+ { "ATEST1CTL3", 0, 1 },
+ { "MC_DDRPHY_AD32S_OUTPUT_DRIVER_FORCE_VALUE0", 0x460d8, 0 },
+ { "MC_DDRPHY_AD32S_OUTPUT_DRIVER_FORCE_VALUE1", 0x460dc, 0 },
+ { "MC_DDRPHY_AD32S_POWERDOWN_1", 0x460e0, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "ADR_RX_PD", 4, 1 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "DVCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_AD32S_SLEW_CAL_CNTL", 0x460e4, 0 },
+ { "SLEW_CAL_ENABLE", 15, 1 },
+ { "SLEW_CAL_START", 14, 1 },
+ { "SLEW_CAL_OVERRIDE_EN", 12, 1 },
+ { "SLEW_CAL_OVERRIDE", 8, 4 },
+ { "SLEW_TARGET_PR_OFFSET", 0, 5 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44000, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44004, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x441f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x441f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44008, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4400c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44010, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44014, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x441f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44018, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4401c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x441cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4417c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44178, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44058, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4407c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x441d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x440c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x440c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44024, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44170, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44174, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x440e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x440e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x440e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x440ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x440f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x440f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x440f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x440fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44100, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44104, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44108, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4410c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44110, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44114, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44118, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4411c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44120, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44124, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44128, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4412c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44130, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44134, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44138, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4413c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44140, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44144, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44148, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4414c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44150, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44154, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44158, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4415c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44160, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44164, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44168, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4416c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44030, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44034, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x441c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x441c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x441c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44180, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44184, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44188, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4418c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44190, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44194, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44198, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4419c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x441a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x441a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x441a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x441ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44028, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44038, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4403c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44040, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44044, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4404c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44050, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44054, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4405c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44060, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44064, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44068, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4406c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44070, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x441d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x441dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x441e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x441e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x441e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x441ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x441d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44074, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44020, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x440c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x440cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x440d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44078, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x440d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x440d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x441b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x441b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x440dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4402c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x441fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44048, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x441bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44200, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44204, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x443f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x443f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44208, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4420c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44210, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44214, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x443f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44218, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4421c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x443cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4437c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44378, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44258, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4427c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x443d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x442c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x442c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44224, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44370, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44374, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x442e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x442e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x442e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x442ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x442f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x442f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x442f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x442fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44300, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44304, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44308, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4430c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44310, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44314, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44318, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4431c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44320, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44324, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44328, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4432c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44330, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44334, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44338, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4433c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44340, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44344, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44348, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4434c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44350, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44354, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44358, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4435c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44360, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44364, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44368, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4436c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44230, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44234, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x443c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x443c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x443c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44380, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44384, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44388, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4438c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44390, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44394, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44398, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4439c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x443a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x443a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x443a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x443ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44228, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44238, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4423c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44240, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44244, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4424c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44250, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44254, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4425c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44260, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44264, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44268, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4426c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44270, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x443d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x443dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x443e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x443e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x443e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x443ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x443d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44274, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44220, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x442c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x442cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x442d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44278, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x442d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x442d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x443b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x443b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x442dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4422c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x443fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44248, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x443bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44400, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44404, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x445f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x445f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44408, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4440c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44410, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44414, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x445f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44418, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4441c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x445cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4457c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44578, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44458, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4447c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x445d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x444c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x444c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44424, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44570, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44574, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x444e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x444e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x444e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x444ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x444f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x444f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x444f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x444fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44500, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44504, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44508, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4450c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44510, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44514, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44518, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4451c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44520, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44524, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44528, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4452c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44530, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44534, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44538, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4453c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44540, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44544, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44548, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4454c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44550, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44554, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44558, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4455c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44560, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44564, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44568, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4456c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44430, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44434, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x445c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x445c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x445c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44580, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44584, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44588, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4458c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44590, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44594, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44598, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4459c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x445a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x445a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x445a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x445ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44428, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44438, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4443c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44440, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44444, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4444c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44450, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44454, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4445c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44460, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44464, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44468, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4446c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44470, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x445d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x445dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x445e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x445e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x445e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x445ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x445d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44474, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44420, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x444c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x444cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x444d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44478, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x444d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x444d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x445b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x445b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x444dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4442c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x445fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44448, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x445bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44600, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44604, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x447f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x447f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44608, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4460c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44610, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44614, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x447f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44618, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4461c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x447cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4477c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44778, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44658, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4467c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x447d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x446c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x446c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44624, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44770, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44774, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x446e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x446e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x446e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x446ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x446f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x446f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x446f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x446fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44700, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44704, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44708, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4470c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44710, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44714, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44718, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4471c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44720, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44724, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44728, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4472c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44730, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44734, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44738, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4473c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44740, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44744, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44748, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4474c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44750, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44754, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44758, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4475c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44760, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44764, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44768, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4476c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44630, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44634, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x447c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x447c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x447c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44780, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44784, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44788, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4478c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44790, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44794, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44798, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4479c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x447a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x447a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x447a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x447ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44628, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44638, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4463c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44640, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44644, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4464c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44650, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44654, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4465c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44660, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44664, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44668, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4466c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44670, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x447d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x447dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x447e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x447e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x447e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x447ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x447d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44674, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44620, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x446c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x446cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x446d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44678, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x446d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x446d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x447b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x447b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x446dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4462c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x447fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44648, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x447bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44800, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44804, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x449f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x449f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44808, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4480c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44810, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44814, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x449f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44818, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4481c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x449cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4497c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44978, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44858, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4487c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x449d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x448c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x448c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44824, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44970, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44974, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x448e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x448e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x448e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x448ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x448f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x448f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x448f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x448fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44900, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44904, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44908, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4490c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44910, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44914, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44918, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4491c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44920, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44924, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44928, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4492c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44930, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44934, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44938, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4493c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44940, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44944, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44948, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4494c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44950, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44954, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44958, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4495c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44960, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44964, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44968, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4496c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44830, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44834, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x449c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x449c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x449c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44980, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44984, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44988, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4498c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44990, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44994, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44998, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4499c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x449a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x449a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x449a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x449ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44828, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44838, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4483c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44840, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44844, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4484c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44850, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44854, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4485c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44860, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44864, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44868, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4486c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44870, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x449d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x449dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x449e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x449e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x449e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x449ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x449d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44874, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44820, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x448c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x448cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x448d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44878, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x448d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x448d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x449b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x449b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x448dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4482c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x449fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44848, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x449bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44a00, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44a04, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x44bf0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x44bf4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44a08, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x44a0c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44a10, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44a14, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x44bf8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44a18, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x44a1c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x44bcc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x44b7c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44b78, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44a58, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x44a7c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x44bd0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x44ac0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x44ac4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44a24, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44b70, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44b74, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x44ae0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x44ae4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x44ae8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x44aec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x44af0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x44af4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x44af8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x44afc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44b00, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44b04, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44b08, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x44b0c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44b10, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44b14, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44b18, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x44b1c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44b20, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44b24, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44b28, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x44b2c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44b30, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44b34, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44b38, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x44b3c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44b40, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44b44, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44b48, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x44b4c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44b50, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44b54, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44b58, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x44b5c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44b60, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44b64, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44b68, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x44b6c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44a30, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44a34, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x44bc0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x44bc4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x44bc8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44b80, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44b84, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44b88, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x44b8c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44b90, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44b94, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44b98, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x44b9c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x44ba0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x44ba4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x44ba8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x44bac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44a28, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44a38, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x44a3c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44a40, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44a44, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x44a4c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44a50, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44a54, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x44a5c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44a60, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44a64, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44a68, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x44a6c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44a70, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x44bd8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x44bdc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x44be0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x44be8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x44be4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x44bec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x44bd4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44a74, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44a20, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x44ac8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x44acc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x44ad0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44a78, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x44ad4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x44ad8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x44bb4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x44bb8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x44adc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x44a2c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x44bfc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44a48, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x44bbc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44c00, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44c04, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x44df0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x44df4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44c08, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x44c0c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44c10, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44c14, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x44df8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44c18, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x44c1c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x44dcc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x44d7c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44d78, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44c58, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x44c7c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x44dd0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x44cc0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x44cc4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44c24, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44d70, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44d74, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x44ce0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x44ce4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x44ce8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x44cec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x44cf0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x44cf4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x44cf8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x44cfc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44d00, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44d04, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44d08, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x44d0c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44d10, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44d14, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44d18, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x44d1c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44d20, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44d24, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44d28, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x44d2c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44d30, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44d34, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44d38, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x44d3c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44d40, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44d44, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44d48, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x44d4c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44d50, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44d54, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44d58, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x44d5c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44d60, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44d64, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44d68, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x44d6c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44c30, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44c34, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x44dc0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x44dc4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x44dc8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44d80, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44d84, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44d88, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x44d8c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44d90, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44d94, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44d98, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x44d9c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x44da0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x44da4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x44da8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x44dac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44c28, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44c38, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x44c3c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44c40, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44c44, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x44c4c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44c50, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44c54, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x44c5c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44c60, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44c64, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44c68, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x44c6c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44c70, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x44dd8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x44ddc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x44de0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x44de8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x44de4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x44dec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x44dd4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44c74, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44c20, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x44cc8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x44ccc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x44cd0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44c78, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x44cd4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x44cd8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x44db4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x44db8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x44cdc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x44c2c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x44dfc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44c48, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x44dbc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x44e00, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x44e04, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x44ff0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x44ff4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x44e08, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x44e0c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x44e10, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x44e14, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x44ff8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x44e18, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x44e1c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x44fcc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x44f7c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x44f78, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x44e58, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x44e7c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x44fd0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x44ec0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x44ec4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x44e24, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x44f70, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x44f74, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x44ee0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x44ee4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x44ee8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x44eec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x44ef0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x44ef4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x44ef8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x44efc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x44f00, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x44f04, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x44f08, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x44f0c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x44f10, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x44f14, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x44f18, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x44f1c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x44f20, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x44f24, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x44f28, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x44f2c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x44f30, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x44f34, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x44f38, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x44f3c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x44f40, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x44f44, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x44f48, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x44f4c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x44f50, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x44f54, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x44f58, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x44f5c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x44f60, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x44f64, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x44f68, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x44f6c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x44e30, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x44e34, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x44fc0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x44fc4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x44fc8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x44f80, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x44f84, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x44f88, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x44f8c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x44f90, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x44f94, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x44f98, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x44f9c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x44fa0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x44fa4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x44fa8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x44fac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x44e28, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x44e38, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x44e3c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x44e40, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x44e44, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x44e4c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x44e50, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x44e54, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x44e5c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x44e60, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x44e64, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x44e68, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x44e6c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x44e70, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x44fd8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x44fdc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x44fe0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x44fe8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x44fe4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x44fec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x44fd4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x44e74, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x44e20, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x44ec8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x44ecc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x44ed0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x44e78, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x44ed4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x44ed8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x44fb4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x44fb8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x44edc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x44e2c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x44ffc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x44e48, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x44fbc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE0", 0x45000, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_ENABLE1", 0x45004, 0 },
+ { "DATA_BIT_ENABLE_16_23", 8, 8 },
+ { "DFT_FORCE_OUTPUTS", 7, 1 },
+ { "DFT_PRBS7_GEN_EN", 6, 1 },
+ { "DP18_WRAPSEL", 5, 1 },
+ { "HW_VALUE", 4, 1 },
+ { "MRS_CMD_DATA_N0", 3, 1 },
+ { "MRS_CMD_DATA_N1", 2, 1 },
+ { "MRS_CMD_DATA_N2", 1, 1 },
+ { "MRS_CMD_DATA_N3", 0, 1 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE0_RP", 0x451f0, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DISABLE1_RP", 0x451f4, 0 },
+ { "DATA_BIT_DISABLE_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR0", 0x45008, 0 },
+ { "MC_DDRPHY_DP18_DATA_BIT_DIR1", 0x4500c, 0 },
+ { "DATA_BIT_DIR_16_23", 8, 8 },
+ { "WL_ADVANCE_DISABLE", 7, 1 },
+ { "DISABLE_PING_PONG", 6, 1 },
+ { "DELAY_PING_PONG_HALF", 5, 1 },
+ { "ADVANCE_PING_PONG", 4, 1 },
+ { "ATEST_MUX_CTL0", 3, 1 },
+ { "ATEST_MUX_CTL1", 2, 1 },
+ { "ATEST_MUX_CTL2", 1, 1 },
+ { "ATEST_MUX_CTL3", 0, 1 },
+ { "MC_DDRPHY_DP18_READ_CLOCK_RANK_PAIR", 0x45010, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EN_RP", 0x45014, 0 },
+ { "QUAD0_CLK16_BIT0", 15, 1 },
+ { "QUAD1_CLK16_BIT1", 14, 1 },
+ { "QUAD2_CLK16_BIT2", 13, 1 },
+ { "QUAD3_CLK16_BIT3", 12, 1 },
+ { "QUAD0_CLK18_BIT4", 11, 1 },
+ { "QUAD1_CLK18_BIT5", 10, 1 },
+ { "QUAD2_CLK20_BIT6", 9, 1 },
+ { "QUAD3_CLK20_BIT7", 8, 1 },
+ { "QUAD2_CLK22_BIT8", 7, 1 },
+ { "QUAD3_CLK22_BIT9", 6, 1 },
+ { "CLK16_SINGLE_ENDED_BIT10", 5, 1 },
+ { "CLK18_SINGLE_ENDED_BIT11", 4, 1 },
+ { "CLK20_SINGLE_ENDED_BIT12", 3, 1 },
+ { "CLK22_SINGLE_ENDED_BIT13", 2, 1 },
+ { "QUAD2_CLK18_BIT14", 1, 1 },
+ { "QUAD3_CLK18_BIT15", 0, 1 },
+ { "MC_DDRPHY_DP18_DQ_WR_OFFSET_RP", 0x451f8, 0 },
+ { "DQ_WR_OFFSET_N0", 12, 4 },
+ { "DQ_WR_OFFSET_N1", 8, 4 },
+ { "DQ_WR_OFFSET_N2", 4, 4 },
+ { "DQ_WR_OFFSET_N3", 0, 4 },
+ { "MC_DDRPHY_DP18_RX_PEAK_AMP", 0x45018, 0 },
+ { "PEAK_AMP_CTL_SIDE0", 13, 3 },
+ { "PEAK_AMP_CTL_SIDE1", 9, 3 },
+ { "SxMCVREF_0_3", 4, 4 },
+ { "SxPODVREF", 3, 1 },
+ { "DISABLE_TERMINATION", 2, 1 },
+ { "READ_CENTERING_MODE", 0, 2 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR", 0x4501c, 0 },
+ { "SYSCLK_ENABLE", 15, 1 },
+ { "SYSCLK_ROT_OVERRIDE", 8, 7 },
+ { "SYSCLK_ROT_OVERRIDE_EN", 7, 1 },
+ { "SYSCLK_PHASE_ALIGN_RESET", 6, 1 },
+ { "SYSCLK_PHASE_CNTL_EN", 5, 1 },
+ { "SYSCLK_PHASE_DEFAULT_EN", 4, 1 },
+ { "SYSCLK_POS_EDGE_ALIGN", 3, 1 },
+ { "CONTINUOUS_UPDATE", 2, 1 },
+ { "MC_DDRPHY_DP18_SYSCLK_PR_VALUE", 0x451cc, 0 },
+ { "SYSCLK_ROT", 8, 7 },
+ { "BB_LOCK", 7, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_EDGE", 0x4517c, 0 },
+ { "FAIL_PASS_VALUE", 8, 7 },
+ { "PASS_FAIL_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_WRCLK_STATUS", 0x45178, 0 },
+ { "WRCLK_CALIB_DONE", 15, 1 },
+ { "VALUE_UPDATED", 14, 1 },
+ { "FAIL_PASS_V", 13, 1 },
+ { "PASS_FAIL_V", 12, 1 },
+ { "FP_PF_EDGE_NF", 11, 1 },
+ { "NON_SYMETRIC", 10, 1 },
+ { "FULL_RANGE", 8, 1 },
+ { "QUAD3_EDGES", 7, 1 },
+ { "QUAD2_EDGES", 6, 1 },
+ { "QUAD1_EDGES", 5, 1 },
+ { "QUAD0_EDGES", 4, 1 },
+ { "QUAD3_CAVEAT", 3, 1 },
+ { "QUAD2_CAVEAT", 2, 1 },
+ { "QUAD1_CAVEAT", 1, 1 },
+ { "QUAD0_CAVEAT", 0, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_CNTL", 0x45058, 0 },
+ { "PRBS_WAIT", 14, 2 },
+ { "PRBS_SYNC_EARLY", 13, 1 },
+ { "RD_DELAY_EARLY", 12, 1 },
+ { "SS_QUAD_CAL", 10, 1 },
+ { "SS_QUAD", 8, 2 },
+ { "SS_RD_DELAY", 7, 1 },
+ { "FORCE_HI_Z", 6, 1 },
+ { "MC_DDRPHY_DP18_WRCLK_AUX_CNTL", 0x4507c, 0 },
+ { "MC_DDRPHY_DP18_WRCLK_PR", 0x451d0, 0 },
+ { "TSYS_WRCLK", 8, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR0_RANK_PAIR", 0x450c0, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQSCLK_PR1_RANK_PAIR", 0x450c4, 0 },
+ { "DQSCLK_ROT_CLK_N0_N2", 8, 7 },
+ { "DQSCLK_ROT_CLK_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_DQS_RD_PHASE_SELECT_RANK_PAIR", 0x45024, 0 },
+ { "DQSCLK_SELECT0", 14, 2 },
+ { "RDCLK_SELECT0", 12, 2 },
+ { "DQSCLK_SELECT1", 10, 2 },
+ { "RDCLK_SELECT1", 8, 2 },
+ { "DQSCLK_SELECT2", 6, 2 },
+ { "RDCLK_SELECT2", 4, 2 },
+ { "DQSCLK_SELECT3", 2, 2 },
+ { "RDCLK_SELECT3", 0, 2 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN0_RANK_PAIR", 0x45170, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_INITIAL_DQS_ALIGN1_RANK_PAIR", 0x45174, 0 },
+ { "INITIAL_DQS_ROT_N0_N2", 8, 7 },
+ { "INITIAL_DQS_ROT_N1_N3", 0, 7 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_0_RP", 0x450e0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_1_RP", 0x450e4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_2_RP", 0x450e8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_3_RP", 0x450ec, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_4_RP", 0x450f0, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_5_RP", 0x450f4, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_6_RP", 0x450f8, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_7_RP", 0x450fc, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_8_RP", 0x45100, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_9_RP", 0x45104, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_10_RP", 0x45108, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_11_RP", 0x4510c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_12_RP", 0x45110, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_13_RP", 0x45114, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_14_RP", 0x45118, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_15_RP", 0x4511c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_16_RP", 0x45120, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_17_RP", 0x45124, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_18_RP", 0x45128, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_19_RP", 0x4512c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_20_RP", 0x45130, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_21_RP", 0x45134, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_22_RP", 0x45138, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_WR_DELAY_VALUE_23_RP", 0x4513c, 0 },
+ { "WR_DELAY", 6, 10 },
+ { "MC_DDRPHY_DP18_READ_DELAY0_RANK_PAIR", 0x45140, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY1_RANK_PAIR", 0x45144, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY2_RANK_PAIR", 0x45148, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY3_RANK_PAIR", 0x4514c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY4_RANK_PAIR", 0x45150, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY5_RANK_PAIR", 0x45154, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY6_RANK_PAIR", 0x45158, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY7_RANK_PAIR", 0x4515c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY8_RANK_PAIR", 0x45160, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY9_RANK_PAIR", 0x45164, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY10_RANK_PAIR", 0x45168, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY11_RANK_PAIR", 0x4516c, 0 },
+ { "RD_DELAY_BITS0_6", 9, 7 },
+ { "RD_DELAY_BITS8_14", 1, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET0_RANK_PAIR", 0x45030, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DELAY_OFFSET1_RANK_PAIR", 0x45034, 0 },
+ { "OFFSET_BITS1_7", 8, 7 },
+ { "OFFSET_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE0", 0x451c0, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_TIMING_REFERENCE1", 0x451c4, 0 },
+ { "REFERENCE_BITS1_7", 8, 7 },
+ { "REFERENCE_BITS9_15", 0, 7 },
+ { "MC_DDRPHY_DP18_READ_DQS_TIMING_REFERENCE", 0x451c8, 0 },
+ { "REFERENCE", 8, 7 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE0_RANK_PAIR", 0x45180, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE1_RANK_PAIR", 0x45184, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE2_RANK_PAIR", 0x45188, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE3_RANK_PAIR", 0x4518c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE4_RANK_PAIR", 0x45190, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE5_RANK_PAIR", 0x45194, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE6_RANK_PAIR", 0x45198, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE7_RANK_PAIR", 0x4519c, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE8_RANK_PAIR", 0x451a0, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE9_RANK_PAIR", 0x451a4, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE10_RANK_PAIR", 0x451a8, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_READ_EYE_SIZE11_RANK_PAIR", 0x451ac, 0 },
+ { "RD_EYE_SIZE_BITS2_7", 8, 6 },
+ { "RD_EYE_SIZE_BITS10_15", 0, 6 },
+ { "MC_DDRPHY_DP18_DRIFT_LIMITS", 0x45028, 0 },
+ { "MIN_RD_EYE_SIZE", 8, 6 },
+ { "MAX_DQS_DRIFT", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS0", 0x45038, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS1", 0x4503c, 0 },
+ { "LEADING_EDGE_NOT_FOUND_1", 8, 8 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS2", 0x45040, 0 },
+ { "MC_DDRPHY_DP18_RD_LVL_STATUS3", 0x45044, 0 },
+ { "TRAILING_EDGE_NOT_FOUND_16_23", 8, 8 },
+ { "MC_DDRPHY_DP18_DQS_GATE_DELAY_RP", 0x4504c, 0 },
+ { "DQS_GATE_DELAY_N0", 12, 3 },
+ { "DQS_GATE_DELAY_N1", 8, 3 },
+ { "DQS_GATE_DELAY_N2", 4, 3 },
+ { "DQS_GATE_DELAY_N3", 0, 3 },
+ { "MC_DDRPHY_DP18_RD_STATUS0", 0x45050, 0 },
+ { "NO_EYE_DETECTED", 15, 1 },
+ { "LEADING_EDGE_FOUND", 14, 1 },
+ { "TRAILING_EDGE_FOUND", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3", 5, 1 },
+ { "EYE_CLIPPING", 4, 1 },
+ { "NO_DQS", 3, 1 },
+ { "NO_LOCK", 2, 1 },
+ { "DRIFT_ERROR", 1, 1 },
+ { "MIN_EYE", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_ERROR_MASK0", 0x45054, 0 },
+ { "NO_EYE_DETECTED_MASK", 15, 1 },
+ { "LEADING_EDGE_FOUND_MASK", 14, 1 },
+ { "TRAILING_EDGE_FOUND_MASK", 13, 1 },
+ { "INCOMPLETE_RD_CAL_N0_MASK", 12, 1 },
+ { "INCOMPLETE_RD_CAL_N1_MASK", 11, 1 },
+ { "INCOMPLETE_RD_CAL_N2_MASK", 10, 1 },
+ { "INCOMPLETE_RD_CAL_N3_MASK", 9, 1 },
+ { "COARSE_PATTERN_ERR_N0_MASK", 8, 1 },
+ { "COARSE_PATTERN_ERR_N1_MASK", 7, 1 },
+ { "COARSE_PATTERN_ERR_N2_MASK", 6, 1 },
+ { "COARSE_PATTERN_ERR_N3_MASK", 5, 1 },
+ { "EYE_CLIPPING_MASK", 4, 1 },
+ { "NO_DQS_MASK", 3, 1 },
+ { "NO_LOCK_MASK", 2, 1 },
+ { "DRIFT_ERROR_MASK", 1, 1 },
+ { "MIN_EYE_MASK", 0, 1 },
+ { "MC_DDRPHY_DP18_WR_LVL_STATUS0", 0x4505c, 0 },
+ { "CLK_LEVEL", 14, 2 },
+ { "FINE_STEPPING", 13, 1 },
+ { "WR_LVL_DONE", 12, 1 },
+ { "WL_ERR_CLK16_ST", 11, 1 },
+ { "WL_ERR_CLK18_ST", 10, 1 },
+ { "WL_ERR_CLK20_ST", 9, 1 },
+ { "WL_ERR_CLK22_ST", 8, 1 },
+ { "ZERO_DETECTED", 7, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS0", 0x45060, 0 },
+ { "BIT_CENTERED", 11, 5 },
+ { "SMALL_STEP_LEFT", 10, 1 },
+ { "BIG_STEP_RIGHT", 9, 1 },
+ { "MATCH_STEP_RIGHT", 8, 1 },
+ { "JUMP_BACK_RIGHT", 7, 1 },
+ { "SMALL_STEP_RIGHT", 6, 1 },
+ { "WR_CNTR_DONE", 5, 1 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS1", 0x45064, 0 },
+ { "FW_LEFT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_CNTR_STATUS2", 0x45068, 0 },
+ { "FW_RIGHT_SIDE", 5, 11 },
+ { "MC_DDRPHY_DP18_WR_ERROR0", 0x4506c, 0 },
+ { "WL_ERR_CLK16", 15, 1 },
+ { "WL_ERR_CLK18", 14, 1 },
+ { "WL_ERR_CLK20", 13, 1 },
+ { "WL_ERR_CLK22", 12, 1 },
+ { "VALID_NS_BIG_L", 7, 1 },
+ { "INVALID_NS_SMALL_L", 6, 1 },
+ { "VALID_NS_BIG_R", 5, 1 },
+ { "INVALID_NS_BIG_R", 4, 1 },
+ { "VALID_NS_JUMP_BACK", 3, 1 },
+ { "INVALID_NS_SMALL_R", 2, 1 },
+ { "OFFSET_ERR", 1, 1 },
+ { "MC_DDRPHY_DP18_WR_ERROR_MASK0", 0x45070, 0 },
+ { "WL_ERR_CLK16_MASK", 15, 1 },
+ { "WL_ERR_CLK18_MASK", 14, 1 },
+ { "WL_ERR_CLK20_MASK", 13, 1 },
+ { "WR_ERR_CLK22_MASK", 12, 1 },
+ { "DQS_REC_LOW_POWER", 11, 1 },
+ { "DQ_REC_LOW_POWER", 10, 1 },
+ { "VALID_NS_BIG_L_MASK", 7, 1 },
+ { "INVALID_NS_SMALL_L_MASK", 6, 1 },
+ { "VALID_NS_BIG_R_MASK", 5, 1 },
+ { "INVALID_NS_BIG_R_MASK", 4, 1 },
+ { "VALID_NS_JUMP_BACK_MASK", 3, 1 },
+ { "INVALID_NS_SMALL_R_MASK", 2, 1 },
+ { "OFFSET_ERR_MASK", 1, 1 },
+ { "ADVANCE_PR_VALUE", 0, 1 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG0", 0x451d8, 0 },
+ { "PLL_TUNE_0_2", 13, 3 },
+ { "PLL_TUNECP_0_2", 10, 3 },
+ { "PLL_TUNEF_0_5", 4, 6 },
+ { "PLL_TUNEVCO_0_1", 2, 2 },
+ { "PLL_PLLXTR_0_1", 0, 2 },
+ { "MC_DDRPHY_DP18_PLL_CONFIG1", 0x451dc, 0 },
+ { "PLL_TUNETDIV_0_2", 13, 3 },
+ { "PLL_TUNEMDIV_0_1", 11, 2 },
+ { "PLL_TUNEATST", 10, 1 },
+ { "VREG_RANGE_0_1", 8, 2 },
+ { "CE0DLTVCCA", 7, 1 },
+ { "VREG_VCCTUNE_0_1", 5, 2 },
+ { "CE0DLTVCCD1", 4, 1 },
+ { "CE0DLTVCCD2", 3, 1 },
+ { "S0INSDLYTAP", 2, 1 },
+ { "S1INSDLYTAP", 1, 1 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_SLICE", 0x451e0, 0 },
+ { "EN_SLICE_N_WR", 8, 8 },
+ { "EN_SLICE_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_NFET_TERM", 0x451e8, 0 },
+ { "EN_TERM_N_WR", 8, 8 },
+ { "EN_TERM_N_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_SLICE", 0x451e4, 0 },
+ { "EN_SLICE_P_WR", 8, 8 },
+ { "EN_SLICE_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_PFET_TERM", 0x451ec, 0 },
+ { "EN_TERM_P_WR", 8, 8 },
+ { "EN_TERM_P_WR_FFE", 4, 4 },
+ { "MC_DDRPHY_DP18_IO_TX_CONFIG0", 0x451d4, 0 },
+ { "INTERP_SIG_SLEW", 12, 4 },
+ { "POST_CURSOR", 8, 4 },
+ { "SLEW_CTL", 4, 4 },
+ { "MC_DDRPHY_DP18_DFT_WRAP_STATUS", 0x45074, 0 },
+ { "CHECKER_ENABLE", 15, 1 },
+ { "CHECKER_RESET", 14, 1 },
+ { "SYNC", 6, 6 },
+ { "DP18_DFT_ERROR", 0, 6 },
+ { "MC_DDRPHY_DP18_DFT_DIG_EYE", 0x45020, 0 },
+ { "DIGITAL_EYE_EN", 15, 1 },
+ { "BUMP", 14, 1 },
+ { "TRIG_PERIOD", 13, 1 },
+ { "CNTL_POL", 12, 1 },
+ { "CNTL_SRC", 8, 1 },
+ { "DIGITAL_EYE_VALUE", 0, 8 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_0", 0x450c8, 0 },
+ { "MEMINTD00_POS", 14, 2 },
+ { "MEMINTD01_PO", 12, 2 },
+ { "MEMINTD02_POS", 10, 2 },
+ { "MEMINTD03_POS", 8, 2 },
+ { "MEMINTD04_POS", 6, 2 },
+ { "MEMINTD05_POS", 4, 2 },
+ { "MEMINTD06_POS", 2, 2 },
+ { "MEMINTD07_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_1", 0x450cc, 0 },
+ { "MEMINTD08_POS", 14, 2 },
+ { "MEMINTD09_POS", 12, 2 },
+ { "MEMINTD10_POS", 10, 2 },
+ { "MEMINTD11_POS", 8, 2 },
+ { "MEMINTD12_POS", 6, 2 },
+ { "MEMINTD13_POS", 4, 2 },
+ { "MEMINTD14_POS", 2, 2 },
+ { "MEMINTD15_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_PATTERN_POS_2", 0x450d0, 0 },
+ { "MEMINTD16_POS", 14, 2 },
+ { "MEMINTD17_POS", 12, 2 },
+ { "MEMINTD18_POS", 10, 2 },
+ { "MEMINTD19_POS", 8, 2 },
+ { "MEMINTD20_POS", 6, 2 },
+ { "MEMINTD21_POS", 4, 2 },
+ { "MEMINTD22_POS", 2, 2 },
+ { "MEMINTD23_POS", 0, 2 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG0", 0x45078, 0 },
+ { "SYSCLK_DQSCLK_OFFSET", 8, 7 },
+ { "SYSCLK_RDCLK_OFFSET", 0, 7 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG1", 0x450d4, 0 },
+ { "DQS_ALIGN_SM", 11, 5 },
+ { "DQS_ALIGN_CNTR", 7, 4 },
+ { "ITERATION_CNTR", 6, 1 },
+ { "DQS_ALIGN_ITER_CNTR", 0, 6 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG2", 0x450d8, 0 },
+ { "CALIBRATE_BIT", 13, 3 },
+ { "DQS_ALIGN_QUAD", 11, 2 },
+ { "DQS_QUAD_CONFIG", 8, 3 },
+ { "OPERATE_MODE", 4, 4 },
+ { "EN_DQS_OFFSET", 3, 1 },
+ { "DQS_ALIGN_JITTER", 2, 1 },
+ { "DIS_CLK_GATE", 1, 1 },
+ { "MAX_DQS_ITER", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG3", 0x451b4, 0 },
+ { "DESIRED_EDGE_CNTR_TARGET_HIGH", 8, 8 },
+ { "DESIRED_EDGE_CNTR_TARGET_LOW", 0, 8 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG4", 0x451b8, 0 },
+ { "APPROACH_ALIGNMENT", 15, 1 },
+ { "MC_DDRPHY_DP18_DQSCLK_OFFSET", 0x450dc, 0 },
+ { "DQS_OFFSET", 8, 7 },
+ { "MC_DDRPHY_DP18_DEBUG_SEL", 0x4502c, 0 },
+ { "DP18_HS_PROBE_A_SEL", 11, 5 },
+ { "DP18_HS_PROBE_B_SEL", 6, 5 },
+ { "RD_DEBUG_SEL", 3, 3 },
+ { "WR_DEBUG_SEL", 0, 3 },
+ { "MC_DDRPHY_DP18_POWERDOWN_1", 0x451fc, 0 },
+ { "MASTER_PD_CNTL", 15, 1 },
+ { "ANALOG_INPUT_STAB2", 14, 1 },
+ { "EYEDAC_PD", 13, 1 },
+ { "ANALOG_OUTPUT_STAB", 9, 1 },
+ { "ANALOG_INPUT_STAB1", 8, 1 },
+ { "SYSCLK_CLK_GATE", 6, 2 },
+ { "WR_FIFO_STAB", 5, 1 },
+ { "DELAY_LINE_CTL_OVERRIDE", 4, 1 },
+ { "DP18_RX_PD", 2, 2 },
+ { "TX_TRISTATE_CNTL", 1, 1 },
+ { "VCC_REG_PD", 0, 1 },
+ { "MC_DDRPHY_DP18_RD_DIA_CONFIG5", 0x45048, 0 },
+ { "DYN_POWER_CNTL_EN", 15, 1 },
+ { "DQS_ALIGN_BY_QUAD", 4, 1 },
+ { "MC_DDRPHY_DP18_DELAY_LINE_PWR_CTL", 0x451bc, 0 },
+ { "QUAD0_PWR_CTL", 12, 4 },
+ { "QUAD1_PWR_CTL", 8, 4 },
+ { "QUAD2_PWR_CTL", 4, 4 },
+ { "QUAD3_PWR_CTL", 0, 4 },
+ { "MC_DDRPHY_SEQ_RD_WR_DATA0", 0x47200, 0 },
+ { "MC_DDRPHY_SEQ_RD_WR_DATA1", 0x47204, 0 },
+ { "MC_DDRPHY_SEQ_CONFIG0", 0x47208, 0 },
+ { "MPR_PATTERN_BIT", 15, 1 },
+ { "TWO_CYCLE_ADDR_EN", 14, 1 },
+ { "MR_MASK_EN", 10, 4 },
+ { "PARITY_DLY", 9, 1 },
+ { "FORCE_RESERVED", 7, 1 },
+ { "HALT_ROTATION", 6, 1 },
+ { "FORCE_MPR", 5, 1 },
+ { "IPW_SIDEAB_SEL", 2, 1 },
+ { "PARITY_A17_MASK", 1, 1 },
+ { "X16_DEVICE", 0, 1 },
+ { "MC_DDRPHY_SEQ_RESERVED_ADDR0", 0x4720c, 0 },
+ { "MC_DDRPHY_SEQ_RESERVED_ADDR1", 0x47210, 0 },
+ { "MC_DDRPHY_SEQ_RESERVED_ADDR2", 0x47214, 0 },
+ { "MC_DDRPHY_SEQ_RESERVED_ADDR3", 0x47218, 0 },
+ { "MC_DDRPHY_SEQ_RESERVED_ADDR4", 0x4721c, 0 },
+ { "MC_DDRPHY_SEQ_ERROR_STATUS0", 0x47220, 0 },
+ { "MULTIPLE_REQ_ERROR", 15, 1 },
+ { "INVALID_REQTYPE_ERRO", 14, 1 },
+ { "EARLY_REQ_ERROR", 13, 1 },
+ { "MULTIPLE_REQ_SOURCE", 10, 3 },
+ { "INVALID_REQTYPE", 6, 4 },
+ { "INVALID_REQ_SOURCE", 3, 3 },
+ { "EARLY_REQ_SOURCE", 0, 3 },
+ { "MC_DDRPHY_SEQ_ERROR_MASK0", 0x47224, 0 },
+ { "MULT_REQ_ERR_MASK", 15, 1 },
+ { "INVALID_REQTYPE_ERR_MASK", 14, 1 },
+ { "EARLY_REQ_ERR_MASK", 13, 1 },
+ { "MC_DDRPHY_SEQ_ODT_WR_CONFIG0", 0x47228, 0 },
+ { "ODT_WR_VALUES_BITS0_7", 8, 8 },
+ { "ODT_WR_VALUES_BITS8_15", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_WR_CONFIG1", 0x4722c, 0 },
+ { "ODT_WR_VALUES_BITS0_7", 8, 8 },
+ { "ODT_WR_VALUES_BITS8_15", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_WR_CONFIG2", 0x47230, 0 },
+ { "ODT_WR_VALUES_BITS0_7", 8, 8 },
+ { "ODT_WR_VALUES_BITS8_15", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_WR_CONFIG3", 0x47234, 0 },
+ { "ODT_WR_VALUES_BITS0_7", 8, 8 },
+ { "ODT_WR_VALUES_BITS8_15", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_RD_CONFIG0", 0x47238, 0 },
+ { "ODT_RD_VALUES_x2", 8, 8 },
+ { "ODT_RD_VALUES_x2plus1", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_RD_CONFIG1", 0x4723c, 0 },
+ { "ODT_RD_VALUES_x2", 8, 8 },
+ { "ODT_RD_VALUES_x2plus1", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_RD_CONFIG2", 0x47240, 0 },
+ { "ODT_RD_VALUES_x2", 8, 8 },
+ { "ODT_RD_VALUES_x2plus1", 0, 8 },
+ { "MC_DDRPHY_SEQ_ODT_RD_CONFIG3", 0x47244, 0 },
+ { "ODT_RD_VALUES_x2", 8, 8 },
+ { "ODT_RD_VALUES_x2plus1", 0, 8 },
+ { "MC_DDRPHY_SEQ_MEM_TIMING_PARAM0", 0x47248, 0 },
+ { "TMOD_CYCLES", 12, 4 },
+ { "TRCD_CYCLES", 8, 4 },
+ { "TRP_CYCLES", 4, 4 },
+ { "TRFC_CYCLES", 0, 4 },
+ { "MC_DDRPHY_SEQ_MEM_TIMING_PARAM1", 0x4724c, 0 },
+ { "TZQINIT_CYCLES", 12, 4 },
+ { "TZQCS_CYCLES", 8, 4 },
+ { "TWLDQSEN_CYCLES", 4, 4 },
+ { "TWRMRD_CYCLES", 0, 4 },
+ { "MC_DDRPHY_SEQ_MEM_TIMING_PARAM2", 0x47250, 0 },
+ { "TODTLON_OFF_CYCLES", 12, 4 },
+ { "TRC_CYCLES", 8, 4 },
+ { "TMRSC_CYCLES", 4, 4 },
+ { "MRS_CMD_SPACE", 0, 4 },
+ { "MC_DDRPHY_WC_CONFIG0", 0x47600, 0 },
+ { "TWLO_TWLOE", 8, 8 },
+ { "WL_ONE_DQS_PULSE", 7, 1 },
+ { "FW_WR_RD", 1, 6 },
+ { "CUSTOM_INIT_WRITE", 0, 1 },
+ { "MC_DDRPHY_WC_CONFIG1", 0x47604, 0 },
+ { "BIG_STEP", 12, 4 },
+ { "SMALL_STEP", 9, 3 },
+ { "WR_PRE_DLY", 3, 6 },
+ { "MC_DDRPHY_WC_CONFIG2", 0x47608, 0 },
+ { "NUM_VALID_SAMPLES", 12, 4 },
+ { "FW_RD_WR", 6, 6 },
+ { "TWR_MPR", 2, 4 },
+ { "EN_RESET_WR_DELAY_WL", 0, 1 },
+ { "MC_DDRPHY_WC_CONFIG3", 0x47614, 0 },
+ { "DDR4_MRS_CMD_DQ_EN", 15, 1 },
+ { "MRS_CMD_DQ_ON", 9, 6 },
+ { "MRS_CMD_DQ_OFF", 3, 6 },
+ { "MC_DDRPHY_WC_WRCLK_CNTL", 0x47618, 0 },
+ { "WRCLK_CAL_START", 15, 1 },
+ { "WRCLK_CAL_DONE", 14, 1 },
+ { "MC_DDRPHY_WC_ERROR_STATUS0", 0x4760c, 0 },
+ { "WR_CNTL_ERROR", 15, 1 },
+ { "MC_DDRPHY_WC_ERROR_MASK0", 0x47610, 0 },
+ { "WR_CNTL_ERROR_MASK", 15, 1 },
+ { "MC_DDRPHY_RC_CONFIG0", 0x47400, 0 },
+ { "GLOBAL_PHY_OFFSET", 12, 4 },
+ { "ADVANCE_RD_VALID", 11, 1 },
+ { "ERS_MODE", 10, 1 },
+ { "SINGLE_BIT_MPR_RP0", 6, 1 },
+ { "SINGLE_BIT_MPR_RP1", 5, 1 },
+ { "SINGLE_BIT_MPR_RP2", 4, 1 },
+ { "SINGLE_BIT_MPR_RP3", 3, 1 },
+ { "ALIGN_ON_EVEN_CYCLES", 2, 1 },
+ { "PERFORM_RDCLK_ALIGN", 1, 1 },
+ { "STAGGERED_PATTERN", 0, 1 },
+ { "MC_DDRPHY_RC_CONFIG1", 0x47404, 0 },
+ { "OUTER_LOOP_CNT", 2, 14 },
+ { "MC_DDRPHY_RC_CONFIG2", 0x47408, 0 },
+ { "CONSEQ_PASS", 11, 5 },
+ { "BURST_WINDOW", 5, 2 },
+ { "ALLOW_RD_FIFO_AUTO_R_ESET", 4, 1 },
+ { "DIS_LOW_PWR_PER_CAL", 3, 1 },
+ { "MC_DDRPHY_RC_CONFIG3", 0x4741c, 0 },
+ { "FINE_CAL_STEP_SIZE", 13, 3 },
+ { "COARSE_CAL_STEP_SIZE", 9, 4 },
+ { "DQ_SEL_QUAD", 7, 2 },
+ { "DQ_SEL_LANE", 4, 3 },
+ { "MC_DDRPHY_RC_PERIODIC", 0x47420, 0 },
+ { "MC_DDRPHY_RC_ERROR_STATUS0", 0x47414, 0 },
+ { "RD_CNTL_ERROR", 15, 1 },
+ { "MC_DDRPHY_RC_ERROR_MASK0", 0x47418, 0 },
+ { "RD_CNTL_ERROR_MASK", 15, 1 },
+ { "MC_DDRPHY_APB_CONFIG0", 0x47800, 0 },
+ { "DISABLE_PARITY_CHECKER", 15, 1 },
+ { "GENERATE_EVEN_PARITY", 14, 1 },
+ { "FORCE_ON_CLK_GATE", 13, 1 },
+ { "DEBUG_BUS_SEL_LO", 12, 1 },
+ { "DEBUG_BUS_SEL_HI", 8, 4 },
+ { "MC_DDRPHY_APB_ERROR_STATUS0", 0x47804, 0 },
+ { "INVALID_ADDRESS", 15, 1 },
+ { "WR_PAR_ERR", 14, 1 },
+ { "MC_DDRPHY_APB_ERROR_MASK0", 0x47808, 0 },
+ { "INVALID_ADDRESS_MASK", 15, 1 },
+ { "WR_PAR_ERR_MASK", 14, 1 },
+ { "MC_DDRPHY_APB_DP18_POPULATION", 0x4780c, 0 },
+ { "DP18_0_Populated", 15, 1 },
+ { "DP18_1_Populated", 14, 1 },
+ { "DP18_2_Populated", 13, 1 },
+ { "DP18_3_Populated", 12, 1 },
+ { "DP18_4_Populated", 11, 1 },
+ { "DP18_5_Populated", 10, 1 },
+ { "DP18_6_Populated", 9, 1 },
+ { "DP18_7_Populated", 8, 1 },
+ { "DP18_8_Populated", 7, 1 },
+ { "DP18_9_Populated", 6, 1 },
+ { "DP18_10_Populated", 5, 1 },
+ { "DP18_11_Populated", 4, 1 },
+ { "DP18_12_Populated", 3, 1 },
+ { "DP18_13_Populated", 2, 1 },
+ { "DP18_14_Populated", 1, 1 },
+ { "MC_DDRPHY_APB_ADR_POPULATION", 0x47810, 0 },
+ { "ADR16_0_Populated", 15, 1 },
+ { "ADR16_1_Populated", 14, 1 },
+ { "ADR16_2_Populated", 13, 1 },
+ { "ADR16_3_Populated", 12, 1 },
+ { "ADR12_0_Populated", 7, 1 },
+ { "ADR12_1_Populated", 6, 1 },
+ { "ADR12_2_Populated", 5, 1 },
+ { "ADR12_3_Populated", 4, 1 },
+ { "MC_DDRPHY_APB_ATEST_MUX_SEL", 0x47814, 0 },
+ { "ATEST_CNTL", 10, 6 },
+ { "MC_DDRPHY_APB_MTCTL_REG0", 0x47820, 0 },
+ { "MT_DATA_MUX4_1MODE", 15, 1 },
+ { "MT_PLL_RESET", 14, 1 },
+ { "MT_SYSCLK_RESET", 13, 1 },
+ { "MT_GLOBAL_PHY_OFFSET", 9, 4 },
+ { "MT_DQ_SEL_QUAD", 7, 2 },
+ { "MT_PERFORM_RDCLK_ALIGN", 6, 1 },
+ { "MT_ALIGN_ON_EVEN_CYCLES", 5, 1 },
+ { "MT_WRCLK_CAL_START", 4, 1 },
+ { "MC_DDRPHY_APB_MTCTL_REG1", 0x47824, 0 },
+ { "MT_WPRD_ENABLE", 15, 1 },
+ { "MT_PVTP", 10, 5 },
+ { "MT_PVTN", 5, 5 },
+ { "MC_DDRPHY_APB_MTSTAT_REG0", 0x47828, 0 },
+ { "MC_DDRPHY_APB_MTSTAT_REG1", 0x4782c, 0 },
+ { "MT_ADR32_PLL_LOCK_SUM", 1, 1 },
+ { "MT_DP18_PLL_LOCK_SUM", 0, 1 },
+ { "MC_LMC_MCSTAT", 0x40040, 0 },
+ { "INIT_COMPLETE", 31, 1 },
+ { "SELF_REF_MODE", 30, 1 },
+ { "IDLE", 29, 1 },
+ { "DFI_INIT_COMPLETE", 28, 1 },
+ { "PREFILL_COMPLETE", 27, 1 },
+ { "MC_LMC_MCOPT1", 0x40080, 0 },
+ { "MC_PROTOCOL", 31, 1 },
+ { "DM_ENABLE", 30, 1 },
+ { "ECC_EN", 29, 1 },
+ { "ECC_COR", 28, 1 },
+ { "RDIMM", 27, 1 },
+ { "PMUM", 25, 2 },
+ { "WIDTH0", 24, 1 },
+ { "PORT_ID_CHK_EN", 23, 1 },
+ { "UIOS", 22, 1 },
+ { "QUADCS_RDIMM", 21, 1 },
+ { "ZQCL_EN", 20, 1 },
+ { "WIDTH1", 19, 1 },
+ { "WD_DLY", 18, 1 },
+ { "QDEPTH", 16, 2 },
+ { "RWOO", 15, 1 },
+ { "WOOO", 14, 1 },
+ { "DCOO", 13, 1 },
+ { "DEF_REF", 12, 1 },
+ { "DEV_TYPE", 11, 1 },
+ { "CA_PTY_DLY", 10, 1 },
+ { "ECC_MUX", 8, 2 },
+ { "CE_THRESHOLD", 0, 8 },
+ { "MC_LMC_MCOPT2", 0x40084, 0 },
+ { "SELF_REF_EN", 31, 1 },
+ { "XSR_PREVENT", 30, 1 },
+ { "INIT_START", 29, 1 },
+ { "MC_ENABLE", 28, 1 },
+ { "CLK_DISABLE", 24, 4 },
+ { "RESET_RANK", 20, 4 },
+ { "MCIF_COMP_PTY_EN", 19, 1 },
+ { "CKE_OE", 17, 1 },
+ { "RESET_OE", 16, 1 },
+ { "DFI_PHYUD_CNTL", 14, 1 },
+ { "DFI_PHYUD_ACK", 13, 1 },
+ { "DFI_INIT_START", 12, 1 },
+ { "PM_ENABLE", 8, 4 },
+ { "RD_DEFREF_CNT", 4, 4 },
+ { "MC_LMC_CFGR0", 0x40100, 0 },
+ { "ROW_WIDTH", 12, 3 },
+ { "ADDR_MODE", 8, 4 },
+ { "MIRROR", 4, 1 },
+ { "RANK_ENABLE", 0, 1 },
+ { "MC_LMC_INITSEQ0", 0x40140, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD0", 0x40144, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ1", 0x40148, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD1", 0x4014c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ2", 0x40150, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD2", 0x40154, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ3", 0x40158, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD3", 0x4015c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ4", 0x40160, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD4", 0x40164, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ5", 0x40168, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD5", 0x4016c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ6", 0x40170, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD6", 0x40174, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ7", 0x40178, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD7", 0x4017c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ8", 0x40180, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD8", 0x40184, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ9", 0x40188, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD9", 0x4018c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ10", 0x40190, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD10", 0x40194, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ11", 0x40198, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD11", 0x4019c, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ12", 0x401a0, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD12", 0x401a4, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ13", 0x401a8, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD13", 0x401ac, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ14", 0x401b0, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD14", 0x401b4, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_INITSEQ15", 0x401b8, 0 },
+ { "INIT_ENABLE", 31, 1 },
+ { "WAIT", 16, 12 },
+ { "EN_MULTI_RANK_SEL", 4, 1 },
+ { "RANK", 0, 4 },
+ { "MC_LMC_CMD15", 0x401bc, 0 },
+ { "CMD", 29, 3 },
+ { "CMD_ACTN", 28, 1 },
+ { "BG1", 23, 1 },
+ { "BANK", 20, 3 },
+ { "ADDR", 0, 16 },
+ { "MC_LMC_SDTR0", 0x40200, 0 },
+ { "REFI", 16, 16 },
+ { "T_RFC_XPR", 0, 12 },
+ { "MC_LMC_SDTR1", 0x40204, 0 },
+ { "T_LEADOFF", 31, 1 },
+ { "ODT_DELAY", 30, 1 },
+ { "ODT_WIDTH", 29, 1 },
+ { "T_WTRO", 24, 4 },
+ { "T_RTWO", 16, 4 },
+ { "T_RTW_ADJ", 12, 4 },
+ { "T_WTWO", 8, 4 },
+ { "T_RTRO", 0, 4 },
+ { "MC_LMC_SDTR2", 0x40208, 0 },
+ { "T_CWL", 28, 4 },
+ { "T_RCD0", 24, 4 },
+ { "T_PL", 20, 4 },
+ { "T_RP0", 16, 4 },
+ { "T_RP1", 15, 1 },
+ { "T_RCD1", 14, 1 },
+ { "T_RC", 8, 6 },
+ { "T_RAS", 0, 6 },
+ { "MC_LMC_SDTR3", 0x4020c, 0 },
+ { "T_WTR_S", 28, 4 },
+ { "T_WTR", 24, 4 },
+ { "FAW_ADJ", 20, 2 },
+ { "T_RTP", 16, 4 },
+ { "T_RRD_L", 12, 4 },
+ { "T_RRD", 8, 4 },
+ { "T_XSDLL", 0, 8 },
+ { "MC_LMC_SDTR4", 0x40210, 0 },
+ { "T_RDDATA_EN", 24, 7 },
+ { "T_SYS_RDLAT", 16, 6 },
+ { "T_CCD_L", 12, 4 },
+ { "T_CCD", 8, 3 },
+ { "T_CPDED", 5, 3 },
+ { "T_MOD", 0, 5 },
+ { "MC_LMC_SDTR5", 0x40214, 0 },
+ { "T_PHY_WRDATA", 24, 3 },
+ { "T_PHY_WRLAT", 16, 5 },
+ { "MC_LMC_DBG0", 0x40228, 0 },
+ { "T_SYS_RDLAT_DBG", 16, 5 },
+ { "MC_LMC_SMR0", 0x40240, 0 },
+ { "SMR0_RFU0", 13, 3 },
+ { "PPD", 12, 1 },
+ { "WR_RTP", 9, 3 },
+ { "SMR0_DLL", 8, 1 },
+ { "TM", 7, 1 },
+ { "CL31", 4, 3 },
+ { "RBT", 3, 1 },
+ { "CL0", 2, 1 },
+ { "BL", 0, 2 },
+ { "MC_LMC_SMR1", 0x40244, 0 },
+ { "QOFF", 12, 1 },
+ { "TDQS", 11, 1 },
+ { "SMR1_RFU0", 10, 1 },
+ { "RTT_NOM0", 9, 1 },
+ { "SMR1_RFU1", 8, 1 },
+ { "WR_LEVEL", 7, 1 },
+ { "RTT_NOM1", 6, 1 },
+ { "DIC0", 5, 1 },
+ { "AL", 3, 2 },
+ { "RTT_NOM2", 2, 1 },
+ { "DIC1", 1, 1 },
+ { "SMR1_DLL", 0, 1 },
+ { "MC_LMC_SMR2", 0x40248, 0 },
+ { "WR_CRC", 12, 1 },
+ { "RD_CRC", 11, 1 },
+ { "RTT_WR", 9, 2 },
+ { "SMR2_RFU0", 8, 1 },
+ { "SRT_ASR1", 7, 1 },
+ { "ASR0", 6, 1 },
+ { "CWL", 3, 3 },
+ { "PASR", 0, 3 },
+ { "MC_LMC_SMR3", 0x4024c, 0 },
+ { "MPR_RD_FMT", 11, 2 },
+ { "SMR3_RFU0", 9, 2 },
+ { "FGR_MODE", 6, 3 },
+ { "MRS_RDO", 5, 1 },
+ { "DRAM_ADR", 4, 1 },
+ { "GD_MODE", 3, 1 },
+ { "MPR", 2, 1 },
+ { "MPR_SEL", 0, 2 },
+ { "MC_LMC_SMR4", 0x40250, 0 },
+ { "WR_PRE", 12, 1 },
+ { "RD_PRE", 11, 1 },
+ { "RPT_MODE", 10, 1 },
+ { "FESR_MODE", 9, 1 },
+ { "CS_LAT_MODE", 6, 3 },
+ { "ALERT_STAT", 5, 1 },
+ { "IVM_MODE", 4, 1 },
+ { "TCR_MODE", 3, 1 },
+ { "TCR_RANGE", 2, 1 },
+ { "MPD_MODE", 1, 1 },
+ { "SMR4_RFU", 0, 1 },
+ { "MC_LMC_SMR5", 0x40254, 0 },
+ { "RD_DBI", 11, 1 },
+ { "WR_DBI", 10, 1 },
+ { "DM_MODE", 9, 1 },
+ { "RTT_PARK", 6, 3 },
+ { "SMR5_RFU", 5, 1 },
+ { "PAR_ERR_STAT", 4, 1 },
+ { "CRC_CLEAR", 3, 1 },
+ { "PAR_LAT_MODE", 0, 3 },
+ { "MC_LMC_SMR6", 0x40258, 0 },
+ { "TCCD_L", 10, 3 },
+ { "SRM6_RFU", 7, 3 },
+ { "VREF_DQ_RANGE", 6, 1 },
+ { "VREF_DQ_VALUE", 0, 6 },
+ { "MC_LMC_ODTR0", 0x40280, 0 },
+ { "RK0W", 25, 1 },
+ { "RK0R", 24, 1 },
+ { "MC_LMC_CALSTAT", 0x40304, 0 },
+ { "PHYUPD_ERR", 28, 4 },
+ { "PHYUPD_BUSY", 27, 1 },
+ { "MC_LMC_T_PHYUPD0", 0x40330, 0 },
+ { "MC_LMC_T_PHYUPD1", 0x40334, 0 },
+ { "MC_LMC_T_PHYUPD2", 0x40338, 0 },
+ { "MC_LMC_T_PHYUPD3", 0x4033c, 0 },
+ { "MC_P_DDRPHY_RST_CTRL", 0x41300, 0 },
+ { "PHY_CAL_REQ", 21, 1 },
+ { "PHY_DRAM_WL", 17, 4 },
+ { "PHY_CALIB_DONE", 5, 1 },
+ { "CTL_CAL_REQ", 4, 1 },
+ { "CTL_CKE", 3, 1 },
+ { "CTL_RST_N", 2, 1 },
+ { "DDRIO_ENABLE", 1, 1 },
+ { "PHY_RST_N", 0, 1 },
+ { "MC_P_PERFORMANCE_CTRL", 0x41304, 0 },
+ { "BUF_USE_TH", 12, 3 },
+ { "MC_IDLE_TH", 8, 4 },
+ { "RMW_DEFER_EN", 7, 1 },
+ { "DDR3_BRBC_MODE", 6, 1 },
+ { "RMW_DWRITE_EN", 5, 1 },
+ { "RMW_MERGE_EN", 4, 1 },
+ { "SYNC_PAB_EN", 3, 1 },
+ { "STALL_CHK_BIT", 2, 1 },
+ { "DDR3_BRC_MODE", 1, 1 },
+ { "RMW_PERF_CTRL", 0, 1 },
+ { "MC_P_ECC_CTRL", 0x41308, 0 },
+ { "ECC_BYPASS_BIST", 1, 1 },
+ { "ECC_DISABLE", 0, 1 },
+ { "MC_P_PAR_ENABLE", 0x4130c, 0 },
+ { "ECC_UE_PAR_ENABLE", 3, 1 },
+ { "ECC_CE_PAR_ENABLE", 2, 1 },
+ { "PERR_REG_INT_ENABLE", 1, 1 },
+ { "PERR_BLK_INT_ENABLE", 0, 1 },
+ { "MC_P_PAR_CAUSE", 0x41310, 0 },
+ { "ECC_UE_PAR_CAUSE", 3, 1 },
+ { "ECC_CE_PAR_CAUSE", 2, 1 },
+ { "FIFOR_PAR_CAUSE", 1, 1 },
+ { "RDATA_FIFOR_PAR_CAUSE", 0, 1 },
+ { "MC_P_INT_ENABLE", 0x41314, 0 },
+ { "ECC_UE_INT_ENABLE", 2, 1 },
+ { "ECC_CE_INT_ENABLE", 1, 1 },
+ { "PERR_INT_ENABLE", 0, 1 },
+ { "MC_P_INT_CAUSE", 0x41318, 0 },
+ { "ECC_UE_INT_CAUSE", 2, 1 },
+ { "ECC_CE_INT_CAUSE", 1, 1 },
+ { "PERR_INT_CAUSE", 0, 1 },
+ { "MC_P_ECC_STATUS", 0x4131c, 0 },
+ { "ECC_CECNT", 16, 16 },
+ { "ECC_UECNT", 0, 16 },
+ { "MC_P_PHY_CTRL", 0x41320, 0 },
+ { "MC_P_STATIC_CFG_STATUS", 0x41324, 0 },
+ { "STATIC_PP64", 26, 1 },
+ { "STATIC_PPEN", 25, 1 },
+ { "STATIC_OOOEN", 24, 1 },
+ { "STATIC_AWEN", 23, 1 },
+ { "STATIC_SWLAT", 18, 5 },
+ { "STATIC_WLAT", 17, 1 },
+ { "STATIC_ALIGN", 16, 1 },
+ { "STATIC_SLAT", 11, 5 },
+ { "STATIC_LAT", 10, 1 },
+ { "STATIC_MODE", 9, 1 },
+ { "STATIC_DEN", 6, 3 },
+ { "STATIC_ORG", 5, 1 },
+ { "STATIC_RKS", 4, 1 },
+ { "STATIC_WIDTH", 1, 3 },
+ { "STATIC_SLOW", 0, 1 },
+ { "MC_P_CORE_PCTL_STAT", 0x41328, 0 },
+ { "MC_P_DEBUG_CNT", 0x4132c, 0 },
+ { "WDATA_OCNT", 8, 5 },
+ { "RDATA_OCNT", 0, 5 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41330, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41334, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41338, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x4133c, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41340, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41344, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41348, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x4134c, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41350, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41354, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41358, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x4135c, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41360, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41364, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x41368, 0 },
+ { "MC_CE_ERR_DATA_RDATA", 0x4136c, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41370, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41374, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41378, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x4137c, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41380, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41384, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41388, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x4138c, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41390, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41394, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x41398, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x4139c, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x413a0, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x413a4, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x413a8, 0 },
+ { "MC_UE_ERR_DATA_RDATA", 0x413ac, 0 },
+ { "MC_CE_ADDR", 0x413b0, 0 },
+ { "MC_UE_ADDR", 0x413b4, 0 },
+ { "MC_P_DEEP_SLEEP", 0x413b8, 0 },
+ { "SleepStatus", 1, 1 },
+ { "SleepReq", 0, 1 },
+ { "MC_P_FPGA_BONUS", 0x413bc, 0 },
+ { "MC_P_DEBUG_CFG", 0x413c0, 0 },
+ { "DEBUG_OR", 15, 1 },
+ { "DEBUG_HI", 14, 1 },
+ { "DEBUG_RPT", 13, 1 },
+ { "DEBUGPAGE", 10, 3 },
+ { "DEBUGSELH", 5, 5 },
+ { "DEBUGSELL", 0, 5 },
+ { "MC_P_DEBUG_RPT", 0x413c4, 0 },
+ { "MC_P_PHY_ADR_CK_EN", 0x413c8, 0 },
+ { "MC_CE_ERR_ECC_DATA0", 0x413d0, 0 },
+ { "MC_CE_ERR_ECC_DATA1", 0x413d4, 0 },
+ { "MC_UE_ERR_ECC_DATA0", 0x413d8, 0 },
+ { "MC_UE_ERR_ECC_DATA1", 0x413dc, 0 },
+ { "MC_P_RMW_PRIO", 0x413f0, 0 },
+ { "WR_HI_TH", 24, 8 },
+ { "WR_MID_TH", 16, 8 },
+ { "RD_HI_TH", 8, 8 },
+ { "RD_MID_TH", 0, 8 },
+ { "MC_P_BIST_CMD", 0x41400, 0 },
+ { "START_BIST", 31, 1 },
+ { "BURST_LEN", 16, 2 },
+ { "BIST_CMD_GAP", 8, 8 },
+ { "BIST_OPCODE", 0, 2 },
+ { "MC_P_BIST_CMD_ADDR", 0x41404, 0 },
+ { "MC_P_BIST_CMD_LEN", 0x41408, 0 },
+ { "MC_P_BIST_DATA_PATTERN", 0x4140c, 0 },
+ { "MC_P_BIST_USER_WMASK0", 0x41414, 0 },
+ { "MC_P_BIST_USER_WMASK1", 0x41418, 0 },
+ { "MC_P_BIST_USER_WMASK2", 0x4141c, 0 },
+ { "MASK_128_1", 9, 1 },
+ { "MASK_128_0", 8, 1 },
+ { "USER_MASK_ECC", 0, 8 },
+ { "MC_P_BIST_NUM_ERR", 0x41480, 0 },
+ { "MC_P_BIST_ERR_FIRST_ADDR", 0x41484, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x41488, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x4148c, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x41490, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x41494, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x41498, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x4149c, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414a0, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414a4, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414a8, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414ac, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414b0, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414b4, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414b8, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414bc, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414c0, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414c4, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414c8, 0 },
+ { "MC_P_BIST_STATUS_RDATA", 0x414cc, 0 },
+ { "MC_P_BIST_CRC_SEED", 0x414d0, 0 },
+ { NULL }
+};
+
+struct reg_info t6_edc_t60_regs[] = {
+ { "EDC_H_REF", 0x50000, 0 },
+ { "SleepStatus", 31, 1 },
+ { "SleepReq", 30, 1 },
+ { "PING_PONG", 29, 1 },
+ { "QDR_ClkPhase", 24, 3 },
+ { "MaxOpsPerTRC", 21, 3 },
+ { "NumPipeStages", 19, 2 },
+ { "EDC_INST_NUM", 18, 1 },
+ { "ENABLE_PERF", 17, 1 },
+ { "ECC_BYPASS", 16, 1 },
+ { "RefFreq", 0, 16 },
+ { "EDC_H_BIST_CMD", 0x50004, 0 },
+ { "START_BIST", 31, 1 },
+ { "BURST_LEN", 16, 2 },
+ { "BIST_CMD_GAP", 8, 8 },
+ { "BIST_OPCODE", 0, 2 },
+ { "EDC_H_BIST_CMD_ADDR", 0x50008, 0 },
+ { "EDC_H_BIST_CMD_LEN", 0x5000c, 0 },
+ { "EDC_H_BIST_DATA_PATTERN", 0x50010, 0 },
+ { "EDC_H_BIST_USER_WDATA0", 0x50014, 0 },
+ { "EDC_H_BIST_USER_WDATA1", 0x50018, 0 },
+ { "EDC_H_BIST_USER_WDATA2", 0x5001c, 0 },
+ { "USER_DATA_MASK", 8, 9 },
+ { "USER_DATA2", 0, 8 },
+ { "EDC_H_BIST_NUM_ERR", 0x50020, 0 },
+ { "EDC_H_BIST_ERR_FIRST_ADDR", 0x50024, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50028, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5002c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50030, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50034, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50038, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5003c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50040, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50044, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50048, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5004c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50050, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50054, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50058, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5005c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50060, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50064, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50068, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5006c, 0 },
+ { "EDC_H_PAR_ENABLE", 0x50070, 0 },
+ { "ECC_UE_PAR_ENABLE", 2, 1 },
+ { "ECC_CE_PAR_ENABLE", 1, 1 },
+ { "PERR_PAR_ENABLE", 0, 1 },
+ { "EDC_H_INT_ENABLE", 0x50074, 0 },
+ { "ECC_UE_INT_ENABLE", 2, 1 },
+ { "ECC_CE_INT_ENABLE", 1, 1 },
+ { "PERR_INT_ENABLE", 0, 1 },
+ { "EDC_H_INT_CAUSE", 0x50078, 0 },
+ { "ECC_UE_INT0_CAUSE", 5, 1 },
+ { "ECC_CE_INT0_CAUSE", 4, 1 },
+ { "PERR_INT0_CAUSE", 3, 1 },
+ { "ECC_UE_INT_CAUSE", 2, 1 },
+ { "ECC_CE_INT_CAUSE", 1, 1 },
+ { "PERR_INT_CAUSE", 0, 1 },
+ { "EDC_H_ECC_STATUS", 0x5007c, 0 },
+ { "ECC_CECNT", 16, 16 },
+ { "ECC_UECNT", 0, 16 },
+ { "EDC_H_ECC_ERR_SEL", 0x50080, 0 },
+ { "EDC_H_ECC_ERR_ADDR", 0x50084, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50090, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50094, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50098, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x5009c, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500a0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500a4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500a8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500ac, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500b0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500b4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500b8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500bc, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500c0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500c4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500c8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x500cc, 0 },
+ { "EDC_H_DBG_MA_CMD_INTF", 0x50300, 0 },
+ { "MCmdAddr", 12, 20 },
+ { "MCmdLen", 5, 7 },
+ { "MCmdNRE", 4, 1 },
+ { "MCmdNRB", 3, 1 },
+ { "MCmdWr", 2, 1 },
+ { "MCmdRdy", 1, 1 },
+ { "MCmdVld", 0, 1 },
+ { "EDC_H_DBG_MA_WDATA_INTF", 0x50304, 0 },
+ { "MWDataVld", 31, 1 },
+ { "MWDataRdy", 30, 1 },
+ { "MWData", 0, 30 },
+ { "EDC_H_DBG_MA_RDATA_INTF", 0x50308, 0 },
+ { "MRspVld", 31, 1 },
+ { "MRspRdy", 30, 1 },
+ { "MRspData", 0, 30 },
+ { "EDC_H_DBG_BIST_CMD_INTF", 0x5030c, 0 },
+ { "BCmdAddr", 9, 23 },
+ { "BCmdLen", 3, 6 },
+ { "BCmdWr", 2, 1 },
+ { "BCmdRdy", 1, 1 },
+ { "BCmdVld", 0, 1 },
+ { "EDC_H_DBG_BIST_WDATA_INTF", 0x50310, 0 },
+ { "BWDataVld", 31, 1 },
+ { "BWDataRdy", 30, 1 },
+ { "BWData", 0, 30 },
+ { "EDC_H_DBG_BIST_RDATA_INTF", 0x50314, 0 },
+ { "BRspVld", 31, 1 },
+ { "BRspRdy", 30, 1 },
+ { "BRspData", 0, 30 },
+ { "EDC_H_DBG_EDRAM_CMD_INTF", 0x50318, 0 },
+ { "EdramAddr", 16, 16 },
+ { "EdramDwsn", 8, 8 },
+ { "EdramCra", 5, 3 },
+ { "EdramRefEnLo", 4, 1 },
+ { "Edram1WrEnLo", 3, 1 },
+ { "Edram1RdEnLo", 2, 1 },
+ { "Edram0WrEnLo", 1, 1 },
+ { "Edram0RdEnLo", 0, 1 },
+ { "EDC_H_DBG_EDRAM_WDATA_INTF", 0x5031c, 0 },
+ { "EdramWData", 9, 23 },
+ { "EdramWByteEn", 0, 9 },
+ { "EDC_H_DBG_EDRAM0_RDATA_INTF", 0x50320, 0 },
+ { "EDC_H_DBG_EDRAM1_RDATA_INTF", 0x50324, 0 },
+ { "EDC_H_DBG_MA_WR_REQ_CNT", 0x50328, 0 },
+ { "EDC_H_DBG_MA_WR_EXP_DAT_CYC_CNT", 0x5032c, 0 },
+ { "EDC_H_DBG_MA_WR_DAT_CYC_CNT", 0x50330, 0 },
+ { "EDC_H_DBG_MA_RD_REQ_CNT", 0x50334, 0 },
+ { "EDC_H_DBG_MA_RD_EXP_DAT_CYC_CNT", 0x50338, 0 },
+ { "EDC_H_DBG_MA_RD_DAT_CYC_CNT", 0x5033c, 0 },
+ { "EDC_H_DBG_BIST_WR_REQ_CNT", 0x50340, 0 },
+ { "EDC_H_DBG_BIST_WR_EXP_DAT_CYC_CNT", 0x50344, 0 },
+ { "EDC_H_DBG_BIST_WR_DAT_CYC_CNT", 0x50348, 0 },
+ { "EDC_H_DBG_BIST_RD_REQ_CNT", 0x5034c, 0 },
+ { "EDC_H_DBG_BIST_RD_EXP_DAT_CYC_CNT", 0x50350, 0 },
+ { "EDC_H_DBG_BIST_RD_DAT_CYC_CNT", 0x50354, 0 },
+ { "EDC_H_DBG_EDRAM0_WR_REQ_CNT", 0x50358, 0 },
+ { "EDC_H_DBG_EDRAM0_RD_REQ_CNT", 0x5035c, 0 },
+ { "EDC_H_DBG_EDRAM0_RMW_CNT", 0x50360, 0 },
+ { "EDC_H_DBG_EDRAM1_WR_REQ_CNT", 0x50364, 0 },
+ { "EDC_H_DBG_EDRAM1_RD_REQ_CNT", 0x50368, 0 },
+ { "EDC_H_DBG_EDRAM1_RMW_CNT", 0x5036c, 0 },
+ { "EDC_H_DBG_EDRAM_REF_BURST_CNT", 0x50370, 0 },
+ { "EDC_H_DBG_FIFO_STATUS", 0x50374, 0 },
+ { "rdtag_notfull", 17, 1 },
+ { "rdtag_notempty", 16, 1 },
+ { "inp_cmdq_notfull_arb", 15, 1 },
+ { "inp_cmdq_notempty", 14, 1 },
+ { "inp_wrdq_wrrdy", 13, 1 },
+ { "inp_wrdq_notempty", 12, 1 },
+ { "inp_beq_wrrdy_open", 11, 1 },
+ { "inp_beq_notempty", 10, 1 },
+ { "rddq_notfull_open", 9, 1 },
+ { "rddq_rdcnt", 4, 5 },
+ { "rdsideq_notfull", 3, 1 },
+ { "rdsideq_notempty", 2, 1 },
+ { "stg_cmdq_notempty", 1, 1 },
+ { "stg_wrdq_notempty", 0, 1 },
+ { "EDC_H_DBG_FSM_STATE", 0x50378, 0 },
+ { "CmdSplitFsm", 3, 1 },
+ { "CmdFsm", 0, 3 },
+ { "EDC_H_DBG_STALL_CYCLES", 0x5037c, 0 },
+ { "stall_rmw", 19, 1 },
+ { "stall_edc_cmd", 18, 1 },
+ { "dead_cycle0", 17, 1 },
+ { "dead_cycle1", 16, 1 },
+ { "dead_cycle0_bbi", 15, 1 },
+ { "dead_cycle1_bbi", 14, 1 },
+ { "dead_cycle0_max_op", 13, 1 },
+ { "dead_cycle1_max_op", 12, 1 },
+ { "dead_cycle0_pre_ref", 11, 1 },
+ { "dead_cycle1_pre_ref", 10, 1 },
+ { "dead_cycle0_post_ref", 9, 1 },
+ { "dead_cycle1_post_ref", 8, 1 },
+ { "dead_cycle0_rmw", 7, 1 },
+ { "dead_cycle1_rmw", 6, 1 },
+ { "dead_cycle0_bbi_rmw", 5, 1 },
+ { "dead_cycle1_bbi_rmw", 4, 1 },
+ { "dead_cycle0_pre_ref_rmw", 3, 1 },
+ { "dead_cycle1_pre_ref_rmw", 2, 1 },
+ { "dead_cycle0_post_ref_rmw", 1, 1 },
+ { "dead_cycle1_post_ref_rmw", 0, 1 },
+ { "EDC_H_DBG_CMD_QUEUE", 0x50380, 0 },
+ { "ECmdNRE", 31, 1 },
+ { "ECmdNRB", 30, 1 },
+ { "ECmdWr", 29, 1 },
+ { "ECmdLen", 22, 7 },
+ { "ECmdAddr", 0, 22 },
+ { "EDC_H_DBG_REFRESH", 0x50384, 0 },
+ { "RefDone", 12, 1 },
+ { "RefCntExpr", 11, 1 },
+ { "RefPtr", 8, 3 },
+ { "RefCnt", 0, 8 },
+ { "EDC_H_BIST_CRC_SEED", 0x50400, 0 },
+ { NULL }
+};
+
+struct reg_info t6_edc_t61_regs[] = {
+ { "EDC_H_REF", 0x50800, 0 },
+ { "SleepStatus", 31, 1 },
+ { "SleepReq", 30, 1 },
+ { "PING_PONG", 29, 1 },
+ { "QDR_ClkPhase", 24, 3 },
+ { "MaxOpsPerTRC", 21, 3 },
+ { "NumPipeStages", 19, 2 },
+ { "EDC_INST_NUM", 18, 1 },
+ { "ENABLE_PERF", 17, 1 },
+ { "ECC_BYPASS", 16, 1 },
+ { "RefFreq", 0, 16 },
+ { "EDC_H_BIST_CMD", 0x50804, 0 },
+ { "START_BIST", 31, 1 },
+ { "BURST_LEN", 16, 2 },
+ { "BIST_CMD_GAP", 8, 8 },
+ { "BIST_OPCODE", 0, 2 },
+ { "EDC_H_BIST_CMD_ADDR", 0x50808, 0 },
+ { "EDC_H_BIST_CMD_LEN", 0x5080c, 0 },
+ { "EDC_H_BIST_DATA_PATTERN", 0x50810, 0 },
+ { "EDC_H_BIST_USER_WDATA0", 0x50814, 0 },
+ { "EDC_H_BIST_USER_WDATA1", 0x50818, 0 },
+ { "EDC_H_BIST_USER_WDATA2", 0x5081c, 0 },
+ { "USER_DATA_MASK", 8, 9 },
+ { "USER_DATA2", 0, 8 },
+ { "EDC_H_BIST_NUM_ERR", 0x50820, 0 },
+ { "EDC_H_BIST_ERR_FIRST_ADDR", 0x50824, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50828, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5082c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50830, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50834, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50838, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5083c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50840, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50844, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50848, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5084c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50850, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50854, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50858, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5085c, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50860, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50864, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x50868, 0 },
+ { "EDC_H_BIST_STATUS_RDATA", 0x5086c, 0 },
+ { "EDC_H_PAR_ENABLE", 0x50870, 0 },
+ { "ECC_UE_PAR_ENABLE", 2, 1 },
+ { "ECC_CE_PAR_ENABLE", 1, 1 },
+ { "PERR_PAR_ENABLE", 0, 1 },
+ { "EDC_H_INT_ENABLE", 0x50874, 0 },
+ { "ECC_UE_INT_ENABLE", 2, 1 },
+ { "ECC_CE_INT_ENABLE", 1, 1 },
+ { "PERR_INT_ENABLE", 0, 1 },
+ { "EDC_H_INT_CAUSE", 0x50878, 0 },
+ { "ECC_UE_INT0_CAUSE", 5, 1 },
+ { "ECC_CE_INT0_CAUSE", 4, 1 },
+ { "PERR_INT0_CAUSE", 3, 1 },
+ { "ECC_UE_INT_CAUSE", 2, 1 },
+ { "ECC_CE_INT_CAUSE", 1, 1 },
+ { "PERR_INT_CAUSE", 0, 1 },
+ { "EDC_H_ECC_STATUS", 0x5087c, 0 },
+ { "ECC_CECNT", 16, 16 },
+ { "ECC_UECNT", 0, 16 },
+ { "EDC_H_ECC_ERR_SEL", 0x50880, 0 },
+ { "EDC_H_ECC_ERR_ADDR", 0x50884, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50890, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50894, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x50898, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x5089c, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508a0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508a4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508a8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508ac, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508b0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508b4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508b8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508bc, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508c0, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508c4, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508c8, 0 },
+ { "EDC_H_ECC_ERR_DATA_RDATA", 0x508cc, 0 },
+ { "EDC_H_DBG_MA_CMD_INTF", 0x50b00, 0 },
+ { "MCmdAddr", 12, 20 },
+ { "MCmdLen", 5, 7 },
+ { "MCmdNRE", 4, 1 },
+ { "MCmdNRB", 3, 1 },
+ { "MCmdWr", 2, 1 },
+ { "MCmdRdy", 1, 1 },
+ { "MCmdVld", 0, 1 },
+ { "EDC_H_DBG_MA_WDATA_INTF", 0x50b04, 0 },
+ { "MWDataVld", 31, 1 },
+ { "MWDataRdy", 30, 1 },
+ { "MWData", 0, 30 },
+ { "EDC_H_DBG_MA_RDATA_INTF", 0x50b08, 0 },
+ { "MRspVld", 31, 1 },
+ { "MRspRdy", 30, 1 },
+ { "MRspData", 0, 30 },
+ { "EDC_H_DBG_BIST_CMD_INTF", 0x50b0c, 0 },
+ { "BCmdAddr", 9, 23 },
+ { "BCmdLen", 3, 6 },
+ { "BCmdWr", 2, 1 },
+ { "BCmdRdy", 1, 1 },
+ { "BCmdVld", 0, 1 },
+ { "EDC_H_DBG_BIST_WDATA_INTF", 0x50b10, 0 },
+ { "BWDataVld", 31, 1 },
+ { "BWDataRdy", 30, 1 },
+ { "BWData", 0, 30 },
+ { "EDC_H_DBG_BIST_RDATA_INTF", 0x50b14, 0 },
+ { "BRspVld", 31, 1 },
+ { "BRspRdy", 30, 1 },
+ { "BRspData", 0, 30 },
+ { "EDC_H_DBG_EDRAM_CMD_INTF", 0x50b18, 0 },
+ { "EdramAddr", 16, 16 },
+ { "EdramDwsn", 8, 8 },
+ { "EdramCra", 5, 3 },
+ { "EdramRefEnLo", 4, 1 },
+ { "Edram1WrEnLo", 3, 1 },
+ { "Edram1RdEnLo", 2, 1 },
+ { "Edram0WrEnLo", 1, 1 },
+ { "Edram0RdEnLo", 0, 1 },
+ { "EDC_H_DBG_EDRAM_WDATA_INTF", 0x50b1c, 0 },
+ { "EdramWData", 9, 23 },
+ { "EdramWByteEn", 0, 9 },
+ { "EDC_H_DBG_EDRAM0_RDATA_INTF", 0x50b20, 0 },
+ { "EDC_H_DBG_EDRAM1_RDATA_INTF", 0x50b24, 0 },
+ { "EDC_H_DBG_MA_WR_REQ_CNT", 0x50b28, 0 },
+ { "EDC_H_DBG_MA_WR_EXP_DAT_CYC_CNT", 0x50b2c, 0 },
+ { "EDC_H_DBG_MA_WR_DAT_CYC_CNT", 0x50b30, 0 },
+ { "EDC_H_DBG_MA_RD_REQ_CNT", 0x50b34, 0 },
+ { "EDC_H_DBG_MA_RD_EXP_DAT_CYC_CNT", 0x50b38, 0 },
+ { "EDC_H_DBG_MA_RD_DAT_CYC_CNT", 0x50b3c, 0 },
+ { "EDC_H_DBG_BIST_WR_REQ_CNT", 0x50b40, 0 },
+ { "EDC_H_DBG_BIST_WR_EXP_DAT_CYC_CNT", 0x50b44, 0 },
+ { "EDC_H_DBG_BIST_WR_DAT_CYC_CNT", 0x50b48, 0 },
+ { "EDC_H_DBG_BIST_RD_REQ_CNT", 0x50b4c, 0 },
+ { "EDC_H_DBG_BIST_RD_EXP_DAT_CYC_CNT", 0x50b50, 0 },
+ { "EDC_H_DBG_BIST_RD_DAT_CYC_CNT", 0x50b54, 0 },
+ { "EDC_H_DBG_EDRAM0_WR_REQ_CNT", 0x50b58, 0 },
+ { "EDC_H_DBG_EDRAM0_RD_REQ_CNT", 0x50b5c, 0 },
+ { "EDC_H_DBG_EDRAM0_RMW_CNT", 0x50b60, 0 },
+ { "EDC_H_DBG_EDRAM1_WR_REQ_CNT", 0x50b64, 0 },
+ { "EDC_H_DBG_EDRAM1_RD_REQ_CNT", 0x50b68, 0 },
+ { "EDC_H_DBG_EDRAM1_RMW_CNT", 0x50b6c, 0 },
+ { "EDC_H_DBG_EDRAM_REF_BURST_CNT", 0x50b70, 0 },
+ { "EDC_H_DBG_FIFO_STATUS", 0x50b74, 0 },
+ { "rdtag_notfull", 17, 1 },
+ { "rdtag_notempty", 16, 1 },
+ { "inp_cmdq_notfull_arb", 15, 1 },
+ { "inp_cmdq_notempty", 14, 1 },
+ { "inp_wrdq_wrrdy", 13, 1 },
+ { "inp_wrdq_notempty", 12, 1 },
+ { "inp_beq_wrrdy_open", 11, 1 },
+ { "inp_beq_notempty", 10, 1 },
+ { "rddq_notfull_open", 9, 1 },
+ { "rddq_rdcnt", 4, 5 },
+ { "rdsideq_notfull", 3, 1 },
+ { "rdsideq_notempty", 2, 1 },
+ { "stg_cmdq_notempty", 1, 1 },
+ { "stg_wrdq_notempty", 0, 1 },
+ { "EDC_H_DBG_FSM_STATE", 0x50b78, 0 },
+ { "CmdSplitFsm", 3, 1 },
+ { "CmdFsm", 0, 3 },
+ { "EDC_H_DBG_STALL_CYCLES", 0x50b7c, 0 },
+ { "stall_rmw", 19, 1 },
+ { "stall_edc_cmd", 18, 1 },
+ { "dead_cycle0", 17, 1 },
+ { "dead_cycle1", 16, 1 },
+ { "dead_cycle0_bbi", 15, 1 },
+ { "dead_cycle1_bbi", 14, 1 },
+ { "dead_cycle0_max_op", 13, 1 },
+ { "dead_cycle1_max_op", 12, 1 },
+ { "dead_cycle0_pre_ref", 11, 1 },
+ { "dead_cycle1_pre_ref", 10, 1 },
+ { "dead_cycle0_post_ref", 9, 1 },
+ { "dead_cycle1_post_ref", 8, 1 },
+ { "dead_cycle0_rmw", 7, 1 },
+ { "dead_cycle1_rmw", 6, 1 },
+ { "dead_cycle0_bbi_rmw", 5, 1 },
+ { "dead_cycle1_bbi_rmw", 4, 1 },
+ { "dead_cycle0_pre_ref_rmw", 3, 1 },
+ { "dead_cycle1_pre_ref_rmw", 2, 1 },
+ { "dead_cycle0_post_ref_rmw", 1, 1 },
+ { "dead_cycle1_post_ref_rmw", 0, 1 },
+ { "EDC_H_DBG_CMD_QUEUE", 0x50b80, 0 },
+ { "ECmdNRE", 31, 1 },
+ { "ECmdNRB", 30, 1 },
+ { "ECmdWr", 29, 1 },
+ { "ECmdLen", 22, 7 },
+ { "ECmdAddr", 0, 22 },
+ { "EDC_H_DBG_REFRESH", 0x50b84, 0 },
+ { "RefDone", 12, 1 },
+ { "RefCntExpr", 11, 1 },
+ { "RefPtr", 8, 3 },
+ { "RefCnt", 0, 8 },
+ { "EDC_H_BIST_CRC_SEED", 0x50c00, 0 },
+ { NULL }
+};
+
+struct reg_info t6_hma_t6_regs[] = {
+ { "HMA_TABLE_ACCESS", 0x51000, 0 },
+ { "TRIG", 31, 1 },
+ { "RW", 30, 1 },
+ { "L_SEL", 0, 4 },
+ { "HMA_TABLE_LINE0", 0x51004, 0 },
+ { "HMA_TABLE_LINE1", 0x51008, 0 },
+ { "HMA_TABLE_LINE2", 0x5100c, 0 },
+ { "HMA_TABLE_LINE3", 0x51010, 0 },
+ { "HMA_TABLE_LINE4", 0x51014, 0 },
+ { "HMA_TABLE_LINE5", 0x51018, 0 },
+ { "FID", 16, 11 },
+ { "NOS", 15, 1 },
+ { "RO", 14, 1 },
+ { "TPH", 12, 2 },
+ { "TPH_V", 11, 1 },
+ { "DCA", 0, 11 },
+ { "HMA_COOKIE", 0x5101c, 0 },
+ { "C_REQ", 31, 1 },
+ { "C_FID", 18, 11 },
+ { "C_VAL", 8, 10 },
+ { "C_SEL", 0, 4 },
+ { "HMA_CFG", 0x51020, 0 },
+ { "OP_MODE", 31, 1 },
+ { "HMA_TLB_ACCESS", 0x51028, 0 },
+ { "TRIG", 31, 1 },
+ { "RW", 30, 1 },
+ { "INV_ALL", 29, 1 },
+ { "LOCK_ENTRY", 28, 1 },
+ { "E_SEL", 0, 5 },
+ { "HMA_TLB_BITS", 0x5102c, 0 },
+ { "VA", 12, 20 },
+ { "VALID_E", 4, 1 },
+ { "LOCK", 3, 1 },
+ { "USED", 2, 1 },
+ { "REGION", 0, 2 },
+ { "HMA_TLB_DESC_0_H", 0x51030, 0 },
+ { "HMA_TLB_DESC_0_L", 0x51034, 0 },
+ { "HMA_TLB_DESC_1_H", 0x51038, 0 },
+ { "HMA_TLB_DESC_1_L", 0x5103c, 0 },
+ { "HMA_TLB_DESC_2_H", 0x51040, 0 },
+ { "HMA_TLB_DESC_2_L", 0x51044, 0 },
+ { "HMA_TLB_DESC_3_H", 0x51048, 0 },
+ { "HMA_TLB_DESC_3_L", 0x5104c, 0 },
+ { "HMA_TLB_DESC_4_H", 0x51050, 0 },
+ { "HMA_TLB_DESC_4_L", 0x51054, 0 },
+ { "HMA_TLB_DESC_5_H", 0x51058, 0 },
+ { "HMA_TLB_DESC_5_L", 0x5105c, 0 },
+ { "HMA_TLB_DESC_6_H", 0x51060, 0 },
+ { "HMA_TLB_DESC_6_L", 0x51064, 0 },
+ { "HMA_TLB_DESC_7_H", 0x51068, 0 },
+ { "HMA_TLB_DESC_7_L", 0x5106c, 0 },
+ { "HMA_REG0_MIN", 0x51070, 0 },
+ { "ADDR0_MIN", 12, 20 },
+ { "HMA_REG0_MAX", 0x51074, 0 },
+ { "ADDR0_MAX", 12, 20 },
+ { "HMA_REG0_MASK", 0x51078, 0 },
+ { "PAGE_SIZE0", 12, 20 },
+ { "HMA_REG0_BASE", 0x5107c, 0 },
+ { "HMA_REG1_MIN", 0x51080, 0 },
+ { "ADDR1_MIN", 12, 20 },
+ { "HMA_REG1_MAX", 0x51084, 0 },
+ { "ADDR1_MAX", 12, 20 },
+ { "HMA_REG1_MASK", 0x51088, 0 },
+ { "PAGE_SIZE1", 12, 20 },
+ { "HMA_REG1_BASE", 0x5108c, 0 },
+ { "HMA_REG2_MIN", 0x51090, 0 },
+ { "ADDR2_MIN", 12, 20 },
+ { "HMA_REG2_MAX", 0x51094, 0 },
+ { "ADDR2_MAX", 12, 20 },
+ { "HMA_REG2_MASK", 0x51098, 0 },
+ { "PAGE_SIZE2", 12, 20 },
+ { "HMA_REG2_BASE", 0x5109c, 0 },
+ { "HMA_REG3_MIN", 0x510a0, 0 },
+ { "ADDR3_MIN", 12, 20 },
+ { "HMA_REG3_MAX", 0x510a4, 0 },
+ { "ADDR3_MAX", 12, 20 },
+ { "HMA_REG3_MASK", 0x510a8, 0 },
+ { "PAGE_SIZE3", 12, 20 },
+ { "HMA_REG3_BASE", 0x510ac, 0 },
+ { "HMA_SW_SYNC", 0x510b0, 0 },
+ { "ENTER_SYNC", 31, 1 },
+ { "EXIT_SYNC", 30, 1 },
+ { "HMA_PAR_ENABLE", 0x51300, 0 },
+ { "HMA_INT_ENABLE", 0x51304, 0 },
+ { "IDTF_INT_ENABLE", 5, 1 },
+ { "OTF_INT_ENABLE", 4, 1 },
+ { "RTF_INT_ENABLE", 3, 1 },
+ { "PCIEMST_INT_ENABLE", 2, 1 },
+ { "MAMST_INT_ENABLE", 1, 1 },
+ { "PERR_INT_ENABLE", 0, 1 },
+ { "HMA_INT_CAUSE", 0x51308, 0 },
+ { "IDTF_INT_CAUSE", 5, 1 },
+ { "OTF_INT_CAUSE", 4, 1 },
+ { "RTF_INT_CAUSE", 3, 1 },
+ { "PCIEMST_INT_CAUSE", 2, 1 },
+ { "MAMST_INT_CAUSE", 1, 1 },
+ { "PERR_INT_CAUSE", 0, 1 },
+ { "HMA_MA_MST_ERR", 0x5130c, 0 },
+ { "HMA_RTF_ERR", 0x51310, 0 },
+ { "HMA_OTF_ERR", 0x51314, 0 },
+ { "HMA_IDTF_ERR", 0x51318, 0 },
+ { "HMA_EXIT_TF", 0x5131c, 0 },
+ { "TRIG", 31, 1 },
+ { "RTF", 30, 1 },
+ { "OTF", 29, 1 },
+ { "IDTF", 28, 1 },
+ { "HMA_LOCAL_DEBUG_CFG", 0x51320, 0 },
+ { "DEBUG_OR", 15, 1 },
+ { "DEBUG_HI", 14, 1 },
+ { "DEBUG_RPT", 13, 1 },
+ { "DEBUGPAGE", 10, 3 },
+ { "DEBUGSELH", 5, 5 },
+ { "DEBUGSELL", 0, 5 },
+ { "HMA_LOCAL_DEBUG_RPT", 0x51324, 0 },
+ { NULL }
+};
diff --git a/tools/tools/nanobsd/embedded/common b/tools/tools/nanobsd/embedded/common
index 50e507f..8bbb089 100644
--- a/tools/tools/nanobsd/embedded/common
+++ b/tools/tools/nanobsd/embedded/common
@@ -167,6 +167,8 @@ WITHOUT_SHAREDOCS=true
WITHOUT_SYSCONS=true
WITHOUT_LIB32=true
WITHOUT_TESTS=true
+WITHOUT_DEBUG_FILES=t
+WITHOUT_KERNEL_SYMBOLS=t
"
CONF_INSTALL="$CONF_BUILD
INSTALL_NODEBUG=t
@@ -320,6 +322,7 @@ create_diskimage_mbr ( ) (
-o ${out}
;;
esac
+ rm -f ${out}.xz
xz -9 --keep ${out}
) > ${NANO_LOG}/_.di 2>&1
)
diff --git a/usr.bin/apply/tests/Makefile.depend b/usr.bin/apply/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/apply/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/basename/tests/Makefile.depend b/usr.bin/basename/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/basename/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/Makefile.depend b/usr.bin/bmake/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/archives/Makefile.depend b/usr.bin/bmake/tests/archives/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.depend b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.depend b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.depend b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/basic/Makefile.depend b/usr.bin/bmake/tests/basic/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/basic/t0/Makefile.depend b/usr.bin/bmake/tests/basic/t0/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/basic/t1/Makefile.depend b/usr.bin/bmake/tests/basic/t1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/basic/t2/Makefile.depend b/usr.bin/bmake/tests/basic/t2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/basic/t3/Makefile.depend b/usr.bin/bmake/tests/basic/t3/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/execution/Makefile.depend b/usr.bin/bmake/tests/execution/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/execution/ellipsis/Makefile.depend b/usr.bin/bmake/tests/execution/ellipsis/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/execution/empty/Makefile.depend b/usr.bin/bmake/tests/execution/empty/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/execution/joberr/Makefile.depend b/usr.bin/bmake/tests/execution/joberr/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/execution/plus/Makefile.depend b/usr.bin/bmake/tests/execution/plus/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/Makefile.depend b/usr.bin/bmake/tests/shell/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/builtin/Makefile.depend b/usr.bin/bmake/tests/shell/builtin/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/meta/Makefile.depend b/usr.bin/bmake/tests/shell/meta/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/path/Makefile.depend b/usr.bin/bmake/tests/shell/path/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/path_select/Makefile.depend b/usr.bin/bmake/tests/shell/path_select/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/replace/Makefile.depend b/usr.bin/bmake/tests/shell/replace/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/shell/select/Makefile.depend b/usr.bin/bmake/tests/shell/select/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/suffixes/Makefile.depend b/usr.bin/bmake/tests/suffixes/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/suffixes/basic/Makefile.depend b/usr.bin/bmake/tests/suffixes/basic/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.depend b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.depend b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/syntax/Makefile.depend b/usr.bin/bmake/tests/syntax/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/Makefile.depend b/usr.bin/bmake/tests/syntax/directive-t0/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/syntax/enl/Makefile.depend b/usr.bin/bmake/tests/syntax/enl/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/Makefile.depend b/usr.bin/bmake/tests/syntax/funny-targets/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/syntax/semi/Makefile.depend b/usr.bin/bmake/tests/syntax/semi/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/Makefile.depend b/usr.bin/bmake/tests/sysmk/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.depend b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/Makefile.depend b/usr.bin/bmake/tests/sysmk/t0/2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t0/Makefile.depend b/usr.bin/bmake/tests/sysmk/t0/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t0/mk/Makefile.depend b/usr.bin/bmake/tests/sysmk/t0/mk/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/mk/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile.depend b/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/Makefile.depend b/usr.bin/bmake/tests/sysmk/t1/2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t1/Makefile.depend b/usr.bin/bmake/tests/sysmk/t1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t1/mk/Makefile.depend b/usr.bin/bmake/tests/sysmk/t1/mk/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/mk/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile.depend b/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/Makefile.depend b/usr.bin/bmake/tests/sysmk/t2/2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t2/Makefile.depend b/usr.bin/bmake/tests/sysmk/t2/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/sysmk/t2/mk/Makefile.depend b/usr.bin/bmake/tests/sysmk/t2/mk/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/mk/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/variables/Makefile.depend b/usr.bin/bmake/tests/variables/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/variables/modifier_M/Makefile.depend b/usr.bin/bmake/tests/variables/modifier_M/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/variables/modifier_t/Makefile.depend b/usr.bin/bmake/tests/variables/modifier_t/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/variables/opt_V/Makefile.depend b/usr.bin/bmake/tests/variables/opt_V/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/bmake/tests/variables/t0/Makefile.depend b/usr.bin/bmake/tests/variables/t0/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/calendar/tests/Makefile.depend b/usr.bin/calendar/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/calendar/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/clang/bugpoint/Makefile.depend b/usr.bin/clang/bugpoint/Makefile.depend
index 4540509..00803ce 100644
--- a/usr.bin/clang/bugpoint/Makefile.depend
+++ b/usr.bin/clang/bugpoint/Makefile.depend
@@ -15,7 +15,6 @@ DIRDEPS = \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
lib/clang/libllvmirreader \
lib/clang/libllvmlinker \
@@ -33,9 +32,10 @@ DIRDEPS = \
lib/libc++ \
lib/libcompiler_rt \
lib/libthr \
+ lib/libz \
lib/msun \
lib/ncurses/ncursesw \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/clang/Makefile.depend b/usr.bin/clang/clang/Makefile.depend
index 24611b4..eea6f09 100644
--- a/usr.bin/clang/clang/Makefile.depend
+++ b/usr.bin/clang/clang/Makefile.depend
@@ -26,18 +26,17 @@ DIRDEPS = \
lib/clang/libclangstaticanalyzercore \
lib/clang/libclangstaticanalyzerfrontend \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
- lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
@@ -46,7 +45,6 @@ DIRDEPS = \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
lib/clang/libllvmirreader \
lib/clang/libllvmlinker \
@@ -54,36 +52,35 @@ DIRDEPS = \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobjcarcopts \
lib/clang/libllvmobject \
lib/clang/libllvmoption \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
- lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmvectorize \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -93,7 +90,7 @@ DIRDEPS = \
lib/msun \
lib/ncurses/ncursesw \
usr.bin/clang/clang-tblgen.host \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llc/Makefile.depend b/usr.bin/clang/llc/Makefile.depend
index 89b7ace..374f871 100644
--- a/usr.bin/clang/llc/Makefile.depend
+++ b/usr.bin/clang/llc/Makefile.depend
@@ -8,63 +8,63 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmirreader \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmmirparser \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -73,7 +73,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/lldb/Makefile.depend b/usr.bin/clang/lldb/Makefile.depend
index ce522d3..acf1b8c 100644
--- a/usr.bin/clang/lldb/Makefile.depend
+++ b/usr.bin/clang/lldb/Makefile.depend
@@ -42,12 +42,16 @@ DIRDEPS = \
lib/clang/liblldbPluginDisassemblerLLVM \
lib/clang/liblldbPluginDynamicLoaderPosixDYLD \
lib/clang/liblldbPluginDynamicLoaderStatic \
+ lib/clang/liblldbPluginExpressionParserClang \
+ lib/clang/liblldbPluginExpressionParserGo \
lib/clang/liblldbPluginInstructionARM \
lib/clang/liblldbPluginInstructionARM64 \
lib/clang/liblldbPluginInstructionMIPS \
lib/clang/liblldbPluginInstructionMIPS64 \
lib/clang/liblldbPluginInstrumentationRuntimeAddressSanitizer \
lib/clang/liblldbPluginJITLoaderGDB \
+ lib/clang/liblldbPluginLanguageCPlusPlus \
+ lib/clang/liblldbPluginLanguageObjC \
lib/clang/liblldbPluginMemoryHistoryASan \
lib/clang/liblldbPluginObjectContainerBSDArchive \
lib/clang/liblldbPluginObjectFileELF \
@@ -59,6 +63,7 @@ DIRDEPS = \
lib/clang/liblldbPluginProcessGDBRemote \
lib/clang/liblldbPluginProcessPOSIX \
lib/clang/liblldbPluginProcessUtility \
+ lib/clang/liblldbPluginScriptInterpreterNone \
lib/clang/liblldbPluginSymbolFileDWARF \
lib/clang/liblldbPluginSymbolFileSymtab \
lib/clang/liblldbPluginSymbolVendorELF \
@@ -68,19 +73,19 @@ DIRDEPS = \
lib/clang/liblldbTarget \
lib/clang/liblldbUtility \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
@@ -90,7 +95,6 @@ DIRDEPS = \
lib/clang/libllvmexecutionengine \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
lib/clang/libllvmirreader \
lib/clang/libllvmlinker \
@@ -99,40 +103,40 @@ DIRDEPS = \
lib/clang/libllvmmcjit \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobjcarcopts \
lib/clang/libllvmobject \
lib/clang/libllvmoption \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmruntimedyld \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmvectorize \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
diff --git a/usr.bin/clang/lli/Makefile.depend b/usr.bin/clang/lli/Makefile.depend
index 7a56dc3..7ceb1a7 100644
--- a/usr.bin/clang/lli/Makefile.depend
+++ b/usr.bin/clang/lli/Makefile.depend
@@ -11,13 +11,13 @@ DIRDEPS = \
lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvmexecutionengine \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
lib/clang/libllvminterpreter \
- lib/clang/libllvmipa \
lib/clang/libllvmirreader \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
@@ -33,11 +33,11 @@ DIRDEPS = \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -46,6 +46,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-ar/Makefile.depend b/usr.bin/clang/llvm-ar/Makefile.depend
index e8ffd79..6c076d8 100644
--- a/usr.bin/clang/llvm-ar/Makefile.depend
+++ b/usr.bin/clang/llvm-ar/Makefile.depend
@@ -8,62 +8,62 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmlibdriver \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmoption \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -72,6 +72,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-as/Makefile.depend b/usr.bin/clang/llvm-as/Makefile.depend
index d978dfa..a41464d 100644
--- a/usr.bin/clang/llvm-as/Makefile.depend
+++ b/usr.bin/clang/llvm-as/Makefile.depend
@@ -17,6 +17,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-bcanalyzer/Makefile.depend b/usr.bin/clang/llvm-bcanalyzer/Makefile.depend
index a85bf50..d5ac336 100644
--- a/usr.bin/clang/llvm-bcanalyzer/Makefile.depend
+++ b/usr.bin/clang/llvm-bcanalyzer/Makefile.depend
@@ -16,6 +16,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-cov/Makefile.depend b/usr.bin/clang/llvm-cov/Makefile.depend
index e930acc..652277f 100644
--- a/usr.bin/clang/llvm-cov/Makefile.depend
+++ b/usr.bin/clang/llvm-cov/Makefile.depend
@@ -18,6 +18,7 @@ DIRDEPS = \
lib/libc++ \
lib/libcompiler_rt \
lib/libthr \
+ lib/libz \
lib/msun \
lib/ncurses/ncursesw \
diff --git a/usr.bin/clang/llvm-cxxdump/Makefile.depend b/usr.bin/clang/llvm-cxxdump/Makefile.depend
index b0fffb4..e1873fe 100644
--- a/usr.bin/clang/llvm-cxxdump/Makefile.depend
+++ b/usr.bin/clang/llvm-cxxdump/Makefile.depend
@@ -8,60 +8,60 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
diff --git a/usr.bin/clang/llvm-diff/Makefile.depend b/usr.bin/clang/llvm-diff/Makefile.depend
index 609342a..0406d2f 100644
--- a/usr.bin/clang/llvm-diff/Makefile.depend
+++ b/usr.bin/clang/llvm-diff/Makefile.depend
@@ -18,6 +18,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-dis/Makefile.depend b/usr.bin/clang/llvm-dis/Makefile.depend
index 9ff2a96..bf56a27 100644
--- a/usr.bin/clang/llvm-dis/Makefile.depend
+++ b/usr.bin/clang/llvm-dis/Makefile.depend
@@ -17,7 +17,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-extract/Makefile.depend b/usr.bin/clang/llvm-extract/Makefile.depend
index 83ab34e..35cf93b 100644
--- a/usr.bin/clang/llvm-extract/Makefile.depend
+++ b/usr.bin/clang/llvm-extract/Makefile.depend
@@ -13,9 +13,9 @@ DIRDEPS = \
lib/clang/libllvmbitwriter \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
lib/clang/libllvmirreader \
+ lib/clang/libllvmlinker \
lib/clang/libllvmmc \
lib/clang/libllvmmcparser \
lib/clang/libllvmobject \
@@ -30,6 +30,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-link/Makefile.depend b/usr.bin/clang/llvm-link/Makefile.depend
index bd34ef2..0195115 100644
--- a/usr.bin/clang/llvm-link/Makefile.depend
+++ b/usr.bin/clang/llvm-link/Makefile.depend
@@ -12,9 +12,11 @@ DIRDEPS = \
lib/clang/libllvmbitreader \
lib/clang/libllvmbitwriter \
lib/clang/libllvmcore \
- lib/clang/libllvmipa \
lib/clang/libllvmirreader \
lib/clang/libllvmlinker \
+ lib/clang/libllvmmc \
+ lib/clang/libllvmmcparser \
+ lib/clang/libllvmobject \
lib/clang/libllvmsupport \
lib/clang/libllvmtransformutils \
lib/libc \
@@ -23,6 +25,7 @@ DIRDEPS = \
lib/libthr \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-lto/Makefile.depend b/usr.bin/clang/llvm-lto/Makefile.depend
index 65a810f..6915918 100644
--- a/usr.bin/clang/llvm-lto/Makefile.depend
+++ b/usr.bin/clang/llvm-lto/Makefile.depend
@@ -8,19 +8,20 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
+ lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
lib/clang/libllvmbitwriter \
@@ -28,46 +29,46 @@ DIRDEPS = \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
+ lib/clang/libllvmirreader \
lib/clang/libllvmlinker \
lib/clang/libllvmlto \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobjcarcopts \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmvectorize \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -76,7 +77,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-mc/Makefile.depend b/usr.bin/clang/llvm-mc/Makefile.depend
index b0fffb4..e1873fe 100644
--- a/usr.bin/clang/llvm-mc/Makefile.depend
+++ b/usr.bin/clang/llvm-mc/Makefile.depend
@@ -8,60 +8,60 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
diff --git a/usr.bin/clang/llvm-nm/Makefile.depend b/usr.bin/clang/llvm-nm/Makefile.depend
index b0fffb4..df4b7a2 100644
--- a/usr.bin/clang/llvm-nm/Makefile.depend
+++ b/usr.bin/clang/llvm-nm/Makefile.depend
@@ -8,60 +8,60 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -70,6 +70,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-objdump/Makefile.depend b/usr.bin/clang/llvm-objdump/Makefile.depend
index 67fb73f..40d8758 100644
--- a/usr.bin/clang/llvm-objdump/Makefile.depend
+++ b/usr.bin/clang/llvm-objdump/Makefile.depend
@@ -8,61 +8,61 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvmdebuginfodwarf \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
diff --git a/usr.bin/clang/llvm-profdata/Makefile.depend b/usr.bin/clang/llvm-profdata/Makefile.depend
index e930acc..42a42b2 100644
--- a/usr.bin/clang/llvm-profdata/Makefile.depend
+++ b/usr.bin/clang/llvm-profdata/Makefile.depend
@@ -18,8 +18,10 @@ DIRDEPS = \
lib/libc++ \
lib/libcompiler_rt \
lib/libthr \
+ lib/libz \
lib/msun \
lib/ncurses/ncursesw \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/clang/llvm-rtdyld/Makefile.depend b/usr.bin/clang/llvm-rtdyld/Makefile.depend
index 11d417f..bf4a9ba 100644
--- a/usr.bin/clang/llvm-rtdyld/Makefile.depend
+++ b/usr.bin/clang/llvm-rtdyld/Makefile.depend
@@ -8,64 +8,64 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
+ lib/clang/libllvmbitwriter \
lib/clang/libllvmcodegen \
lib/clang/libllvmcore \
lib/clang/libllvmdebuginfodwarf \
lib/clang/libllvmexecutionengine \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcjit \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobject \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmruntimedyld \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
diff --git a/usr.bin/clang/llvm-symbolizer/Makefile.depend b/usr.bin/clang/llvm-symbolizer/Makefile.depend
index f85831c..d489cce 100644
--- a/usr.bin/clang/llvm-symbolizer/Makefile.depend
+++ b/usr.bin/clang/llvm-symbolizer/Makefile.depend
@@ -15,6 +15,7 @@ DIRDEPS = \
lib/clang/libllvmmcparser \
lib/clang/libllvmobject \
lib/clang/libllvmsupport \
+ lib/clang/libllvmsymbolize \
lib/libc \
lib/libc++ \
lib/libcompiler_rt \
diff --git a/usr.bin/clang/opt/Makefile.depend b/usr.bin/clang/opt/Makefile.depend
index 021f7a6..b2a718f 100644
--- a/usr.bin/clang/opt/Makefile.depend
+++ b/usr.bin/clang/opt/Makefile.depend
@@ -8,19 +8,19 @@ DIRDEPS = \
include/xlocale \
lib/${CSU_DIR} \
lib/clang/libllvmaarch64asmparser \
+ lib/clang/libllvmaarch64asmprinter \
lib/clang/libllvmaarch64codegen \
lib/clang/libllvmaarch64desc \
lib/clang/libllvmaarch64disassembler \
lib/clang/libllvmaarch64info \
- lib/clang/libllvmaarch64instprinter \
lib/clang/libllvmaarch64utils \
lib/clang/libllvmanalysis \
lib/clang/libllvmarmasmparser \
+ lib/clang/libllvmarmasmprinter \
lib/clang/libllvmarmcodegen \
lib/clang/libllvmarmdesc \
lib/clang/libllvmarmdisassembler \
lib/clang/libllvmarminfo \
- lib/clang/libllvmarminstprinter \
lib/clang/libllvmasmparser \
lib/clang/libllvmasmprinter \
lib/clang/libllvmbitreader \
@@ -29,46 +29,46 @@ DIRDEPS = \
lib/clang/libllvmcore \
lib/clang/libllvminstcombine \
lib/clang/libllvminstrumentation \
- lib/clang/libllvmipa \
lib/clang/libllvmipo \
lib/clang/libllvmirreader \
+ lib/clang/libllvmlinker \
lib/clang/libllvmmc \
lib/clang/libllvmmcdisassembler \
lib/clang/libllvmmcparser \
lib/clang/libllvmmipsasmparser \
+ lib/clang/libllvmmipsasmprinter \
lib/clang/libllvmmipscodegen \
lib/clang/libllvmmipsdesc \
lib/clang/libllvmmipsdisassembler \
lib/clang/libllvmmipsinfo \
- lib/clang/libllvmmipsinstprinter \
lib/clang/libllvmobjcarcopts \
lib/clang/libllvmobject \
lib/clang/libllvmpasses \
lib/clang/libllvmpowerpcasmparser \
+ lib/clang/libllvmpowerpcasmprinter \
lib/clang/libllvmpowerpccodegen \
lib/clang/libllvmpowerpcdesc \
lib/clang/libllvmpowerpcdisassembler \
lib/clang/libllvmpowerpcinfo \
- lib/clang/libllvmpowerpcinstprinter \
lib/clang/libllvmprofiledata \
lib/clang/libllvmscalaropts \
lib/clang/libllvmselectiondag \
lib/clang/libllvmsparcasmparser \
+ lib/clang/libllvmsparcasmprinter \
lib/clang/libllvmsparccodegen \
lib/clang/libllvmsparcdesc \
lib/clang/libllvmsparcdisassembler \
lib/clang/libllvmsparcinfo \
- lib/clang/libllvmsparcinstprinter \
lib/clang/libllvmsupport \
lib/clang/libllvmtarget \
lib/clang/libllvmtransformutils \
lib/clang/libllvmvectorize \
lib/clang/libllvmx86asmparser \
+ lib/clang/libllvmx86asmprinter \
lib/clang/libllvmx86codegen \
lib/clang/libllvmx86desc \
lib/clang/libllvmx86disassembler \
lib/clang/libllvmx86info \
- lib/clang/libllvmx86instprinter \
lib/clang/libllvmx86utils \
lib/libc \
lib/libc++ \
@@ -77,7 +77,7 @@ DIRDEPS = \
lib/libz \
lib/msun \
lib/ncurses/ncursesw \
- usr.bin/clang/tblgen.host \
+ usr.bin/clang/llvm-tblgen.host \
.include <dirdeps.mk>
diff --git a/usr.bin/cmp/tests/Makefile.depend b/usr.bin/cmp/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/cmp/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/col/tests/Makefile.depend b/usr.bin/col/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/col/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/comm/tests/Makefile.depend b/usr.bin/comm/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/comm/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/cpio/tests/Makefile.depend b/usr.bin/cpio/tests/Makefile.depend
new file mode 100644
index 0000000..4e7906b
--- /dev/null
+++ b/usr.bin/cpio/tests/Makefile.depend
@@ -0,0 +1,25 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libarchive \
+ lib/libbz2 \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libexpat \
+ lib/liblzma \
+ lib/libthr \
+ lib/libz \
+ secure/lib/libcrypto \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/cut/tests/Makefile.depend b/usr.bin/cut/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/cut/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/dirname/tests/Makefile.depend b/usr.bin/dirname/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/dirname/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/file2c/tests/Makefile.depend b/usr.bin/file2c/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/file2c/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/grep/tests/Makefile.depend b/usr.bin/grep/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/grep/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/gzip/tests/Makefile.depend b/usr.bin/gzip/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/gzip/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/ident/tests/Makefile.depend b/usr.bin/ident/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/ident/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/join/tests/Makefile.depend b/usr.bin/join/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/join/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/jot/tests/Makefile.depend b/usr.bin/jot/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/jot/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index e45a733..a4d5e64 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -529,12 +529,11 @@ abidump(struct ktr_header *kth)
break;
}
- if (flags != 0) {
- if (flags & SV_LP64)
- arch = "64";
- else
- arch = "32";
- } else
+ if (flags & SV_LP64)
+ arch = "64";
+ else if (flags & SV_ILP32)
+ arch = "32";
+ else
arch = "00";
printf("%s%s ", abi, arch);
diff --git a/usr.bin/lastcomm/tests/Makefile.depend b/usr.bin/lastcomm/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/lastcomm/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/limits/tests/Makefile.depend b/usr.bin/limits/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/limits/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/m4/tests/Makefile.depend b/usr.bin/m4/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/m4/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/mkimg/tests/Makefile.depend b/usr.bin/mkimg/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/mkimg/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/ncal/tests/Makefile.depend b/usr.bin/ncal/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/ncal/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/printf/tests/Makefile.depend b/usr.bin/printf/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/printf/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/script/script.c b/usr.bin/script/script.c
index 72814fb..6ffb46a 100644
--- a/usr.bin/script/script.c
+++ b/usr.bin/script/script.c
@@ -74,13 +74,12 @@ static int child;
static const char *fname;
static char *fmfname;
static int fflg, qflg, ttyflg;
-static int usesleep, rawout;
+static int usesleep, rawout, showexit;
static struct termios tt;
static void done(int) __dead2;
static void doshell(char **);
-static void fail(void);
static void finish(void);
static void record(FILE *, char *, size_t, int);
static void consume(FILE *, off_t, char *, int);
@@ -108,6 +107,7 @@ main(int argc, char *argv[])
flushtime = 30;
fm_fd = -1; /* Shut up stupid "may be used uninitialized" GCC
warning. (not needed w/clang) */
+ showexit = 0;
while ((ch = getopt(argc, argv, "adFfkpqrt:")) != -1)
switch(ch) {
@@ -199,7 +199,8 @@ main(int argc, char *argv[])
(void)fprintf(fscript, "Script started on %s",
ctime(&tvec));
if (argv[0]) {
- fprintf(fscript, "command: ");
+ showexit = 1;
+ fprintf(fscript, "Command: ");
for (k = 0 ; argv[k] ; ++k)
fprintf(fscript, "%s%s", k ? " " : "",
argv[k]);
@@ -224,13 +225,19 @@ main(int argc, char *argv[])
warn("fork");
done(1);
}
- if (child == 0)
+ if (child == 0) {
+ if (fflg) {
+ int pid;
+
+ pid = getpid();
+ if (ioctl(fm_fd, FILEMON_SET_PID, &pid) < 0)
+ err(1, "Cannot set filemon PID");
+ }
+
doshell(argv);
+ }
close(slave);
- if (fflg && ioctl(fm_fd, FILEMON_SET_PID, &child) < 0)
- err(1, "Cannot set filemon PID");
-
start = tvec = time(0);
readstdin = 1;
for (;;) {
@@ -341,14 +348,7 @@ doshell(char **av)
execl(shell, shell, "-i", (char *)NULL);
warn("%s", shell);
}
- fail();
-}
-
-static void
-fail(void)
-{
- (void)kill(0, SIGTERM);
- done(1);
+ exit(1);
}
static void
@@ -362,9 +362,13 @@ done(int eno)
if (rawout)
record(fscript, NULL, 0, 'e');
if (!qflg) {
- if (!rawout)
+ if (!rawout) {
+ if (showexit)
+ (void)fprintf(fscript, "\nCommand exit status:"
+ " %d", eno);
(void)fprintf(fscript,"\nScript done on %s",
ctime(&tvec));
+ }
(void)printf("\nScript done, output file is %s\n", fname);
if (fflg) {
(void)printf("Filemon done, output file is %s\n",
diff --git a/usr.bin/sed/tests/Makefile.depend b/usr.bin/sed/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/sed/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/sed/tests/regress.multitest.out/Makefile.depend b/usr.bin/sed/tests/regress.multitest.out/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/sed/tests/regress.multitest.out/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/soelim/tests/Makefile.depend b/usr.bin/soelim/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/soelim/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/tar/tests/Makefile.depend b/usr.bin/tar/tests/Makefile.depend
new file mode 100644
index 0000000..860d975
--- /dev/null
+++ b/usr.bin/tar/tests/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libarchive \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/tests/Makefile.depend b/usr.bin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/timeout/tests/Makefile.depend b/usr.bin/timeout/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/timeout/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/tr/tests/Makefile.depend b/usr.bin/tr/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/tr/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/truncate/tests/Makefile.depend b/usr.bin/truncate/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/truncate/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/truss/setup.c b/usr.bin/truss/setup.c
index 36dd571f..c134405 100644
--- a/usr.bin/truss/setup.c
+++ b/usr.bin/truss/setup.c
@@ -61,7 +61,9 @@ SET_DECLARE(procabi, struct procabi);
static sig_atomic_t detaching;
-static void new_proc(struct trussinfo *, pid_t);
+static void enter_syscall(struct trussinfo *, struct threadinfo *,
+ struct ptrace_lwpinfo *);
+static void new_proc(struct trussinfo *, pid_t, lwpid_t);
/*
* setup_and_wait() is called to start a process. All it really does
@@ -87,7 +89,7 @@ setup_and_wait(struct trussinfo *info, char *command[])
if (waitpid(pid, NULL, 0) < 0)
err(1, "unexpect stop in waitpid");
- new_proc(info, pid);
+ new_proc(info, pid, 0);
}
/*
@@ -109,7 +111,7 @@ start_tracing(struct trussinfo *info, pid_t pid)
if (waitpid(pid, NULL, 0) < 0)
err(1, "Unexpect stop in waitpid");
- new_proc(info, pid);
+ new_proc(info, pid, 0);
}
/*
@@ -170,14 +172,71 @@ find_abi(pid_t pid)
return (NULL);
}
+static struct threadinfo *
+new_thread(struct procinfo *p, lwpid_t lwpid)
+{
+ struct threadinfo *nt;
+
+ /*
+ * If this happens it means there is a bug in truss. Unfortunately
+ * this will kill any processes truss is attached to.
+ */
+ LIST_FOREACH(nt, &p->threadlist, entries) {
+ if (nt->tid == lwpid)
+ errx(1, "Duplicate thread for LWP %ld", (long)lwpid);
+ }
+
+ nt = calloc(1, sizeof(struct threadinfo));
+ if (nt == NULL)
+ err(1, "calloc() failed");
+ nt->proc = p;
+ nt->tid = lwpid;
+ LIST_INSERT_HEAD(&p->threadlist, nt, entries);
+ return (nt);
+}
+
+static void
+free_thread(struct threadinfo *t)
+{
+
+ LIST_REMOVE(t, entries);
+ free(t);
+}
+
static void
-new_proc(struct trussinfo *info, pid_t pid)
+add_threads(struct trussinfo *info, struct procinfo *p)
+{
+ struct ptrace_lwpinfo pl;
+ struct threadinfo *t;
+ lwpid_t *lwps;
+ int i, nlwps;
+
+ nlwps = ptrace(PT_GETNUMLWPS, p->pid, NULL, 0);
+ if (nlwps == -1)
+ err(1, "Unable to fetch number of LWPs");
+ assert(nlwps > 0);
+ lwps = calloc(nlwps, sizeof(*lwps));
+ nlwps = ptrace(PT_GETLWPLIST, p->pid, (caddr_t)lwps, nlwps);
+ if (nlwps == -1)
+ err(1, "Unable to fetch LWP list");
+ for (i = 0; i < nlwps; i++) {
+ t = new_thread(p, lwps[i]);
+ if (ptrace(PT_LWPINFO, lwps[i], (caddr_t)&pl, sizeof(pl)) == -1)
+ err(1, "ptrace(PT_LWPINFO)");
+ if (pl.pl_flags & PL_FLAG_SCE)
+ enter_syscall(info, t, &pl);
+ }
+ free(lwps);
+}
+
+static void
+new_proc(struct trussinfo *info, pid_t pid, lwpid_t lwpid)
{
struct procinfo *np;
/*
* If this happens it means there is a bug in truss. Unfortunately
- * this will kill any processes are attached to.
+ * this will kill any processes truss is attached to.
*/
LIST_FOREACH(np, &info->proclist, entries) {
if (np->pid == pid)
@@ -187,11 +246,18 @@ new_proc(struct trussinfo *info, pid_t pid)
if (info->flags & FOLLOWFORKS)
if (ptrace(PT_FOLLOW_FORK, pid, NULL, 1) == -1)
err(1, "Unable to follow forks for pid %ld", (long)pid);
+ if (ptrace(PT_LWP_EVENTS, pid, NULL, 1) == -1)
+ err(1, "Unable to enable LWP events for pid %ld", (long)pid);
np = calloc(1, sizeof(struct procinfo));
np->pid = pid;
np->abi = find_abi(pid);
- SLIST_INIT(&np->threadlist);
+ LIST_INIT(&np->threadlist);
LIST_INSERT_HEAD(&info->proclist, np, entries);
+
+ if (lwpid != 0)
+ new_thread(np, lwpid);
+ else
+ add_threads(info, np);
}
static void
@@ -199,7 +265,7 @@ free_proc(struct procinfo *p)
{
struct threadinfo *t, *t2;
- SLIST_FOREACH_SAFE(t, &p->threadlist, entries, t2) {
+ LIST_FOREACH_SAFE(t, &p->threadlist, entries, t2) {
free(t);
}
LIST_REMOVE(p, entries);
@@ -232,7 +298,6 @@ find_proc(struct trussinfo *info, pid_t pid)
/*
* Change curthread member based on (pid, lwpid).
- * If it is a new thread, create a threadinfo structure.
*/
static void
find_thread(struct trussinfo *info, pid_t pid, lwpid_t lwpid)
@@ -243,55 +308,30 @@ find_thread(struct trussinfo *info, pid_t pid, lwpid_t lwpid)
np = find_proc(info, pid);
assert(np != NULL);
- SLIST_FOREACH(nt, &np->threadlist, entries) {
+ LIST_FOREACH(nt, &np->threadlist, entries) {
if (nt->tid == lwpid) {
info->curthread = nt;
return;
}
}
-
- nt = calloc(1, sizeof(struct threadinfo));
- if (nt == NULL)
- err(1, "calloc() failed");
- nt->proc = np;
- nt->tid = lwpid;
- SLIST_INSERT_HEAD(&np->threadlist, nt, entries);
- info->curthread = nt;
+ errx(1, "could not find thread");
}
/*
- * When a process exits, it no longer has any threads left. However,
- * the main loop expects a valid curthread. In cases when a thread
- * triggers the termination (e.g. calling exit or triggering a fault)
- * we would ideally use that thread. However, if a process is killed
- * by a signal sent from another process then there is no "correct"
- * thread. We just punt and use the first thread.
+ * When a process exits, it should have exactly one thread left.
+ * All of the other threads should have reported thread exit events.
*/
static void
find_exit_thread(struct trussinfo *info, pid_t pid)
{
- struct procinfo *np;
- struct threadinfo *nt;
+ struct procinfo *p;
- np = find_proc(info, pid);
- assert(np != NULL);
+ p = find_proc(info, pid);
+ assert(p != NULL);
- if (SLIST_EMPTY(&np->threadlist)) {
- /*
- * If an existing process exits right after we attach
- * to it but before it posts any events, there won't
- * be any threads. Create a dummy thread and set its
- * "before" time to the global start time.
- */
- nt = calloc(1, sizeof(struct threadinfo));
- if (nt == NULL)
- err(1, "calloc() failed");
- nt->proc = np;
- nt->tid = 0;
- SLIST_INSERT_HEAD(&np->threadlist, nt, entries);
- nt->before = info->start_time;
- }
- info->curthread = SLIST_FIRST(&np->threadlist);
+ info->curthread = LIST_FIRST(&p->threadlist);
+ assert(info->curthread != NULL);
+ assert(LIST_NEXT(info->curthread, entries) == NULL);
}
static void
@@ -322,13 +362,12 @@ free_syscall(struct threadinfo *t)
}
static void
-enter_syscall(struct trussinfo *info, struct ptrace_lwpinfo *pl)
+enter_syscall(struct trussinfo *info, struct threadinfo *t,
+ struct ptrace_lwpinfo *pl)
{
- struct threadinfo *t;
struct syscall *sc;
u_int i, narg;
- t = info->curthread;
alloc_syscall(t, pl);
narg = MIN(pl->pl_syscall_narg, nitems(t->cs.args));
if (narg != 0 && t->proc->abi->fetch_args(info, narg) != 0) {
@@ -377,6 +416,28 @@ enter_syscall(struct trussinfo *info, struct ptrace_lwpinfo *pl)
clock_gettime(CLOCK_REALTIME, &t->before);
}
+/*
+ * When a thread exits voluntarily (including when a thread calls
+ * exit() to trigger a process exit), the thread's internal state
+ * holds the arguments passed to the exit system call. When the
+ * thread's exit is reported, log that system call without a return
+ * value.
+ */
+static void
+thread_exit_syscall(struct trussinfo *info)
+{
+ struct threadinfo *t;
+
+ t = info->curthread;
+ if (!t->in_syscall)
+ return;
+
+ clock_gettime(CLOCK_REALTIME, &t->after);
+
+ print_syscall_ret(info, 0, NULL);
+ free_syscall(t);
+}
+
static void
exit_syscall(struct trussinfo *info, struct ptrace_lwpinfo *pl)
{
@@ -430,6 +491,7 @@ exit_syscall(struct trussinfo *info, struct ptrace_lwpinfo *pl)
* new ABI isn't supported, stop tracing this process.
*/
if (pl->pl_flags & PL_FLAG_EXEC) {
+ assert(LIST_NEXT(LIST_FIRST(&p->threadlist), entries) == NULL);
p->abi = find_abi(p->pid);
if (p->abi == NULL) {
if (ptrace(PT_DETACH, p->pid, (caddr_t)1, 0) < 0)
@@ -472,6 +534,29 @@ print_line_prefix(struct trussinfo *info)
}
static void
+report_thread_death(struct trussinfo *info)
+{
+ struct threadinfo *t;
+
+ t = info->curthread;
+ clock_gettime(CLOCK_REALTIME, &t->after);
+ print_line_prefix(info);
+ fprintf(info->outfile, "<thread %ld exited>\n", (long)t->tid);
+}
+
+static void
+report_thread_birth(struct trussinfo *info)
+{
+ struct threadinfo *t;
+
+ t = info->curthread;
+ clock_gettime(CLOCK_REALTIME, &t->after);
+ t->before = t->after;
+ print_line_prefix(info);
+ fprintf(info->outfile, "<new thread %ld>\n", (long)t->tid);
+}
+
+static void
report_exit(struct trussinfo *info, siginfo_t *si)
{
struct threadinfo *t;
@@ -544,8 +629,11 @@ eventloop(struct trussinfo *info)
case CLD_KILLED:
case CLD_DUMPED:
find_exit_thread(info, si.si_pid);
- if ((info->flags & COUNTONLY) == 0)
+ if ((info->flags & COUNTONLY) == 0) {
+ if (si.si_code == CLD_EXITED)
+ thread_exit_syscall(info);
report_exit(info, &si);
+ }
free_proc(info->curthread->proc);
info->curthread = NULL;
break;
@@ -555,16 +643,27 @@ eventloop(struct trussinfo *info)
err(1, "ptrace(PT_LWPINFO)");
if (pl.pl_flags & PL_FLAG_CHILD) {
- new_proc(info, si.si_pid);
+ new_proc(info, si.si_pid, pl.pl_lwpid);
assert(LIST_FIRST(&info->proclist)->abi !=
NULL);
- }
+ } else if (pl.pl_flags & PL_FLAG_BORN)
+ new_thread(find_proc(info, si.si_pid),
+ pl.pl_lwpid);
find_thread(info, si.si_pid, pl.pl_lwpid);
if (si.si_status == SIGTRAP &&
- (pl.pl_flags & (PL_FLAG_SCE|PL_FLAG_SCX)) != 0) {
- if (pl.pl_flags & PL_FLAG_SCE)
- enter_syscall(info, &pl);
+ (pl.pl_flags & (PL_FLAG_BORN|PL_FLAG_EXITED|
+ PL_FLAG_SCE|PL_FLAG_SCX)) != 0) {
+ if (pl.pl_flags & PL_FLAG_BORN) {
+ if ((info->flags & COUNTONLY) == 0)
+ report_thread_birth(info);
+ } else if (pl.pl_flags & PL_FLAG_EXITED) {
+ if ((info->flags & COUNTONLY) == 0)
+ report_thread_death(info);
+ free_thread(info->curthread);
+ info->curthread = NULL;
+ } else if (pl.pl_flags & PL_FLAG_SCE)
+ enter_syscall(info, info->curthread, &pl);
else if (pl.pl_flags & PL_FLAG_SCX)
exit_syscall(info, &pl);
pending_signal = 0;
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c
index b3a4c42..f5a28ae 100644
--- a/usr.bin/truss/syscalls.c
+++ b/usr.bin/truss/syscalls.c
@@ -2054,6 +2054,16 @@ print_syscall_ret(struct trussinfo *trussinfo, int errorp, long *retval)
print_syscall(trussinfo);
fflush(trussinfo->outfile);
+
+ if (retval == NULL) {
+ /*
+ * This system call resulted in the current thread's exit,
+ * so there is no return value or error to display.
+ */
+ fprintf(trussinfo->outfile, "\n");
+ return;
+ }
+
if (errorp) {
error = sysdecode_abi_to_freebsd_errno(t->proc->abi->abi,
retval[0]);
diff --git a/usr.bin/truss/truss.h b/usr.bin/truss/truss.h
index 582ab0b..dee2155 100644
--- a/usr.bin/truss/truss.h
+++ b/usr.bin/truss/truss.h
@@ -73,7 +73,7 @@ struct current_syscall {
struct threadinfo
{
- SLIST_ENTRY(threadinfo) entries;
+ LIST_ENTRY(threadinfo) entries;
struct procinfo *proc;
lwpid_t tid;
int in_syscall;
@@ -87,7 +87,7 @@ struct procinfo {
pid_t pid;
struct procabi *abi;
- SLIST_HEAD(, threadinfo) threadlist;
+ LIST_HEAD(, threadinfo) threadlist;
};
struct trussinfo
diff --git a/usr.bin/units/tests/Makefile.depend b/usr.bin/units/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/units/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/uudecode/tests/Makefile.depend b/usr.bin/uudecode/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/uudecode/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/uuencode/tests/Makefile.depend b/usr.bin/uuencode/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/uuencode/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/xargs/tests/Makefile.depend b/usr.bin/xargs/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/xargs/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/xo/tests/Makefile.depend b/usr.bin/xo/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/xo/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/yacc/tests/Makefile.depend b/usr.bin/yacc/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.bin/yacc/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/chown/tests/Makefile.depend b/usr.sbin/chown/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/chown/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/etcupdate/tests/Makefile.depend b/usr.sbin/etcupdate/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/etcupdate/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/fstyp/tests/Makefile.depend b/usr.sbin/fstyp/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/fstyp/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/makefs/tests/Makefile.depend b/usr.sbin/makefs/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/makefs/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/newsyslog/tests/Makefile.depend b/usr.sbin/newsyslog/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/newsyslog/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/nmtree/tests/Makefile.depend b/usr.sbin/nmtree/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/nmtree/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/pw/tests/Makefile.depend b/usr.sbin/pw/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/pw/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/rpcbind/tests/Makefile.depend b/usr.sbin/rpcbind/tests/Makefile.depend
new file mode 100644
index 0000000..4d03805
--- /dev/null
+++ b/usr.sbin/rpcbind/tests/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/rpc \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/atf/libatf-c \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/sa/tests/Makefile.depend b/usr.sbin/sa/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/sa/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/tests/Makefile.depend b/usr.sbin/tests/Makefile.depend
new file mode 100644
index 0000000..f80275d
--- /dev/null
+++ b/usr.sbin/tests/Makefile.depend
@@ -0,0 +1,11 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
OpenPOWER on IntegriCloud