Compare commits

...

5 Commits
main ... 525

Author SHA1 Message Date
Bernhard Stoeckner
207a166fc3
525.147.05 2023-10-31 14:38:27 +01:00
Maneet Singh
1f3ce1beab
525.125.06 2023-06-28 11:59:51 -07:00
Andy Ritger
ad22fd4262
525.116.04 2023-05-09 11:41:15 -07:00
Andy Ritger
a0e46cabd3
525.116.03 2023-04-25 14:05:57 -07:00
Andy Ritger
ebcc6656ff
525.105.17 2023-03-30 10:16:11 -07:00
259 changed files with 18093 additions and 7577 deletions

View File

@ -2,6 +2,20 @@
## Release 525 Entries
### [525.147.05] 2023-10-31
### [525.125.06] 2023-06-26
#### Fixed
- Fix nvidia_p2p_get_pages(): Fix double-free in register-callback error path, [#557](https://github.com/NVIDIA/open-gpu-kernel-modules/pull/557) by @BrendanCunningham
### [525.116.04] 2023-05-09
### [525.116.03] 2023-04-25
### [525.105.17] 2023-03-30
### [525.89.02] 2023-02-08
### [525.85.12] 2023-01-30
@ -18,6 +32,10 @@
### [525.60.11] 2022-11-28
#### Fixed
- Fixed nvenc compatibility with usermode clients [#104](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/104)
### [525.53] 2022-11-10
#### Changed

View File

@ -1,7 +1,7 @@
# NVIDIA Linux Open GPU Kernel Module Source
This is the source release of the NVIDIA Linux open GPU kernel modules,
version 525.89.02.
version 525.147.05.
## How to Build
@ -17,7 +17,7 @@ as root:
Note that the kernel modules built here must be used with GSP
firmware and user-space NVIDIA GPU driver components from a corresponding
525.89.02 driver release. This can be achieved by installing
525.147.05 driver release. This can be achieved by installing
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
option. E.g.,
@ -167,7 +167,7 @@ for the target kernel.
## Compatible GPUs
The open-gpu-kernel-modules can be used on any Turing or later GPU
(see the table below). However, in the 525.89.02 release,
(see the table below). However, in the 525.147.05 release,
GeForce and Workstation support is still considered alpha-quality.
To enable use of the open kernel modules on GeForce and Workstation GPUs,
@ -175,7 +175,7 @@ set the "NVreg_OpenRmEnableUnsupportedGpus" nvidia.ko kernel module
parameter to 1. For more details, see the NVIDIA GPU driver end user
README here:
https://us.download.nvidia.com/XFree86/Linux-x86_64/525.89.02/README/kernel_open.html
https://us.download.nvidia.com/XFree86/Linux-x86_64/525.147.05/README/kernel_open.html
In the below table, if three IDs are listed, the first is the PCI Device
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI
@ -645,12 +645,15 @@ Subsystem Device ID.
| NVIDIA A100-SXM4-80GB | 20B2 10DE 147F |
| NVIDIA A100-SXM4-80GB | 20B2 10DE 1622 |
| NVIDIA A100-SXM4-80GB | 20B2 10DE 1623 |
| NVIDIA PG509-210 | 20B2 10DE 1625 |
| NVIDIA A100-SXM-64GB | 20B3 10DE 14A7 |
| NVIDIA A100-SXM-64GB | 20B3 10DE 14A8 |
| NVIDIA A100 80GB PCIe | 20B5 10DE 1533 |
| NVIDIA A100 80GB PCIe | 20B5 10DE 1642 |
| NVIDIA PG506-232 | 20B6 10DE 1492 |
| NVIDIA A30 | 20B7 10DE 1532 |
| NVIDIA A30 | 20B7 10DE 1804 |
| NVIDIA A30 | 20B7 10DE 1852 |
| NVIDIA A100-PCIE-40GB | 20F1 10DE 145F |
| NVIDIA A800-SXM4-80GB | 20F3 10DE 179B |
| NVIDIA A800-SXM4-80GB | 20F3 10DE 179C |
@ -720,9 +723,13 @@ Subsystem Device ID.
| NVIDIA A10 | 2236 10DE 1482 |
| NVIDIA A10G | 2237 10DE 152F |
| NVIDIA A10M | 2238 10DE 1677 |
| NVIDIA H800 PCIe | 2322 10DE 17A4 |
| NVIDIA H800 | 2324 10DE 17A6 |
| NVIDIA H800 | 2324 10DE 17A8 |
| NVIDIA H100 80GB HBM3 | 2330 10DE 16C0 |
| NVIDIA H100 80GB HBM3 | 2330 10DE 16C1 |
| NVIDIA H100 PCIe | 2331 10DE 1626 |
| NVIDIA H100 | 2339 10DE 17FC |
| NVIDIA GeForce RTX 3060 Ti | 2414 |
| NVIDIA GeForce RTX 3080 Ti Laptop GPU | 2420 |
| NVIDIA RTX A5500 Laptop GPU | 2438 |
@ -750,6 +757,7 @@ Subsystem Device ID.
| NVIDIA RTX A3000 12GB Laptop GPU | 24B9 |
| NVIDIA RTX A4500 Laptop GPU | 24BA |
| NVIDIA RTX A3000 12GB Laptop GPU | 24BB |
| NVIDIA GeForce RTX 3060 | 24C7 |
| NVIDIA GeForce RTX 3060 Ti | 24C9 |
| NVIDIA GeForce RTX 3080 Laptop GPU | 24DC |
| NVIDIA GeForce RTX 3070 Laptop GPU | 24DD |
@ -795,6 +803,8 @@ Subsystem Device ID.
| NVIDIA RTX A1000 Laptop GPU | 25B9 |
| NVIDIA RTX A2000 8GB Laptop GPU | 25BA |
| NVIDIA RTX A500 Laptop GPU | 25BB |
| NVIDIA RTX A1000 6GB Laptop GPU | 25BC |
| NVIDIA RTX A500 Laptop GPU | 25BD |
| NVIDIA GeForce RTX 3050 Ti Laptop GPU | 25E0 |
| NVIDIA GeForce RTX 3050 Laptop GPU | 25E2 |
| NVIDIA GeForce RTX 3050 Laptop GPU | 25E5 |
@ -809,15 +819,33 @@ Subsystem Device ID.
| NVIDIA RTX 6000 Ada Generation | 26B1 10DE 16A1 |
| NVIDIA RTX 6000 Ada Generation | 26B1 17AA 16A1 |
| NVIDIA L40 | 26B5 10DE 169D |
| NVIDIA L40 | 26B5 10DE 17DA |
| NVIDIA GeForce RTX 4080 | 2704 |
| NVIDIA GeForce RTX 4090 Laptop GPU | 2717 |
| NVIDIA RTX 5000 Ada Generation Laptop GPU | 2730 |
| NVIDIA GeForce RTX 4090 Laptop GPU | 2757 |
| NVIDIA RTX 5000 Ada Generation Embedded GPU | 2770 |
| NVIDIA GeForce RTX 4070 Ti | 2782 |
| NVIDIA GeForce RTX 4070 | 2786 |
| NVIDIA GeForce RTX 4080 Laptop GPU | 27A0 |
| NVIDIA RTX 4000 SFF Ada Generation | 27B0 1028 16FA |
| NVIDIA RTX 4000 SFF Ada Generation | 27B0 103C 16FA |
| NVIDIA RTX 4000 SFF Ada Generation | 27B0 10DE 16FA |
| NVIDIA RTX 4000 SFF Ada Generation | 27B0 17AA 16FA |
| NVIDIA L4 | 27B8 10DE 16CA |
| NVIDIA L4 | 27B8 10DE 16EE |
| NVIDIA RTX 4000 Ada Generation Laptop GPU | 27BA |
| NVIDIA RTX 3500 Ada Generation Laptop GPU | 27BB |
| NVIDIA GeForce RTX 4080 Laptop GPU | 27E0 |
| NVIDIA GeForce RTX 4060 Ti | 2803 |
| NVIDIA GeForce RTX 4060 Ti | 2805 |
| NVIDIA GeForce RTX 4070 Laptop GPU | 2820 |
| NVIDIA RTX 3000 Ada Generation Laptop GPU | 2838 |
| NVIDIA GeForce RTX 4070 Laptop GPU | 2860 |
| NVIDIA GeForce RTX 4060 | 2882 |
| NVIDIA GeForce RTX 4060 Laptop GPU | 28A0 |
| NVIDIA GeForce RTX 4050 Laptop GPU | 28A1 |
| NVIDIA RTX 2000 Ada Generation Laptop GPU | 28B8 |
| NVIDIA GeForce RTX 4060 Laptop GPU | 28E0 |
| NVIDIA GeForce RTX 4050 Laptop GPU | 28E1 |
| NVIDIA RTX 2000 Ada Generation Embedded GPU | 28F8 |

View File

@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"525.89.02\"
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"525.147.05\"
EXTRA_CFLAGS += -Wno-unused-function
@ -268,6 +268,7 @@ NV_HEADER_PRESENCE_TESTS = \
asm/opal-api.h \
sound/hdaudio.h \
asm/pgtable_types.h \
asm/page.h \
linux/stringhash.h \
linux/dma-map-ops.h \
rdma/peer_mem.h \

View File

@ -57,6 +57,7 @@ typedef struct
void *waitQueue;
void *nv;
NvU32 *vgpuTypeIds;
NvU8 **vgpuNames;
NvU32 numVgpuTypes;
NvU32 domain;
NvU8 bus;

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2016-2017 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2016-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -36,12 +36,21 @@ typedef int vm_fault_t;
* pin_user_pages() was added by commit eddb1c228f7951d399240
* ("mm/gup: introduce pin_user_pages*() and FOLL_PIN") in v5.6-rc1 (2020-01-30)
*
* Removed vmas parameter from pin_user_pages() by commit 40896a02751
* ("mm/gup: remove vmas parameter from pin_user_pages()")
* in linux-next, expected in v6.5-rc1 (2023-05-17)
*
*/
#include <linux/mm.h>
#include <linux/sched.h>
#if defined(NV_PIN_USER_PAGES_PRESENT)
#define NV_PIN_USER_PAGES pin_user_pages
#if defined(NV_PIN_USER_PAGES_HAS_ARGS_VMAS)
#define NV_PIN_USER_PAGES pin_user_pages
#else
#define NV_PIN_USER_PAGES(start, nr_pages, gup_flags, pages, vmas) \
pin_user_pages(start, nr_pages, gup_flags, pages)
#endif // NV_PIN_USER_PAGES_HAS_ARGS_VMAS
#define NV_UNPIN_USER_PAGE unpin_user_page
#else
#define NV_PIN_USER_PAGES NV_GET_USER_PAGES
@ -64,11 +73,18 @@ typedef int vm_fault_t;
* commit 8e50b8b07f462ab4b91bc1491b1c91bd75e4ad40 which cherry-picked the
* replacement of the write and force parameters with gup_flags
*
* Removed vmas parameter from get_user_pages() by commit 7bbf9c8c99
* ("mm/gup: remove unused vmas parameter from get_user_pages()")
* in linux-next, expected in v6.5-rc1 (2023-05-17)
*
*/
#if defined(NV_GET_USER_PAGES_HAS_ARGS_FLAGS)
#define NV_GET_USER_PAGES(start, nr_pages, flags, pages, vmas) \
get_user_pages(start, nr_pages, flags, pages)
#elif defined(NV_GET_USER_PAGES_HAS_ARGS_FLAGS_VMAS)
#define NV_GET_USER_PAGES get_user_pages
#elif defined(NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS)
#elif defined(NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS_VMAS)
#define NV_GET_USER_PAGES(start, nr_pages, flags, pages, vmas) \
get_user_pages(current, current->mm, start, nr_pages, flags, pages, vmas)
#else
@ -81,13 +97,13 @@ typedef int vm_fault_t;
int write = flags & FOLL_WRITE;
int force = flags & FOLL_FORCE;
#if defined(NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE)
#if defined(NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS)
return get_user_pages(start, nr_pages, write, force, pages, vmas);
#else
// NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE
// NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS
return get_user_pages(current, current->mm, start, nr_pages, write,
force, pages, vmas);
#endif // NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE
#endif // NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS
}
#endif // NV_GET_USER_PAGES_HAS_ARGS_FLAGS
@ -100,15 +116,22 @@ typedef int vm_fault_t;
* 64019a2e467a ("mm/gup: remove task_struct pointer for all gup code")
* in v5.9-rc1 (2020-08-11). *
*
* Removed unused vmas parameter from pin_user_pages_remote() by commit
* 83bcc2e132("mm/gup: remove unused vmas parameter from pin_user_pages_remote()")
* in linux-next, expected in v6.5-rc1 (2023-05-14)
*
*/
#if defined(NV_PIN_USER_PAGES_REMOTE_PRESENT)
#if defined (NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK)
#if defined(NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS)
#define NV_PIN_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
pin_user_pages_remote(NULL, mm, start, nr_pages, flags, pages, vmas, locked)
#else
#elif defined(NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_VMAS)
#define NV_PIN_USER_PAGES_REMOTE pin_user_pages_remote
#endif // NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK
#else
#define NV_PIN_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
pin_user_pages_remote(mm, start, nr_pages, flags, pages, locked)
#endif // NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS
#else
#define NV_PIN_USER_PAGES_REMOTE NV_GET_USER_PAGES_REMOTE
#endif // NV_PIN_USER_PAGES_REMOTE_PRESENT
@ -135,22 +158,30 @@ typedef int vm_fault_t;
* commit 64019a2e467a ("mm/gup: remove task_struct pointer for
* all gup code") in v5.9-rc1 (2020-08-11).
*
* Removed vmas parameter from get_user_pages_remote() by commit a4bde14d549
* ("mm/gup: remove vmas parameter from get_user_pages_remote()")
* in linux-next, expected in v6.5-rc1 (2023-05-14)
*
*/
#if defined(NV_GET_USER_PAGES_REMOTE_PRESENT)
#if defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED)
#define NV_GET_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
get_user_pages_remote(mm, start, nr_pages, flags, pages, locked)
#elif defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED_VMAS)
#define NV_GET_USER_PAGES_REMOTE get_user_pages_remote
#elif defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED)
#elif defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED_VMAS)
#define NV_GET_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
get_user_pages_remote(NULL, mm, start, nr_pages, flags, pages, vmas, locked)
#elif defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS)
#elif defined(NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_VMAS)
#define NV_GET_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
get_user_pages_remote(NULL, mm, start, nr_pages, flags, pages, vmas)
#else
// NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE
// NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE_VMAS
static inline long NV_GET_USER_PAGES_REMOTE(struct mm_struct *mm,
unsigned long start,
unsigned long nr_pages,
@ -167,7 +198,7 @@ typedef int vm_fault_t;
}
#endif // NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED
#else
#if defined(NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE)
#if defined(NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS)
static inline long NV_GET_USER_PAGES_REMOTE(struct mm_struct *mm,
unsigned long start,
unsigned long nr_pages,
@ -185,7 +216,7 @@ typedef int vm_fault_t;
#else
#define NV_GET_USER_PAGES_REMOTE(mm, start, nr_pages, flags, pages, vmas, locked) \
get_user_pages(NULL, mm, start, nr_pages, flags, pages, vmas)
#endif // NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE
#endif // NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS
#endif // NV_GET_USER_PAGES_REMOTE_PRESENT
/*
@ -261,4 +292,22 @@ static inline struct rw_semaphore *nv_mmap_get_lock(struct mm_struct *mm)
#endif
}
static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
{
#if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
vm_flags_set(vma, flags);
#else
vma->vm_flags |= flags;
#endif
}
static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
{
#if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
vm_flags_clear(vma, flags);
#else
vma->vm_flags &= ~flags;
#endif
}
#endif // __NV_MM_H__

View File

@ -495,6 +495,12 @@ struct nv_file_private_t
nv_file_private_t *ctl_nvfp;
void *ctl_nvfp_priv;
NvU32 register_or_refcount;
//
// True if a client or an event was ever allocated on this fd.
// If false, RMAPI cleanup is skipped.
//
NvBool bCleanupRmapi;
};
// Forward define the gpu ops structures

View File

@ -450,6 +450,9 @@ compile_test() {
#if defined(NV_ASM_PGTABLE_TYPES_H_PRESENT)
#include <asm/pgtable_types.h>
#endif
#if defined(NV_ASM_PAGE_H_PRESENT)
#include <asm/page.h>
#endif
#include <asm/set_memory.h>
#else
#include <asm/cacheflush.h>
@ -472,6 +475,9 @@ compile_test() {
#if defined(NV_ASM_PGTABLE_TYPES_H_PRESENT)
#include <asm/pgtable_types.h>
#endif
#if defined(NV_ASM_PAGE_H_PRESENT)
#include <asm/page.h>
#endif
#include <asm/set_memory.h>
#else
#include <asm/cacheflush.h>
@ -529,6 +535,9 @@ compile_test() {
#if defined(NV_ASM_PGTABLE_TYPES_H_PRESENT)
#include <asm/pgtable_types.h>
#endif
#if defined(NV_ASM_PAGE_H_PRESENT)
#include <asm/page.h>
#endif
#include <asm/set_memory.h>
#else
#include <asm/cacheflush.h>
@ -556,6 +565,9 @@ compile_test() {
#if defined(NV_ASM_PGTABLE_TYPES_H_PRESENT)
#include <asm/pgtable_types.h>
#endif
#if defined(NV_ASM_PAGE_H_PRESENT)
#include <asm/page.h>
#endif
#include <asm/set_memory.h>
#else
#include <asm/cacheflush.h>
@ -942,9 +954,26 @@ compile_test() {
compile_check_conftest "$CODE" "NV_VFIO_MIGRATION_OPS_PRESENT" "" "types"
;;
mdev_parent)
vfio_migration_ops_has_migration_get_data_size)
#
# Determine if the struct mdev_parent type is present.
# Determine if vfio_migration_ops struct has .migration_get_data_size field.
#
# Added by commit in 4e016f969529f ("vfio: Add an option to get migration
# data size") in v6.2 kernel.
#
CODE="
#include <linux/pci.h>
#include <linux/vfio.h>
int conftest_mdev_vfio_migration_ops_has_migration_get_data_size(void) {
return offsetof(struct vfio_migration_ops, migration_get_data_size);
}"
compile_check_conftest "$CODE" "NV_VFIO_MIGRATION_OPS_HAS_MIGRATION_GET_DATA_SIZE" "" "types"
;;
mdev_parent_ops)
#
# Determine if the struct mdev_parent_ops type is present.
#
# Added by commit 42930553a7c1 ("vfio-mdev: de-polute the
# namespace, rename parent_device & parent_ops") in v4.10
@ -952,12 +981,28 @@ compile_test() {
CODE="
#include <linux/pci.h>
#include <linux/mdev.h>
struct mdev_parent_ops conftest_mdev_parent;
struct mdev_parent_ops conftest_mdev_parent_ops;
"
compile_check_conftest "$CODE" "NV_MDEV_PARENT_OPS_STRUCT_PRESENT" "" "types"
;;
mdev_parent)
#
# Determine if the struct mdev_parent type is present.
#
# Added by commit 89345d5177aa ("vfio/mdev: embedd struct mdev_parent in
# the parent data structure") in v6.1
#
CODE="
#include <linux/pci.h>
#include <linux/mdev.h>
struct mdev_parent conftest_mdev_parent;
"
compile_check_conftest "$CODE" "NV_MDEV_PARENT_STRUCT_PRESENT" "" "types"
;;
mdev_parent_dev)
#
# Determine if mdev_parent_dev() function is present or not
@ -975,6 +1020,23 @@ compile_test() {
compile_check_conftest "$CODE" "NV_MDEV_PARENT_DEV_PRESENT" "" "functions"
;;
vfio_free_device)
#
# Determine if vfio_free_device() function is present or not
#
# Removed by commit 913447d06f03 ("vfio: Remove vfio_free_device")
# in v6.2
#
CODE="
#include <linux/pci.h>
#include <linux/vfio.h>
void conftest_vfio_free_device() {
vfio_free_device();
}"
compile_check_conftest "$CODE" "NV_VFIO_FREE_DEVICE_PRESENT" "" "functions"
;;
mdev_from_dev)
#
# Determine if mdev_from_dev() function is present or not.
@ -1147,7 +1209,6 @@ compile_test() {
compile_check_conftest "$CODE" "NV_VFIO_UNINIT_GROUP_DEV_PRESENT" "" "functions"
;;
vfio_pci_core_available)
# Determine if VFIO_PCI_CORE is available
#
@ -1170,6 +1231,23 @@ compile_test() {
compile_check_conftest "$CODE" "NV_VFIO_PCI_CORE_PRESENT" "" "generic"
;;
vfio_alloc_device)
#
# Determine if vfio_alloc_device() function is present or not.
#
# Added by commit cb9ff3f3b84c (vfio: Add helpers for unifying vfio_device
# life cycle) in v6.1
#
CODE="
#include <linux/vfio.h>
void conftest_vfio_alloc_device() {
vfio_alloc_device();
}"
compile_check_conftest "$CODE" "NV_VFIO_ALLOC_DEVICE_PRESENT" "" "functions"
;;
vfio_register_emulated_iommu_dev)
#
# Determine if vfio_register_emulated_iommu_dev() function is present or not.
@ -2237,6 +2315,10 @@ compile_test() {
# commit 768ae309a961 ("mm: replace get_user_pages() write/force
# parameters with gup_flags") in v4.9 (2016-10-13)
#
# Removed vmas parameter from get_user_pages() by commit 7bbf9c8c99
# ("mm/gup: remove unused vmas parameter from get_user_pages()")
# in linux-next, expected in v6.5-rc1
#
# linux-4.4.168 cherry-picked commit 768ae309a961 without
# c12d2da56d0e which is covered in Conftest #3.
#
@ -2246,22 +2328,28 @@ compile_test() {
# passing conftest's
#
set_get_user_pages_defines () {
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_FLAGS_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_HAS_ARGS_FLAGS_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_FLAGS_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_HAS_ARGS_FLAGS" ]; then
@ -2269,6 +2357,7 @@ compile_test() {
else
echo "#undef NV_GET_USER_PAGES_HAS_ARGS_FLAGS" | append_conftest "functions"
fi
}
# Conftest #1: Check if get_user_pages accepts 6 arguments.
@ -2289,14 +2378,15 @@ compile_test() {
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE"
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_WRITE_FORCE_VMAS"
rm -f conftest$$.o
return
fi
# Conftest #2: Check if get_user_pages has gup_flags instead of
# write and force parameters. And that gup doesn't accept a
# task_struct and mm_struct as its first arguments.
# task_struct and mm_struct as its first arguments. get_user_pages
# has vm_area_struct as its last argument.
# Return if available.
# Fall through to conftest #3 on failure.
@ -2314,16 +2404,17 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_FLAGS"
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_FLAGS_VMAS"
rm -f conftest$$.o
return
fi
# Conftest #3: Check if get_user_pages has gup_flags instead of
# write and force parameters AND that gup has task_struct and
# mm_struct as its first arguments.
# write and force parameters. The gup has task_struct and
# mm_struct as its first arguments. get_user_pages
# has vm_area_struct as its last argument.
# Return if available.
# Fall through to default case if absent.
# Fall through to conftest #4 on failure.
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
@ -2341,12 +2432,35 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS"
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_TSK_FLAGS_VMAS"
rm -f conftest$$.o
return
fi
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE"
# Conftest #4: gup doesn't accept a task_struct and mm_struct as
# its first arguments. check if get_user_pages() does not take
# vmas argument.
# Fall through to default case otherwise.
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
long get_user_pages(unsigned long start,
unsigned long nr_pages,
unsigned int gup_flags,
struct page **pages) {
return 0;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_FLAGS"
rm -f conftest$$.o
return
fi
set_get_user_pages_defines "NV_GET_USER_PAGES_HAS_ARGS_TSK_WRITE_FORCE_VMAS"
return
;;
@ -2373,6 +2487,10 @@ compile_test() {
# commit 64019a2e467a ("mm/gup: remove task_struct pointer for
# all gup code") in v5.9-rc1 (2020-08-11).
#
# Removed vmas parameter from get_user_pages_remote() by commit
# a4bde14d549 ("mm/gup: remove vmas parameter from get_user_pages_remote()")
# in linux-next, expected in v6.5-rc1
#
#
# This function sets the NV_GET_USER_PAGES_REMOTE_* macros as per
@ -2385,22 +2503,28 @@ compile_test() {
echo "#define NV_GET_USER_PAGES_REMOTE_PRESENT" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED" | append_conftest "functions"
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED" | append_conftest "functions"
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED_VMAS" ]; then
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED_VMAS" | append_conftest "functions"
else
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED" ]; then
@ -2408,6 +2532,7 @@ compile_test() {
else
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED" | append_conftest "functions"
fi
}
# conftest #1: check if get_user_pages_remote() is available
@ -2430,8 +2555,8 @@ compile_test() {
fi
#
# conftest #2: check if get_user_pages_remote() has write and
# force arguments. Return if these arguments are present
# conftest #2: check if get_user_pages_remote() has write, force
# and vmas arguments. Return if these arguments are present
# Fall through to conftest #3 if these args are absent.
#
echo "$CONFTEST_PREAMBLE
@ -2451,14 +2576,14 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE"
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_WRITE_FORCE_VMAS"
rm -f conftest$$.o
return
fi
#
# conftest #3: check if get_user_pages_remote() has gpu_flags
# arguments. Return if these arguments are present
# conftest #3: check if get_user_pages_remote() has gpu_flags and
# vmas arguments. Return if these arguments are present
# Fall through to conftest #4 if these args are absent.
#
echo "$CONFTEST_PREAMBLE
@ -2477,13 +2602,14 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS"
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_VMAS"
rm -f conftest$$.o
return
fi
#
# conftest #4: check if get_user_pages_remote() has locked argument
# conftest #4: check if get_user_pages_remote() has locked and
# vmas argument
# Return if these arguments are present. Fall through to conftest #5
# if these args are absent.
#
@ -2504,7 +2630,7 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED"
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_TSK_FLAGS_LOCKED_VMAS"
rm -f conftest$$.o
return
fi
@ -2528,10 +2654,34 @@ compile_test() {
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED_VMAS"
rm -f conftest$$.o
fi
#
# conftest #6: check if get_user_pages_remote() does not take
# vmas argument.
#
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
long get_user_pages_remote(struct mm_struct *mm,
unsigned long start,
unsigned long nr_pages,
unsigned int gup_flags,
struct page **pages,
int *locked) {
return 0;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_get_user_pages_remote_defines "NV_GET_USER_PAGES_REMOTE_HAS_ARGS_FLAGS_LOCKED"
rm -f conftest$$.o
fi
;;
pin_user_pages)
@ -2543,17 +2693,65 @@ compile_test() {
# pin_user_pages() was added by commit eddb1c228f7951d399240
# ("mm/gup: introduce pin_user_pages*() and FOLL_PIN") in
# v5.6-rc1 (2020-01-30)
#
# Removed vmas parameter from pin_user_pages() by commit
# 40896a02751("mm/gup: remove vmas parameter from pin_user_pages()")
# in linux-next, expected in v6.5-rc1
set_pin_user_pages_defines () {
if [ "$1" = "" ]; then
echo "#undef NV_PIN_USER_PAGES_PRESENT" | append_conftest "functions"
else
echo "#define NV_PIN_USER_PAGES_PRESENT" | append_conftest "functions"
fi
if [ "$1" = "NV_PIN_USER_PAGES_HAS_ARGS_VMAS" ]; then
echo "#define NV_PIN_USER_PAGES_HAS_ARGS_VMAS" | append_conftest "functions"
else
echo "#undef NV_PIN_USER_PAGES_HAS_ARGS_VMAS" | append_conftest "functions"
fi
}
# conftest #1: check if pin_user_pages() is available
# return if not available.
# Fall through to conftest #2 if it is present
#
CODE="
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
void conftest_pin_user_pages(void) {
pin_user_pages();
}"
}" > conftest$$.c
compile_check_conftest "$CODE" "NV_PIN_USER_PAGES_PRESENT" "" "functions"
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_pin_user_pages_defines ""
rm -f conftest$$.o
return
fi
# conftest #2: Check if pin_user_pages() has vmas argument
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
long pin_user_pages(unsigned long start,
unsigned long nr_pages,
unsigned int gup_flags,
struct page **pages,
struct vm_area_struct **vmas) {
return 0;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_pin_user_pages_defines "NV_PIN_USER_PAGES_HAS_ARGS_VMAS"
rm -f conftest$$.o
else
set_pin_user_pages_defines "NV_PIN_USER_PAGES_PRESENT"
fi
;;
pin_user_pages_remote)
@ -2566,6 +2764,10 @@ compile_test() {
# pin_user_pages_remote() removed 'tsk' parameter by
# commit 64019a2e467a ("mm/gup: remove task_struct pointer for
# all gup code") in v5.9-rc1 (2020-08-11).
#
# Removed unused vmas parameter from pin_user_pages_remote() by
# commit 83bcc2e132 ("mm/gup: remove unused vmas parameter from
# pin_user_pages_remote()") in linux-next, expected in v6.5-rc1
#
# This function sets the NV_PIN_USER_PAGES_REMOTE_* macros as per
@ -2578,10 +2780,16 @@ compile_test() {
echo "#define NV_PIN_USER_PAGES_REMOTE_PRESENT" | append_conftest "functions"
fi
if [ "$1" = "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK" ]; then
echo "#define NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK" | append_conftest "functions"
if [ "$1" = "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS" ]; then
echo "#define NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS" | append_conftest "functions"
else
echo "#undef NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK" | append_conftest "functions"
echo "#undef NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS" | append_conftest "functions"
fi
if [ "$1" = "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_VMAS" ]; then
echo "#define NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_VMAS" | append_conftest "functions"
else
echo "#undef NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_VMAS" | append_conftest "functions"
fi
}
@ -2604,7 +2812,11 @@ compile_test() {
return
fi
# conftest #2: Check if pin_user_pages_remote() has tsk argument
# conftest #2: Check if pin_user_pages_remote() has tsk and
# vmas argument
# Return if these arguments are present else fall through to
# conftest #3
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
long pin_user_pages_remote(struct task_struct *tsk,
@ -2622,11 +2834,34 @@ compile_test() {
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_pin_user_pages_remote_defines "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK"
set_pin_user_pages_remote_defines "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_TSK_VMAS"
rm -f conftest$$.o
return
fi
# conftest #3: Check if pin_user_pages_remote() has vmas argument
echo "$CONFTEST_PREAMBLE
#include <linux/mm.h>
long pin_user_pages_remote(struct mm_struct *mm,
unsigned long start,
unsigned long nr_pages,
unsigned int gup_flags,
struct page **pages,
struct vm_area_struct **vmas,
int *locked) {
return 0;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
set_pin_user_pages_remote_defines "NV_PIN_USER_PAGES_REMOTE_HAS_ARGS_VMAS"
rm -f conftest$$.o
else
set_pin_user_pages_remote_defines "NV_PIN_USER_PAGES_REMOTE_PRESENT"
fi
;;
vfio_pin_pages_has_vfio_device_arg)
@ -5095,23 +5330,6 @@ compile_test() {
compile_check_conftest "$CODE" "NV_GPIO_TO_IRQ_PRESENT" "" "functions"
;;
migrate_vma_setup)
#
# Determine if migrate_vma_setup() function is present
#
# migrate_vma_setup() function was added by commit
# a7d1f22bb74f32cf3cd93f52776007e161f1a738 ("mm: turn migrate_vma
# upside down) in v5.4.
# (2019-08-20).
CODE="
#include <linux/migrate.h>
int conftest_migrate_vma_setup(void) {
migrate_vma_setup();
}"
compile_check_conftest "$CODE" "NV_MIGRATE_VMA_SETUP_PRESENT" "" "functions"
;;
migrate_vma_added_flags)
#
# Determine if migrate_vma structure has flags
@ -5475,6 +5693,49 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DRM_CONNECTOR_HAS_OVERRIDE_EDID" "" "types"
;;
vm_area_struct_has_const_vm_flags)
#
# Determine if the 'vm_area_struct' structure has
# const 'vm_flags'.
#
# A union of '__vm_flags' and 'const vm_flags' was added
# by commit bc292ab00f6c ("mm: introduce vma->vm_flags
# wrapper functions") in mm-stable branch (2023-02-09)
# of the akpm/mm maintainer tree.
#
CODE="
#include <linux/mm_types.h>
int conftest_vm_area_struct_has_const_vm_flags(void) {
return offsetof(struct vm_area_struct, __vm_flags);
}"
compile_check_conftest "$CODE" "NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS" "" "types"
;;
drm_driver_has_dumb_destroy)
#
# Determine if the 'drm_driver' structure has a 'dumb_destroy'
# function pointer.
#
# Removed by commit 96a7b60f6ddb2 ("drm: remove dumb_destroy
# callback") in v6.3 linux-next (2023-02-10).
#
CODE="
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
#endif
#if defined(NV_DRM_DRM_DRV_H_PRESENT)
#include <drm/drm_drv.h>
#endif
int conftest_drm_driver_has_dumb_destroy(void) {
return offsetof(struct drm_driver, dumb_destroy);
}"
compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_DUMB_DESTROY" "" "types"
;;
# When adding a new conftest entry, please use the correct format for
# specifying the relevant upstream Linux kernel commit.
#

View File

@ -855,8 +855,23 @@ static struct drm_driver nv_drm_driver = {
.ioctls = nv_drm_ioctls,
.num_ioctls = ARRAY_SIZE(nv_drm_ioctls),
/*
* linux-next commit 71a7974ac701 ("drm/prime: Unexport helpers for fd/handle
* conversion") unexports drm_gem_prime_handle_to_fd() and
* drm_gem_prime_fd_to_handle().
*
* Prior linux-next commit 6b85aa68d9d5 ("drm: Enable PRIME import/export for
* all drivers") made these helpers the default when .prime_handle_to_fd /
* .prime_fd_to_handle are unspecified, so it's fine to just skip specifying
* them if the helpers aren't present.
*/
#if NV_IS_EXPORT_SYMBOL_PRESENT_drm_gem_prime_handle_to_fd
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
#endif
#if NV_IS_EXPORT_SYMBOL_PRESENT_drm_gem_prime_fd_to_handle
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
#endif
.gem_prime_import = nv_drm_gem_prime_import,
.gem_prime_import_sg_table = nv_drm_gem_prime_import_sg_table,
@ -921,7 +936,9 @@ static void nv_drm_update_drm_driver_features(void)
nv_drm_driver.dumb_create = nv_drm_dumb_create;
nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset;
#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY)
nv_drm_driver.dumb_destroy = nv_drm_dumb_destroy;
#endif /* NV_DRM_DRIVER_HAS_DUMB_DESTROY */
#endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
}

View File

@ -201,7 +201,7 @@ static struct sg_table *__nv_drm_gem_nvkms_memory_prime_get_sg_table(
nv_dev,
"Cannot create sg_table for NvKmsKapiMemory 0x%p",
nv_gem->pMemory);
return NULL;
return ERR_PTR(-ENOMEM);
}
sg_table = nv_drm_prime_pages_to_sg(nv_dev->dev,
@ -583,11 +583,13 @@ int nv_drm_dumb_map_offset(struct drm_file *file,
return ret;
}
#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY)
int nv_drm_dumb_destroy(struct drm_file *file,
struct drm_device *dev,
uint32_t handle)
{
return drm_gem_handle_delete(file, handle);
}
#endif /* NV_DRM_DRIVER_HAS_DUMB_DESTROY */
#endif

View File

@ -97,9 +97,11 @@ int nv_drm_dumb_map_offset(struct drm_file *file,
struct drm_device *dev, uint32_t handle,
uint64_t *offset);
#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY)
int nv_drm_dumb_destroy(struct drm_file *file,
struct drm_device *dev,
uint32_t handle);
#endif /* NV_DRM_DRIVER_HAS_DUMB_DESTROY */
struct drm_gem_object *nv_drm_gem_nvkms_prime_import(
struct drm_device *dev,

View File

@ -92,9 +92,9 @@ static int __nv_drm_gem_user_memory_mmap(struct nv_drm_gem_object *nv_gem,
return -EINVAL;
}
vma->vm_flags &= ~VM_PFNMAP;
vma->vm_flags &= ~VM_IO;
vma->vm_flags |= VM_MIXEDMAP;
nv_vm_flags_clear(vma, VM_PFNMAP);
nv_vm_flags_clear(vma, VM_IO);
nv_vm_flags_set(vma, VM_MIXEDMAP);
return 0;
}

View File

@ -299,7 +299,7 @@ int nv_drm_mmap(struct file *file, struct vm_area_struct *vma)
ret = -EINVAL;
goto done;
}
vma->vm_flags &= ~VM_MAYWRITE;
nv_vm_flags_clear(vma, VM_MAYWRITE);
}
#endif

View File

@ -54,6 +54,8 @@ NV_CONFTEST_GENERIC_COMPILE_TESTS += drm_atomic_available
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_gpl_refcount_inc
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_gpl_refcount_dec_and_test
NV_CONFTEST_GENERIC_COMPILE_TESTS += drm_alpha_blending_available
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_fd_to_handle
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_handle_to_fd
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_dev_unref
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_reinit_primary_mode_group
@ -124,3 +126,5 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += dma_resv_add_fence
NV_CONFTEST_TYPE_COMPILE_TESTS += dma_resv_reserve_fences
NV_CONFTEST_TYPE_COMPILE_TESTS += reservation_object_reserve_shared_has_num_fences_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_connector_has_override_edid
NV_CONFTEST_TYPE_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_dumb_destroy

View File

@ -65,6 +65,9 @@
static bool output_rounding_fix = true;
module_param_named(output_rounding_fix, output_rounding_fix, bool, 0400);
static bool disable_vrr_memclk_switch = false;
module_param_named(disable_vrr_memclk_switch, disable_vrr_memclk_switch, bool, 0400);
/* These parameters are used for fault injection tests. Normally the defaults
* should be used. */
MODULE_PARM_DESC(fail_malloc, "Fail the Nth call to nvkms_alloc");
@ -82,6 +85,11 @@ NvBool nvkms_output_rounding_fix(void)
return output_rounding_fix;
}
NvBool nvkms_disable_vrr_memclk_switch(void)
{
return disable_vrr_memclk_switch;
}
#define NVKMS_SYNCPT_STUBS_NEEDED
/*************************************************************************

View File

@ -112,6 +112,8 @@ typedef struct {
NvBool nvkms_output_rounding_fix(void);
NvBool nvkms_disable_vrr_memclk_switch(void);
void nvkms_call_rm (void *ops);
void* nvkms_alloc (size_t size,
NvBool zero);

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2011-2016 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2011-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -94,11 +94,10 @@ struct nvidia_p2p_params {
} nvidia_p2p_params_t;
/*
* Capability flag for users to detect
* Macro for users to detect
* driver support for persistent pages.
*/
extern int nvidia_p2p_cap_persistent_pages;
#define NVIDIA_P2P_CAP_PERSISTENT_PAGES
#define NVIDIA_P2P_CAP_GET_PAGES_PERSISTENT_API
/*
* This API is not supported.
@ -173,11 +172,6 @@ struct nvidia_p2p_page_table {
* A pointer to the function to be invoked when the pages
* underlying the virtual address range are freed
* implicitly.
* If NULL, persistent pages will be returned.
* This means the pages underlying the range of GPU virtual memory
* will persist until explicitly freed by nvidia_p2p_put_pages().
* Persistent GPU memory mappings are not supported on PowerPC,
* MIG-enabled devices and vGPU.
* @param[in] data
* A non-NULL opaque pointer to private data to be passed to the
* callback function.
@ -190,12 +184,48 @@ struct nvidia_p2p_page_table {
* insufficient resources were available to complete the operation.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_get_pages(uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address,
int nvidia_p2p_get_pages( uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address, uint64_t length,
struct nvidia_p2p_page_table **page_table,
void (*free_callback)(void *data), void *data);
/*
* @brief
* Pin and make the pages underlying a range of GPU virtual memory
* accessible to a third-party device. The pages will persist until
* explicitly freed by nvidia_p2p_put_pages_persistent().
*
* Persistent GPU memory mappings are not supported on PowerPC,
* MIG-enabled devices and vGPU.
*
* This API only supports pinned, GPU-resident memory, such as that provided
* by cudaMalloc().
*
* This API may sleep.
*
* @param[in] virtual_address
* The start address in the specified virtual address space.
* Address must be aligned to the 64KB boundary.
* @param[in] length
* The length of the requested P2P mapping.
* Length must be a multiple of 64KB.
* @param[out] page_table
* A pointer to an array of structures with P2P PTEs.
* @param[in] flags
* Must be set to zero for now.
*
* @return
* 0 upon successful completion.
* -EINVAL if an invalid argument was supplied.
* -ENOTSUPP if the requested operation is not supported.
* -ENOMEM if the driver failed to allocate memory or if
* insufficient resources were available to complete the operation.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_get_pages_persistent(uint64_t virtual_address,
uint64_t length,
struct nvidia_p2p_page_table **page_table,
void (*free_callback)(void *data),
void *data);
uint32_t flags);
#define NVIDIA_P2P_DMA_MAPPING_VERSION 0x00020003
@ -268,6 +298,8 @@ int nvidia_p2p_dma_unmap_pages(struct pci_dev *peer,
* Release a set of pages previously made accessible to
* a third-party device.
*
* This API may sleep.
*
* @param[in] p2p_token
* A token that uniquely identifies the P2P mapping.
* @param[in] va_space
@ -282,10 +314,33 @@ int nvidia_p2p_dma_unmap_pages(struct pci_dev *peer,
* -EINVAL if an invalid argument was supplied.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_put_pages(uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address,
int nvidia_p2p_put_pages(uint64_t p2p_token,
uint32_t va_space, uint64_t virtual_address,
struct nvidia_p2p_page_table *page_table);
/*
* @brief
* Release a set of persistent pages previously made accessible to
* a third-party device.
*
* This API may sleep.
*
* @param[in] virtual_address
* The start address in the specified virtual address space.
* @param[in] page_table
* A pointer to the array of structures with P2P PTEs.
* @param[in] flags
* Must be set to zero for now.
*
* @return
* 0 upon successful completion.
* -EINVAL if an invalid argument was supplied.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_put_pages_persistent(uint64_t virtual_address,
struct nvidia_p2p_page_table *page_table,
uint32_t flags);
/*
* @brief
* Free a third-party P2P page table. (This function is a no-op.)

View File

@ -284,8 +284,9 @@ out:
return 0;
}
static void nv_mem_put_pages(struct sg_table *sg_head, void *context)
static void nv_mem_put_pages_common(int nc,
struct sg_table *sg_head,
void *context)
{
int ret = 0;
struct nv_mem_context *nv_mem_context =
@ -302,8 +303,13 @@ static void nv_mem_put_pages(struct sg_table *sg_head, void *context)
if (nv_mem_context->callback_task == current)
return;
ret = nvidia_p2p_put_pages(0, 0, nv_mem_context->page_virt_start,
nv_mem_context->page_table);
if (nc) {
ret = nvidia_p2p_put_pages_persistent(nv_mem_context->page_virt_start,
nv_mem_context->page_table, 0);
} else {
ret = nvidia_p2p_put_pages(0, 0, nv_mem_context->page_virt_start,
nv_mem_context->page_table);
}
#ifdef _DEBUG_ONLY_
/* Here we expect an error in real life cases that should be ignored - not printed.
@ -318,6 +324,16 @@ static void nv_mem_put_pages(struct sg_table *sg_head, void *context)
return;
}
static void nv_mem_put_pages(struct sg_table *sg_head, void *context)
{
nv_mem_put_pages_common(0, sg_head, context);
}
static void nv_mem_put_pages_nc(struct sg_table *sg_head, void *context)
{
nv_mem_put_pages_common(1, sg_head, context);
}
static void nv_mem_release(void *context)
{
struct nv_mem_context *nv_mem_context =
@ -396,8 +412,9 @@ static int nv_mem_get_pages_nc(unsigned long addr,
nv_mem_context->core_context = core_context;
nv_mem_context->page_size = GPU_PAGE_SIZE;
ret = nvidia_p2p_get_pages(0, 0, nv_mem_context->page_virt_start, nv_mem_context->mapped_size,
&nv_mem_context->page_table, NULL, NULL);
ret = nvidia_p2p_get_pages_persistent(nv_mem_context->page_virt_start,
nv_mem_context->mapped_size,
&nv_mem_context->page_table, 0);
if (ret < 0) {
peer_err("error %d while calling nvidia_p2p_get_pages() with NULL callback\n", ret);
return ret;
@ -407,13 +424,13 @@ static int nv_mem_get_pages_nc(unsigned long addr,
}
static struct peer_memory_client nv_mem_client_nc = {
.acquire = nv_mem_acquire,
.get_pages = nv_mem_get_pages_nc,
.dma_map = nv_dma_map,
.dma_unmap = nv_dma_unmap,
.put_pages = nv_mem_put_pages,
.get_page_size = nv_mem_get_page_size,
.release = nv_mem_release,
.acquire = nv_mem_acquire,
.get_pages = nv_mem_get_pages_nc,
.dma_map = nv_dma_map,
.dma_unmap = nv_dma_unmap,
.put_pages = nv_mem_put_pages_nc,
.get_page_size = nv_mem_get_page_size,
.release = nv_mem_release,
};
#endif /* NV_MLNX_IB_PEER_MEM_SYMBOLS_PRESENT */
@ -477,9 +494,6 @@ static int __init nv_mem_client_init(void)
}
// The nc client enables support for persistent pages.
// Thanks to this check, nvidia-peermem requires the new symbol from nvidia.ko, which
// prevents users to unintentionally load this module with unsupported nvidia.ko.
BUG_ON(!nvidia_p2p_cap_persistent_pages);
strcpy(nv_mem_client_nc.name, DRV_NAME "_nc");
strcpy(nv_mem_client_nc.version, DRV_VERSION);
reg_handle_nc = ib_register_peer_memory_client(&nv_mem_client_nc, NULL);

View File

@ -81,7 +81,6 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_memory_uc
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_pages_uc
NV_CONFTEST_FUNCTION_COMPILE_TESTS += ktime_get_raw_ts64
NV_CONFTEST_FUNCTION_COMPILE_TESTS += ioasid_get
NV_CONFTEST_FUNCTION_COMPILE_TESTS += migrate_vma_setup
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mmget_not_zero
NV_CONFTEST_TYPE_COMPILE_TESTS += backing_dev_info
@ -101,5 +100,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += timespec64
NV_CONFTEST_TYPE_COMPILE_TESTS += mm_has_mmap_lock
NV_CONFTEST_TYPE_COMPILE_TESTS += migrate_vma_added_flags
NV_CONFTEST_TYPE_COMPILE_TESTS += make_device_exclusive_range
NV_CONFTEST_TYPE_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_int_active_memcg
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_migrate_vma_setup

View File

@ -618,7 +618,7 @@ static int uvm_mmap(struct file *filp, struct vm_area_struct *vma)
// Using VM_DONTCOPY would be nice, but madvise(MADV_DOFORK) can reset that
// so we have to handle vm_open on fork anyway. We could disable MADV_DOFORK
// with VM_IO, but that causes other mapping issues.
vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
nv_vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND);
vma->vm_ops = &uvm_vm_ops_managed;

View File

@ -179,7 +179,7 @@ static NV_STATUS test_membar(uvm_gpu_t *gpu)
for (i = 0; i < REDUCTIONS; ++i) {
uvm_push_set_flag(&push, UVM_PUSH_FLAG_NEXT_MEMBAR_NONE);
gpu->parent->ce_hal->semaphore_reduction_inc(&push, host_mem_gpu_va, REDUCTIONS + 1);
gpu->parent->ce_hal->semaphore_reduction_inc(&push, host_mem_gpu_va, REDUCTIONS);
}
// Without a sys membar the channel tracking semaphore can and does complete
@ -528,7 +528,7 @@ static NV_STATUS test_semaphore_reduction_inc(uvm_gpu_t *gpu)
for (i = 0; i < REDUCTIONS; i++) {
uvm_push_set_flag(&push, UVM_PUSH_FLAG_NEXT_MEMBAR_NONE);
gpu->parent->ce_hal->semaphore_reduction_inc(&push, gpu_va, i+1);
gpu->parent->ce_hal->semaphore_reduction_inc(&push, gpu_va, REDUCTIONS);
}
status = uvm_push_end_and_wait(&push);

View File

@ -153,7 +153,6 @@ done:
static NV_STATUS test_unexpected_completed_values(uvm_va_space_t *va_space)
{
NV_STATUS status;
uvm_gpu_t *gpu;
for_each_va_space_gpu(gpu, va_space) {

View File

@ -50,7 +50,7 @@ typedef struct
#if defined(CONFIG_MIGRATE_VMA_HELPER)
#define UVM_MIGRATE_VMA_SUPPORTED 1
#else
#if defined(CONFIG_DEVICE_PRIVATE) && defined(NV_MIGRATE_VMA_SETUP_PRESENT)
#if NV_IS_EXPORT_SYMBOL_PRESENT_migrate_vma_setup
#define UVM_MIGRATE_VMA_SUPPORTED 1
#endif
#endif

View File

@ -1,5 +1,5 @@
/*******************************************************************************
Copyright (c) 2015-2022 NVIDIA Corporation
Copyright (c) 2015-2023 NVIDIA Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@ -102,7 +102,7 @@ static NV_STATUS phys_mem_allocate_sysmem(uvm_page_tree_t *tree, NvLength size,
NvU64 dma_addr;
unsigned long flags = __GFP_ZERO;
uvm_memcg_context_t memcg_context;
uvm_va_space_t *va_space;
uvm_va_space_t *va_space = NULL;
struct mm_struct *mm = NULL;
if (tree->type == UVM_PAGE_TREE_TYPE_USER && tree->gpu_va_space && UVM_CGROUP_ACCOUNTING_SUPPORTED()) {

View File

@ -1,5 +1,5 @@
/*******************************************************************************
Copyright (c) 2022 NVIDIA Corporation
Copyright (c) 2022-2023 NVIDIA Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@ -53,7 +53,7 @@ typedef enum
// The VA range is determined from either the uvm_va_range_t for managed
// allocations or the uvm_va_policy_node_t for HMM allocations.
//
typedef struct uvm_va_policy_struct
struct uvm_va_policy_struct
{
// Read duplication policy for this VA range (unset, enabled, or disabled).
uvm_read_duplication_policy_t read_duplication;
@ -66,7 +66,7 @@ typedef struct uvm_va_policy_struct
// their page tables updated to access the (possibly remote) pages.
uvm_processor_mask_t accessed_by;
} uvm_va_policy_t;
};
// Policy nodes are used for storing policies in HMM va_blocks.
// The va_block lock protects the tree so that invalidation callbacks can

View File

@ -452,7 +452,7 @@ static int nvidia_mmap_numa(
}
// Needed for the linux kernel for mapping compound pages
vma->vm_flags |= VM_MIXEDMAP;
nv_vm_flags_set(vma, VM_MIXEDMAP);
for (i = 0, addr = mmap_context->page_array[0]; i < pages;
addr = mmap_context->page_array[++i], start += PAGE_SIZE)
@ -596,7 +596,7 @@ int nvidia_mmap_helper(
}
up(&nvl->mmap_lock);
vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND;
nv_vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND);
}
else
{
@ -663,15 +663,15 @@ int nvidia_mmap_helper(
NV_PRINT_AT(NV_DBG_MEMINFO, at);
vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED);
vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP);
nv_vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
nv_vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
}
if ((prot & NV_PROTECT_WRITEABLE) == 0)
{
vma->vm_page_prot = NV_PGPROT_READ_ONLY(vma->vm_page_prot);
vma->vm_flags &= ~VM_WRITE;
vma->vm_flags &= ~VM_MAYWRITE;
nv_vm_flags_clear(vma, VM_WRITE);
nv_vm_flags_clear(vma, VM_MAYWRITE);
}
vma->vm_ops = &nv_vm_ops;

View File

@ -213,7 +213,7 @@ void NV_API_CALL nv_cancel_nano_timer(
#if NV_NANO_TIMER_USE_HRTIMER
hrtimer_cancel(&nv_nstimer->hr_timer);
#else
del_timer(&nv_nstimer->jiffy_timer);
del_timer_sync(&nv_nstimer->jiffy_timer);
#endif
}

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2011-2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2011-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -31,6 +31,11 @@
#include "nv-p2p.h"
#include "rmp2pdefines.h"
typedef enum nv_p2p_page_table_type {
NV_P2P_PAGE_TABLE_TYPE_NON_PERSISTENT = 0,
NV_P2P_PAGE_TABLE_TYPE_PERSISTENT,
} nv_p2p_page_table_type_t;
typedef struct nv_p2p_dma_mapping {
struct list_head list_node;
struct nvidia_p2p_dma_mapping *dma_mapping;
@ -44,13 +49,9 @@ typedef struct nv_p2p_mem_info {
struct list_head list_head;
struct semaphore lock;
} dma_mapping_list;
NvBool bPersistent;
void *private;
} nv_p2p_mem_info_t;
int nvidia_p2p_cap_persistent_pages = 1;
EXPORT_SYMBOL(nvidia_p2p_cap_persistent_pages);
// declared and created in nv.c
extern void *nvidia_p2p_page_t_cache;
@ -238,6 +239,7 @@ static void nv_p2p_free_page_table(
}
static NV_STATUS nv_p2p_put_pages(
nv_p2p_page_table_type_t pt_type,
nvidia_stack_t * sp,
uint64_t p2p_token,
uint32_t va_space,
@ -246,9 +248,6 @@ static NV_STATUS nv_p2p_put_pages(
)
{
NV_STATUS status;
struct nv_p2p_mem_info *mem_info = NULL;
mem_info = container_of(*page_table, nv_p2p_mem_info_t, page_table);
/*
* rm_p2p_put_pages returns NV_OK if the page_table was found and
@ -258,8 +257,15 @@ static NV_STATUS nv_p2p_put_pages(
* rm_p2p_put_pages returns NV_ERR_OBJECT_NOT_FOUND if the page_table
* was already unlinked.
*/
if (mem_info->bPersistent)
if (pt_type == NV_P2P_PAGE_TABLE_TYPE_PERSISTENT)
{
struct nv_p2p_mem_info *mem_info = NULL;
/*
* It is safe to access persistent page_table as there is no async
* callback which can free it unlike non-persistent page_table.
*/
mem_info = container_of(*page_table, nv_p2p_mem_info_t, page_table);
status = rm_p2p_put_pages_persistent(sp, mem_info->private, *page_table);
}
else
@ -273,7 +279,8 @@ static NV_STATUS nv_p2p_put_pages(
nv_p2p_free_page_table(*page_table);
*page_table = NULL;
}
else if (!mem_info->bPersistent && (status == NV_ERR_OBJECT_NOT_FOUND))
else if ((pt_type == NV_P2P_PAGE_TABLE_TYPE_NON_PERSISTENT) &&
(status == NV_ERR_OBJECT_NOT_FOUND))
{
status = NV_OK;
*page_table = NULL;
@ -327,7 +334,8 @@ static void nv_p2p_mem_info_free_callback(void *data)
nv_p2p_free_platform_data(&mem_info->page_table);
}
int nvidia_p2p_get_pages(
static int nv_p2p_get_pages(
nv_p2p_page_table_type_t pt_type,
uint64_t p2p_token,
uint32_t va_space,
uint64_t virtual_address,
@ -376,9 +384,10 @@ int nvidia_p2p_get_pages(
*page_table = &(mem_info->page_table);
mem_info->bPersistent = (free_callback == NULL);
//asign length to temporary variable since do_div macro does in-place division
/*
* assign length to temporary variable since do_div macro does in-place
* division
*/
temp_length = length;
do_div(temp_length, page_size);
page_count = temp_length;
@ -405,7 +414,7 @@ int nvidia_p2p_get_pages(
goto failed;
}
if (mem_info->bPersistent)
if (pt_type == NV_P2P_PAGE_TABLE_TYPE_PERSISTENT)
{
void *gpu_info = NULL;
@ -415,12 +424,15 @@ int nvidia_p2p_get_pages(
goto failed;
}
status = rm_p2p_get_gpu_info(sp, virtual_address, length, &gpu_uuid, &gpu_info);
status = rm_p2p_get_gpu_info(sp, virtual_address, length,
&gpu_uuid, &gpu_info);
if (status != NV_OK)
{
goto failed;
}
(*page_table)->gpu_uuid = gpu_uuid;
rc = nvidia_dev_get_uuid(gpu_uuid, sp);
if (rc != 0)
{
@ -432,8 +444,10 @@ int nvidia_p2p_get_pages(
bGetUuid = NV_TRUE;
status = rm_p2p_get_pages_persistent(sp, virtual_address, length, &mem_info->private,
physical_addresses, &entries, *page_table, gpu_info);
status = rm_p2p_get_pages_persistent(sp, virtual_address, length,
&mem_info->private,
physical_addresses, &entries,
*page_table, gpu_info);
if (status != NV_OK)
{
goto failed;
@ -449,10 +463,11 @@ int nvidia_p2p_get_pages(
{
goto failed;
}
(*page_table)->gpu_uuid = gpu_uuid;
}
bGetPages = NV_TRUE;
(*page_table)->gpu_uuid = gpu_uuid;
status = os_alloc_mem((void *)&(*page_table)->pages,
(entries * sizeof(page)));
@ -491,8 +506,13 @@ int nvidia_p2p_get_pages(
(*page_table)->page_size = page_size_index;
os_free_mem(physical_addresses);
physical_addresses = NULL;
os_free_mem(wreqmb_h);
wreqmb_h = NULL;
os_free_mem(rreqmb_h);
rreqmb_h = NULL;
if (free_callback != NULL)
{
@ -516,10 +536,12 @@ failed:
{
os_free_mem(physical_addresses);
}
if (wreqmb_h != NULL)
{
os_free_mem(wreqmb_h);
}
if (rreqmb_h != NULL)
{
os_free_mem(rreqmb_h);
@ -527,7 +549,7 @@ failed:
if (bGetPages)
{
(void)nv_p2p_put_pages(sp, p2p_token, va_space,
(void)nv_p2p_put_pages(pt_type, sp, p2p_token, va_space,
virtual_address, page_table);
}
@ -546,8 +568,45 @@ failed:
return nvidia_p2p_map_status(status);
}
int nvidia_p2p_get_pages(
uint64_t p2p_token,
uint32_t va_space,
uint64_t virtual_address,
uint64_t length,
struct nvidia_p2p_page_table **page_table,
void (*free_callback)(void * data),
void *data
)
{
if (free_callback == NULL)
{
return -EINVAL;
}
return nv_p2p_get_pages(NV_P2P_PAGE_TABLE_TYPE_NON_PERSISTENT,
p2p_token, va_space, virtual_address,
length, page_table, free_callback, data);
}
EXPORT_SYMBOL(nvidia_p2p_get_pages);
int nvidia_p2p_get_pages_persistent(
uint64_t virtual_address,
uint64_t length,
struct nvidia_p2p_page_table **page_table,
uint32_t flags
)
{
if (flags != 0)
{
return -EINVAL;
}
return nv_p2p_get_pages(NV_P2P_PAGE_TABLE_TYPE_PERSISTENT, 0, 0,
virtual_address, length, page_table,
NULL, NULL);
}
EXPORT_SYMBOL(nvidia_p2p_get_pages_persistent);
/*
* This function is a no-op, but is left in place (for now), in order to allow
* third-party callers to build and run without errors or warnings. This is OK,
@ -568,15 +627,14 @@ int nvidia_p2p_put_pages(
struct nvidia_p2p_page_table *page_table
)
{
struct nv_p2p_mem_info *mem_info = NULL;
NvU8 uuid[NVIDIA_P2P_GPU_UUID_LEN] = {0};
NV_STATUS status;
nvidia_stack_t *sp = NULL;
int rc = 0;
os_mem_copy(uuid, page_table->gpu_uuid, NVIDIA_P2P_GPU_UUID_LEN);
mem_info = container_of(page_table, nv_p2p_mem_info_t, page_table);
if (page_table == NULL)
{
return 0;
}
rc = nv_kmem_cache_alloc_stack(&sp);
if (rc != 0)
@ -584,21 +642,56 @@ int nvidia_p2p_put_pages(
return -ENOMEM;
}
status = nv_p2p_put_pages(sp, p2p_token, va_space,
status = nv_p2p_put_pages(NV_P2P_PAGE_TABLE_TYPE_NON_PERSISTENT,
sp, p2p_token, va_space,
virtual_address, &page_table);
if (mem_info->bPersistent)
{
nvidia_dev_put_uuid(uuid, sp);
}
nv_kmem_cache_free_stack(sp);
return nvidia_p2p_map_status(status);
}
EXPORT_SYMBOL(nvidia_p2p_put_pages);
int nvidia_p2p_put_pages_persistent(
uint64_t virtual_address,
struct nvidia_p2p_page_table *page_table,
uint32_t flags
)
{
NvU8 uuid[NVIDIA_P2P_GPU_UUID_LEN] = {0};
NV_STATUS status;
nvidia_stack_t *sp = NULL;
int rc = 0;
if (flags != 0)
{
return -EINVAL;
}
if (page_table == NULL)
{
return 0;
}
rc = nv_kmem_cache_alloc_stack(&sp);
if (rc != 0)
{
return -ENOMEM;
}
os_mem_copy(uuid, page_table->gpu_uuid, NVIDIA_P2P_GPU_UUID_LEN);
status = nv_p2p_put_pages(NV_P2P_PAGE_TABLE_TYPE_PERSISTENT,
sp, 0, 0, virtual_address, &page_table);
nvidia_dev_put_uuid(uuid, sp);
nv_kmem_cache_free_stack(sp);
return nvidia_p2p_map_status(status);
}
EXPORT_SYMBOL(nvidia_p2p_put_pages_persistent);
int nvidia_p2p_dma_map_pages(
struct pci_dev *peer,
struct nvidia_p2p_page_table *page_table,

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2011-2016 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2011-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -94,11 +94,10 @@ struct nvidia_p2p_params {
} nvidia_p2p_params_t;
/*
* Capability flag for users to detect
* Macro for users to detect
* driver support for persistent pages.
*/
extern int nvidia_p2p_cap_persistent_pages;
#define NVIDIA_P2P_CAP_PERSISTENT_PAGES
#define NVIDIA_P2P_CAP_GET_PAGES_PERSISTENT_API
/*
* This API is not supported.
@ -173,11 +172,6 @@ struct nvidia_p2p_page_table {
* A pointer to the function to be invoked when the pages
* underlying the virtual address range are freed
* implicitly.
* If NULL, persistent pages will be returned.
* This means the pages underlying the range of GPU virtual memory
* will persist until explicitly freed by nvidia_p2p_put_pages().
* Persistent GPU memory mappings are not supported on PowerPC,
* MIG-enabled devices and vGPU.
* @param[in] data
* A non-NULL opaque pointer to private data to be passed to the
* callback function.
@ -190,12 +184,48 @@ struct nvidia_p2p_page_table {
* insufficient resources were available to complete the operation.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_get_pages(uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address,
int nvidia_p2p_get_pages( uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address, uint64_t length,
struct nvidia_p2p_page_table **page_table,
void (*free_callback)(void *data), void *data);
/*
* @brief
* Pin and make the pages underlying a range of GPU virtual memory
* accessible to a third-party device. The pages will persist until
* explicitly freed by nvidia_p2p_put_pages_persistent().
*
* Persistent GPU memory mappings are not supported on PowerPC,
* MIG-enabled devices and vGPU.
*
* This API only supports pinned, GPU-resident memory, such as that provided
* by cudaMalloc().
*
* This API may sleep.
*
* @param[in] virtual_address
* The start address in the specified virtual address space.
* Address must be aligned to the 64KB boundary.
* @param[in] length
* The length of the requested P2P mapping.
* Length must be a multiple of 64KB.
* @param[out] page_table
* A pointer to an array of structures with P2P PTEs.
* @param[in] flags
* Must be set to zero for now.
*
* @return
* 0 upon successful completion.
* -EINVAL if an invalid argument was supplied.
* -ENOTSUPP if the requested operation is not supported.
* -ENOMEM if the driver failed to allocate memory or if
* insufficient resources were available to complete the operation.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_get_pages_persistent(uint64_t virtual_address,
uint64_t length,
struct nvidia_p2p_page_table **page_table,
void (*free_callback)(void *data),
void *data);
uint32_t flags);
#define NVIDIA_P2P_DMA_MAPPING_VERSION 0x00020003
@ -268,6 +298,8 @@ int nvidia_p2p_dma_unmap_pages(struct pci_dev *peer,
* Release a set of pages previously made accessible to
* a third-party device.
*
* This API may sleep.
*
* @param[in] p2p_token
* A token that uniquely identifies the P2P mapping.
* @param[in] va_space
@ -282,10 +314,33 @@ int nvidia_p2p_dma_unmap_pages(struct pci_dev *peer,
* -EINVAL if an invalid argument was supplied.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_put_pages(uint64_t p2p_token, uint32_t va_space,
uint64_t virtual_address,
int nvidia_p2p_put_pages(uint64_t p2p_token,
uint32_t va_space, uint64_t virtual_address,
struct nvidia_p2p_page_table *page_table);
/*
* @brief
* Release a set of persistent pages previously made accessible to
* a third-party device.
*
* This API may sleep.
*
* @param[in] virtual_address
* The start address in the specified virtual address space.
* @param[in] page_table
* A pointer to the array of structures with P2P PTEs.
* @param[in] flags
* Must be set to zero for now.
*
* @return
* 0 upon successful completion.
* -EINVAL if an invalid argument was supplied.
* -EIO if an unknown error occurred.
*/
int nvidia_p2p_put_pages_persistent(uint64_t virtual_address,
struct nvidia_p2p_page_table *page_table,
uint32_t flags);
/*
* @brief
* Free a third-party P2P page table. (This function is a no-op.)

View File

@ -165,7 +165,7 @@ NvBool nv_ats_supported = NVCPU_IS_PPC64LE
/* nvos_ functions.. do not take a state device parameter */
static int nvos_count_devices(void);
static nv_alloc_t *nvos_create_alloc(struct device *, int);
static nv_alloc_t *nvos_create_alloc(struct device *, NvU64);
static int nvos_free_alloc(nv_alloc_t *);
/***
@ -280,11 +280,12 @@ void nv_sev_init(
static
nv_alloc_t *nvos_create_alloc(
struct device *dev,
int num_pages
NvU64 num_pages
)
{
nv_alloc_t *at;
unsigned int pt_size, i;
nv_alloc_t *at;
NvU64 pt_size;
unsigned int i;
NV_KZALLOC(at, sizeof(nv_alloc_t));
if (at == NULL)
@ -295,6 +296,24 @@ nv_alloc_t *nvos_create_alloc(
at->dev = dev;
pt_size = num_pages * sizeof(nvidia_pte_t *);
//
// Check for multiplication overflow and check whether num_pages value can fit in at->num_pages.
//
if ((num_pages != 0) && ((pt_size / num_pages) != sizeof(nvidia_pte_t*)))
{
nv_printf(NV_DBG_ERRORS, "NVRM: Invalid page table allocation - Number of pages exceeds max value.\n");
NV_KFREE(at, sizeof(nv_alloc_t));
return NULL;
}
at->num_pages = num_pages;
if (at->num_pages != num_pages)
{
nv_printf(NV_DBG_ERRORS, "NVRM: Invalid page table allocation - requested size overflows.\n");
NV_KFREE(at, sizeof(nv_alloc_t));
return NULL;
}
if (os_alloc_mem((void **)&at->page_table, pt_size) != NV_OK)
{
nv_printf(NV_DBG_ERRORS, "NVRM: failed to allocate page table\n");
@ -303,7 +322,6 @@ nv_alloc_t *nvos_create_alloc(
}
memset(at->page_table, 0, pt_size);
at->num_pages = num_pages;
NV_ATOMIC_SET(at->usage_count, 0);
for (i = 0; i < at->num_pages; i++)
@ -4487,19 +4505,19 @@ NvU64 NV_API_CALL nv_get_dma_start_address(
* as the starting address for all DMA mappings.
*/
saved_dma_mask = pci_dev->dma_mask;
if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64)) != 0)
if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64)) != 0)
{
goto done;
}
dma_addr = pci_map_single(pci_dev, NULL, 1, DMA_BIDIRECTIONAL);
if (pci_dma_mapping_error(pci_dev, dma_addr))
dma_addr = dma_map_single(&pci_dev->dev, NULL, 1, DMA_BIDIRECTIONAL);
if (dma_mapping_error(&pci_dev->dev, dma_addr))
{
pci_set_dma_mask(pci_dev, saved_dma_mask);
dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
pci_unmap_single(pci_dev, dma_addr, 1, DMA_BIDIRECTIONAL);
dma_unmap_single(&pci_dev->dev, dma_addr, 1, DMA_BIDIRECTIONAL);
/*
* From IBM: "For IODA2, native DMA bypass or KVM TCE-based implementation
@ -4531,7 +4549,7 @@ NvU64 NV_API_CALL nv_get_dma_start_address(
*/
nv_printf(NV_DBG_WARNINGS,
"NVRM: DMA window limited by platform\n");
pci_set_dma_mask(pci_dev, saved_dma_mask);
dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
else if ((dma_addr & saved_dma_mask) != 0)
@ -4550,7 +4568,7 @@ NvU64 NV_API_CALL nv_get_dma_start_address(
*/
nv_printf(NV_DBG_WARNINGS,
"NVRM: DMA window limited by memory size\n");
pci_set_dma_mask(pci_dev, saved_dma_mask);
dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
}

View File

@ -230,6 +230,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += remove_memory_has_nid_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += add_memory_driver_managed_has_mhp_flags_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += num_registered_fb
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_driver_has_driver_managed_dma
NV_CONFTEST_TYPE_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
NV_CONFTEST_GENERIC_COMPILE_TESTS += dom0_kernel_present
NV_CONFTEST_GENERIC_COMPILE_TESTS += nvidia_vgpu_kvm_build

View File

@ -46,6 +46,11 @@ NvlStatus nvlink_lib_unload(void);
*/
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params);
/*
* Gets number of devices with type deviceType
*/
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
#ifdef __cplusplus
}
#endif

View File

@ -30,6 +30,9 @@ extern "C" {
#include "nvlink_common.h"
#define TOP_LEVEL_LOCKING_DISABLED 1
#define PER_LINK_LOCKING_DISABLED 1
#define NVLINK_FREE(x) nvlink_free((void *)x)
// Memory management functions

View File

@ -213,6 +213,10 @@ namespace DisplayPort
virtual NvBool isDSCSupported() = 0;
virtual NvBool isDSCDecompressionSupported() = 0;
virtual NvBool isDSCPassThroughSupported() = 0;
virtual DscCaps getDscCaps() = 0;
//

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -125,6 +125,7 @@ namespace DisplayPort
bool bPConConnected; // HDMI2.1-Protocol Converter (Support SRC control mode) connected.
bool bSkipAssessLinkForPCon; // Skip assessLink() for PCON. DD will call assessFRLLink later.
bool bHdcpAuthOnlyOnDemand; // True if only initiate Hdcp authentication on demand and MST won't auto-trigger authenticate at device attach.
bool bReassessMaxLink; // Retry assessLink() if the first assessed link config is lower than the panel max config.
bool constructorFailed;
@ -335,6 +336,14 @@ namespace DisplayPort
//
bool bPowerDownPhyBeforeD3;
//
// Reset the MSTM_CTRL registers on Synaptics branch device irrespective of
// IRQ VECTOR register having stale message. Synaptics device needs to reset
// the topology before issue of new LAM message if previous LAM was not finished
// bug 3928070
//
bool bForceClearPendingMsg;
void sharedInit();
ConnectorImpl(MainLink * main, AuxBus * auxBus, Timer * timer, Connector::EventSink * sink);

View File

@ -447,6 +447,7 @@ namespace DisplayPort
bool getFECSupport();
NvBool isDSCPassThroughSupported();
NvBool isDSCSupported();
NvBool isDSCDecompressionSupported();
NvBool isDSCPossible();
bool isFECSupported();
bool readAndParseDSCCaps();

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -160,6 +160,7 @@ namespace DisplayPort
bool _applyLinkBwOverrideWarRegVal;
bool _isDynamicMuxCapable;
bool _enableMSAOverrideOverMST;
bool _enableFecCheckForDDS;
bool _isLTPhyRepeaterSupported;
//

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -62,15 +62,25 @@
// Regkey to enable OUI caching/restoring in release branch.
#define NV_DP_REGKEY_ENABLE_OUI_RESTORING "DP_ENABLE_OUI_RESTORING"
// Regkey to make sure enable FEC only when RM notified sink successfully
#define NV_DP_CHECK_FEC_FOR_DDS_DSC_PANEL "DP_DDS_CHECK_FEC_TO_ENABLE"
// Message to power down video stream before power down link (set D3)
#define NV_DP_REGKEY_POWER_DOWN_PHY "DP_POWER_DOWN_PHY"
//
// Regkey to re-assess max link if the first assessed link config
// is lower than the panel max
//
#define NV_DP_REGKEY_REASSESS_MAX_LINK "DP_REASSESS_MAX_LINK"
//
// DSC capability of downstream device should be decided based on device's own
// and its parent's DSC capability.
//
#define NV_DP_DSC_MST_CAP_BUG_3143315 "DP_DSC_MST_CAP_BUG_3143315"
//
// Data Base used to store all the regkey values.
// The actual data base is declared statically in dp_evoadapter.cpp.
@ -104,6 +114,8 @@ struct DP_REGKEY_DATABASE
bool bDscMstCapBug3143315;
bool bEnableOuiRestoring;
bool bPowerDownPhyBeforeD3;
bool bCheckFECForDynamicMuxDSCPanel;
bool bReassessMaxLink;
};
#endif //INCLUDED_DP_REGKEYDATABASE_H

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -190,6 +190,7 @@ void ConnectorImpl::applyRegkeyOverrides(const DP_REGKEY_DATABASE& dpRegkeyDatab
this->bDscMstCapBug3143315 = dpRegkeyDatabase.bDscMstCapBug3143315;
this->bEnableOuiRestoring = dpRegkeyDatabase.bEnableOuiRestoring;
this->bPowerDownPhyBeforeD3 = dpRegkeyDatabase.bPowerDownPhyBeforeD3;
this->bReassessMaxLink = dpRegkeyDatabase.bReassessMaxLink;
}
void ConnectorImpl::setPolicyModesetOrderMitigation(bool enabled)
@ -2691,8 +2692,15 @@ bool ConnectorImpl::notifyAttachBegin(Group * target, // Gr
DP_ASSERT(!this->isLinkQuiesced && "TMDS is attached, NABegin is impossible!");
//
// Update the FEC enabled flag according to the mode requested.
//
// In MST config, if one panel needs DSC/FEC and the other one does not,
// we still need to keep FEC enabled on the connector since at least one
// stream needs it.
//
this->bFECEnable |= bEnableFEC;
highestAssessedLC.enableFEC(this->bFECEnable);
if (main->isEDP() && this->bEnableOuiRestoring)
@ -4646,6 +4654,7 @@ bool ConnectorImpl::train(const LinkConfiguration & lConfig, bool force,
{
LinkTrainingType preferredTrainingType = trainType;
bool result;
bool bEnableFecOnSor;
//
// Validate link config against caps
//
@ -4732,14 +4741,22 @@ bool ConnectorImpl::train(const LinkConfiguration & lConfig, bool force,
this->hal->setDirtyLinkStatus(true);
// We don't need post LQA while powering down the lanes.
if ((lConfig.lanes != 0) &&
hal->isPostLtAdjustRequestSupported() &&
result)
if ((lConfig.lanes != 0) && hal->isPostLtAdjustRequestSupported() && result)
{
result = postLTAdjustment(activeLinkConfig, force);
}
if((lConfig.lanes != 0) && result && lConfig.bEnableFEC)
bEnableFecOnSor = lConfig.bEnableFEC;
if (main->isEDP())
{
DeviceImpl * nativeDev = findDeviceInList(Address());
if (nativeDev && nativeDev->bIsPreviouslyFakedMuxDevice)
bEnableFecOnSor = activeLinkConfig.bEnableFEC;
}
if((lConfig.lanes != 0) && result && bEnableFecOnSor)
{
//
// Extended latency from link-train end to FEC enable pattern
@ -4755,7 +4772,14 @@ bool ConnectorImpl::train(const LinkConfiguration & lConfig, bool force,
DP_ASSERT(result);
}
if (lConfig != activeLinkConfig)
//
// Do not compare bEnableFEC here. In DDS case FEC might be requested but
// not performed in RM.
//
if ((lConfig.lanes != activeLinkConfig.lanes) ||
(lConfig.peakRate != activeLinkConfig.peakRate) ||
(lConfig.enhancedFraming != activeLinkConfig.enhancedFraming) ||
(lConfig.multistream != activeLinkConfig.multistream))
{
// fallback happens, returns fail to make sure clients notice it.
result = false;
@ -5539,7 +5563,8 @@ void ConnectorImpl::notifyLongPulse(bool statusConnected)
if (existingDev && existingDev->isFakedMuxDevice() && !bIsMuxOnDgpu)
{
DP_LOG((" NotifyLongPulse ignored as mux is not pointing to dGPU and there is a faked device"));
DP_LOG((" NotifyLongPulse ignored as mux is not pointing to dGPU and there is a faked device. Marking detect complete"));
sink->notifyDetectComplete();
return;
}
@ -5755,7 +5780,7 @@ void ConnectorImpl::notifyLongPulseInternal(bool statusConnected)
discoveryManager = new DiscoveryManager(messageManager, this, timer, hal);
// Check and clear if any pending message here
if (hal->clearPendingMsg())
if (hal->clearPendingMsg() || bForceClearPendingMsg)
{
DP_LOG(("DP> Stale MSG found: set branch to D3 and back to D0..."));
if (hal->isAtLeastVersion(1, 4))
@ -5922,11 +5947,13 @@ void ConnectorImpl::notifyLongPulseInternal(bool statusConnected)
bPConConnected = true;
}
LinkConfiguration maxLinkConfig = getMaxLinkConfig();
if (bPConConnected ||
(main->isEDP() && this->bSkipAssessLinkForEDP) ||
(main->isInternalPanelDynamicMuxCapable()))
{
this->highestAssessedLC = getMaxLinkConfig();
this->highestAssessedLC = maxLinkConfig;
this->linkGuessed = bPConConnected;
this->bSkipAssessLinkForPCon = bPConConnected;
}
@ -5941,6 +5968,22 @@ void ConnectorImpl::notifyLongPulseInternal(bool statusConnected)
hal->setPowerState(PowerStateD0);
}
this->assessLink();
if (this->bReassessMaxLink)
{
//
// If the highest assessed LC is not equal to
// max possible link config, re-assess link
//
NvU8 retries = 0U;
while((retries < WAR_MAX_REASSESS_ATTEMPT) && (highestAssessedLC != maxLinkConfig))
{
DP_LOG(("DP> Assessed link is not equal to highest possible config. Reassess link."));
this->assessLink();
retries++;
}
}
}
if (hal->getLegacyPortCount() != 0)
@ -6513,6 +6556,7 @@ void ConnectorImpl::createFakeMuxDevice(const NvU8 *buffer, NvU32 bufferSize)
// Initialize DSC state
newDev->dscCaps.bDSCSupported = true;
newDev->dscCaps.bDSCDecompressionSupported = true;
newDev->parseDscCaps(buffer, bufferSize);
dpMemCopy(newDev->rawDscCaps, buffer, DP_MIN(bufferSize, 16));
newDev->bDSCPossible = true;
@ -6797,6 +6841,7 @@ bool ConnectorImpl::updatePsrLinkState(bool bTrainLink)
{
// Bug 3438892 If the panel is turned off the reciever on its side,
// force panel link on by writting 600 = 1
this->hal->setDirtyLinkStatus(true);
if (this->isLinkLost())
{
hal->setPowerState(PowerStateD0);
@ -6961,5 +7006,6 @@ void ConnectorImpl::configInit()
bNoFallbackInPostLQA = 0;
LT2FecLatencyMs = 0;
bDscCapBasedOnParent = false;
bForceClearPendingMsg = false;
}

View File

@ -1508,7 +1508,11 @@ NvBool DeviceImpl::getDSCSupport()
{
if (FLD_TEST_DRF(_DPCD14, _DSC_SUPPORT, _DSC_SUPPORT, _YES, byte))
{
dscCaps.bDSCSupported = true;
dscCaps.bDSCDecompressionSupported = true;
}
if (FLD_TEST_DRF(_DPCD20, _DSC_SUPPORT, _PASS_THROUGH_SUPPORT, _YES, byte))
{
dscCaps.bDSCPassThroughSupported = true;
}
}
@ -1517,6 +1521,11 @@ NvBool DeviceImpl::getDSCSupport()
DP_LOG(("DP-DEV> DSC Support AUX READ failed for %s!", address.toString(sb)));
}
if (dscCaps.bDSCDecompressionSupported || dscCaps.bDSCPassThroughSupported)
{
dscCaps.bDSCSupported = true;
}
return dscCaps.bDSCSupported;
}
@ -1636,6 +1645,11 @@ NvBool DeviceImpl::isDSCSupported()
return dscCaps.bDSCSupported;
}
NvBool DeviceImpl::isDSCDecompressionSupported()
{
return dscCaps.bDSCDecompressionSupported;
}
NvBool DeviceImpl::isDSCPassThroughSupported()
{
return dscCaps.bDSCPassThroughSupported;
@ -1974,7 +1988,7 @@ void DeviceImpl::setDscDecompressionDevice(bool bDscCapBasedOnParent)
this->devDoingDscDecompression = this;
this->bDSCPossible = true;
}
else if (this->parent->isDSCSupported())
else if (this->parent->isDSCDecompressionSupported())
{
//
// This condition takes care of DSC capable sink devices
@ -1987,12 +2001,15 @@ void DeviceImpl::setDscDecompressionDevice(bool bDscCapBasedOnParent)
}
else
{
// This condition takes care of branch device capable of DSC.
this->devDoingDscDecompression = this;
this->bDSCPossible = true;
if (this->isDSCDecompressionSupported())
{
// This condition takes care of branch device capable of DSC decoding.
this->devDoingDscDecompression = this;
this->bDSCPossible = true;
}
}
}
else if (this->parent && this->parent->isDSCSupported())
}
else if (this->parent && this->parent->isDSCDecompressionSupported())
{
//
// This condition takes care of sink devices not capable of DSC
@ -2005,7 +2022,7 @@ void DeviceImpl::setDscDecompressionDevice(bool bDscCapBasedOnParent)
}
else
{
if (this->isDSCSupported())
if (this->isDSCDecompressionSupported())
{
this->bDSCPossible = true;
this->devDoingDscDecompression = this;

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -95,7 +95,9 @@ const struct
{NV_DP_REGKEY_FORCE_EDP_ILR, &dpRegkeyDatabase.bBypassEDPRevCheck, DP_REG_VAL_BOOL},
{NV_DP_DSC_MST_CAP_BUG_3143315, &dpRegkeyDatabase.bDscMstCapBug3143315, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_ENABLE_OUI_RESTORING, &dpRegkeyDatabase.bEnableOuiRestoring, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_POWER_DOWN_PHY, &dpRegkeyDatabase.bPowerDownPhyBeforeD3, DP_REG_VAL_BOOL}
{NV_DP_CHECK_FEC_FOR_DDS_DSC_PANEL, &dpRegkeyDatabase.bCheckFECForDynamicMuxDSCPanel, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_POWER_DOWN_PHY, &dpRegkeyDatabase.bPowerDownPhyBeforeD3, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_REASSESS_MAX_LINK, &dpRegkeyDatabase.bReassessMaxLink, DP_REG_VAL_BOOL}
};
EvoMainLink::EvoMainLink(EvoInterface * provider, Timer * timer) :
@ -896,6 +898,7 @@ void EvoMainLink::applyRegkeyOverrides()
_skipPowerdownEDPPanelWhenHeadDetach = dpRegkeyDatabase.bPoweroffEdpInHeadDetachSkipped;
_applyLinkBwOverrideWarRegVal = dpRegkeyDatabase.bLinkBwOverrideWarApplied;
_enableMSAOverrideOverMST = dpRegkeyDatabase.bMsaOverMstEnabled;
_enableFecCheckForDDS = dpRegkeyDatabase.bCheckFECForDynamicMuxDSCPanel;
}
NvU32 EvoMainLink::getRegkeyValue(const char *key)
@ -1162,8 +1165,12 @@ bool EvoMainLink::train(const LinkConfiguration & link, bool force,
// 1. CR or EQ phase failed.
// 2. The request link bandwidth is NOT RBR
//
if (!requestRmLC.lowerConfig())
{
// If no valid link config could be found, break here.
break;
}
fallback = true;
requestRmLC.lowerConfig();
}
else
{
@ -1235,6 +1242,16 @@ bool EvoMainLink::train(const LinkConfiguration & link, bool force,
retLink->setLaneRate(requestRmLC.peakRate, result ? requestRmLC.lanes : 0);
retLink->setLTCounter(ltCounter);
// For release branch only, check FEC return values and update to "retLink"
if (_enableFecCheckForDDS)
{
if (requestRmLC.bEnableFEC && (FLD_TEST_DRF(0073_CTRL_DP, _ERR, _ENABLE_FEC, _ERR, err)))
{
retLink->bEnableFEC = false;
DP_ASSERT(0);
}
}
NV_DPTRACE_INFO(LINK_TRAINING_DONE, status, requestRmLC.peakRate, requestRmLC.lanes);
return result;

View File

@ -84,6 +84,17 @@ void ConnectorImpl::applyOuiWARs()
//
LT2FecLatencyMs = 57;
//
// This is to reset the MSTM control bit on the branch device. On this
// device, if continuous LAM message are sent very close then IRQ vector
// will fail to see stale/pending message and will not reset the MSTM_CTRL
// register. Currently making this specific to linux so as to have minimum
// effect on windows. Later proper fix for this will be generic.
//
#if defined(NV_UNIX)
bForceClearPendingMsg = true;
#endif
if (bDscMstCapBug3143315)
{
//

View File

@ -240,6 +240,7 @@ typedef enum
typedef struct DscCaps
{
NvBool bDSCSupported;
NvBool bDSCDecompressionSupported;
NvBool bDSCPassThroughSupported;
unsigned versionMajor, versionMinor;
unsigned rcBufferBlockSize;

View File

@ -36,25 +36,25 @@
// and then checked back in. You cannot make changes to these sections without
// corresponding changes to the buildmeister script
#ifndef NV_BUILD_BRANCH
#define NV_BUILD_BRANCH r528_37
#define NV_BUILD_BRANCH r529_18
#endif
#ifndef NV_PUBLIC_BRANCH
#define NV_PUBLIC_BRANCH r528_37
#define NV_PUBLIC_BRANCH r529_18
#endif
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r525/r528_37-265"
#define NV_BUILD_CHANGELIST_NUM (32376659)
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r525/r529_18-534"
#define NV_BUILD_CHANGELIST_NUM (33451322)
#define NV_BUILD_TYPE "Official"
#define NV_BUILD_NAME "rel/gpu_drv/r525/r528_37-265"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (32376659)
#define NV_BUILD_NAME "rel/gpu_drv/r525/r529_18-534"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33451322)
#else /* Windows builds */
#define NV_BUILD_BRANCH_VERSION "r528_37-4"
#define NV_BUILD_CHANGELIST_NUM (32375411)
#define NV_BUILD_BRANCH_VERSION "r529_18-2"
#define NV_BUILD_CHANGELIST_NUM (33403873)
#define NV_BUILD_TYPE "Official"
#define NV_BUILD_NAME "528.46"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (32375411)
#define NV_BUILD_NAME "529.19"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33403873)
#define NV_BUILD_BRANCH_BASE_VERSION R525
#endif
// End buildmeister python edited section

View File

@ -4,7 +4,7 @@
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
#define NV_VERSION_STRING "525.89.02"
#define NV_VERSION_STRING "525.147.05"
#else

View File

@ -112,21 +112,12 @@ struct _NVLOG_BUFFER
#endif // NVOS_IS_UNIX
//
// Due to this file's peculiar location, NvPort may or may not be includable
// This hack will go away when NvLog is moved into common/shared
//
#if NVOS_IS_MACINTOSH
#if !PORT_IS_KERNEL_BUILD
typedef struct PORT_SPINLOCK PORT_SPINLOCK;
#else
#include "nvport/nvport.h"
#endif
typedef struct PORT_MUTEX PORT_MUTEX;
typedef struct PORT_RWLOCK PORT_RWLOCK;
#elif !defined(PORT_IS_KERNEL_BUILD)
typedef struct PORT_SPINLOCK PORT_SPINLOCK;
#else
#if PORT_IS_KERNEL_BUILD
#include "nvport/nvport.h"
#endif
@ -143,11 +134,35 @@ typedef struct _NVLOG_LOGGER
NvU32 nextFree;
/** Total number of free buffer slots */
NvU32 totalFree;
/** Lock for all buffer oprations */
/** Lock for some buffer oprations */
PORT_SPINLOCK* mainLock;
/** Lock for creating/deleting pBuffers and accessing them from RmCtrls */
PORT_MUTEX* buffersLock;
/** Lock for registering/deregistering flush callbacks */
PORT_RWLOCK *flushCbsLock;
} NVLOG_LOGGER;
extern NVLOG_LOGGER NvLogLogger;
/**
* NvLog uses two locks:
* - NVLOG_LOGGER::mainLock is used to protect some accesses to pBuffers, or
* an individual pBuffers entry depending on locking flags.
* - NVLOG_LOGGER::buffersLock is used to protect creating/deleting pBuffers and accessing them
* from certain RmCtrl handlers.
*
* Historically in most contexts obtaining RMAPI lock would suffice, and mainLock would optionally
* be used for certain buffers. Ioctl NV_ESC_RM_NVLOG_CTRL cannot touch RMAPI lock and needs
* to access NvLog. The latter operation might race if called at an inopportune time: e.g. if the
* ioctl is called during RM init when KGSP creates/deletes GSP NvLog buffers. Using buffersLock is
* thus necessary to resolve the potential race.
*
* This leads to an unfortunate sequence where mainLock and buffersLock are nested. The latter lock
* cannot be removed as it is used in IRQ paths.
*
* This should be refactored to use a single RWLock that does conditional acquire in possible IRQ
* paths.
*/
//
// Buffer flags
//

View File

@ -20,7 +20,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#ifndef __gh100_dev_fb_h
#define __gh100_dev_fb_h_
#define NV_PFB_NISO_FLUSH_SYSMEM_ADDR_SHIFT 8 /* */
@ -29,4 +29,25 @@
#define NV_PFB_FBHUB_PCIE_FLUSH_SYSMEM_ADDR_HI 0x00100A38 /* RW-4R */
#define NV_PFB_FBHUB_PCIE_FLUSH_SYSMEM_ADDR_HI_ADR 31:0 /* RWIVF */
#define NV_PFB_FBHUB_PCIE_FLUSH_SYSMEM_ADDR_HI_ADR_MASK 0x000FFFFF /* ----V */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT 0x00100E78 /* RW-4R */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT 0x00100E78 /* RW-4R */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWEVF */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0 /* RWE-V */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWEVF */
#define NV_PFB_PRI_MMU_L2TLB_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0 /* RWE-V */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT 0x00100E8C /* RW-4R */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT 0x00100E8C /* RW-4R */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWEVF */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0 /* RWE-V */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWEVF */
#define NV_PFB_PRI_MMU_HUBTLB_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0 /* RWE-V */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT 0x00100EA0 /* RW-4R */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT 0x00100EA0 /* RW-4R */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWEVF */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0 /* RWE-V */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWEVF */
#define NV_PFB_PRI_MMU_FILLUNIT_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0 /* RWE-V */
#endif // __gh100_dev_fb_h__

View File

@ -0,0 +1,29 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef __gh100_dev_fbpa_h_
#define __gh100_dev_fbpa_h_
#define NV_PFB_FBPA_0_ECC_DED_COUNT__SIZE_1 4 /* */
#define NV_PFB_FBPA_0_ECC_DED_COUNT(i) (0x009025A0+(i)*4) /* RW-4A */
#endif // __gh100_dev_fbpa_h_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2003-2021 NVIDIA CORPORATION & AFFILIATES
* SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -24,6 +24,11 @@
#ifndef __gh100_dev_fsp_addendum_h__
#define __gh100_dev_fsp_addendum_h__
#define NV_GFW_FSP_UCODE_VERSION NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_3(1)
#define NV_GFW_FSP_UCODE_VERSION_FULL 11:0
#define NV_GFW_FSP_UCODE_VERSION_MAJOR 11:8
#define NV_GFW_FSP_UCODE_VERSION_MINOR 7:0
//
// RM uses channel 0 for FSP EMEM on GH100.
//

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2003-2021 NVIDIA CORPORATION & AFFILIATES
* SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -64,5 +64,9 @@
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_2__DEVICE_MAP 0x00000016 /* */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_2_VAL 31:0 /* RWIVF */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_2_VAL_INIT 0x00000000 /* RWI-V */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_3(i) (0x008f0330+(i)*4) /* RW-4A */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_3__SIZE_1 4 /* */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_3_VAL 31:0 /* RWIVF */
#define NV_PFSP_FALCON_COMMON_SCRATCH_GROUP_3_VAL_INIT 0x00000000 /* RWI-V */
#endif // __gh100_dev_fsp_pri_h__

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2003-2022 NVIDIA CORPORATION & AFFILIATES
* SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -24,6 +24,14 @@
#ifndef __gh100_dev_gc6_island_h__
#define __gh100_dev_gc6_island_h__
#define NV_PGC6_SCI_SEC_TIMER_TIME_0 0x00118f54 /* RW-4R */
#define NV_PGC6_SCI_SEC_TIMER_TIME_0_NSEC 31:5 /* RWEUF */
#define NV_PGC6_SCI_SEC_TIMER_TIME_0_NSEC_ZERO 0x00000000 /* RWE-V */
#define NV_PGC6_SCI_SEC_TIMER_TIME_1 0x00118f58 /* RW-4R */
#define NV_PGC6_SCI_SEC_TIMER_TIME_1_NSEC 28:0 /* RWEUF */
#define NV_PGC6_SCI_SEC_TIMER_TIME_1_NSEC_ZERO 0x00000000 /* RWE-V */
#define NV_PGC6_SCI_SYS_TIMER_OFFSET_0 0x00118df4 /* RW-4R */
#define NV_PGC6_SCI_SYS_TIMER_OFFSET_0_UPDATE 0:0 /* RWEVF */
#define NV_PGC6_SCI_SYS_TIMER_OFFSET_0_UPDATE_DONE 0x00000000 /* R-E-V */

View File

@ -0,0 +1,33 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef __gh100_dev_ltc_h_
#define __gh100_dev_ltc_h_
#define NV_PLTCG_LTC0_LTS0_L2_CACHE_ECC_UNCORRECTED_ERR_COUNT 0x001404f8 /* RW-4R */
#define NV_PLTCG_LTC0_LTS0_L2_CACHE_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWIVF */
#define NV_PLTCG_LTC0_LTS0_L2_CACHE_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0x0000 /* RWI-V */
#define NV_PLTCG_LTC0_LTS0_L2_CACHE_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWIVF */
#define NV_PLTCG_LTC0_LTS0_L2_CACHE_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0x0000 /* RWI-V */
#endif // __gh100_dev_ltc_h_

View File

@ -0,0 +1,52 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef __gh100_dev_nv_xpl_h_
#define __gh100_dev_nv_xpl_h_
#define NV_XPL_DL_ERR_COUNT_RBUF 0x00000a54 /* R--4R */
#define NV_XPL_DL_ERR_COUNT_RBUF__PRIV_LEVEL_MASK 0x00000b08 /* */
#define NV_XPL_DL_ERR_COUNT_RBUF_CORR_ERR 15:0 /* R-EVF */
#define NV_XPL_DL_ERR_COUNT_RBUF_CORR_ERR_INIT 0x0000 /* R-E-V */
#define NV_XPL_DL_ERR_COUNT_RBUF_UNCORR_ERR 31:16 /* R-EVF */
#define NV_XPL_DL_ERR_COUNT_RBUF_UNCORR_ERR_INIT 0x0000 /* R-E-V */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT 0x00000a58 /* R--4R */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT__PRIV_LEVEL_MASK 0x00000b08 /* */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT_CORR_ERR 15:0 /* R-EVF */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT_CORR_ERR_INIT 0x0000 /* R-E-V */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT_UNCORR_ERR 31:16 /* R-EVF */
#define NV_XPL_DL_ERR_COUNT_SEQ_LUT_UNCORR_ERR_INIT 0x0000 /* R-E-V */
#define NV_XPL_DL_ERR_RESET 0x00000a5c /* RW-4R */
#define NV_XPL_DL_ERR_RESET_RBUF_CORR_ERR_COUNT 0:0 /* RWCVF */
#define NV_XPL_DL_ERR_RESET_RBUF_CORR_ERR_COUNT_DONE 0x0 /* RWC-V */
#define NV_XPL_DL_ERR_RESET_RBUF_CORR_ERR_COUNT_PENDING 0x1 /* -W--T */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_CORR_ERR_COUNT 1:1 /* RWCVF */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_CORR_ERR_COUNT_DONE 0x0 /* RWC-V */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_CORR_ERR_COUNT_PENDING 0x1 /* -W--T */
#define NV_XPL_DL_ERR_RESET_RBUF_UNCORR_ERR_COUNT 16:16 /* RWCVF */
#define NV_XPL_DL_ERR_RESET_RBUF_UNCORR_ERR_COUNT_DONE 0x0 /* RWC-V */
#define NV_XPL_DL_ERR_RESET_RBUF_UNCORR_ERR_COUNT_PENDING 0x1 /* -W--T */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_UNCORR_ERR_COUNT 17:17 /* RWCVF */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_UNCORR_ERR_COUNT_DONE 0x0 /* RWC-V */
#define NV_XPL_DL_ERR_RESET_SEQ_LUT_UNCORR_ERR_COUNT_PENDING 0x1 /* -W--T */
#endif // __gh100_dev_nv_xpl_h__

View File

@ -32,6 +32,11 @@
#define NV_EP_PCFG_GPU_REVISION_ID_AND_CLASSCODE_SUB_CLASSCODE 23:16 /* R-IVF */
#define NV_EP_PCFG_GPU_REVISION_ID_AND_CLASSCODE_BASE_CLASSCODE 31:24 /* R-IVF */
#define NV_EP_PCFG_GPU_REVISION_ID_AND_CLASSCODE_BASE_CLASSCODE_3D 0x00000003 /* R-I-V */
#define NV_EP_PCFG_GPU_BARREG0 0x00000010 /* RW-4R */
#define NV_EP_PCFG_GPU_BARREG0_REG_ADDR_TYPE 2:1 /* R-IVF */
#define NV_EP_PCFG_GPU_BARREG0_REG_ADDR_TYPE_32BIT 0x00000000 /* R-I-V */
#define NV_EP_PCFG_GPU_BARREG0_REG_ADDR_TYPE_64BIT 0x00000002 /* R---V */
#define NV_EP_PCFG_GPU_BARREG5 0x00000024 /* RW-4R */
#define NV_EP_PCFG_GPU_SUBSYSTEM_ID 0x0000002C /* R--4R */
#define NV_EP_PCFG_GPU_MSI_64_HEADER 0x00000048 /* RW-4R */
#define NV_EP_PCFG_GPU_MSI_64_HEADER_MSI_ENABLE 16:16 /* RWIVF */
@ -70,6 +75,11 @@
#define NV_EP_PCFG_GPU_CORRECTABLE_ERROR_STATUS_REPLAY_NUM_ROLLOVER 8:8 /* RWCVF */
#define NV_EP_PCFG_GPU_CORRECTABLE_ERROR_STATUS_REPLAY_TIMER_TIMEOUT 12:12 /* RWCVF */
#define NV_EP_PCFG_GPU_CORRECTABLE_ERROR_STATUS_ADVISORY_NON_FATAL_ERROR 13:13 /* RWCVF */
#define NV_EP_PCFG_GPU_SRIOV_INIT_TOT_VF 0x0000025C /* R--4R */
#define NV_EP_PCFG_GPU_SRIOV_INIT_TOT_VF_TOTAL_VFS 31:16 /* R-EVF */
#define NV_EP_PCFG_GPU_SRIOV_FIRST_VF_STRIDE 0x00000264 /* R--4R */
#define NV_EP_PCFG_GPU_SRIOV_FIRST_VF_STRIDE_FIRST_VF_OFFSET 15:0 /* R-IVF */
#define NV_EP_PCFG_GPU_VF_BAR0 0x00000274 /* RW-4R */
#define NV_EP_PCFG_GPU_VSEC_DEBUG_SEC 0x000002B4 /* R--4R */
#define NV_EP_PCFG_GPU_VSEC_DEBUG_SEC_FAULT_FUSE_POD 0:0 /* R-CVF */
#define NV_EP_PCFG_GPU_VSEC_DEBUG_SEC_FAULT_FUSE_SCPM 1:1 /* R-CVF */

View File

@ -24,4 +24,7 @@
#ifndef __gh100_dev_xtl_ep_pri_h__
#define __gh100_dev_xtl_ep_pri_h__
#define NV_EP_PCFGM 0x92FFF:0x92000 /* RW--D */
#define NV_XTL_EP_PRI_DED_ERROR_STATUS 0x0000043C /* RW-4R */
#define NV_XTL_EP_PRI_RAM_ERROR_INTR_STATUS 0x000003C8 /* RW-4R */
#endif // __gh100_dev_xtl_ep_pri_h__

View File

@ -21,3 +21,9 @@
* DEALINGS IN THE SOFTWARE.
*/
#define NV_CHIP_EXTENDED_SYSTEM_PHYSICAL_ADDRESS_BITS 52
#define NV_LTC_PRI_STRIDE 8192
#define NV_LTS_PRI_STRIDE 512
#define NV_FBPA_PRI_STRIDE 16384
#define NV_SCAL_LITTER_NUM_FBPAS 24
#define NV_XPL_BASE_ADDRESS 540672
#define NV_XTL_BASE_ADDRESS 593920

View File

@ -47,5 +47,17 @@
#define NV_XAL_EP_INTR_0_PRI_RSP_TIMEOUT 3:3
#define NV_XAL_EP_INTR_0_PRI_RSP_TIMEOUT_PENDING 0x1
#define NV_XAL_EP_SCPM_PRI_DUMMY_DATA_PATTERN_INIT 0xbadf0200
#define NV_XAL_EP_REORDER_ECC_UNCORRECTED_ERR_COUNT 0x0010f364 /* RW-4R */
#define NV_XAL_EP_REORDER_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWIUF */
#define NV_XAL_EP_REORDER_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0x0000 /* RWI-V */
#define NV_XAL_EP_REORDER_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWIUF */
#define NV_XAL_EP_REORDER_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0x0000 /* RWI-V */
#define NV_XAL_EP_P2PREQ_ECC_UNCORRECTED_ERR_COUNT 0x0010f37c /* RW-4R */
#define NV_XAL_EP_P2PREQ_ECC_UNCORRECTED_ERR_COUNT_TOTAL 15:0 /* RWIUF */
#define NV_XAL_EP_P2PREQ_ECC_UNCORRECTED_ERR_COUNT_TOTAL_INIT 0x0000 /* RWI-V */
#define NV_XAL_EP_P2PREQ_ECC_UNCORRECTED_ERR_COUNT_UNIQUE 31:16 /* RWIUF */
#define NV_XAL_EP_P2PREQ_ECC_UNCORRECTED_ERR_COUNT_UNIQUE_INIT 0x0000 /* RWI-V */
#endif // __gh100_pri_nv_xal_ep_h__

View File

@ -12,17 +12,13 @@
* The above copyright notice and this permission notice 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.
*/
#ifndef __lr10_dev_minion_ip_addendum_h__
#define __lr10_dev_minion_ip_addendum_h__
#define NV_MINION_NVLINK_DL_CMD_COMMAND_INITRXTXTERM 0x12
#define NV_NVLSTAT 0x00000103:0x00000000 /* RW--D */
#define NV_NVLSTAT_UC01 0x00000001 /* R--4R */
#define NV_NVLSTAT_UC01_PM_STATE 31:31 /* R---F */

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2003-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2003-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -635,4 +635,7 @@
#define NV_NVLIPT_LNK_CTRL_CAP_LOCAL_LINK_CHANNEL_ALI_SUPPORT 28:28 /* RWIVF */
#define NV_NVLIPT_LNK_CTRL_CAP_LOCAL_LINK_CHANNEL_ALI_SUPPORT_SUPPORTED 0x00000001 /* RWI-V */
#define NV_NVLIPT_LNK_CTRL_CAP_LOCAL_LINK_CHANNEL_ALI_SUPPORT_NOT_SUPPORTED 0x00000000 /* RW--V */
#define NV_NVLIPT_LNK_SCRATCH_WARM 0x000007c0 /* RW-4R */
#define NV_NVLIPT_LNK_SCRATCH_WARM_DATA 31:0 /* RWEVF */
#define NV_NVLIPT_LNK_SCRATCH_WARM_DATA_INIT 0xdeadbaad /* RWE-V */
#endif // __ls10_dev_nvlipt_lnk_ip_h__

View File

@ -0,0 +1,28 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2003-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef __ls10_ptop_discovery_ip_h__
#define __ls10_ptop_discovery_ip_h__
/* This file is autogenerated. Do not edit */
#define NV_PTOP_UNICAST_SW_DEVICE_BASE_SAW_0 0x00028000 /* */
#endif // __ls10_ptop_discovery_ip_h__

View File

@ -23,9 +23,18 @@
#ifndef __tu102_dev_nv_xve_h__
#define __tu102_dev_nv_xve_h__
#define NV_PCFG 0x00088FFF:0x00088000 /* RW--D */
#define NV_PCFG 0x00088FFF:0x00088000 /* RW--D */
#define NV_XVE_MSIX_CAP_HDR 0x000000C8 /* RW-4R */
#define NV_XVE_MSIX_CAP_HDR_ENABLE 31:31 /* RWIVF */
#define NV_XVE_MSIX_CAP_HDR_ENABLE_ENABLED 0x00000001 /* RW--V */
#define NV_XVE_MSIX_CAP_HDR_ENABLE_DISABLED 0x00000000 /* RWI-V */
#define NV_XVE_SRIOV_CAP_HDR3 0x00000BD8 /* R--4R */
#define NV_XVE_SRIOV_CAP_HDR3_TOTAL_VFS 31:16 /* R-EVF */
#define NV_XVE_SRIOV_CAP_HDR5 0x00000BE0 /* R--4R */
#define NV_XVE_SRIOV_CAP_HDR5_FIRST_VF_OFFSET 15:0 /* R-IVF */
#define NV_XVE_SRIOV_CAP_HDR9 0x00000BF0 /* RW-4R */
#define NV_XVE_SRIOV_CAP_HDR10 0x00000BF4 /* RW-4R */
#define NV_XVE_SRIOV_CAP_HDR11_VF_BAR1_HI 0x00000BF8 /* RW-4R */
#define NV_XVE_SRIOV_CAP_HDR12 0x00000BFC /* RW-4R */
#define NV_XVE_SRIOV_CAP_HDR13_VF_BAR2_HI 0x00000C00 /* RW-4R */
#endif // __tu102_dev_nv_xve_h__

View File

@ -315,7 +315,8 @@ NvHdmi_QueryFRLConfig(NvHdmiPkt_Handle libHandle,
}
// if there is no FRL capability reported fail this call
if (pSinkCaps->linkMaxFRLRate == HDMI_FRL_DATA_RATE_NONE)
if ((pSrcCaps->linkMaxFRLRate == HDMI_FRL_DATA_RATE_NONE) ||
(pSinkCaps->linkMaxFRLRate == HDMI_FRL_DATA_RATE_NONE))
{
return NVHDMIPKT_FAIL;
}

View File

@ -2098,8 +2098,8 @@ NvU32 NvTiming_EDIDValidationMask(NvU8 *pEdid, NvU32 length, NvBool bIsStrongVal
// validate DTD blocks
pDTD = (DETAILEDTIMINGDESCRIPTOR *)&pExt[((EIA861EXTENSION *)pExt)->offset];
while (pDTD->wDTPixelClock != 0 &&
(NvU8 *)pDTD - pExt < (int)sizeof(EIA861EXTENSION))
while ((pDTD->wDTPixelClock != 0) &&
(((NvU8 *)pDTD - pExt + sizeof(DETAILEDTIMINGDESCRIPTOR)) < ((NvU8)sizeof(EIA861EXTENSION) - 1)))
{
if (parseEdidDetailedTimingDescriptor((NvU8 *)pDTD, NULL) != NVT_STATUS_SUCCESS)
{
@ -2342,8 +2342,8 @@ NvU32 NvTiming_EDIDStrongValidationMask(NvU8 *pEdid, NvU32 length)
// validate DTD blocks
pDTD = (DETAILEDTIMINGDESCRIPTOR *)&pExt[((EIA861EXTENSION *)pExt)->offset];
while (pDTD->wDTPixelClock != 0 &&
(NvU8 *)pDTD - pExt < (int)sizeof(EIA861EXTENSION))
while ((pDTD->wDTPixelClock != 0) &&
(((NvU8 *)pDTD - pExt + sizeof(DETAILEDTIMINGDESCRIPTOR)) < ((NvU8)sizeof(EIA861EXTENSION) -1)))
{
if (parseEdidDetailedTimingDescriptor((NvU8 *)pDTD, NULL) != NVT_STATUS_SUCCESS)
ret |= NVT_EDID_VALIDATION_ERR_MASK(NVT_EDID_VALIDATION_ERR_EXT_DTD);

View File

@ -397,7 +397,7 @@ void parse861ExtDetailedTiming(NvU8 *pEdidExt,
// Get all detailed timings in CEA ext block
pDTD = (DETAILEDTIMINGDESCRIPTOR *)&pEdidExt[pEIA861->offset];
while((NvU8 *)pDTD < (pEdidExt + sizeof(EDIDV1STRUC)) && // Check that we're not going beyond this extension block.
while((NvU8 *)pDTD + sizeof(DETAILEDTIMINGDESCRIPTOR) < (pEdidExt + sizeof(EDIDV1STRUC) - 1) &&
pDTD->wDTPixelClock != 0)
{
NVMISC_MEMSET(&newTiming, 0, sizeof(newTiming));
@ -1237,6 +1237,12 @@ NVT_STATUS get861ExtInfo(NvU8 *p, NvU32 size, NVT_EDID_CEA861_INFO *p861info)
return NVT_STATUS_ERR;
}
// DTD offset sanity check
if (p[2] >= 1 && p[2] <= 3)
{
return NVT_STATUS_ERR;
}
// don't do anything further if p861info is NULL
if (p861info == NULL)
{
@ -1299,6 +1305,11 @@ NVT_STATUS parseCta861DataBlockInfo(NvU8 *p,
tag = NVT_CEA861_GET_SHORT_DESCRIPTOR_TAG(p[i]);
payload = NVT_CEA861_GET_SHORT_DESCRIPTOR_SIZE(p[i]);
/*don't allow data colleciton totally size larger than [127 - 5 (tag, revision, offset, describing native video format, checksum)]*/
if ((i + payload > size) || (i + payload > 122))
{
return NVT_STATUS_ERR;
}
// move the pointer to the payload section or extended Tag Code
i++;

View File

@ -1,5 +1,5 @@
/*******************************************************************************
Copyright (c) 2014-2022 NVidia Corporation
Copyright (c) 2014-2023 NVidia Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@ -120,6 +120,12 @@ struct nvlink_device
NvU32 numLinksPerIoctrl;
NvU32 numActiveLinksPerIoctrl;
//
// boolean indicating if a given device
// is a reduced nvlink config
//
NvBool bReducedNvlinkConfig;
// Client private information
void *pDevInfo;
};
@ -397,6 +403,10 @@ NvBool nvlink_lib_is_initialized(void);
*/
NvBool nvlink_lib_is_device_list_empty(void);
/*
* Get if a device registerd to the nvlink corelib has a reduced nvlink config
*/
NvBool nvlink_lib_is_registerd_device_with_reduced_config(void);
/************************************************************************************************/
/************************** NVLink library driver-side interface ********************************/
@ -429,6 +439,11 @@ NvlStatus nvlink_lib_register_link(nvlink_device *dev, nvlink_link *link);
*/
NvlStatus nvlink_lib_unregister_link(nvlink_link *link);
/*
* Gets number of devices with type deviceType
*/
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
/************************************************************************************************/
/******************************* NVLink link management functions *******************************/
@ -465,6 +480,7 @@ NvlStatus nvlink_lib_is_link_using_ALI(nvlink_link *link, NvBool *usingALI);
* Set the training state for the given link as non-ALI or ALI
*/
NvlStatus nvlink_lib_link_set_training_mode(nvlink_link *link, NvBool enableALI);
/************************************************************************************************/
/*************************** NVLink topology discovery functions ********************************/
/************************************************************************************************/

View File

@ -46,6 +46,11 @@ NvlStatus nvlink_lib_unload(void);
*/
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params);
/*
* Gets number of devices with type deviceType
*/
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
#ifdef __cplusplus
}
#endif

View File

@ -30,6 +30,9 @@ extern "C" {
#include "nvlink_common.h"
#define TOP_LEVEL_LOCKING_DISABLED 1
#define PER_LINK_LOCKING_DISABLED 1
#define NVLINK_FREE(x) nvlink_free((void *)x)
// Memory management functions

View File

@ -1,5 +1,5 @@
/*******************************************************************************
Copyright (c) 2019-2020 NVidia Corporation
Copyright (c) 2019-2023 NVidia Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@ -127,8 +127,8 @@ nvlink_lib_unload(void)
}
// Release and free top-level lock
nvlink_lib_top_lock_release();
nvlink_lib_top_lock_free();
nvlink_lib_top_lock_release();
nvlink_lib_top_lock_free();
}
return NVL_SUCCESS;
@ -160,3 +160,86 @@ nvlink_lib_is_device_list_empty(void)
return isEmpty;
}
/*
* Get if a device registerd to the nvlink corelib has a reduced nvlink config
*
* return NV_TRUE if there is a device registered to the core library that is a reduced
* nvlink config device
*/
NvBool
nvlink_lib_is_registerd_device_with_reduced_config(void)
{
NvlStatus lock_status = NVL_SUCCESS;
nvlink_device *dev = NULL;
// Acquire top-level lock
lock_status = nvlink_lib_top_lock_acquire();
if (lock_status != NVL_SUCCESS)
{
NVLINK_PRINT((DBG_MODULE_NVLINK_CORE, NVLINK_DBG_LEVEL_ERRORS,
"%s: Failed to acquire top-level lock\n",
__FUNCTION__));
return NV_FALSE;
}
FOR_EACH_DEVICE_REGISTERED(dev, nvlinkLibCtx.nv_devicelist_head, node)
{
if (dev->bReducedNvlinkConfig == NV_TRUE)
{
// Release top-level lock
nvlink_lib_top_lock_release();
return NV_TRUE;
}
}
// Release top-level lock
nvlink_lib_top_lock_release();
return NV_FALSE;
}
/*
* Get the number of devices that have the device type deviceType
*/
NvlStatus
nvlink_lib_return_device_count_by_type
(
NvU32 deviceType,
NvU32 *numDevices
)
{
NvlStatus lock_status = NVL_SUCCESS;
nvlink_device *dev = NULL;
NvU32 device_count = 0;
if (nvlink_lib_is_initialized())
{
// Acquire top-level lock
lock_status = nvlink_lib_top_lock_acquire();
if (lock_status != NVL_SUCCESS)
{
NVLINK_PRINT((DBG_MODULE_NVLINK_CORE, NVLINK_DBG_LEVEL_ERRORS,
"%s: Failed to acquire top-level lock\n",
__FUNCTION__));
return lock_status;
}
// Top-level lock is now acquired
// Loop through device list
FOR_EACH_DEVICE_REGISTERED(dev, nvlinkLibCtx.nv_devicelist_head, node)
{
if (dev->type == deviceType)
{
device_count++;
}
}
// Release top-level lock
nvlink_lib_top_lock_release();
}
*numDevices = device_count;
return NVL_SUCCESS;
}

View File

@ -26,14 +26,18 @@
#include "nvlink_lock.h"
//
// Only enabling locking for testing purposes at the moment.
// Disabled at all other times.
//
#define LOCKING_DISABLED 1
// Only enabling top level locking for linux as required by Bug 4108674.
// Per link locking is still disabled at all times. It will be enabled
// after other locking related clean up is done.
//
static void _sort_links(nvlink_link **, NvU32, NvBool (*)(void *, void *));
static NvBool _compare(void *, void *);
#if defined(NV_LINUX)
#undef TOP_LEVEL_LOCKING_DISABLED
# define TOP_LEVEL_LOCKING_DISABLED 0
#endif /* defined(NV_LINUX) */
/*
* Allocate top level lock. Return NVL_SUCCESS if
* the lock was allocated else return NVL_ERR_GENERIC.
@ -41,7 +45,7 @@ static NvBool _compare(void *, void *);
NvlStatus
nvlink_lib_top_lock_alloc(void)
{
if (LOCKING_DISABLED)
if (TOP_LEVEL_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -82,7 +86,7 @@ nvlink_lib_top_lock_alloc(void)
NvlStatus
nvlink_lib_top_lock_free(void)
{
if (LOCKING_DISABLED)
if (TOP_LEVEL_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -115,7 +119,7 @@ nvlink_lib_link_lock_alloc
nvlink_link *link
)
{
if (LOCKING_DISABLED)
if (PER_LINK_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -158,7 +162,7 @@ nvlink_lib_link_lock_free
nvlink_link *link
)
{
if (LOCKING_DISABLED)
if (PER_LINK_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -188,7 +192,7 @@ nvlink_lib_link_lock_free
NvlStatus
nvlink_lib_top_lock_acquire(void)
{
if (LOCKING_DISABLED)
if (TOP_LEVEL_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -223,7 +227,7 @@ nvlink_lib_top_lock_acquire(void)
NvlStatus
nvlink_lib_top_lock_release(void)
{
if (LOCKING_DISABLED)
if (TOP_LEVEL_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
@ -265,13 +269,12 @@ nvlink_lib_link_locks_acquire
int numLinks
)
{
if (LOCKING_DISABLED)
if (PER_LINK_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
int i;
nvlink_link *link_prev = NULL;
// Check if array of links is already empty before attempting to release.
@ -328,13 +331,12 @@ nvlink_lib_link_locks_release
int numLinks
)
{
int i;
if (LOCKING_DISABLED)
if (PER_LINK_LOCKING_DISABLED)
{
return NVL_SUCCESS;
}
int i;
nvlink_link *link_prev = NULL;
// Check if array of links is already empty before attempting to release.

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -40,48 +40,62 @@ enum
/*!
* Read the BIOS Size
*/
RM_SOE_CORE_CMD_READ_BIOS_SIZE,
RM_SOE_CORE_CMD_READ_BIOS_SIZE = 0x0,
/*!
* Read the BIOS
*/
RM_SOE_CORE_CMD_READ_BIOS,
RM_SOE_CORE_CMD_READ_BIOS = 0x1,
/*!
* Run DMA self-test
*/
RM_SOE_CORE_CMD_DMA_SELFTEST,
RM_SOE_CORE_CMD_DMA_SELFTEST = 0x2,
/*!
* Perform I2C transaction
*/
RM_SOE_CORE_CMD_I2C_ACCESS,
RM_SOE_CORE_CMD_I2C_ACCESS = 0x3,
/*!
* Issue NPORT Reset
*/
RM_SOE_CORE_CMD_ISSUE_NPORT_RESET,
RM_SOE_CORE_CMD_ISSUE_NPORT_RESET = 0x4,
/*!
* Restore NPORT state
*/
RM_SOE_CORE_CMD_RESTORE_NPORT_STATE,
RM_SOE_CORE_CMD_RESTORE_NPORT_STATE = 0x5,
/*!
* Set NPORT TPROD state
*/
RM_SOE_CORE_CMD_SET_NPORT_TPROD_STATE,
RM_SOE_CORE_CMD_SET_NPORT_TPROD_STATE = 0x6,
/*!
* Read VRs
* Needed to be in sync with chips_a defines
*/
RM_SOE_CORE_CMD_GET_VOLTAGE_VALUES,
RM_SOE_CORE_CMD_GET_VOLTAGE_VALUES = 0x7,
/*!
* Init PLM2 protected registers
*/
RM_SOE_CORE_CMD_INIT_L2_STATE
RM_SOE_CORE_CMD_INIT_L2_STATE = 0x8,
/*!
* Read Power
*/
RM_SOE_CORE_CMD_GET_POWER_VALUES = 0x9,
/*!
* Set NPORT interrupts
*/
RM_SOE_CORE_CMD_SET_NPORT_INTRS = 0xA,
/*!
* Disable NPORT fatal interrupt
*/
RM_SOE_CORE_CMD_DISABLE_NPORT_FATAL_INTR = 0xF,
};
// Timeout for SOE reset callback function
@ -153,6 +167,41 @@ typedef struct
NvU8 cmdType;
} RM_SOE_CORE_CMD_L2_STATE;
typedef struct
{
NvU8 cmdType;
} RM_SOE_CORE_CMD_GET_POWER;
typedef struct
{
NvU8 cmdType;
NvU32 nport;
NvBool bEnable;
} RM_SOE_CORE_CMD_NPORT_INTRS;
typedef struct
{
NvU8 cmdType;
NvU32 nport;
NvU32 nportIntrEnable;
NvU8 nportIntrType;
} RM_SOE_CORE_CMD_NPORT_FATAL_INTR;
/*!
* NPORT Interrupt Types
*/
enum
{
RM_SOE_CORE_NPORT_ROUTE_INTERRUPT,
RM_SOE_CORE_NPORT_INGRESS_INTERRUPT,
RM_SOE_CORE_NPORT_EGRESS_0_INTERRUPT,
RM_SOE_CORE_NPORT_EGRESS_1_INTERRUPT,
RM_SOE_CORE_NPORT_TSTATE_INTERRUPT,
RM_SOE_CORE_NPORT_SOURCETRACK_INTERRUPT,
RM_SOE_CORE_NPORT_MULTICAST_INTERRUPT,
RM_SOE_CORE_NPORT_REDUCTION_INTERRUPT
};
typedef union
{
NvU8 cmdType;
@ -164,9 +213,11 @@ typedef union
RM_SOE_CORE_CMD_NPORT_TPROD_STATE nportTprodState;
RM_SOE_CORE_CMD_GET_VOLTAGE getVoltage;
RM_SOE_CORE_CMD_L2_STATE l2State;
RM_SOE_CORE_CMD_GET_POWER getPower;
RM_SOE_CORE_CMD_NPORT_INTRS nportIntrs;
RM_SOE_CORE_CMD_NPORT_FATAL_INTR nportDisableIntr;
} RM_SOE_CORE_CMD;
typedef struct
{
NvU8 msgType;
@ -176,9 +227,19 @@ typedef struct
NvU32 hvdd_mv;
} RM_SOE_CORE_MSG_GET_VOLTAGE;
typedef struct
{
NvU8 msgType;
NvU8 flcnStatus;
NvU32 vdd_w;
NvU32 dvdd_w;
NvU32 hvdd_w;
} RM_SOE_CORE_MSG_GET_POWER;
typedef union
{
NvU8 msgType;
RM_SOE_CORE_MSG_GET_VOLTAGE getVoltage;
RM_SOE_CORE_MSG_GET_POWER getPower;
} RM_SOE_CORE_MSG;
#endif // _SOECORE_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -27,6 +27,7 @@
#include "flcnifcmn.h"
#define INFOROM_FS_FILE_NAME_SIZE 3
#define INFOROM_BBX_OBJ_XID_ENTRIES 10
enum
{
@ -36,6 +37,17 @@ enum
RM_SOE_IFR_BBX_SHUTDOWN,
RM_SOE_IFR_BBX_SXID_ADD,
RM_SOE_IFR_BBX_SXID_GET,
RM_SOE_IFR_BBX_DATA_GET,
};
enum
{
RM_SOE_IFR_BBX_GET_NONE,
RM_SOE_IFR_BBX_GET_SXID,
RM_SOE_IFR_BBX_GET_SYS_INFO,
RM_SOE_IFR_BBX_GET_TIME_INFO,
RM_SOE_IFR_BBX_GET_TEMP_DATA,
RM_SOE_IFR_BBX_GET_TEMP_SAMPLES,
};
typedef struct
@ -70,9 +82,18 @@ typedef struct
typedef struct
{
NvU8 cmdType;
NvU32 sizeInBytes;
RM_FLCN_U64 dmaHandle;
} RM_SOE_IFR_CMD_BBX_SXID_GET_PARAMS;
typedef struct
{
NvU8 cmdType;
NvU32 sizeInBytes;
RM_FLCN_U64 dmaHandle;
NvU8 dataType;
} RM_SOE_IFR_CMD_BBX_GET_DATA_PARAMS;
typedef union
{
NvU8 cmdType;
@ -80,6 +101,99 @@ typedef union
RM_SOE_IFR_CMD_BBX_INIT_PARAMS bbxInit;
RM_SOE_IFR_CMD_BBX_SXID_ADD_PARAMS bbxSxidAdd;
RM_SOE_IFR_CMD_BBX_SXID_GET_PARAMS bbxSxidGet;
RM_SOE_IFR_CMD_BBX_GET_DATA_PARAMS bbxDataGet;
} RM_SOE_IFR_CMD;
// entry of getSxid
typedef struct
{
NvU32 sxid;
NvU32 timestamp;
} RM_SOE_BBX_SXID_ENTRY;
// SXID data array return to getSxid
typedef struct
{
NvU32 sxidCount;
RM_SOE_BBX_SXID_ENTRY sxidFirst[INFOROM_BBX_OBJ_XID_ENTRIES];
RM_SOE_BBX_SXID_ENTRY sxidLast[INFOROM_BBX_OBJ_XID_ENTRIES];
} RM_SOE_BBX_GET_SXID_DATA;
// NVSwitch system version information returning with the command GET_SYS_INFO
typedef struct
{
NvU32 driverLo; //Driver Version Low 32 bits
NvU16 driverHi; //Driver Version High 16 bits
NvU32 vbiosVersion; //VBIOS Version
NvU8 vbiosVersionOem; //VBIOS OEM Version byte
NvU8 osType; //OS Type (UNIX/WIN/WIN2K/WIN9x/OTHER)
NvU32 osVersion; //OS Version (Build|MINOR|MAJOR)
} RM_SOE_BBX_GET_SYS_INFO_DATA;
// NVSwitch time information returning with the command GET_TIME_INFO
typedef struct
{
NvU32 timeStart; //Timestamp (EPOCH) when the driver was loaded on the GPU for the first time
NvU32 timeEnd; //Timestamp (EPOCH) when the data was last flushed
NvU32 timeRun; //Amount of time (in seconds) driver was loaded, and GPU has run
NvU32 time24Hours; //Timestamp (EPOCH) of when the first 24 operational hours is hit
NvU32 time100Hours; //Timestamp (EPOCH) of when the first 100 operational hours is hit
} RM_SOE_BBX_GET_TIME_INFO_DATA;
#define RM_SOE_BBX_TEMP_DAY_ENTRIES 5
#define RM_SOE_BBX_TEMP_WEEK_ENTRIES 5
#define RM_SOE_BBX_TEMP_MNT_ENTRIES 5
#define RM_SOE_BBX_TEMP_ALL_ENTRIES 5
#define RM_SOE_BBX_TEMP_SUM_HOUR_ENTRIES 23
#define RM_SOE_BBX_TEMP_SUM_DAY_ENTRIES 5
#define RM_SOE_BBX_TEMP_SUM_MNT_ENTRIES 3
#define RM_SOE_BBX_TEMP_HISTOGRAM_THLD_ENTRIES 20
#define RM_SOE_BBX_TEMP_HISTOGRAM_TIME_ENTRIES 21
#define RM_SOE_BBX_TEMP_HOURLY_MAX_ENTRIES 168
#define RM_SOE_BBX_TEMP_COMPRESS_BUFFER_ENTRIES 1096
#define RM_SOE_BBX_NUM_COMPRESSION_PERIODS 8
// NVSwitch Temperature Entry
typedef struct
{
NvU16 value; //Temperature (SFXP 9.7 format in Celsius)
NvU32 timestamp; //Timestamp (EPOCH) of when the entry is recorded
} RM_SOE_BBX_TEMP_ENTRY;
// NVSwitch Temperature Data returning with the command GET_TEMP_DATA
typedef struct
{
NvU32 tempMaxDayIdx;
RM_SOE_BBX_TEMP_ENTRY tempMaxDay[RM_SOE_BBX_TEMP_DAY_ENTRIES];
NvU32 tempMaxWeekIdx;
RM_SOE_BBX_TEMP_ENTRY tempMaxWeek[RM_SOE_BBX_TEMP_WEEK_ENTRIES];
NvU32 tempMaxMntIdx;
RM_SOE_BBX_TEMP_ENTRY tempMaxMnt[RM_SOE_BBX_TEMP_MNT_ENTRIES];
NvU32 tempMaxAllIdx;
RM_SOE_BBX_TEMP_ENTRY tempMaxAll[RM_SOE_BBX_TEMP_ALL_ENTRIES];
NvU32 tempMinDayIdx;
RM_SOE_BBX_TEMP_ENTRY tempMinDay[RM_SOE_BBX_TEMP_DAY_ENTRIES];
NvU32 tempMinWeekIdx;
RM_SOE_BBX_TEMP_ENTRY tempMinWeek[RM_SOE_BBX_TEMP_WEEK_ENTRIES];
NvU32 tempMinMntIdx;
RM_SOE_BBX_TEMP_ENTRY tempMinMnt[RM_SOE_BBX_TEMP_MNT_ENTRIES];
NvU32 tempMinAllIdx;
RM_SOE_BBX_TEMP_ENTRY tempMinAll[RM_SOE_BBX_TEMP_ALL_ENTRIES];
NvU32 tempSumDelta;
NvU32 tempSumHour[RM_SOE_BBX_TEMP_SUM_HOUR_ENTRIES];
NvU32 tempSumDay[RM_SOE_BBX_TEMP_SUM_DAY_ENTRIES];
NvU32 tempSumMnt[RM_SOE_BBX_TEMP_SUM_MNT_ENTRIES];
NvU32 tempHistogramThld[RM_SOE_BBX_TEMP_HISTOGRAM_THLD_ENTRIES];
NvU32 tempHistogramTime[RM_SOE_BBX_TEMP_HISTOGRAM_TIME_ENTRIES];
RM_SOE_BBX_TEMP_ENTRY tempHourlyMaxSample[RM_SOE_BBX_TEMP_HOURLY_MAX_ENTRIES];
} RM_SOE_BBX_GET_TEMP_DATA;
// NVSwitch Temperature Compressed Samples returning with the command GET_TEMP_SAMPLES
typedef struct
{
NvU32 compressionPeriodIdx;
NvU32 compressionPeriod[RM_SOE_BBX_NUM_COMPRESSION_PERIODS];
RM_SOE_BBX_TEMP_ENTRY tempCompressionBuffer[RM_SOE_BBX_TEMP_COMPRESS_BUFFER_ENTRIES];
} RM_SOE_BBX_GET_TEMP_SAMPLES;
#endif // _SOEIFIFR_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2018-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2018-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -751,6 +751,19 @@ typedef struct
NvU32 hvdd_mv;
} NVSWITCH_CTRL_GET_VOLTAGE_PARAMS;
/*
* CTRL_NVSWITCH_GET_POWER
*
* Zero(0) indicates that a measurement is not available
* on the current platform.
*/
typedef struct
{
NvU32 vdd_w;
NvU32 dvdd_w;
NvU32 hvdd_w;
} NVSWITCH_GET_POWER_PARAMS;
/*
* CTRL_NVSWITCH_GET_ERRORS
*
@ -817,6 +830,7 @@ typedef enum nvswitch_err_type
NVSWITCH_ERR_HW_HOST_THERMAL_SHUTDOWN = 10006,
NVSWITCH_ERR_HW_HOST_IO_FAILURE = 10007,
NVSWITCH_ERR_HW_HOST_FIRMWARE_INITIALIZATION_FAILURE = 10008,
NVSWITCH_ERR_HW_HOST_FIRMWARE_RECOVERY_MODE = 10009,
NVSWITCH_ERR_HW_HOST_LAST,
@ -2954,6 +2968,197 @@ typedef struct
NVSWITCH_SXID_ENTRY sxidLast[NVSWITCH_SXID_ENTRIES_NUM];
} NVSWITCH_GET_SXIDS_PARAMS;
/*
* CTRL_NVSWITCH_GET_SYS_INFO
*
* Control to get the NVSwitch system version information from inforom cache
*
* Parameters:
* driverLo [OUT]
* The driver version low 32 bits. Example: driverLo = 54531 (Driver 545.31)
* driverHi [OUT]
* The driver version high 16 bits
* vbiosVersion [OUT]
* The vbios version number. Example: vbiosVersion=0x96104100 (release 96.10.41.00)
* vbiosVersionOem [OUT]
* The vbios OEM version byte.
* osType [OUT]
* The OS type. Example: osType=0x05 (UNIX)
* osVersion [OUT]
* The OS version number. [BUILD[31:16]|MINOR[15:8]|MAJOR[7:0]]
*/
typedef struct
{
NvU32 driverLo;
NvU16 driverHi;
NvU32 vbiosVersion;
NvU8 vbiosVersionOem;
NvU8 osType;
NvU32 osVersion;
} NVSWITCH_GET_SYS_INFO_PARAMS;
/*
* CTRL_NVSWITCH_GET_TIME_INFO
*
* Control to get the NVSwitch time information from inforom cache
*
* Parameters:
* timeStart [OUT]
* The timestamp (EPOCH) when driver load onto the NVSwitch for the 1st time
* timeEnd [OUT]
* The timestamp (EPOCH) when the data was last flushed
* timeRun [OUT]
* The amount of time (in seconds) driver was loaded/running
* time24Hours [OUT]
* The timestamp (EPOCH) when the first 24 operational hours is hit
* time100Hours [OUT]
* The timestamp (EPOCH) when the first 100 operational hours is hit
*/
typedef struct
{
NvU32 timeStart;
NvU32 timeEnd;
NvU32 timeRun;
NvU32 time24Hours;
NvU32 time100Hours;
} NVSWITCH_GET_TIME_INFO_PARAMS;
#define NVSWITCH_TEMP_DAY_ENTRIES 5
#define NVSWITCH_TEMP_WEEK_ENTRIES 5
#define NVSWITCH_TEMP_MNT_ENTRIES 5
#define NVSWITCH_TEMP_ALL_ENTRIES 5
#define NVSWITCH_TEMP_SUM_HOUR_ENTRIES 23
#define NVSWITCH_TEMP_SUM_DAY_ENTRIES 5
#define NVSWITCH_TEMP_SUM_MNT_ENTRIES 3
#define NVSWITCH_TEMP_HISTOGRAM_THLD_ENTRIES 20
#define NVSWITCH_TEMP_HISTOGRAM_TIME_ENTRIES 21
#define NVSWITCH_TEMP_HOURLY_MAX_ENTRIES 168
/*
* NVSWITCH_TEMP_ENTRY
*
* This structure represents the NVSwitch TEMP with its timestamp.
*
* value
* This parameter specifies the NVSwitch Temperature
* (SFXP 9.7 format in Celsius).
*
* timestamp
* This parameter specifies the timestamp (EPOCH) of the entry.
*/
typedef struct
{
NvU16 value;
NvU32 timestamp;
} NVSWITCH_TEMP_ENTRY;
/*
* CTRL_NVSWITCH_GET_TEMP_DATA
*
* Control to get the NVSwitch device historical temperature information from inforom cache
*
* Parameters:
* tempMaxDayIdx [OUT]
* The current index to the maximum day temperature array
* tempMaxDay[] [OUT]
* The maximum temperature array for last NVSWITCH_TEMP_DAY_ENTRIES days
* tempMaxWeekIdx [OUT]
* The current index to the maximum week temperature array
* tempMaxWeek[] [OUT]
* The maximum temperature array for last NVSWITCH_TEMP_WEEK_ENTRIES weeks
* tempMaxMntIdx [OUT]
* The current index to the maximum month temperature array
* tempMaxMnt[] [OUT]
* The maximum temperature array for last NVSWITCH_TEMP_MNT_ENTRIES months
* tempMaxAllIdx [OUT]
* The current index to the maximum temperature array
* tempMaxAll[] [OUT]
* The maximum temperature array for the device
* tempMinDayIdx [OUT]
* The current index to the minimum day temperature array
* tempMinDay[] [OUT]
* The minimum temperature array for last NVSWITCH_TEMP_DAY_ENTRIES days
* tempMinWeekIdx [OUT]
* The current index to the minimum week temperature array
* tempMinWeek[] [OUT]
* The minimum temperature array for last NVSWITCH_TEMP_WEEK_ENTRIES weeks
* tempMinMntIdx [OUT]
* The current index to the minimum month temperature array
* tempMinMnt[] [OUT]
* The minimum temperature array for last NVSWITCH_TEMP_MNT_ENTRIES months
* tempMinAllIdx [OUT]
* The current index to the minimum temperature array
* tempMinAll[] [OUT]
* The minimum temperature array for the device
* tempSumDelta [OUT]
* The total sum of temperature change in 0.1C granularity
* tempSumHour[] [OUT]
* The moving average of temperature per hour, for last NVSWITCH_TEMP_SUM_HOUR_ENTRIES hours
* tempSumDay[] [OUT]
* The moving average of temperature per day, for last NVSWITCH_TEMP_SUM_DAY_ENTRIES days
* tempSumMnt[] [OUT]
* The moving average of temperature per month, for last NVSWITCH_TEMP_SUM_MNT_ENTRIES months
* tempHistogramThld[] [OUT]
* The histogram of temperature crossing various thresholds (5/10/15/.../95/100)
* tempHistogramTime[] [OUT]
* The histogram of time was in various temperature ranges (0..5/5..10/.../100..)
* tempHourlyMaxSample[] [OUT]
* The maximum hourly temperature array for the device
*/
typedef struct
{
NvU32 tempMaxDayIdx;
NVSWITCH_TEMP_ENTRY tempMaxDay[NVSWITCH_TEMP_DAY_ENTRIES];
NvU32 tempMaxWeekIdx;
NVSWITCH_TEMP_ENTRY tempMaxWeek[NVSWITCH_TEMP_WEEK_ENTRIES];
NvU32 tempMaxMntIdx;
NVSWITCH_TEMP_ENTRY tempMaxMnt[NVSWITCH_TEMP_MNT_ENTRIES];
NvU32 tempMaxAllIdx;
NVSWITCH_TEMP_ENTRY tempMaxAll[NVSWITCH_TEMP_ALL_ENTRIES];
NvU32 tempMinDayIdx;
NVSWITCH_TEMP_ENTRY tempMinDay[NVSWITCH_TEMP_DAY_ENTRIES];
NvU32 tempMinWeekIdx;
NVSWITCH_TEMP_ENTRY tempMinWeek[NVSWITCH_TEMP_WEEK_ENTRIES];
NvU32 tempMinMntIdx;
NVSWITCH_TEMP_ENTRY tempMinMnt[NVSWITCH_TEMP_MNT_ENTRIES];
NvU32 tempMinAllIdx;
NVSWITCH_TEMP_ENTRY tempMinAll[NVSWITCH_TEMP_ALL_ENTRIES];
NvU32 tempSumDelta;
NvU32 tempSumHour[NVSWITCH_TEMP_SUM_HOUR_ENTRIES];
NvU32 tempSumDay[NVSWITCH_TEMP_SUM_DAY_ENTRIES];
NvU32 tempSumMnt[NVSWITCH_TEMP_SUM_MNT_ENTRIES];
NvU32 tempHistogramThld[NVSWITCH_TEMP_HISTOGRAM_THLD_ENTRIES];
NvU32 tempHistogramTime[NVSWITCH_TEMP_HISTOGRAM_TIME_ENTRIES];
NVSWITCH_TEMP_ENTRY tempHourlyMaxSample[NVSWITCH_TEMP_HOURLY_MAX_ENTRIES];
} NVSWITCH_GET_TEMP_DATA_PARAMS;
#define NVSWITCH_TEMP_COMPRESS_BUFFER_ENTRIES 1096
#define NVSWITCH_NUM_COMPRESSION_PERIODS 8
/*
* CTRL_NVSWITCH_GET_TEMP_DATA
*
* Control to get the NVSwitch device temperature information from inforom cache
*
* Parameters:
* compressionPeriodIdx [OUT]
* The current index to the sample period array
* compressionPeriod[] [OUT]
* The samples period array (seconds)
* tempCompressionBuffer[] [OUT]
* The temperature array sampling at a specific period in compressionPeriod[]
*/
typedef struct
{
NvU32 compressionPeriodIdx;
NvU32 compressionPeriod[NVSWITCH_NUM_COMPRESSION_PERIODS];
NVSWITCH_TEMP_ENTRY tempCompressionBuffer[NVSWITCH_TEMP_COMPRESS_BUFFER_ENTRIES];
} NVSWITCH_GET_TEMP_SAMPLES_PARAMS;
/*
* CTRL_NVSWITCH_GET_FOM_VALUES
* This command gives the FOM values to MODS
@ -3534,6 +3739,15 @@ typedef struct
#define NVSWITCH_CTRL_I2C_MESSAGE_LENGTH_MAX 256
typedef enum
{
NVSWITCH_I2C_ACQUIRER_NONE = 0,
NVSWITCH_I2C_ACQUIRER_UNKNOWN,
NVSWITCH_I2C_ACQUIRER_IOCTL, // e.g. MODS
NVSWITCH_I2C_ACQUIRER_EXTERNAL, // e.g. Linux Direct
} NVSWITCH_I2C_ACQUIRER;
/*
* CTRL_NVSWITCH_I2C_INDEXED
*
@ -3816,8 +4030,13 @@ typedef struct
#define CTRL_NVSWITCH_CLEAR_COUNTERS 0x51
#define CTRL_NVSWITCH_SET_NVLINK_ERROR_THRESHOLD 0x52
#define CTRL_NVSWITCH_GET_NVLINK_ERROR_THRESHOLD 0x53
#define CTRL_NVSWITCH_GET_VOLTAGE 0x55
#define CTRL_NVSWITCH_GET_BOARD_PART_NUMBER 0x54
#define CTRL_NVSWITCH_GET_VOLTAGE 0x54
#define CTRL_NVSWITCH_GET_BOARD_PART_NUMBER 0x55
#define CTRL_NVSWITCH_GET_POWER 0x56
#define CTRL_NVSWITCH_GET_SYS_INFO 0x57
#define CTRL_NVSWITCH_GET_TIME_INFO 0x58
#define CTRL_NVSWITCH_GET_TEMP_DATA 0x59
#define CTRL_NVSWITCH_GET_TEMP_SAMPLES 0x60
#ifdef __cplusplus
}

View File

@ -569,6 +569,7 @@ NvlStatus nvswitch_reset_and_train_link(nvswitch_device *device, nvlink_link *li
NvlStatus nvswitch_set_training_mode(nvswitch_device *device);
NvBool nvswitch_is_link_in_reset(nvswitch_device *device, nvlink_link *link);
void nvswitch_apply_recal_settings(nvswitch_device *device, nvlink_link *link);
void nvswitch_init_buffer_ready(nvswitch_device *device, nvlink_link *link, NvBool bNportBufferReady);
void nvswitch_init_buffer_ready(nvswitch_device *device, nvlink_link *link, NvBool bNportBufferReady);
NvBool nvswitch_does_link_need_termination_enabled(nvswitch_device *device, nvlink_link *link);
NvlStatus nvswitch_link_termination_setup(nvswitch_device *device, nvlink_link* link);
#endif //_COMMON_NVSWITCH_H_

View File

@ -52,6 +52,7 @@
_op(void, nvswitch_destroy_device_state, (nvswitch_device *device), _arch) \
_op(void, nvswitch_determine_platform, (nvswitch_device *device), _arch) \
_op(NvU32, nvswitch_get_num_links, (nvswitch_device *device), _arch) \
_op(NvU8, nvswitch_get_num_links_per_nvlipt,(nvswitch_device *device), _arch) \
_op(NvBool, nvswitch_is_link_valid, (nvswitch_device *device, NvU32 link_id), _arch) \
_op(void, nvswitch_set_fatal_error, (nvswitch_device *device, NvBool device_fatal, NvU32 link_id), _arch) \
_op(NvU32, nvswitch_get_swap_clk_default, (nvswitch_device *device), _arch) \
@ -138,6 +139,9 @@
_op(NvlStatus, nvswitch_inforom_nvl_update_link_correctable_error_info, (nvswitch_device *device, void *pNvlGeneric, void *pData, NvU8 linkId, NvU8 nvliptInstance, NvU8 localLinkIdx, void *pErrorCounts, NvBool *bDirty), _arch) \
_op(NvlStatus, nvswitch_inforom_nvl_get_max_correctable_error_rate, (nvswitch_device *device, NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *p), _arch) \
_op(NvlStatus, nvswitch_inforom_nvl_get_errors, (nvswitch_device *device, NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *p), _arch) \
_op(NvlStatus, nvswitch_inforom_nvl_setL1Threshold, (nvswitch_device *device, void *pNvlGeneric, NvU32 word1, NvU32 word2), _arch) \
_op(NvlStatus, nvswitch_inforom_nvl_getL1Threshold, (nvswitch_device *device, void *pNvlGeneric, NvU32 *word1, NvU32 *word2), _arch) \
_op(NvlStatus, nvswitch_inforom_nvl_setup_nvlink_state, (nvswitch_device *device, INFOROM_NVLINK_STATE *pNvlinkState, NvU8 version), _arch) \
_op(NvlStatus, nvswitch_inforom_ecc_get_errors, (nvswitch_device *device, NVSWITCH_GET_ECC_ERROR_COUNTS_PARAMS *p), _arch) \
_op(void, nvswitch_load_uuid, (nvswitch_device *device), _arch) \
_op(void, nvswitch_i2c_set_hw_speed_mode, (nvswitch_device *device, NvU32 port, NvU32 speedMode), _arch) \
@ -153,6 +157,7 @@
_op(NvlStatus, nvswitch_bbx_unload, (nvswitch_device *device), _arch) \
_op(NvlStatus, nvswitch_bbx_load, (nvswitch_device *device, NvU64 time_ns, NvU8 osType, NvU32 osVersion), _arch) \
_op(NvlStatus, nvswitch_bbx_get_sxid, (nvswitch_device *device, NVSWITCH_GET_SXIDS_PARAMS * params), _arch) \
_op(NvlStatus, nvswitch_bbx_get_data, (nvswitch_device *device, NvU8 dataType, void * params), _arch) \
_op(NvlStatus, nvswitch_smbpbi_alloc, (nvswitch_device *device), _arch) \
_op(NvlStatus, nvswitch_smbpbi_post_init_hal, (nvswitch_device *device), _arch) \
_op(void, nvswitch_smbpbi_destroy_hal, (nvswitch_device *device), _arch) \
@ -208,6 +213,7 @@
_op(void, nvswitch_reset_persistent_link_hw_state, (nvswitch_device *device, NvU32 linkNumber), _arch)\
_op(void, nvswitch_store_topology_information, (nvswitch_device *device, nvlink_link *link), _arch) \
_op(void, nvswitch_init_lpwr_regs, (nvlink_link *link), _arch) \
_op(void, nvswitch_program_l1_scratch_reg, (nvswitch_device *device, NvU32 linkNumber), _arch) \
_op(NvlStatus, nvswitch_set_training_mode, (nvswitch_device *device), _arch) \
_op(NvU32, nvswitch_get_sublink_width, (nvswitch_device *device, NvU32 linkNumber), _arch) \
_op(NvBool, nvswitch_i2c_is_device_access_allowed, (nvswitch_device *device, NvU32 port, NvU8 addr, NvBool bIsRead), _arch) \
@ -224,7 +230,11 @@
_op(NvlStatus, nvswitch_ctrl_set_nvlink_error_threshold, (nvswitch_device *device, NVSWITCH_SET_NVLINK_ERROR_THRESHOLD_PARAMS *pParams), _arch) \
_op(NvlStatus, nvswitch_ctrl_get_nvlink_error_threshold, (nvswitch_device *device, NVSWITCH_GET_NVLINK_ERROR_THRESHOLD_PARAMS *pParams), _arch) \
_op(NvlStatus, nvswitch_ctrl_therm_read_voltage, (nvswitch_device *device, NVSWITCH_CTRL_GET_VOLTAGE_PARAMS *info), _arch) \
_op(NvlStatus, nvswitch_ctrl_get_board_part_number, (nvswitch_device *device, NVSWITCH_GET_BOARD_PART_NUMBER_VECTOR *p), _arch)
_op(NvlStatus, nvswitch_ctrl_therm_read_power, (nvswitch_device *device, NVSWITCH_GET_POWER_PARAMS *info), _arch) \
_op(NvlStatus, nvswitch_ctrl_get_board_part_number, (nvswitch_device *device, NVSWITCH_GET_BOARD_PART_NUMBER_VECTOR *p), _arch) \
_op(NvBool, nvswitch_does_link_need_termination_enabled, (nvswitch_device *device, nvlink_link *link), _arch) \
_op(NvlStatus, nvswitch_link_termination_setup, (nvswitch_device *device, nvlink_link *link), _arch) \
_op(NvlStatus, nvswitch_check_io_sanity, (nvswitch_device *device), _arch) \
#define NVSWITCH_HAL_FUNCTION_LIST_LS10(_op, _arch) \
_op(NvlStatus, nvswitch_launch_ALI, (nvswitch_device *device), _arch) \

View File

@ -0,0 +1,94 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef _INFOROM_NVL_V3_NVSWITCH_H_
#define _INFOROM_NVL_V3_NVSWITCH_H_
#include "inforom/inforom_nvswitch.h"
#define LUT_ELEMENT(block, dir, subtype, type, sev) \
{ INFOROM_NVL_ERROR_TYPE ## type, \
FLD_SET_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _SEVERITY, sev, 0) | \
FLD_SET_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, dir, 0), \
block ## dir ## subtype ## type, \
INFOROM_NVL_ERROR_BLOCK_TYPE_ ## block \
}
NvlStatus inforom_nvl_v3_map_error
(
INFOROM_NVLINK_ERROR_TYPES error,
NvU8 *pHeader,
NvU16 *pMetadata,
NvU8 *pErrorSubtype,
INFOROM_NVL_ERROR_BLOCK_TYPE *pBlockType
);
NvlStatus
inforom_nvl_v3_encode_nvlipt_error_subtype
(
NvU8 localLinkIdx,
NvU8 *pSubtype
);
NvBool
inforom_nvl_v3_should_replace_error_rate_entry
(
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate,
NvU32 flitCrcRate,
NvU32 *pLaneCrcRates
);
void
inforom_nvl_v3_seconds_to_day_and_month
(
NvU32 sec,
NvU32 *pDay,
NvU32 *pMonth
);
void
inforom_nvl_v3_update_error_rate_entry
(
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate,
NvU32 newSec,
NvU32 newFlitCrcRate,
NvU32 *pNewLaneCrcRates
);
NvlStatus
inforom_nvl_v3_map_error_to_userspace_error
(
nvswitch_device *device,
INFOROM_NVL_OBJECT_V3_ERROR_ENTRY *pErrorLog,
NVSWITCH_NVLINK_ERROR_ENTRY *pNvlError
);
void
inforom_nvl_v3_update_correctable_error_rates
(
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3S *pState,
NvU8 link,
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pCounts
);
#endif //_INFOROM_NVL_V3_NVSWITCH_H_

View File

@ -0,0 +1,37 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#ifndef _INFOROM_NVL_V4_NVSWITCH_H_
#define _INFOROM_NVL_V4_NVSWITCH_H_
#include "inforom/inforom_nvswitch.h"
void
inforom_nvl_v4_update_correctable_error_rates
(
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4S *pState,
NvU8 link,
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pCounts
);
#endif //_INFOROM_NVL_V4_NVSWITCH_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -46,6 +46,12 @@
(destName)[2] = (srcName)[2]; \
}
#define m_inforom_nvl_get_new_errors_per_minute(value, pSum) \
do \
{ \
*pSum = (*pSum - (*pSum / 60)) + value; \
} while (NV_FALSE) \
//
// OS type defines.
//
@ -99,6 +105,7 @@ struct inforom
INFOROM_IMG_OBJECT_V1_00 object;
} IMG;
INFOROM_NVLINK_STATE *pNvlinkState;
INFOROM_ECC_STATE *pEccState;
INFOROM_OMS_STATE *pOmsState;
@ -149,6 +156,8 @@ NvlStatus nvswitch_inforom_nvlink_get_max_correctable_error_rate(nvswitch_device
NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params);
NvlStatus nvswitch_inforom_nvlink_get_errors(nvswitch_device *device,
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params);
NvlStatus nvswitch_inforom_nvlink_setL1Threshold(nvswitch_device *device, NvU32 word1, NvU32 word2);
NvlStatus nvswitch_inforom_nvlink_getL1Threshold(nvswitch_device *device, NvU32 *word1, NvU32 *word2);
// InfoROM ECC APIs
NvlStatus nvswitch_inforom_ecc_load(nvswitch_device *device);
@ -175,6 +184,7 @@ NvlStatus nvswitch_inforom_bbx_add_sxid(nvswitch_device *device,
NvU32 data1, NvU32 data2);
NvlStatus nvswitch_inforom_bbx_get_sxid(nvswitch_device *device,
NVSWITCH_GET_SXIDS_PARAMS *params);
NvlStatus nvswitch_inforom_bbx_get_data(nvswitch_device *device, NvU8 dataType, void *params);
// InfoROM DEM APIs
NvlStatus nvswitch_inforom_dem_load(nvswitch_device *device);

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -58,6 +58,29 @@ nvswitch_inforom_nvl_get_errors_lr10
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params
);
NvlStatus nvswitch_inforom_nvl_setL1Threshold_lr10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 word1,
NvU32 word2
);
NvlStatus nvswitch_inforom_nvl_getL1Threshold_lr10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 *word1,
NvU32 *word2
);
NvlStatus nvswitch_inforom_nvl_setup_nvlink_state_lr10
(
nvswitch_device *device,
INFOROM_NVLINK_STATE *pNvlinkState,
NvU8 version
);
NvlStatus
nvswitch_inforom_ecc_log_error_event_lr10
(
@ -146,4 +169,12 @@ nvswitch_bbx_get_sxid_lr10
NVSWITCH_GET_SXIDS_PARAMS * params
);
NvlStatus
nvswitch_bbx_get_data_lr10
(
nvswitch_device *device,
NvU8 dataType,
void *params
);
#endif //_INFOROM_LR10_H_

View File

@ -569,8 +569,28 @@ typedef struct
// Ganged Link table
NvU64 *ganged_link_table;
//
// Mask of links on the LR10 device connected to a disabled
// remote link
//
NvU64 disabledRemoteEndLinkMask;
//
// Bool indicating if disabledRemoteEndLinkMask
// has been cached previously
//
NvBool bDisabledRemoteEndLinkMaskCached;
} lr10_device;
#define NVSWITCH_NUM_DEVICES_PER_DELTA_LR10 6
typedef struct {
NvU32 switchPhysicalId;
NvU64 accessLinkMask;
NvU64 trunkLinkMask;
} lr10_links_connected_to_disabled_remote_end;
#define NVSWITCH_GET_CHIP_DEVICE_LR10(_device) \
( \
((_device)->chip_id == NV_PSMC_BOOT_42_CHIP_ID_LR10) ? \
@ -632,6 +652,7 @@ void nvswitch_setup_link_loopback_mode_lr10(nvswitch_device *device, NvU32
void nvswitch_reset_persistent_link_hw_state_lr10(nvswitch_device *device, NvU32 linkNumber);
void nvswitch_store_topology_information_lr10(nvswitch_device *device, nvlink_link *link);
void nvswitch_init_lpwr_regs_lr10(nvlink_link *link);
void nvswitch_program_l1_scratch_reg_lr10(nvswitch_device *device, NvU32 linkNumber);
NvlStatus nvswitch_set_training_mode_lr10(nvswitch_device *device);
NvBool nvswitch_i2c_is_device_access_allowed_lr10(nvswitch_device *device, NvU32 port, NvU8 addr, NvBool bIsRead);
NvU32 nvswitch_get_sublink_width_lr10(nvswitch_device *device,NvU32 linkNumber);
@ -660,5 +681,7 @@ NvlStatus nvswitch_launch_ALI_lr10(nvswitch_device *device);
NvlStatus nvswitch_reset_and_train_link_lr10(nvswitch_device *device, nvlink_link *link);
NvlStatus nvswitch_ctrl_get_bios_info_lr10(nvswitch_device *device, NVSWITCH_GET_BIOS_INFO_PARAMS *p);
NvBool nvswitch_does_link_need_termination_enabled_lr10(nvswitch_device *device, nvlink_link *link);
NvlStatus nvswitch_link_termination_setup_lr10(nvswitch_device *device, nvlink_link* link);
#endif //_LR10_H_

View File

@ -62,4 +62,11 @@ nvswitch_ctrl_therm_read_voltage_lr10
NVSWITCH_CTRL_GET_VOLTAGE_PARAMS *info
);
NvlStatus
nvswitch_ctrl_therm_read_power_lr10
(
nvswitch_device *device,
NVSWITCH_GET_POWER_PARAMS *info
);
#endif //_THERM_LR10_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -44,6 +44,43 @@ NvlStatus nvswitch_inforom_nvl_update_link_correctable_error_info_ls10
NvBool *bDirty
);
NvlStatus
nvswitch_inforom_nvl_get_max_correctable_error_rate_ls10
(
nvswitch_device *device,
NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params
);
NvlStatus
nvswitch_inforom_nvl_get_errors_ls10
(
nvswitch_device *device,
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params
);
NvlStatus nvswitch_inforom_nvl_setL1Threshold_ls10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 word1,
NvU32 word2
);
NvlStatus nvswitch_inforom_nvl_getL1Threshold_ls10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 *word1,
NvU32 *word2
);
NvlStatus nvswitch_inforom_nvl_setup_nvlink_state_ls10
(
nvswitch_device *device,
INFOROM_NVLINK_STATE *pNvlinkState,
NvU8 version
);
void
nvswitch_initialize_oms_state_ls10
(
@ -117,4 +154,11 @@ nvswitch_bbx_get_sxid_ls10
NVSWITCH_GET_SXIDS_PARAMS * params
);
NvlStatus
nvswitch_bbx_get_data_ls10
(
nvswitch_device *device,
NvU8 dataType,
void *params
);
#endif //_INFOROM_LS10_H_

View File

@ -175,6 +175,9 @@
#define NVSWITCH_NUM_LINKS_PER_NVLIPT_LS10 (NVSWITCH_NUM_LINKS_LS10/NUM_NVLIPT_ENGINE_LS10)
#define NVSWITCH_NVLIPT_GET_PUBLIC_ID_LS10(_physlinknum) \
((_physlinknum)/NVSWITCH_LINKS_PER_NVLIPT_LS10)
#define NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(_physlinknum) \
((_physlinknum)%NVSWITCH_NUM_LINKS_PER_NVLIPT_LS10)
@ -183,6 +186,9 @@
#define DMA_ADDR_WIDTH_LS10 64
#define SOE_VBIOS_VERSION_MASK 0xFF0000
#define SOE_VBIOS_REVLOCK_DISABLE_NPORT_FATAL_INTR 0x370000
//
// Helpful IO wrappers
//
@ -497,10 +503,16 @@ typedef struct
NV_NPORT_PORTSTAT_LS10(_block, _reg, _idx, ), _data); \
}
#define NVSWITCH_DEFERRED_LINK_STATE_CHECK_INTERVAL_NS (10 * NVSWITCH_INTERVAL_1SEC_IN_NS)
#define NVSWITCH_DEFERRED_FAULT_UP_CHECK_INTERVAL_NS (10 * NVSWITCH_INTERVAL_1MSEC_IN_NS)
#define NVSWITCH_DEFERRED_LINK_STATE_CHECK_INTERVAL_NS (12 * NVSWITCH_INTERVAL_1SEC_IN_NS)
#define NVSWITCH_DEFERRED_FAULT_UP_CHECK_INTERVAL_NS (12 * NVSWITCH_INTERVAL_1MSEC_IN_NS)
// Struct used for passing around error masks in error handling functions
typedef struct
{
NvBool bPending;
NvU32 regData;
} MINION_LINK_INTR;
typedef struct
{
NvU32 dl;
@ -510,17 +522,27 @@ typedef struct
NvU32 tlcRx1Injected;
NvU32 liptLnk;
NvU32 liptLnkInjected;
MINION_LINK_INTR minionLinkIntr;
} NVLINK_LINK_ERROR_INFO_ERR_MASKS, *PNVLINK_LINK_ERROR_INFO_ERR_MASKS;
typedef struct
{
{
NvBool bLinkErrorsCallBackEnabled;
NvBool bLinkStateCallBackEnabled;
NvU64 lastRetrainTime;
NvU64 lastLinkUpTime;
} NVLINK_LINK_ERROR_REPORTING_STATE;
typedef struct
{
NVLINK_LINK_ERROR_INFO_ERR_MASKS fatalIntrMask;
NVLINK_LINK_ERROR_INFO_ERR_MASKS nonFatalIntrMask;
} NVLINK_LINK_ERROR_REPORTING_DATA;
NvBool bResetAndDrainRetry;
typedef struct
{
NVLINK_LINK_ERROR_REPORTING_STATE state;
NVLINK_LINK_ERROR_REPORTING_DATA data;
} NVLINK_LINK_ERROR_REPORTING;
typedef struct
@ -792,7 +814,6 @@ typedef const struct
#define nvswitch_ctrl_get_info_ls10 nvswitch_ctrl_get_info_lr10
#define nvswitch_ctrl_set_switch_port_config_ls10 nvswitch_ctrl_set_switch_port_config_lr10
#define nvswitch_ctrl_get_fom_values_ls10 nvswitch_ctrl_get_fom_values_lr10
#define nvswitch_ctrl_get_throughput_counters_ls10 nvswitch_ctrl_get_throughput_counters_lr10
#define nvswitch_save_nvlink_seed_data_from_minion_to_inforom_ls10 nvswitch_save_nvlink_seed_data_from_minion_to_inforom_lr10
@ -809,10 +830,6 @@ typedef const struct
#define nvswitch_corelib_write_discovery_token_ls10 nvswitch_corelib_write_discovery_token_lr10
#define nvswitch_corelib_read_discovery_token_ls10 nvswitch_corelib_read_discovery_token_lr10
#define nvswitch_inforom_nvl_get_minion_data_ls10 nvswitch_inforom_nvl_get_minion_data_lr10
#define nvswitch_inforom_nvl_set_minion_data_ls10 nvswitch_inforom_nvl_set_minion_data_lr10
#define nvswitch_inforom_nvl_get_max_correctable_error_rate_ls10 nvswitch_inforom_nvl_get_max_correctable_error_rate_lr10
#define nvswitch_inforom_nvl_get_errors_ls10 nvswitch_inforom_nvl_get_errors_lr10
#define nvswitch_inforom_ecc_log_error_event_ls10 nvswitch_inforom_ecc_log_error_event_lr10
#define nvswitch_inforom_ecc_get_errors_ls10 nvswitch_inforom_ecc_get_errors_lr10
#define nvswitch_inforom_bbx_get_sxid_ls10 nvswitch_inforom_bbx_get_sxid_lr10
@ -827,7 +844,6 @@ typedef const struct
#define nvswitch_setup_link_loopback_mode_ls10 nvswitch_setup_link_loopback_mode_lr10
#define nvswitch_link_lane_reversed_ls10 nvswitch_link_lane_reversed_lr10
#define nvswitch_request_tl_link_state_ls10 nvswitch_request_tl_link_state_lr10
#define nvswitch_i2c_get_port_info_ls10 nvswitch_i2c_get_port_info_lr10
#define nvswitch_i2c_set_hw_speed_mode_ls10 nvswitch_i2c_set_hw_speed_mode_lr10
@ -868,7 +884,6 @@ NvlStatus nvswitch_ctrl_get_nvlink_status_ls10(nvswitch_device *device, NVSWITCH
NvlStatus nvswitch_ctrl_get_info_lr10(nvswitch_device *device, NVSWITCH_GET_INFO *p);
NvlStatus nvswitch_ctrl_set_switch_port_config_lr10(nvswitch_device *device, NVSWITCH_SET_SWITCH_PORT_CONFIG *p);
NvlStatus nvswitch_ctrl_get_fom_values_lr10(nvswitch_device *device, NVSWITCH_GET_FOM_VALUES_PARAMS *p);
NvlStatus nvswitch_ctrl_get_throughput_counters_lr10(nvswitch_device *device, NVSWITCH_GET_THROUGHPUT_COUNTERS_PARAMS *p);
void nvswitch_save_nvlink_seed_data_from_minion_to_inforom_lr10(nvswitch_device *device, NvU32 linkId);
void nvswitch_store_seed_data_from_inforom_to_corelib_lr10(nvswitch_device *device);
@ -889,10 +904,6 @@ NvlStatus nvswitch_corelib_set_tx_mode_lr10(nvlink_link *link, NvU64 mode, NvU32
NvlStatus nvswitch_corelib_get_tl_link_mode_lr10(nvlink_link *link, NvU64 *mode);
void nvswitch_init_buffer_ready_lr10(nvswitch_device *device, nvlink_link *link, NvBool bNportBufferReady);
NvlStatus nvswitch_inforom_nvl_get_minion_data_lr10(nvswitch_device *device, void *pNvlGeneric, NvU8 linkId, NvU32 *seedData);
NvlStatus nvswitch_inforom_nvl_set_minion_data_lr10(nvswitch_device *device, void *pNvlGeneric, NvU8 linkId, NvU32 *seedData, NvU32 size, NvBool *bDirty);
NvlStatus nvswitch_inforom_nvl_get_max_correctable_error_rate_lr10(nvswitch_device *device, NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params);
NvlStatus nvswitch_inforom_nvl_get_errors_lr10(nvswitch_device *device, NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params);
NvlStatus nvswitch_inforom_ecc_log_error_event_lr10(nvswitch_device *device, INFOROM_ECC_OBJECT *pEccGeneric, INFOROM_NVS_ECC_ERROR_EVENT *err_event);
NvlStatus nvswitch_inforom_ecc_get_errors_lr10(nvswitch_device *device, NVSWITCH_GET_ECC_ERROR_COUNTS_PARAMS *params);
NvlStatus nvswitch_inforom_bbx_get_sxid_lr10(nvswitch_device *device, NVSWITCH_GET_SXIDS_PARAMS *params);
@ -927,6 +938,7 @@ void nvswitch_corelib_clear_link_state_lr10(nvlink_link *link);
NvlStatus nvswitch_corelib_set_dl_link_mode_ls10(nvlink_link *link, NvU64 mode, NvU32 flags);
NvlStatus nvswitch_corelib_set_tx_mode_ls10(nvlink_link *link, NvU64 mode, NvU32 flags);
void nvswitch_init_lpwr_regs_ls10(nvlink_link *link);
void nvswitch_program_l1_scratch_reg_ls10(nvswitch_device *device, NvU32 linkNumber);
NvlStatus nvswitch_minion_service_falcon_interrupts_ls10(nvswitch_device *device, NvU32 instance);
@ -978,11 +990,13 @@ void nvswitch_link_disable_interrupts_ls10(nvswitch_device *device, NvU32 l
void nvswitch_execute_unilateral_link_shutdown_ls10(nvlink_link *link);
void nvswitch_init_dlpl_interrupts_ls10(nvlink_link *link);
void nvswitch_set_dlpl_interrupts_ls10(nvlink_link *link);
NvlStatus nvswitch_reset_and_drain_links_ls10(nvswitch_device *device, NvU64 link_mask);
void nvswitch_service_minion_all_links_ls10(nvswitch_device *device);
NvlStatus nvswitch_ctrl_get_board_part_number_ls10(nvswitch_device *device, NVSWITCH_GET_BOARD_PART_NUMBER_VECTOR *p);
void nvswitch_create_deferred_link_state_check_task_ls10(nvswitch_device *device, NvU32 nvlipt_instance, NvU32 link);
NvlStatus nvswitch_request_tl_link_state_ls10(nvlink_link *link, NvU32 tlLinkState, NvBool bSync);
//
// SU generated functions
@ -997,9 +1011,6 @@ NvlStatus nvswitch_launch_ALI_ls10(nvswitch_device *device);
NvlStatus nvswitch_ctrl_set_mc_rid_table_ls10(nvswitch_device *device, NVSWITCH_SET_MC_RID_TABLE_PARAMS *p);
NvlStatus nvswitch_ctrl_get_mc_rid_table_ls10(nvswitch_device *device, NVSWITCH_GET_MC_RID_TABLE_PARAMS *p);
void nvswitch_init_dlpl_interrupts_ls10(nvlink_link *link);
NvlStatus nvswitch_reset_and_drain_links_ls10(nvswitch_device *device, NvU64 link_mask);
void nvswitch_service_minion_all_links_ls10(nvswitch_device *device);
NvBool nvswitch_is_inforom_supported_ls10(nvswitch_device *device);
@ -1007,6 +1018,8 @@ void nvswitch_set_error_rate_threshold_ls10(nvlink_link *link, NvBool bIsDe
void nvswitch_configure_error_rate_threshold_interrupt_ls10(nvlink_link *link, NvBool bEnable);
NvlStatus nvswitch_reset_and_train_link_ls10(nvswitch_device *device, nvlink_link *link);
NvBool nvswitch_are_link_clocks_on_ls10(nvswitch_device *device, nvlink_link *link, NvU32 clocksMask);
NvBool nvswitch_does_link_need_termination_enabled_ls10(nvswitch_device *device, nvlink_link *link);
NvlStatus nvswitch_link_termination_setup_ls10(nvswitch_device *device, nvlink_link* link);
#endif //_LS10_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -24,6 +24,21 @@
#ifndef _MINION_NVLINK_DEFINES_PUBLIC_H_
#define _MINION_NVLINK_DEFINES_PUBLIC_H_
//PAD REG READ API (Bug 2643883)
#define NV_MINION_UCODE_READUPHYPAD_ADDR 11:0
#define NV_MINION_UCODE_READUPHYPAD_LANE 15:12
//FIELD FOR DEBUG_MISC_i DATA REGISTERS
#define NV_MINION_DEBUG_MISC_0_LINK_STATE 7:0
#define NV_MINION_DEBUG_MISC_0_ISR_ID 15:8
#define NV_MINION_DEBUG_MISC_0_OTHER_DATA 31:16
// Recal values checks
#define NV_MINION_UCODE_L1_EXIT_MARGIN 100
#define NV_MINION_UCODE_L1_EXIT_MAX 200
#define NV_MINION_UCODE_RECOVERY_TIME 250
#define NV_MINION_UCODE_PEQ_TIME 96
// SUBCODES for DLCMD FAULT (uses DLCMDFAULR code) - dlCmdFault() - NVLINK_LINK_INT
typedef enum _MINION_STATUS
{
@ -31,4 +46,9 @@ typedef enum _MINION_STATUS
MINION_ALARM_BUSY = 80,
} MINION_STATUS;
#define LINKSTATUS_RESET 0x0
#define LINKSTATUS_UNINIT 0x1
#define LINKSTATUS_LANESHUTDOWN 0x13
#define LINKSTATUS_EMERGENCY_SHUTDOWN 0x29
#define LINKSTATUS_ACTIVE_PENDING 0x25
#endif // _MINION_NVLINK_DEFINES_PUBLIC_H_

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -45,5 +45,8 @@ NvlStatus nvswitch_soe_register_event_callbacks_ls10(nvswitch_device *device);
NvlStatus nvswitch_soe_restore_nport_state_ls10(nvswitch_device *device, NvU32 nport);
NvlStatus nvswitch_soe_issue_nport_reset_ls10(nvswitch_device *device, NvU32 nport);
void nvswitch_soe_init_l2_state_ls10(nvswitch_device *device);
NvlStatus nvswitch_soe_set_nport_interrupts_ls10(nvswitch_device *device, NvU32 nport, NvBool bEnable);
void nvswitch_soe_disable_nport_fatal_interrupts_ls10(nvswitch_device *device, NvU32 nport,
NvU32 nportIntrEnable, NvU8 nportIntrType);
#endif //_SOE_LS10_H_

View File

@ -56,4 +56,11 @@ nvswitch_ctrl_therm_read_voltage_ls10
nvswitch_device *device,
NVSWITCH_CTRL_GET_VOLTAGE_PARAMS *info
);
NvlStatus
nvswitch_ctrl_therm_read_power_ls10
(
nvswitch_device *device,
NVSWITCH_GET_POWER_PARAMS *info
);
#endif //_THERM_LS10_H_

View File

@ -164,16 +164,6 @@ typedef struct
NvBool bBlockProtocol;
} NVSWITCH_I2C_HW_CMD, *PNVSWITCH_I2C_HW_CMD;
typedef enum
{
NVSWITCH_I2C_ACQUIRER_NONE = 0,
NVSWITCH_I2C_ACQUIRER_UNKNOWN,
NVSWITCH_I2C_ACQUIRER_IOCTL, // e.g. MODS
NVSWITCH_I2C_ACQUIRER_EXTERNAL, // e.g. Linux Direct
} NVSWITCH_I2C_ACQUIRER;
typedef enum {
i2cProfile_Standard,
i2cProfile_Fast,

View File

@ -443,19 +443,19 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x0032b13e, 0xb53e3505, 0x02050032, 0x0032b53e, 0x003a317e, 0xf42885fb, 0xdcdff430, 0xf9000005,
0xfeffbf22, 0x99900149, 0x0142fe14, 0x94bd9fa0, 0xa00c2290, 0x3da37e29, 0x00a03300, 0xda040b56,
0x00002944, 0x2db2bcb2, 0x0042d77e, 0xa433a032, 0x41fe4300, 0x10119001, 0x8e7e1ab2, 0xa0320033,
0x3100a433, 0x2bbf1cbf, 0x24d1a4bd, 0x7e000014, 0xa000b06c, 0x00a0b31a, 0x7eb43d1a, 0xb300b104,
0xbf1200a0, 0x7eff001a, 0x3e00b63b, 0x00003371, 0x0149feff, 0xbf149990, 0x05dcd99f, 0x99bf0000,
0x3100a433, 0x2bbf1cbf, 0x24d1a4bd, 0x7e000014, 0xa000b06d, 0x00a0b31a, 0x7eb43d1a, 0xb300b105,
0xbf1200a0, 0x7eff001a, 0x3e00b63f, 0x00003371, 0x0149feff, 0xbf149990, 0x05dcd99f, 0x99bf0000,
0xf9a60a32, 0x7e070bf4, 0xfb003a31, 0x0e090c25, 0xa43da9a0, 0x30f400f8, 0x05dcdfd8, 0x62f90000,
0x30f4ffbf, 0x0149fef4, 0xa04c9990, 0xb2a93f9f, 0x01a398a6, 0x0d019033, 0x60489d33, 0x35a33e03,
0x04301800, 0x1b010d33, 0x03329801, 0x3d043198, 0x10dc4ba4, 0xd501004c, 0x00000644, 0x0038327e,
0xa4b35aa0, 0x02f80c00, 0x1a3e0501, 0x49fe0037, 0x28999001, 0x00299cd4, 0xb51cb200, 0x91b50741,
0x352bb201, 0x42b51540, 0xbd92a006, 0x10dc4ed4, 0x0020d07e, 0xad33a132, 0xbf015900, 0x33993f59,
0x980d0090, 0x95f00149, 0x0149b508, 0x000644d9, 0x1899bf00, 0x90336999, 0x9cdf1300, 0x98000029,
0x95f101f9, 0xf9b54000, 0x299cda01, 0x027e0000, 0x3098009c, 0x01027e02, 0x8aa3d900, 0xacb20000,
0x95f101f9, 0xf9b54000, 0x299cda01, 0x037e0000, 0x3098009c, 0x01027e02, 0x8aa3d900, 0xacb20000,
0xb20091b0, 0xbdb4bd0d, 0x2e70da04, 0x01b00000, 0x08013001, 0xc87e010e, 0x9cd90013, 0xdf000029,
0x1e000000, 0xfe509035, 0x99900149, 0x0142fe34, 0x22909fa0, 0xb2010a38, 0x94ee7e2b, 0x1fa43300,
0xc42bbf1b, 0x1bf401b9, 0x01b5f014, 0x2ba0010a, 0x0095097e, 0x061fa033, 0xb4bd09f8, 0x097e020a,
0x9cda0095, 0x7e000029, 0xfe009ab1, 0xb4bd014a, 0x010dc4bd, 0x7e34aa90, 0x3e0075b0, 0x33003574,
0x1e000000, 0xfe509035, 0x99900149, 0x0142fe34, 0x22909fa0, 0xb2010a38, 0x94ef7e2b, 0x1fa43300,
0xc42bbf1b, 0x1bf401b9, 0x01b5f014, 0x2ba0010a, 0x00950a7e, 0x061fa033, 0xb4bd09f8, 0x0a7e020a,
0x9cda0095, 0x7e000029, 0xfe009ab2, 0xb4bd014a, 0x010dc4bd, 0x7e34aa90, 0x3e0075b0, 0x33003574,
0xd9320204, 0x00000644, 0xa0b39abf, 0xb4d97f00, 0x98000029, 0x9bbf019c, 0x9cd9f43d, 0xbd000029,
0x159f35d4, 0x7e10dc4e, 0x320020d0, 0x356f3ea1, 0x030d3300, 0x0e7e0207, 0x39180001, 0x00903308,
0x033e9824, 0x002a3cd9, 0x2a44df00, 0x9ea00000, 0xb5043e98, 0x3998019e, 0x98f9a005, 0xfeb5063e,
@ -464,7 +464,7 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0xff90014f, 0x3df92048, 0x02f93594, 0x09033318, 0xb2b4bd04, 0x03f335fa, 0x7e01f935, 0x3e000f71,
0xfe00371a, 0x41fe0140, 0x44009001, 0xfe401190, 0x0ab20142, 0xb23c2290, 0x3d2cb21b, 0x75b07ed4,
0x02399800, 0x010a0fbf, 0x1bf4f9a6, 0x0524de3c, 0xe93f0000, 0x0e009033, 0x1e0a943d, 0x063ee920,
0xffd90036, 0xff200000, 0x94b394f9, 0x0ab2121c, 0x2cb21bb2, 0x0098b87e, 0x0036063e, 0x1bb20ab2,
0xffd90036, 0xff200000, 0x94b394f9, 0x0ab2121c, 0x2cb21bb2, 0x0098b97e, 0x0036063e, 0x1bb20ab2,
0x3e7e2cb2, 0x4bfe008d, 0x44bb9001, 0xa9c4bebf, 0xffffdf1f, 0x94b6e0ff, 0x04effd18, 0xa0e59eff,
0x0000d9be, 0xe9ff4000, 0x6b0bf494, 0x681fa433, 0x900149fe, 0x9dbf4099, 0xbf049992, 0x1ee4339c,
0x0003df42, 0xff89ff00, 0xefff3fff, 0x94d9fff4, 0xff0294b6, 0xc0b3e5f9, 0xe9c50b00, 0x36703e03,
@ -646,7 +646,7 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x01b024a1, 0x08113001, 0x300c1130, 0x050d1c01, 0xda00c04e, 0x000005d0, 0x005d0a7e, 0x001404da,
0x0c040b00, 0x59377e08, 0x00ad3300, 0x4d4c00f6, 0x00c3f171, 0x00d8db00, 0xa1300000, 0x00a13028,
0x3010a130, 0xa13014a1, 0x20a13018, 0xb024a130, 0x11300101, 0x0c113008, 0x0d1c0130, 0x00804e09,
0x0005d4da, 0x5d0a7e00, 0x1428da00, 0x040b0000, 0x377e080c, 0xad330059, 0x4c00a900, 0xc3f1b7c7,
0x0005d4da, 0x5d0a7e00, 0x1428da00, 0x040b0000, 0x377e080c, 0xad330059, 0x4c00a900, 0xc3f1b7cb,
0xb4db0000, 0x30000000, 0xa13028a1, 0x10a13000, 0x3014a130, 0xa13018a1, 0x24a13020, 0x300c1130,
0x01b01c01, 0x08113001, 0xc04e0a0d, 0x05d8da00, 0x0a7e0000, 0x1cda005d, 0x0b000014, 0x7e080c04,
0x33005937, 0x7e5c00a4, 0x7e005c97, 0x7e004db4, 0x7e005931, 0x7e000a74, 0x7e003cf7, 0x7e005249,
@ -662,7 +662,7 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x3d071bf4, 0xc700f8a4, 0x96b024f9, 0x0b9cf002, 0x00f89a32, 0x0089050f, 0x9ff60180, 0xb8060f00,
0x00010099, 0xf8009ff6, 0x02008900, 0x0099cf01, 0x1000008f, 0xf4049ffd, 0x34da181b, 0x7e008204,
0xf0001a27, 0x1bf401a4, 0x0a02f809, 0x3d00f824, 0xd900f8a4, 0x00001430, 0x34da99bf, 0x98000014,
0x95f90e99, 0x1e0a00f8, 0x00b99e7e, 0x0600a033, 0x00f802f8, 0x0100008f, 0xf6590049, 0x00f8009f,
0x95f90e99, 0x1e0a00f8, 0x00b9a27e, 0x0600a033, 0x00f802f8, 0x0100008f, 0xf6590049, 0x00f8009f,
0x00900089, 0xf00099ce, 0x0bf40194, 0xf1008e20, 0x00e9ce00, 0x9ffdef0f, 0x00e9f704, 0x5200eeb8,
0x00e9ce02, 0xf7049ffd, 0x00f800e9, 0x7e0a004a, 0xe7001a27, 0xb30114aa, 0x4f1e06a4, 0xf9cf4f00,
0xe899c700, 0x110f94b3, 0xf000f9cf, 0x9cf0ff94, 0xf89a320b, 0xf8a43d00, 0x8902f900, 0xce009000,
@ -751,7 +751,7 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x00f0b305, 0x0a09584a, 0x90014afe, 0xafb508aa, 0x010f9801, 0xb60093f0, 0xa9b50294, 0x02afb503,
0xb2100918, 0x18a9351b, 0xb5020f98, 0x099804af, 0x05a9b503, 0xa0a000bf, 0x005b0b7e, 0xf001a6b0,
0x9a120b9c, 0x59ab3e01, 0xfb020a00, 0xe27e1c15, 0x943d0059, 0xf001a6b0, 0xa6f00bac, 0xa29a3c01,
0x4c8900f8, 0x9ebf0005, 0xb5019f98, 0x9ea0019f, 0x005a267e, 0x0801a4b3, 0x00f8a43d, 0xff0a09f8,
0x4c8900f8, 0x9ebf0005, 0xb5019f98, 0x9ea0019f, 0x005a267e, 0x0801a4b3, 0x00f8a43d, 0xff0a02f8,
0x12f900f8, 0x000f8c89, 0xf20a99bf, 0x380090b3, 0x000fa881, 0xf10a10bf, 0x2c0004b3, 0x000a747e,
0x19a00109, 0x000f9889, 0x948990a0, 0xff0f0010, 0x90899fa0, 0x90a0000f, 0x000f9489, 0x587e9fa0,
0x10a00037, 0x12f911fb, 0x000f8c89, 0xb4bd04bd, 0xb44c90a0, 0x0fac8a00, 0x0b947e00, 0x0cb4bd00,
@ -1157,371 +1157,371 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x0a3299bf, 0x0bf4f9a6, 0x3a317e07, 0x2875fb00, 0x00299cd9, 0x15991800, 0xbeb2adb2, 0x0a009033,
0x008b707e, 0x44d900f8, 0xbf000006, 0xb2cab29b, 0xb0bdbcec, 0x000b7e7e, 0x00f81f0a, 0xdff430f4,
0x000005dc, 0xffbf32f9, 0x900149fe, 0xa2b21899, 0xa9bf9fa0, 0xb39899c7, 0x00aa1d99, 0x00299cd9,
0x02999800, 0xb34299c7, 0x009a0099, 0x0a0140fe, 0x14009001, 0xee7e0bb2, 0xa4330094, 0x4bfe551f,
0x90020a01, 0xee7e10bb, 0xa4330094, 0x09bf451f, 0x04bd0103, 0xbc1493ff, 0x94f09530, 0x121bf401,
0x0f0204b3, 0x009a447e, 0x0700a033, 0x900415f0, 0x04b30100, 0x49fee509, 0x14999001, 0x19a699bf,
0x0a150bf4, 0x7e1bb201, 0x33009509, 0xf80a1fa0, 0x8d233e09, 0xfe2ebf00, 0x99900149, 0xdf99bf10,
0x02999800, 0xb34299c7, 0x009a0099, 0x0a0140fe, 0x14009001, 0xef7e0bb2, 0xa4330094, 0x4bfe551f,
0x90020a01, 0xef7e10bb, 0xa4330094, 0x09bf451f, 0x04bd0103, 0xbc1493ff, 0x94f09530, 0x121bf401,
0x0f0204b3, 0x009a457e, 0x0700a033, 0x900415f0, 0x04b30100, 0x49fee509, 0x14999001, 0x19a699bf,
0x0a150bf4, 0x7e1bb201, 0x3300950a, 0xf80a1fa0, 0x8d233e09, 0xfe2ebf00, 0x99900149, 0xdf99bf10,
0xbfffffff, 0xeffd1f0a, 0x0099b904, 0xf09419ff, 0x96f00b9c, 0x1e94b601, 0xa0059efd, 0x8d233e29,
0xfe1f0a00, 0x99900149, 0xd99fbf18, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40c35,
0x05dcdfe4, 0x52f90000, 0x49feffbf, 0x30999001, 0x9fa0a3b2, 0xc5b2afbf, 0xfdc7b4b2, 0x00ddb31d,
0xfa95075c, 0x10f99508, 0xa132f032, 0xf9339232, 0x3000d515, 0x0cf415f6, 0x05f93346, 0xf63005fb,
0x1c0cf405, 0x8701f933, 0x301f0a00, 0x08f501f6, 0xf6300739, 0x240cf503, 0x8e283e07, 0x10f93300,
0xf630041a, 0x0e0cf410, 0xf50df630, 0x3e070e08, 0x33009155, 0x070611fd, 0x00915f3e, 0x421df933,
0x1df63006, 0x33250cf4, 0x03fa18f9, 0xf418f630, 0xfd330c0c, 0x3e06e717, 0x33009408, 0x01001af9,
0xd91cfd33, 0x94c53e06, 0x21f93300, 0xf6300262, 0x0c0cf421, 0xc51efd33, 0x8ecd3e06, 0x24f93300,
0xfd330639, 0x3e06b725, 0xdf009499, 0x0000299c, 0x2614f918, 0x0d18f4a9, 0xbcffa9c4, 0x6e3e98f9,
0xbda00093, 0x0094303e, 0x1d33080a, 0x7e069d00, 0x330063f7, 0x490a0300, 0xa9fdff00, 0x3e4aa004,
0x0a009430, 0x04163003, 0x067f0cf5, 0x00299cd9, 0x0e99bf00, 0xbc080a01, 0x99c7f4e1, 0x049ffd98,
0x06670bf5, 0x0e021033, 0x10041033, 0x843eea32, 0xeab2008e, 0x008e7a3e, 0x4bfea4bd, 0x2cbb9001,
0x0063b47e, 0x008a847e, 0x3f1fad33, 0x0149fe06, 0xbf2c9990, 0x1fe9959e, 0x0a0190b3, 0xa73ed4bd,
0x00dd008e, 0xc4ff0000, 0x943380e9, 0xf4bd0a00, 0x008ebe3e, 0xe6b0010f, 0x051ff400, 0xe995ff0f,
0x95d9ff08, 0xa090f9bc, 0x94c73e49, 0xb29b3200, 0x7e5db24c, 0x3e0077ca, 0x330094c7, 0x305507a0,
0x0cf407a6, 0x299cd912, 0xa6300000, 0x2b0df402, 0x008f243e, 0xf40ca630, 0x9cd9120c, 0x30000029,
0x18f409a6, 0x8f473e57, 0x0da03300, 0x33030a61, 0x05b80e1d, 0x008f7a3e, 0xdf019998, 0x04000000,
0x008f603e, 0xdf019998, 0x08000000, 0x008f603e, 0x00299cd9, 0x02999800, 0x0200008f, 0xf5049ffd,
0x3e00c61b, 0x98009045, 0x008f0299, 0x9ffd0400, 0xc41bf504, 0x90453e00, 0x02999800, 0x0100008f,
0xf4049ffd, 0x453e2f1b, 0x9cd90090, 0x8f000029, 0x98400000, 0x873e0299, 0x9cd9008f, 0x98000029,
0x00df0299, 0xfd008000, 0x1bf5049f, 0x453e00a9, 0x10330090, 0x16307307, 0x1a0cf407, 0x4b021033,
0xf4021630, 0x1033540c, 0x1d332700, 0x3e048601, 0x30008fd7, 0x0cf40c16, 0x0916300d, 0x3e6518f4,
0x30009015, 0x0df40e16, 0x94303e6d, 0x7e4ab200, 0x3e00789f, 0x320094c7, 0xb22b321a, 0x7e5db24c,
0x3e007cca, 0x320094c7, 0xb22b321a, 0x7e5db24c, 0x3e007c3b, 0x320094c7, 0xb22b321a, 0x7e467e4c,
0x94c73e00, 0xb22b3200, 0x0a5db24c, 0x7ba27e07, 0x94c73e00, 0x32080a00, 0xb24cb22b, 0x7b037e5d,
0x321a3200, 0xb23cb22b, 0x7e5eb24d, 0x3e007ed3, 0x320094c7, 0xb22b321a, 0xb24db23c, 0x78a77e5e,
0x94c73e00, 0x3e080a00, 0x0a0094c7, 0x009d3304, 0x9cd9047a, 0x98000029, 0x080a0299, 0x400094f1,
0x04670bf5, 0xfe0149fe, 0x99900142, 0x1822902c, 0x2da09da0, 0xa0049992, 0x0499929d, 0x99929da0,
0x929da004, 0x9da00499, 0x85011933, 0x01163000, 0x0a0e08f4, 0x021d3303, 0x213e0432, 0x41fe0091,
0x0140fe01, 0x902c1190, 0x1ab22800, 0x607e0bb2, 0x19bf0075, 0x43fe00bf, 0x0142fe01, 0x900794f0,
0x22902433, 0xfe3ab220, 0x2bb20141, 0xf01c1190, 0x1cb20704, 0xfd0404b6, 0x5c7e0509, 0x29bf006a,
0x1ebf3fbf, 0xb60141fe, 0xf4f00894, 0xff94f1ff, 0x10f4b6ff, 0x9018e4b6, 0x09fd1811, 0xfd1ab205,
0x0efd050f, 0x6a497e05, 0x91473e00, 0x7e2ab200, 0xb2006a39, 0x7e20bf2a, 0xbf006a29, 0x914d3e29,
0x0141fe00, 0xb2181190, 0x6a167e1a, 0xbf1ab200, 0x6a037e10, 0xb219bf00, 0xff04f11a, 0x1094b6ff,
0x7e0590ff, 0xbf0069f0, 0xff94f119, 0xa040a0ff, 0x94303e59, 0x7efab200, 0x3e0095f3, 0x330094c7,
0x330d00a0, 0x035c01ad, 0x0091ad3e, 0x9033b0bf, 0x94330c01, 0x9d3e2f02, 0x41fe0091, 0x90010a01,
0x1bb21811, 0x0094ee7e, 0x3f1fad33, 0x091fbf03, 0x9509fffe, 0xa0049fff, 0x91a13e10, 0xff04f100,
0xb22a3201, 0x95097e0b, 0x94c73e00, 0x7e9a3200, 0x3e0094ee, 0xb20094c7, 0x95227efa, 0x94c73e00,
0x299cd300, 0x39bf0000, 0x000000df, 0xfd080a20, 0x0bf5049f, 0x030a02f5, 0xef001d33, 0x0140fe02,
0x90014cfe, 0xcc902800, 0xfe0bb22c, 0x22900142, 0x7e2ab224, 0x7f007347, 0x03967009, 0x940b9cf0,
0x0e7e0791, 0x30180001, 0x01087e58, 0x00003300, 0x3e1fb20a, 0x7f00924c, 0x00a4732a, 0x3e19b20a,
0xc500924a, 0xa0734019, 0xa0731403, 0xa4731804, 0x9fe51c02, 0x4c3e0100, 0x9fe50092, 0x4c3e0200,
0x9fe50092, 0x4c3e0300, 0x9fb20092, 0x900149fe, 0x997f2c99, 0x88049973, 0x04967000, 0x731a0cf4,
0x70480190, 0x08f40196, 0x02907336, 0x039d734c, 0xce3e00e3, 0x99730092, 0x70009b07, 0x0cf40796,
0x05907310, 0x069d7369, 0x033e00cb, 0x99730093, 0x73009c08, 0x00bd099d, 0x0093383e, 0xfe07ff89,
0x3e04f9fd, 0x49009350, 0xf9ffc7ff, 0x0095f194, 0x92bf3e20, 0xc7ff4900, 0xf194f9ff, 0x8f180095,
0xfdfe3fff, 0x9fe5049f, 0x503e4000, 0xff490093, 0x94f9ffc7, 0x100095f1, 0x0092bf3e, 0xffc7ff49,
0x95f194f9, 0xf43e0800, 0xff490092, 0x94f9ffc7, 0x100095f1, 0xfe3fff8f, 0xe5049ffd, 0x3e80009f,
0x49009350, 0xf9ffc7ff, 0x0095f194, 0x931b3e08, 0xc7ff4900, 0xf194f9ff, 0x8f100095, 0xfdfe3fff,
0x9fe5049f, 0x503ec000, 0xff490093, 0x94f9ffc7, 0x080095f1, 0x0093423e, 0xffc7ff49, 0x95f194f9,
0xff8f1000, 0x9ffdfe3f, 0x00008f04, 0xf59fff01, 0x00299cd9, 0x50991800, 0x0f009033, 0x02000089,
0x3e95f9ff, 0x8900936e, 0xfffdffff, 0x49a094f9, 0x0094303e, 0xf514a630, 0xc401480c, 0xd0d9ffaf,
0xbc000004, 0x9cd9e89f, 0x0a000029, 0x3befc708, 0xc7989fbc, 0x9fbb96ef, 0x0194f005, 0x012b0bf5,
0xe7ff29c4, 0x54010def, 0x040a029b, 0x18f5bf66, 0xf3f00119, 0xffb9e400, 0xc2f9bcff, 0xf404c6b0,
0x040c090d, 0x0093ca3e, 0xbae44da0, 0xe9c4ffff, 0x42ebe703, 0x00943301, 0xb0babc12, 0x0029bcd9,
0x3e4ab200, 0xd90093f3, 0x00000644, 0xbabc99bf, 0xbc4ab2b0, 0x7e7eb09b, 0x303e000b, 0x9b320094,
0x009aca7e, 0x0094c73e, 0x0f00a033, 0x1d33080a, 0x3e00b101, 0xfe0094c7, 0x00900140, 0x7e0ab224,
0x3f0072fb, 0x00a54f09, 0x06009433, 0x4fa05a0f, 0xc73e1f0a, 0x9cd90094, 0x18000029, 0x99331599,
0x33008700, 0x303802a0, 0x0cf402a6, 0x00a0330f, 0x01a43318, 0x946f3e6e, 0x03a03300, 0x04a4332c,
0x948f3e62, 0x7e3ab200, 0x3e009d81, 0xb20094c7, 0x7ecbb2ba, 0x3e009ffb, 0x320094c7, 0x9d0a7e2a,
0x94c73e00, 0x7e2a3200, 0x3e00a211, 0x320094c7, 0xa1a57e2a, 0x94c73e00, 0x299cd900, 0x99180000,
0x00903315, 0x6cfbc724, 0x4db22c32, 0xa4f05eb2, 0x9eab7e0f, 0x94c73e00, 0x3e020a00, 0x0a0094c7,
0x94c73e03, 0xfe090a00, 0x99900149, 0xd99fbf30, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31,
0xa4f01c55, 0x02a4b6ff, 0x1f0acaa0, 0xaf3200f8, 0xf630040a, 0x120cf402, 0xd9fff4f0, 0x00002a5c,
0x0af89fbc, 0xf8bfa01f, 0x0aaf3200, 0x02f63004, 0xf0100cf4, 0x5cd9fff4, 0x0a00002a, 0xf99bbc1f,
0x12f900f8, 0xb210af95, 0x08ae95b1, 0x00299cd0, 0x26ff0900, 0x3d1bf4e9, 0x26490918, 0xb21bf5f9,
0x4a091800, 0x99331c0a, 0x3000ab01, 0x08f50196, 0x060a00a1, 0x9d029d33, 0x13099800, 0x1f0af43d,
0x0918b9a0, 0x4a0f3549, 0x35019910, 0xf13e4909, 0x09180095, 0x330a0a4a, 0xd97a0094, 0x00002a5c,
0xf4f099bf, 0xe899c7ff, 0xbc0694b6, 0xf6b0f0f9, 0x5e0cf43f, 0xe433030a, 0xf9905b0c, 0x4096b104,
0x4e0cf400, 0xdf02f994, 0x00002a68, 0x7f909fbc, 0x019a589f, 0xf473080d, 0x09981b02, 0xf0290d04,
0x90338094, 0x4b7e0f00, 0x01090075, 0x0935d43d, 0x299cdf50, 0xfe180000, 0xffd9c449, 0x0913f9b5,
0x4af93502, 0x0affe4f0, 0x3e1ea01c, 0x0a0095f1, 0xf911fb04, 0xb2adb222, 0xe8a0c7b2, 0x06b0bbbf,
0xcc0cf53f, 0xffbcc400, 0xb3ffaec4, 0x0a0d0fe4, 0x3fc6b005, 0x00bb0cf5, 0x002a5cd9, 0xc499bf00,
0x99c7ff9f, 0x06f194e8, 0xb30694b6, 0xb32c0ee0, 0x0a440fe0, 0x0dedb31f, 0x097c009a, 0xff967190,
0x8c0cf500, 0xff9fe400, 0x2a68d9ff, 0x9fbc0000, 0x3e2fa0f8, 0x7c00966d, 0x96719001, 0x0cf400ff,
0xff9fe46f, 0x2a68d9ff, 0x9bbc0000, 0x3e1f0af9, 0xbc0096cf, 0x050af0c9, 0x94f0d9c7, 0x999002fb,
0x029c9401, 0xb1e0cbbc, 0xf41000e6, 0x01bc440c, 0xb6030a90, 0xc9bc0294, 0x00f6b1f0, 0x320cf410,
0x08f49ba6, 0xf49ea608, 0xb9a62008, 0xa6080df4, 0x1608f4bf, 0x002a68df, 0xa09fbc00, 0x7eb0bfbc,
0x3e000b7e, 0x0a00966d, 0x96cf3e04, 0xfb030a00, 0xb1c9b221, 0xf40fffa6, 0x9abc2b0c, 0x0096b190,
0x210cf410, 0x002a68de, 0x90aebc00, 0x0a00d033, 0xfa3e9ab2, 0xbab20096, 0x7e7e9bb2, 0x1f0a000b,
0x040a00f8, 0x30f400f8, 0x05dcdfe4, 0x12f90000, 0x49feffbf, 0x20999001, 0x9fa0a0b2, 0xb4f0d1b2,
0xb4edb2ff, 0xe0b40aa0, 0x0709c40b, 0x1bf49ba6, 0x2f0fc775, 0x900149fe, 0x9da00899, 0xb5029eb5,
0x9fbc019a, 0xfe94bdb8, 0xff90014f, 0xb5f9a014, 0xf1b501fc, 0x2309c702, 0xf9bcbabf, 0x850fc7c8,
0x3c8a09c7, 0xf4f0e09f, 0x910dc71f, 0x3c05cfbb, 0xeeb990d9, 0x1fd4f000, 0xb91fe4f0, 0xefbc0099,
0x1f94f0e0, 0x9dbcff0f, 0x95f9bc90, 0xbb05febb, 0xfcfd049d, 0x0099b904, 0xfd04fdbb, 0x9ffd049a,
0xfeb9a005, 0x99900149, 0xd99fbf20, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f41c15,
0x05dcd9f4, 0x82f90000, 0xd1b299bf, 0x90014ffe, 0xf9a02cff, 0xff92dd3f, 0x091f0003, 0x01f03517,
0x2002f035, 0xb2b6b2f9, 0x33a5b2e3, 0xdb1900d4, 0x00000528, 0x7e7e240c, 0x0909000b, 0x19200a32,
0x0098813e, 0xd630030a, 0x780cf409, 0xc40147fe, 0xf8b2ffc4, 0x7790043d, 0x98783e24, 0xff09c400,
0x92947bb2, 0xbc040c02, 0xd43da026, 0x0096d17e, 0x6b1fa433, 0xf9c47fbf, 0xf494a607, 0xf9c75e18,
0x01991223, 0xf4019630, 0xfec7520c, 0xffe9c42f, 0xc7c8893c, 0xf9c78afd, 0x90d93c85, 0x0cf49c26,
0x03e0333b, 0x91f9c738, 0x26909d3c, 0x2c0cf49c, 0x109052bc, 0x9fa00100, 0x0926193f, 0x0aa108f4,
0x0149fe1f, 0xbf2c9990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x98b13e23, 0xbf0d0a00, 0xff0fc439,
0x000000de, 0x049efdff, 0xa005f9fd, 0x98813e3f, 0x3a317e00, 0x0c85fb00, 0xd9a830f4, 0x000005dc,
0x99bf82f9, 0xb2f830f4, 0x014ffea7, 0xa080ff90, 0xb0aabff9, 0xc1b00eb1, 0x68a6c70d, 0x30016912,
0x0cf50396, 0xa9c7013b, 0x0a96306c, 0x01310cf5, 0xfe0141fe, 0x11900140, 0x50009057, 0x2010a5b6,
0xb2b4bd19, 0x94e27e0c, 0x1fad3300, 0x09bf011d, 0xc40142fe, 0x2290ff6b, 0x04b4b658, 0xb9bc2ab2,
0xb26c32b0, 0x7e7eb21d, 0x300097be, 0xad333fa1, 0xfe00f51f, 0x01080141, 0x3d401190, 0x08199024,
0x3d0c1e90, 0xb054bd34, 0xe1b00c91, 0x9a0d3e0b, 0x1490b400, 0x100c1bb2, 0x59bcd43d, 0x7e4ab240,
0x330096d1, 0x00c31fad, 0x1f9819bf, 0xffffde01, 0x9efde0ff, 0x021fb504, 0x203319a0, 0x043d0a00,
0x0099a73e, 0xb40cb0b4, 0x1ab20bc0, 0x008d3e7e, 0xa0321fbf, 0xffffffde, 0x1f09c4e0, 0xb604fefd,
0x9ffd1894, 0xb219a005, 0x0c1bb24a, 0x7e010d10, 0x330096d1, 0x33731fa4, 0x020a0020, 0x9a073e01,
0x1f043300, 0x3e043d3f, 0xc40099f4, 0x1c98ff09, 0x031d9802, 0xfe0de0b4, 0xff90014f, 0xa8f9bc58,
0xb00e90b4, 0x001001e1, 0xb03b3201, 0x7eb20091, 0x0097067e, 0x26579034, 0xd208f409, 0x009a073e,
0x843d19bf, 0x101f9295, 0x55900133, 0xf5362610, 0x0aff4208, 0x0080331b, 0x9a233e11, 0x3e030a00,
0x34009a26, 0x49fe3fa0, 0x80999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x30f4003a,
0x5885fb08, 0xdff430f4, 0x000005dc, 0xffbf12f9, 0x900149fe, 0x41fe1099, 0x909fa001, 0xb84a0c11,
0xb2040b00, 0x8c307e1c, 0x1fa43300, 0x0140fe2b, 0x9000b44a, 0x040b0800, 0x307e0cb2, 0xa433008c,
0x19bf161f, 0x9fa60fbf, 0xf00b9cf0, 0x9a320196, 0x009a963e, 0x49fea43d, 0x10999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x15fb003a, 0x04a9980c, 0xac90afb2, 0xf0010b59, 0x904a2095,
0x04f9b500, 0x008c307e, 0x30f400f8, 0x05dcd990, 0x52f90000, 0x4ffe99bf, 0x84ff9001, 0xf9a0030e,
0x0500ad33, 0x299cd901, 0x99180000, 0x00993359, 0xba3200f6, 0xbd014cfe, 0x20cc90b4, 0x0094e27e,
0xad33ae32, 0xfe00e31f, 0xb84a0144, 0x1c449000, 0x4cb2040b, 0x008c307e, 0xad33ae32, 0xfe00cb1f,
0xb44a0140, 0x18009000, 0x0cb2040b, 0x008c307e, 0xad33ae32, 0xbf00b31f, 0xa64abf09, 0xa60bf5a9,
0xbcaa9000, 0x0b0140fe, 0x27009001, 0x307e0cb2, 0xae32008c, 0x911fad33, 0xfe093f00, 0x43b20142,
0xf0282290, 0x0045ff94, 0x02915410, 0x009ba93e, 0x1be43abf, 0x5abcffff, 0xf4b9a692, 0x9bb2050d,
0xaa90b072, 0x00b3f0bc, 0x307e2cb2, 0x0fe4008c, 0xae32ffff, 0x511fa433, 0x107b39bf, 0x202fbc02,
0xf190f9bc, 0xa00fff94, 0x00147339, 0x0149fec7, 0xbf209990, 0x0799909a, 0x4bfe9c3f, 0x90010d01,
0xc4f028bb, 0x02c4b6ff, 0x0096d17e, 0xa433ae32, 0x4cb2171f, 0x0b00b84a, 0x8af07e04, 0x3eae3200,
0x0e009be5, 0x0149fe09, 0xbf849990, 0x05dcd99f, 0x99bf0000, 0xf9a6ea32, 0x7e070bf4, 0xfb003a31,
0xa9987055, 0xf0008f04, 0x059ffd3f, 0xf804a9b5, 0x12aeb200, 0x040a10bf, 0xf926ee09, 0x332e0df4,
0x7f0a00c4, 0x9c2c3eea, 0x01ea5800, 0x1800a073, 0xb926ff09, 0xe4140bf4, 0xbbffffa9, 0x94f0059b,
0x071bf401, 0x00f8090a, 0x00f81f0a, 0xdff830f4, 0x000005dc, 0xffbf32f9, 0xfe0149fe, 0x99900140,
0x0143fe14, 0xa2b29fa0, 0x0090b1b2, 0x12339013, 0x0b10ec4a, 0x7e0cb201, 0x33008b70, 0x3f741fa4,
0x01a6300a, 0xb3690cf4, 0xf0210020, 0xa994ffa4, 0xb6240b05, 0x2cb202a4, 0xb8a0a9bc, 0x0010eeaa,
0x008b707e, 0x4b1fa433, 0x230010b3, 0x040b0a3f, 0xa4f01cb2, 0x05a994ff, 0xbc02a4b6, 0xaab8a0a9,
0x7e0010ee, 0x33008b70, 0x4a281fa4, 0x010b10ec, 0x707e3cb2, 0xa433008b, 0x3f3f191f, 0xf401f630,
0x093f0e0c, 0x1bf49f26, 0x9cef3e8a, 0xfe050a00, 0x99900149, 0xd99fbf14, 0x000005dc, 0xf9a699bf,
0x7e070bf4, 0xfb003a31, 0x30f40835, 0x05dcdfd8, 0x22f90000, 0x49feffbf, 0x30999001, 0x9fa0a132,
0x00299cd9, 0x04999800, 0x080ab2b2, 0x400094f1, 0xfe360bf4, 0xb4bd0140, 0xb20c0090, 0x9c4c7e0a,
0x1fa43300, 0x320ab225, 0x7e010c1b, 0x33009c11, 0xc4171fa4, 0x9990ff19, 0x9099bc02, 0x7f9009bc,
0x0f92f099, 0x49fe29a0, 0x30999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a,
0xd830f428, 0x0005dcdf, 0xbf62f900, 0x0149feff, 0xb2409990, 0xd99fa0b2, 0x0000299c, 0xb2049998,
0x0bc3b2a6, 0x0094f108, 0xe50bf510, 0xfeb4bd00, 0x11900141, 0x7e1ab21c, 0x32009c4c, 0x1fad33ab,
0xff0b00d1, 0x010c1ab2, 0x009c117e, 0xad33ab32, 0x0b00c01f, 0x3d1ab2ff, 0x9c117ec4, 0x33ab3200,
0x00af1fad, 0xbd011458, 0xa029a094, 0x04109039, 0x4c72157f, 0x004da47d, 0x01e4bd80, 0x9e313e01,
0x01c9c400, 0x7f200bf4, 0xf4fd660f, 0x1ebc0a1d, 0x9e263ea4, 0xf4fd6600, 0x1ebc0d1b, 0x05a9fd94,
0x009e263e, 0xee90df72, 0x01c57601, 0x72020090, 0x00c473fd, 0xf06ebfd0, 0xa9c400d3, 0xffffdfff,
0x94b6ff00, 0x04effd10, 0xff00008c, 0xfd059efd, 0x9dfd049c, 0xbf69a005, 0xff4ee429, 0xe8afc7ff,
0xf110ed94, 0xfdff0094, 0xf9fd059d, 0xe42fa005, 0xb9ffff59, 0xe9ff00ee, 0x150bf4a4, 0x9cfd39bf,
0x059afd04, 0x29bf39a0, 0x010095f1, 0x49fe29a0, 0x40999001, 0xdcd99fbf, 0xbf000005, 0xa6ba3299,
0x070bf4f9, 0x003a317e, 0xf42865fb, 0xdcdff030, 0xf9000005, 0xfeffbf62, 0x99900149, 0xa0a13228,
0x32b0329f, 0xb2d5b2c4, 0x04b630e6, 0x01120cf5, 0x00299cd9, 0x049e9800, 0x90ffb9c4, 0x9fc41199,
0xbb080a1f, 0x99b905ef, 0x1f94f000, 0x0f909fbc, 0x05f9bbff, 0xb334feff, 0x00e9013d, 0x4ffe94bd,
0x20ff9001, 0xb50142fe, 0x229001f9, 0xbdf9a01c, 0x7e2bb2a4, 0x33009c4c, 0x00c91fad, 0x3c322ab2,
0x117e1b32, 0xad33009c, 0x3300ba1f, 0x30460200, 0x0cf40206, 0x00003310, 0x010d331a, 0x5f3e00a5,
0x0033009f, 0x0d334103, 0x3e009804, 0xc4009f95, 0x90f1ff19, 0x9eb80126, 0x3e001136, 0xc4009f6b,
0x90f1ff19, 0x9eb80126, 0x0f001146, 0x9fa43e10, 0xff19c400, 0x012690f1, 0x9eb8040f, 0x3e001156,
0xc4009fa4, 0x90f1ff19, 0x020f0126, 0x115a9eb8, 0x9fa43e00, 0xff19c400, 0x012690f1, 0xb801004f,
0x00115c9e, 0x0a034994, 0xf89cc404, 0x18f4cfa6, 0x08c99032, 0x9fa6080b, 0xbc060df4, 0xecbcb2fc,
0x0140fea0, 0xb2200090, 0x8b707e0c, 0x1fa43300, 0xa009bf13, 0x01009859, 0xe03e60a0, 0x030a009f,
0x900149fe, 0x9fbf2899, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf41065fb, 0xdcdfe830,
0xf9000005, 0xfeffbf52, 0x99900149, 0xa0a3b22c, 0x299cd99f, 0x99980000, 0x0ab2b204, 0x0094f108,
0xca0bf520, 0x0140fe00, 0x0090a4bd, 0x7e0bb218, 0x33009c4c, 0x00b81fad, 0xff0b0ab2, 0x117ec43d,
0xad33009c, 0xfe00a91f, 0x007f0141, 0x4a1c1190, 0x100b10dc, 0x707e1cb2, 0xad33008b, 0x7200911f,
0xbd15b20b, 0x0104bdc4, 0x3eff04e0, 0xc400a0e7, 0x0bf401b9, 0x07c6b069, 0xbf350cf4, 0xf85c3c3d,
0x901f0ec4, 0x99b90309, 0xfff4f000, 0xbc1f94f0, 0x49bc909e, 0xf49fff95, 0xbb049ebb, 0x99b904fe,
0x049dfd00, 0xa0059ffd, 0xa0db3e39, 0x3c2dbf00, 0x1ec4f85c, 0x1d09921f, 0xf00099b9, 0x94f0fff4,
0x909ebc1f, 0xff9549bc, 0x9ebbf49f, 0x04febb04, 0xfd0099b9, 0x9ffd049d, 0x9029a005, 0xb57601cc,
0x04009001, 0x73041190, 0xfe8800b4, 0x99900149, 0xd99fbf2c, 0x000005dc, 0xf9a699bf, 0x7e070bf4,
0xfb003a31, 0x30f41855, 0x05dcdfd4, 0x22f90000, 0x49feffbf, 0x34999001, 0x41fea232, 0x909fa001,
0x984a0c11, 0xb2280b23, 0x8b707e1c, 0x1fa43300, 0x0110985d, 0x90bc19bf, 0xf490a6f2, 0xf6b01008,
0x0b9cf001, 0x3e0196f0, 0x0900a155, 0xf0f9a6e1, 0x96f00b9c, 0x330b0a01, 0xd9330090, 0x000029b4,
0xbf019c98, 0x014ffe9b, 0xbc0cff90, 0x9c4d90f0, 0x08923523, 0x0990240e, 0x1f94f001, 0xb504fa90,
0x367e01f9, 0x847e0021, 0x49fe008a, 0x34999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x25fb003a, 0xf830f42c, 0x0005dcdf, 0xbf12f900, 0x0149feff, 0x320c9990, 0xd99fa0a1, 0x0000299c,
0x0a049f98, 0x00008908, 0x04f9fd01, 0xfe2a0bf4, 0xa4bd0140, 0xb2080090, 0x9c4c7e0b, 0x1fa43300,
0x320ab219, 0x7ec43d1b, 0x33009c11, 0xc40b1fa4, 0x067e1f1a, 0x49fe00a1, 0x0c999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x15fb003a, 0xf830f408, 0x0005dcdf, 0xbf12f900, 0x0149feff,
0x320c9990, 0xd99fa0a1, 0x0000299c, 0x0a049998, 0x0094f108, 0x00907380, 0x0140fe2e, 0x0090a4bd,
0x7e0bb208, 0x33009c4c, 0xb21c1fa4, 0x3d1b320a, 0x9c117ec4, 0x1fa43300, 0x1f1ac40e, 0x7e20a5f0,
0xfe00a106, 0x99900149, 0xd99fbf0c, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x52f90815,
0xb206b995, 0x0394b6c4, 0xa9bcd5b2, 0x3fb0c430, 0x00a2df3e, 0x329831bf, 0x0054b301, 0xbd010a18,
0x7e0cb2b4, 0xfd0039cd, 0x1afd052b, 0xa2c73e05, 0x0a0cb200, 0x7eb4bd01, 0xb90039cd, 0xaab900b9,
0x0429fd00, 0x92041afd, 0x40b30144, 0x00900b00, 0x4004b301, 0xb531a0c8, 0x04bd0132, 0xb3083390,
0xfbb50044, 0x7ed4bd51, 0xf800a27e, 0x7e010d00, 0xf800a27e, 0x3fbcc400, 0xb606b5b6, 0xabbc03b4,
0x01ab98a0, 0x797eaabf, 0xa4f00039, 0xb200f801, 0x3df4bdae, 0x08f0b3a4, 0x98ef3c0a, 0x90a0a93c,
0xfeb301ff, 0xf0f30080, 0xaa3907a2, 0x3f00f801, 0x01e9c4ae, 0xbd1b0bf4, 0x3cff0ef4, 0xff9098af,
0xf59e2601, 0xb300c51b, 0x3ef410f4, 0xbd00a40c, 0x90afbcf4, 0x90099918, 0x9d3301ff, 0xb300ae00,
0x18f207f4, 0x800c06ad, 0x0cf5dc26, 0xe433009e, 0xa9183800, 0x009d3301, 0xa9180093, 0x009d3302,
0xa918008b, 0x009d3303, 0xaf180083, 0x05a91804, 0x76fff4f0, 0x9ffd0894, 0x00947305, 0xf4dc266f,
0x013e691b, 0xaf1800a4, 0x05a91804, 0xf0fff4f0, 0x94b6ff94, 0x059ffd08, 0x737099cd, 0x184d0094,
0x991201a9, 0x19963041, 0x18400cf4, 0x963102a9, 0x1df40040, 0x5a963136, 0x2f1cf400, 0x3103a918,
0xf4004096, 0x9631251d, 0x1cf4005a, 0x00d0331e, 0xffefc41b, 0xf404f9c4, 0xf9c4151b, 0x0294b30a,
0x07a9180b, 0x08009033, 0x00f8060a, 0x00f8a4bd, 0x020f12f9, 0xa0b2b1b2, 0x2200a0b3, 0x94f0a93f,
0x171bf408, 0x00a30f7e, 0x060010b3, 0x09181a20, 0x26060f08, 0x051bf4a9, 0xfab2f4bd, 0xa9b211fb,
0xc0b3020a, 0x9abf1200, 0xb4b6cdb2, 0x00804c07, 0x00b75e7e, 0x30f400f8, 0x05dcdff8, 0x22f90000,
0x49feffbf, 0x10999001, 0x9fa0a0b2, 0x00b3020a, 0x0abf3400, 0xb294943d, 0x0141fe07, 0x11902bb2,
0x20010c0f, 0x7e1db219, 0xb300b775, 0x3f1700a4, 0xb20abf19, 0xf01db22b, 0x010cfd94, 0x5e7e1920,
0x49fe00b7, 0x10999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a, 0xf830f408,
0x0005dcdf, 0xbf42f900, 0x0149feff, 0xb2189990, 0xb29fa0a1, 0xb2c0b2b4, 0x00a0b3d3, 0x00c0b356,
0x07cf1852, 0x42fe94bd, 0x14229001, 0xa001ff10, 0x07cf3529, 0x0f7ecab2, 0x2bb200a3, 0xb2080a35,
0xa7b17e1a, 0x00a4b300, 0xb22bbf2c, 0x7e1ab20c, 0xb300a43e, 0xb21e00a4, 0x7e4bb21a, 0xb300a456,
0xb31200a4, 0xbf0e0030, 0x3e32a022, 0x0a00a531, 0x0149fe02, 0xbf189990, 0x05dcd99f, 0x99bf0000,
0x0bf4f9a6, 0x3a317e07, 0x0845fb00, 0xc0b202f9, 0x2400a0b3, 0x2000c0b3, 0xb4b6aabf, 0x00804c07,
0x757e0db2, 0xa4b300b7, 0x0ab21000, 0x00a32f7e, 0x00a5763e, 0x01fb020a, 0x1700a0b3, 0x1300c0b3,
0xcdb2aabf, 0x0c07b4b6, 0xb7757e10, 0x0a00f800, 0xf900f802, 0xb2b3b242, 0x00a2b2c4, 0x00a0b302,
0xa5e97e42, 0xb2030000, 0x00a0b3a1, 0xb23bb236, 0x7e1cb22a, 0xb200a54c, 0x00a4b3a0, 0xbd1ab21e,
0xa4107eb4, 0xb3a0b200, 0xb31000a4, 0x180c0040, 0x94f00619, 0xb249a0ff, 0x7e1bb22a, 0xb200a60b,
0xf841fb0a, 0xf800f800, 0x98aeb200, 0xa0b30eaa, 0xf4bd0a00, 0x00a6013e, 0xb30fea98, 0x0f0e00a0,
0x0eff9001, 0xe9bc94bd, 0xb300f8f9, 0x981a00b0, 0x90b30ea9, 0xa9980d00, 0x0094b30f, 0x9001090c,
0xabbc0e99, 0x9800f899, 0xa9a002b9, 0xa9b5ff09, 0x02b99801, 0xb504abb5, 0xa9b503ac, 0xf900f802,
0x32a0b222, 0x0ad2b2c1, 0x00b0b302, 0x400cb85e, 0xd4bd0001, 0xb304c998, 0x33440090, 0xb3080014,
0x3f3c0390, 0x26b93fcf, 0x321bf4f9, 0x1801cf18, 0xf92601b9, 0x18271bf4, 0xbf1802ce, 0x90ddbc02,
0xb6909dbc, 0x99b80394, 0xbc000140, 0xef269009, 0xa00b1bf4, 0x3ea4bd29, 0x9000a6a7, 0xcc9001dd,
0x14d4b318, 0xfb040ab3, 0xb2abbf21, 0xa6f009ac, 0x0d0bf4b9, 0xb503aa98, 0x5b7e01cb, 0x00f800b6,
0xa1b232f9, 0x04bdb2b2, 0xef3ef003, 0x19bf00a6, 0xb2010090, 0xf493a61a, 0x030a090d, 0x00a6f63e,
0x1bf493a6, 0x3e020a09, 0x7e00a6f6, 0xa600a6a9, 0xdd08f402, 0x31fba4bd, 0xdff830f4, 0x000005dc,
0xffbf82f9, 0x900149fe, 0xa3b22899, 0xb8b29fa0, 0x8400a9b3, 0x00b0b300, 0x0147fe7f, 0xbd05a498,
0xbd54bd24, 0x24779014, 0x00a7603e, 0xbd0c3a98, 0xb002bc94, 0x7cb279a0, 0x00b65b7e, 0xff0f79bf,
0x0bf49fa6, 0x3e643d09, 0x9000a74e, 0x00900155, 0xf404a601, 0x6033d908, 0x11900700, 0x2024bc01,
0xa6033998, 0x0b18f429, 0x04bd0106, 0x00a7513e, 0x1ab24bb2, 0x0016fc7e, 0x0df45aa6, 0x01119006,
0x3d063998, 0xf419a6f4, 0x010f050c, 0xa4bd8f20, 0x00a7963e, 0x49fe020a, 0x28999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x85fb003a, 0xf030f408, 0x0005dcdf, 0xbf82f900, 0x0149feff,
0xfe309990, 0x9fa00147, 0xb208a998, 0x09b1b0a6, 0x91b0f105, 0xb2843d0a, 0x2c779090, 0xbd036998,
0xa67fa0f4, 0x0708f409, 0x010804bd, 0xa60a90b4, 0x351bf409, 0x32008033, 0x00a8593e, 0xbc0c6a98,
0x7cb24010, 0x5b7e4bb2, 0x79bf00b6, 0x9fa6ff0f, 0x900f1bf4, 0xf1090122, 0x1bf439a6, 0x9043b205,
0x2c3e0111, 0x24bd00a8, 0xf10314bd, 0xa6056998, 0xcb08f419, 0x1e0020b3, 0x18f429a6, 0x0860b50f,
0xa009f0b4, 0xa86a3ef3, 0xa6f10f00, 0x051bf45f, 0x09bc05b2, 0xa7dc3e00, 0x091a0a00, 0xf459a6f1,
0x65b50d0b, 0x0990b408, 0xa4bd95a0, 0x900149fe, 0x9fbf3099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9,
0x003a317e, 0xf41085fb, 0xdcd9f830, 0xf9000005, 0xfe99bf82, 0xff90014f, 0xa0a3b228, 0xb2b4b2f9,
0x00c033d0, 0x3ddab20e, 0x7e140cb4, 0xfe00b78c, 0x14bd0142, 0x08242290, 0x06ff07fe, 0x3efb05fc,
0x9800a939, 0x94bd0c3a, 0xa0b014bc, 0x7e2cb229, 0xbf00b65b, 0xa6f00f29, 0x560df49f, 0x9fa6fd0f,
0xa6110cf4, 0x3018f496, 0x1bf495a6, 0xa9083e45, 0xf498a600, 0x97a62f0b, 0x98371bf4, 0x99900109,
0x0109b501, 0x00a9363e, 0x90040998, 0x09b50199, 0xa9363e04, 0x02099800, 0xb5019990, 0x363e0209,
0x099800a9, 0x01999003, 0x3e0309b5, 0xbf00a936, 0x01999009, 0x119009a0, 0x05399801, 0x08f419a6,
0x0149fe85, 0xbf289990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0885fb00, 0xdff830f4,
0x000005dc, 0xa1b222f9, 0xb2b2ffbf, 0xbf03aa98, 0x0149fe1b, 0xfe109990, 0x9fa00140, 0xb20c0090,
0xb65b7e0c, 0x980cbf00, 0x2bb2031a, 0x00b6727e, 0x09011b98, 0xf4b9a6ff, 0x1998101b, 0x0212b504,
0x3e0292b5, 0x9800a9b0, 0x2cb2031a, 0x00b6727e, 0xbf031a98, 0x7efd0c1b, 0xfe00b672, 0x99900149,
0xbf12a010, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0825fb00, 0xdfc830f4, 0x000005dc,
0xffbf82f9, 0xfef830f4, 0x99900149, 0x929fa060, 0xae180499, 0xa0f4bd1c, 0x05a9989f, 0x050aa2b2,
0x330b91b0, 0x021a00e9, 0x980c2b98, 0x4afe092c, 0x90f10001, 0x44fe44aa, 0x01a6b201, 0xb6877e20,
0xb205b200, 0x304490a3, 0x00aa713e, 0xa6082998, 0x310bf439, 0x3bb22ab2, 0x4db2010c, 0x00a8877e,
0xb3044998, 0x981f0094, 0x94b30349, 0x49981800, 0x0094b302, 0xa649bf3b, 0x0918f491, 0x643e30b2,
0x19b200aa, 0xb20bb0b4, 0x7e6ab291, 0xb200b6a0, 0xf435a6a3, 0x030ab91b, 0x0bf503a6, 0x14b301a3,
0x03b20c00, 0x8e3e743d, 0x03b200aa, 0x38940107, 0xb254bd07, 0xab9a3e86, 0x0c2a9800, 0x53bce4bd,
0x014cfe10, 0x9016e1b0, 0x1bb258cc, 0x00b65b7e, 0xf300adb3, 0x1690b400, 0x9fa6f00f, 0x00d80cf5,
0x2ab294bd, 0x7e1591b0, 0xb200a5e9, 0x00a9b3a4, 0x2abf00d6, 0x804c6bb2, 0x7e4db200, 0xb200b775,
0x00adb3a0, 0x2ab200a7, 0x4cb21bb2, 0x90014dfe, 0xbd7e50dd, 0xa0b200a4, 0x9000adb3, 0x902ab200,
0x010c014b, 0x90014dfe, 0x3f7e54dd, 0xa0b200a6, 0x7800a4b3, 0x9815b0b4, 0x4afe0c2c, 0x30aa9001,
0x00a6277e, 0xa60c90b4, 0x1e1bf491, 0xfe14b0b4, 0xaa90014a, 0xa95c7e30, 0x1590b400, 0xb3059f98,
0x3e2300f4, 0x0e00ab88, 0xf49ea6ef, 0x0300090d, 0x00ab883e, 0x90014afe, 0xa97e30aa, 0x243e00a6,
0xf99800ab, 0x14e0b402, 0x1bf491a6, 0x02feb506, 0x91a6f9bf, 0xa0091bf4, 0xab883efe, 0x01f99800,
0x1bf491a6, 0x01feb506, 0x2ab24bb2, 0x00a60b7e, 0x130004b3, 0x90015590, 0x29988066, 0xf559a605,
0x33fefa08, 0x98460070, 0x8db2042f, 0x2ab2e4bd, 0x0b00f1b0, 0x0070dc02, 0x41fe0000, 0x5c119001,
0x7e0111b0, 0x9800a5e3, 0x2abf042c, 0xfb048bb2, 0x00b7477e, 0x2c981ebf, 0xbda0b204, 0xb22ab2b4,
0xa5e57e0d, 0x0004b300, 0xbdff0406, 0xac003e04, 0x0c2a9800, 0xb2b003bc, 0x0100904c, 0x00b6727e,
0xa60b90b4, 0xec08f409, 0xbc032f98, 0x29b59039, 0xf49fa609, 0x94bd0808, 0xbd0929b5, 0x0149fea4,
0xbf609990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0830f400, 0xf43885fb, 0xdcd9cc30,
0xf9000005, 0xf499bf82, 0x4ffef830, 0x5cff9001, 0xe1b0f9a0, 0xb2c8b20b, 0xb3a3b2d6, 0x028400b9,
0x7f00e9b3, 0x2caf1802, 0xbd0141fe, 0x54119094, 0x030019a0, 0x6d00f933, 0xb2c43d02, 0xa63f7e1d,
0xb3a0b200, 0x025e00ad, 0x68bc17bf, 0x017998f0, 0x08f59fa6, 0x7998024d, 0x0194b304, 0x3e05000a,
0xb300aee1, 0x023e0069, 0x09027f98, 0xf5f9a6f0, 0xb2022a0b, 0xa5e97e3a, 0xb3a2b200, 0x021e00a9,
0xb20c3c98, 0x0140fe7b, 0xb2340090, 0xa6277e0a, 0xb50ab200, 0x8bcc0570, 0xa6c07e70, 0xb3a0b200,
0x01e900ad, 0x010d00b4, 0xf501a6f0, 0xf501ce0b, 0x3d01d00c, 0x00804cb4, 0x8c7e2ab2, 0x3abf00b7,
0x4c070b94, 0x2db20080, 0x00b7757e, 0xb30ca1b0, 0x01b600ad, 0x18052918, 0x9476042f, 0xfff4f008,
0x09e59fff, 0xf5e966ff, 0xe401980b, 0xa6ffffe9, 0x8e08f589, 0xbcf4bd01, 0x9918902f, 0x009d3309,
0xff900182, 0x07f4b301, 0xaefb3ef2, 0xf28e3c00, 0x08f59f26, 0xfdc4016d, 0xff94f0ff, 0xa6529dbc,
0x050df456, 0xd99065b2, 0xbca43d10, 0xc43db029, 0xa63ee4bd, 0xd6b100ad, 0x0cf5006f, 0x10b40145,
0x98be3c0b, 0x26f81e3c, 0x170bf4f9, 0x39ff94f0, 0x9ffd0099, 0x00903304, 0x3c010a06, 0x010ce9bf,
0x9001ee90, 0xe5a601dd, 0x33ce08f4, 0x00ed00c9, 0x94f0293f, 0x080bf408, 0xd000a933, 0xb294bd00,
0x1491b03a, 0xb01391b0, 0x91301291, 0x014bfe5b, 0x7e5bbb90, 0xb200a6f8, 0x00adb3a0, 0x903400ef,
0x0090335b, 0x7e3ab211, 0xb200a9d8, 0x00adb3a0, 0x00b400db, 0x1140b40d, 0x90014ffe, 0x2eb250ff,
0xb0070d94, 0x804101f1, 0x0b3ab200, 0xb04cb201, 0xe37e0011, 0x0bb200a5, 0x3ab22cb2, 0x90014dfe,
0xbd7e4cdd, 0xe0b400a4, 0xb2a0b214, 0xbd3ab21c, 0x7e0db2b4, 0xb300a5e5, 0x0091000d, 0xfe13b0b4,
0xaa90014a, 0xa95c7e34, 0x0c3a9800, 0xfe0db0b4, 0xcc90014c, 0xb65b7e48, 0xb3a0b200, 0xb46d00a4,
0xf0011290, 0x1bf491a6, 0x014e9832, 0xb370efcd, 0x0f0600f4, 0x06291870, 0xbcff94f0, 0x9fbb909e,
0x0149b502, 0x00ae983e, 0x3ab20bb2, 0x3e7e2cb2, 0xa0b200a4, 0x3400a4b3, 0xfe0265bb, 0xaa90014a,
0xa6a97e34, 0x0060b300, 0x0b90b420, 0xbc8085bc, 0x91b09095, 0xace43e0b, 0x3e020000, 0x0000aec8,
0xaec83e03, 0x0c00b400, 0x2bb23ab2, 0x00a60b7e, 0x79b594bd, 0xaee13e05, 0x3e030000, 0x0000aee1,
0x0149fe02, 0xbf5c9990, 0x05dcd99f, 0x99bf0000, 0xf9a60ab2, 0x3e170bf4, 0x1800af07, 0x9d330629,
0x3efe4f00, 0x7e00aebf, 0xf4003a31, 0x85fb0830, 0xdc30f434, 0x0005dcdf, 0xbf82f900, 0xf830f4ff,
0x900149fe, 0x9fa04c99, 0xb20bb1b0, 0xb2d4b2c2, 0xb3a5b2e6, 0x011700b9, 0x1200e9b3, 0xfe94bd01,
0xc43d0141, 0xa0481190, 0x7e1db219, 0xb200a63f, 0x00adb3a0, 0x19bf00fb, 0x98f042bc, 0x9fa60199,
0x00ea08f5, 0x03005ab2, 0x00a5e97e, 0xa9b3a3b2, 0xbf00de00, 0x0c5c981b, 0x900140fe, 0x0ab23000,
0x00a6277e, 0x2bcc0ab2, 0xa6c07e70, 0xb3a8b200, 0x00ad00ad, 0xfe7021cd, 0x80420147, 0x44779000,
0x00b0373e, 0xbd0c00b4, 0x0979a094, 0xf409a6f0, 0x0200091b, 0x00b03e3e, 0x09a6f009, 0x00090df4,
0xb03e3e03, 0x0bc0b400, 0xbd0704b6, 0xb20db2e4, 0xb0b4bd5a, 0x71b00021, 0xa5e37e01, 0xb25abf00,
0xb22cb20b, 0xb7757e3d, 0xb27ebf00, 0xb23bb2a0, 0xb22cb25a, 0xa5e57e0d, 0x0004b300, 0xbd3ab245,
0xa4107eb4, 0xb3a0b200, 0x003700a4, 0x0201bb70, 0x0df404a6, 0x9040b205, 0x6ab2101b, 0xb2b03bbc,
0xb7957e0c, 0x014afe00, 0x900240bb, 0x60bc30aa, 0xa6a97e60, 0xb314bd00, 0xff6d004d, 0x5ab280b2,
0x0b7e3bb2, 0x4c3e00a6, 0x020000b0, 0x900149fe, 0x9fbf4c99, 0x0005dcd9, 0xb299bf00, 0xf4f9a60a,
0x317e070b, 0x30f4003a, 0x2485fb08, 0xd9f830f4, 0x000005dc, 0x99bf32f9, 0x90014ffe, 0xa1b214ff,
0x94bdf9a0, 0xc3b2b2b2, 0x4b0140fe, 0x00900320, 0xb209a010, 0xb79b7e0a, 0xb309bf00, 0xb34c0090,
0xa04800a4, 0xb509bf91, 0x0fbf0192, 0xb5100049, 0x0fbf04f9, 0xf9b52009, 0xb509bf05, 0x0fbf0693,
0xf9350109, 0x3509bf1c, 0x0fbf2c9a, 0xf9b5f009, 0x900fbf0a, 0xf9b540f9, 0x900fbf0e, 0xf9b5c0f9,
0x3e0abf0f, 0xbd00b0e9, 0x0149fea4, 0xbf149990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07,
0x0835fb00, 0xdfd030f4, 0x000005dc, 0xffbf82f9, 0x900149fe, 0xa3b25099, 0x02059fa0, 0xf800a9b3,
0x00b63004, 0x350b9cf0, 0x94bd2ca9, 0x7e0ca9b5, 0xb200a5e9, 0xbd3abfa0, 0x00804cb4, 0x757e0db2,
0xa5b200b7, 0xae00adb3, 0x33093f04, 0x049f4a9d, 0x33010918, 0x0497469d, 0x33020918, 0x048f469d,
0x33030918, 0x0487539d, 0x18040e18, 0x0f180509, 0x070d1806, 0xf0ffe4f0, 0xf4f0ff94, 0x0894b6ff,
0xfd10f4b6, 0xd4b6059e, 0x05f9fd18, 0xf505dffd, 0x05045b0b, 0x03d6b005, 0x045a0cf5, 0xb3013db5,
0x490e01d4, 0x39b55000, 0xb1d73e02, 0x080d1800, 0x18090918, 0x0e180a0f, 0xffd4f00b, 0xf0ff94f0,
0x94b6fff4, 0x10f4b608, 0xb6059dfd, 0xf9fd18e4, 0x05effd05, 0xb2023eb5, 0x7e0bb23a, 0x9800a60b,
0xff09023a, 0xa9a60305, 0x04080bf5, 0x9007a5b6, 0x3ab5303b, 0xb6ce7e03, 0xb3a5b200, 0x03f500ad,
0x09033b98, 0x343a90c0, 0xfd3fbb90, 0xb5b604b9, 0xb79b7e03, 0xb3a5b200, 0x03d900ad, 0xfe0147fe,
0x77900148, 0x9044bd40, 0x88900179, 0x0991b03c, 0x00b3443e, 0x8ea0e4bd, 0x0f0044b3, 0xbd0c3a98,
0x3efe0cb4, 0xb200b267, 0xb24bb23a, 0xa5787e7c, 0xb3a5b200, 0x039d00ad, 0x94f0793f, 0x120bf401,
0xb20c3a98, 0x7eff0c4b, 0x3e00b672, 0xb200b341, 0xa32f7e7a, 0x00a0b300, 0x0c3a980f, 0xfd0c4bb2,
0x00b2673e, 0x94f0793f, 0x0e1bf402, 0xb20c3a98, 0x3efd0c4b, 0xb400b336, 0x3ab209b0, 0x8db2010c,
0x00a63f7e, 0x5d00a0b3, 0x3fb2793f, 0x99c724bd, 0x01999002, 0x980a91b0, 0x54b354f5, 0xb0b43900,
0x0022bc09, 0x02bc030c, 0x0304b600, 0x014001b8, 0x1031bc00, 0x957e1ab2, 0x30bc00b7, 0x4309b800,
0x95200001, 0xb45302b5, 0x0fb50af0, 0x3e81a054, 0x9000b301, 0xff900122, 0x1424b318, 0xb62e3ebe,
0x3f8ebf00, 0x027f5879, 0x98077d18, 0x3a9803ee, 0x0299c70d, 0xcc00f3f0, 0x96cb70ff, 0xcb4bb21f,
0x010cd8e6, 0xebf0d6cb, 0x7e01e0f6, 0x9800a2e5, 0x4bb20c3a, 0x727e6cb2, 0xa5b200b6, 0xb400adb3,
0x01449002, 0xa6033b98, 0xeb08f54b, 0xbc94bdfe, 0x89a0b0bb, 0xb17e8ab2, 0xa5b200b7, 0x9400adb3,
0xbd37b202, 0x547f9884, 0xbc9088bc, 0x94b69098, 0x4099b803, 0x39bc0001, 0x0b91b090, 0x5300f9b3,
0x033c9802, 0x3d0fa0b4, 0xbc24bdb4, 0x44bdc0cc, 0x00b78c7e, 0x3e0f60b4, 0x9800b45f, 0x2bb20d3a,
0x7e0c41b0, 0x3300a2f5, 0x00b500a9, 0xfe0c3a98, 0x2bb2014c, 0x7e38cc90, 0xb300b65b, 0x020c00ad,
0xb40be0b4, 0xef980e90, 0xd899c703, 0x1bf59fa6, 0x3a98008e, 0x0c2bb20d, 0xa2ed7e01, 0x014cfe00,
0x2bb23ab2, 0x7e30cc90, 0xb300a593, 0x981306a4, 0x2bb20c3a, 0x727efd0c, 0x5c3e00b6, 0xadb300b4,
0x7401cb00, 0x93f01c90, 0x9099bc00, 0x7f0069bc, 0xff19e401, 0x091bf4ff, 0x5c3e0260, 0x3a9800b4,
0x014cfe0c, 0xffff1be4, 0x7e34cc90, 0xb300b65b, 0x019800ad, 0x343af034, 0xf9263690, 0x60100df4,
0xff1be402, 0x0c3a98ff, 0x00b4513e, 0xb20c3a98, 0x7efd0c2b, 0xb300b672, 0x017000ad, 0x98012290,
0x2aa6033a, 0xff3708f5, 0x6eb264b2, 0xd43db43d, 0xc4bdf4bd, 0x00b4933e, 0x9473e97f, 0x010d0a00,
0x00b48d3e, 0x0600d033, 0xcc90010b, 0x01ff9001, 0xa602ee90, 0xe308f4fa, 0x0b00c4b3, 0x3e547cb5,
0x3300b5cf, 0x00a600b9, 0xb0013998, 0x0cf40296, 0xb2030930, 0x5479b56d, 0xf4bde4bd, 0x00b4d23e,
0x9073d97f, 0x697c0a00, 0x01ee90e9, 0x9001ff90, 0x399802dd, 0xf4f9a603, 0x493ee908, 0x94bd00b5,
0x79b5f101, 0xb224bd54, 0xb5233e1b, 0xe4407f00, 0xf4ffff09, 0xf10f260b, 0x1bf4bfa6, 0xff0be40b,
0xb51b3eff, 0x0c3a9800, 0xffff0ce4, 0x00b6727e, 0xb900adb3, 0xff0be400, 0x9019b2ff, 0x44900122,
0x9891b202, 0x29a60339, 0x09c508f4, 0xf5b9a6f1, 0x9800a00b, 0x3c980c3a, 0xb6727e0a, 0x00adb300,
0x31b5008c, 0xb5cf3e0a, 0xbd6f7f00, 0x01c19294, 0xf05179b5, 0x04bd00f3, 0x3e527fb5, 0x7f00b587,
0x014c584b, 0x900c3a98, 0xb3f00100, 0x00c3f000, 0x7e024490, 0xb300b672, 0xb45200a4, 0xe9980be0,
0x70999001, 0xa601e9b5, 0xd608f401, 0x9808607c, 0xf00c0c3a, 0xffff0be4, 0x00b6727e, 0x2d00a4b3,
0xe4014cfe, 0xb2ffff0b, 0x40cc903a, 0x00a5787e, 0x1900a4b3, 0x98469034, 0x94f0517f, 0xf0f9bcff,
0x3e517fb5, 0x0a00b5cf, 0x3ea5b203, 0x9000b5da, 0x77900188, 0x148db318, 0x49fefd90, 0x3c999001,
0x457e9abf, 0xf03e00b7, 0x030500b5, 0x00b5f23e, 0x0bb204bd, 0x0b7e3ab2, 0x50b300a6, 0x3a981a00,
0x7e04bd0c, 0x9800b6c4, 0x30b50d3a, 0xb7457e0c, 0x0d30b500, 0x900149fe, 0x9fbf5099, 0x0005dcd9,
0xb299bf00, 0xf4f9a65a, 0x343e110b, 0x010500b6, 0x00b5f03e, 0x003a317e, 0xf93085fb, 0x7ea0b202,
0x9800a5e7, 0xc47e0c0a, 0x0a9800b6, 0xb7457e0d, 0x7e0ab200, 0xbd00b745, 0xbf01fba4, 0x0aafb2a9,
0xf4b9a602, 0xb9900d18, 0x98f9bc01, 0xc9a0a4bd, 0xa9bf00f8, 0x020aafb2, 0x18f4b9a6, 0x01b9900b,
0xfcbca4bd, 0xbf00f899, 0xb2afb2b9, 0xf4c9a6ca, 0xf10a0708, 0xfbb500f8, 0xb5fca002, 0x00f801fc,
0xaf98a9bf, 0x90b9bc02, 0xfbbfa9a0, 0x08f49ba6, 0x029bbb08, 0xa998a9a0, 0xa6aabf01, 0x051bf4a9,
0x00f8f10a, 0x0800a0b3, 0x00b7457e, 0x30f400f8, 0x05dcdff8, 0x32f90000, 0x49feffbf, 0x14999001,
0x9fa0a0b2, 0xa0b3b3b2, 0xfd024200, 0x0cf4a2a6, 0x01ab903a, 0xb60141fe, 0x119002b4, 0x7e1ab210,
0xb300b7b1, 0xbf2700a4, 0xb21db219, 0xa0e4bd2c, 0x90dfbf90, 0x9eb201e9, 0xa699fcbc, 0xf408f490,
0x3da0ddbf, 0x00b72a3e, 0x49fe020a, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x35fb003a, 0xda00f808, 0x00002944, 0x0041c77e, 0xf000a630, 0xa6f00bac, 0x01aab901, 0x44da00f8,
0x7e000029, 0x30004142, 0xacf000a6, 0x01a6f00b, 0xf801aab9, 0x2944da00, 0xd77e0000, 0xa6300042,
0x0bacf000, 0xb901a6f0, 0x00f801aa, 0x7effb4f0, 0xf8000b94, 0x0b7e7e00, 0xf900f800, 0x3da0b202,
0x384c7ea4, 0x00a6b000, 0xa00b9cf0, 0xfb9ab20a, 0xb202f901, 0x7ea43da0, 0xb000382a, 0x9cf000a6,
0xb20aa00b, 0xf401fb9a, 0xdcdfe430, 0xf9000005, 0xfeffbf82, 0x45fe0149, 0x3c999001, 0xa00147fe,
0x2455909f, 0xd9347790, 0x0000141c, 0x4bfe9abf, 0x90080c01, 0xff0d2cbb, 0x0000c17e, 0xeb00a433,
0x3f0c30b4, 0x0c943339, 0x043118e2, 0x0f001033, 0xb0011933, 0x3e043d00, 0x9800b96d, 0x2cd9023f,
0x98000014, 0x34580431, 0x3f5fa00a, 0x0339989f, 0xb5183690, 0xff090159, 0xf43379a0, 0xf77e1800,
0xa0320032, 0x2900ad33, 0xdf010901, 0x0000142c, 0x1272f920, 0xbd0043f0, 0xb8ad3e14, 0x0241bc00,
0x010006b1, 0x40060df4, 0x947e0100, 0x24d9000b, 0xbf000014, 0xff2ce49a, 0xb26bb2ff, 0x1300de0d,
0x117e0000, 0x7aa000af, 0xd400adb3, 0x985bbf00, 0x1d90015c, 0x7c0eb204, 0x10bc2020, 0x1300da10,
0x367e0000, 0xa0320021, 0xc500ad33, 0x4cb4bd00, 0x00da0100, 0xa6000013, 0xa408f414, 0x00b95c3e,
0xd9023f98, 0x0000142c, 0x58043498, 0x5fa00a32, 0x39989f3f, 0x18389003, 0x090159b5, 0x3379a0ff,
0x7e1600f4, 0x320032f7, 0x00ad33a0, 0x2cdf0084, 0x20000014, 0xff26e4f1, 0x3e24bdff, 0xbc00b94d,
0x16b11262, 0x0df40100, 0x01004106, 0x000b947e, 0x5c985bbf, 0x042d9001, 0x00da1eb2, 0x7e000013,
0xe40020d0, 0xbcffff4c, 0xa0322021, 0x1db28bb2, 0x001300de, 0x40417c00, 0x3500a433, 0x001424d9,
0x7e9abf00, 0xa000ac3b, 0x00a4b37a, 0x4cb4bd13, 0x00da0100, 0xa6000013, 0xa608f426, 0x5c985bbf,
0xbd7ab201, 0x7e040ed4, 0x32002136, 0x2db034a0, 0x817e3ab2, 0x0d33000f, 0x30fe7100, 0x020f3a01,
0x1838f130, 0x04090333, 0x30014afe, 0x31303991, 0x90b4bd3b, 0x717e38aa, 0xe73e000f, 0x02f900b7,
0x002930d9, 0xbfa0b200, 0x7e640b9a, 0x090000de, 0x00a43310, 0xa6008961, 0x009fcf02, 0x1000f5f1,
0x8a009ff6, 0x4b02a600, 0xc4bd1000, 0xbd27104d, 0x198b7ee4, 0x00a43300, 0x2930d915, 0x9abf0000,
0x00009b7e, 0x123e0409, 0x0ab200ba, 0x7e03e84b, 0x890016fc, 0xb802a400, 0x000200aa, 0x920aa5b6,
0x9af601aa, 0x01114f00, 0x020099b8, 0x009ff600, 0x9a32943d, 0x000001fb, 0x00000000, 0x00000000,
0xfa95075d, 0x10f99508, 0xa132f032, 0xf9339232, 0x3000d515, 0x0cf415f6, 0x05f93346, 0xf63005fc,
0x1c0cf405, 0x8701f933, 0x301f0a00, 0x08f501f6, 0xf630073a, 0x250cf503, 0x8e283e07, 0x10f93300,
0xf630041b, 0x0e0cf410, 0xf50df630, 0x3e070f08, 0x33009156, 0x070711fd, 0x0091603e, 0x431df933,
0x1df63006, 0x33250cf4, 0x03fb18f9, 0xf418f630, 0xfd330c0c, 0x3e06e817, 0x33009409, 0x01011af9,
0xda1cfd33, 0x94c63e06, 0x21f93300, 0xf6300263, 0x0c0cf421, 0xc61efd33, 0x8ece3e06, 0x24f93300,
0xfd33063a, 0x3e06b825, 0xdf00949a, 0x0000299c, 0x2614f918, 0x0d18f4a9, 0xbcffa9c4, 0x6f3e98f9,
0xbda00093, 0x0094313e, 0x1d33080a, 0x7e069e00, 0x330063f7, 0x490a0300, 0xa9fdff00, 0x3e4aa004,
0x0a009431, 0x09163003, 0x06800cf5, 0x00299cd9, 0x0e99bf00, 0xbc080a01, 0x99e7f4e1, 0x9ffd0133,
0x670bf504, 0x02103306, 0x0410330e, 0x3eea3210, 0xb2008e85, 0x8e7b3eea, 0xfea4bd00, 0xbb90014b,
0x63b47e2c, 0x8a847e00, 0x1fad3300, 0x49fe063f, 0x2c999001, 0xe9959ebf, 0x0190b31f, 0x3ed4bd0a,
0xdd008ea8, 0xff000000, 0x3380e9c4, 0xbd0a0094, 0x8ebf3ef4, 0xb0010f00, 0x1ff400e6, 0x95ff0f05,
0xd9ff08e9, 0x90f9bc95, 0xc83e49a0, 0x9b320094, 0x5db24cb2, 0x0077ca7e, 0x0094c83e, 0x5507a033,
0xf407a630, 0x9cd9120c, 0x30000029, 0x0df402a6, 0x8f253e2b, 0x0ca63000, 0xd9120cf4, 0x0000299c,
0xf409a630, 0x483e5718, 0xa033008f, 0x030a610d, 0xb80e1d33, 0x8f7b3e05, 0x01999800, 0x000000df,
0x8f613e04, 0x01999800, 0x000000df, 0x8f613e08, 0x299cd900, 0x99980000, 0x00008f02, 0x049ffd02,
0x00c61bf5, 0x0090463e, 0x8f029998, 0xfd040000, 0x1bf5049f, 0x463e00c4, 0x99980090, 0x00008f02,
0x049ffd01, 0x3e2f1bf4, 0xd9009046, 0x0000299c, 0x4000008f, 0x3e029998, 0xd9008f88, 0x0000299c,
0xdf029998, 0x00800000, 0xf5049ffd, 0x3e00a91b, 0x33009046, 0x30730710, 0x0cf40716, 0x0210331a,
0x0216304b, 0x33540cf4, 0x33270010, 0x0486011d, 0x008fd83e, 0xf40c1630, 0x16300d0c, 0x6518f409,
0x0090163e, 0xf40e1630, 0x313e6d0d, 0x4ab20094, 0x00789f7e, 0x0094c83e, 0x2b321a32, 0x5db24cb2,
0x007cca7e, 0x0094c83e, 0x2b321a32, 0x5db24cb2, 0x007c3b7e, 0x0094c83e, 0x2b321a32, 0x467e4cb2,
0xc83e007e, 0x2b320094, 0x5db24cb2, 0xa27e070a, 0xc83e007b, 0x080a0094, 0x4cb22b32, 0x037e5db2,
0x1a32007b, 0x3cb22b32, 0x5eb24db2, 0x007ed37e, 0x0094c83e, 0x2b321a32, 0x4db23cb2, 0xa77e5eb2,
0xc83e0078, 0x080a0094, 0x0094c83e, 0x9d33040a, 0xd9047a00, 0x0000299c, 0x0a029998, 0x0094f108,
0x670bf540, 0x0149fe04, 0x900142fe, 0x22902c99, 0xa09da018, 0x0499922d, 0x99929da0, 0x929da004,
0x9da00499, 0xa0049992, 0x0119339d, 0x16300085, 0x0e08f401, 0x1d33030a, 0x3e043202, 0xfe009122,
0x40fe0141, 0x2c119001, 0xb2280090, 0x7e0bb21a, 0xbf007560, 0xfe00bf19, 0x42fe0143, 0x0794f001,
0x90243390, 0x3ab22022, 0xb20141fe, 0x1c11902b, 0xb20704f0, 0x0404b61c, 0x7e0509fd, 0xbf006a5c,
0xbf3fbf29, 0x0141fe1e, 0xf00894b6, 0x94f1fff4, 0xf4b6ffff, 0x18e4b610, 0xfd181190, 0x1ab20509,
0xfd050ffd, 0x497e050e, 0x483e006a, 0x2ab20091, 0x006a397e, 0x20bf2ab2, 0x006a297e, 0x4e3e29bf,
0x41fe0091, 0x18119001, 0x167e1ab2, 0x1ab2006a, 0x037e10bf, 0x19bf006a, 0x04f11ab2, 0x94b6ffff,
0x0590ff10, 0x0069f07e, 0x94f119bf, 0x40a0ffff, 0x313e59a0, 0xfab20094, 0x0095f47e, 0x0094c83e,
0x0d00a033, 0x5c01ad33, 0x91ae3e03, 0x33b0bf00, 0x330c0190, 0x3e2f0294, 0xfe00919e, 0x010a0141,
0xb2181190, 0x94ef7e1b, 0x1fad3300, 0x1fbf033f, 0x09fffe09, 0x049fff95, 0xa23e10a0, 0x04f10091,
0x2a3201ff, 0x0a7e0bb2, 0xc83e0095, 0x9a320094, 0x0094ef7e, 0x0094c83e, 0x237efab2, 0xc83e0095,
0x9cd30094, 0xbf000029, 0x0000df39, 0x080a2000, 0xf5049ffd, 0x0a02f50b, 0x001d3303, 0x40fe02ef,
0x014cfe01, 0x90280090, 0x0bb22ccc, 0x900142fe, 0x2ab22422, 0x0073477e, 0x9670097f, 0x0b9cf003,
0x7e079194, 0x1800010e, 0x087e5830, 0x00330001, 0x1fb20a00, 0x00924d3e, 0xa4732a7f, 0x19b20a00,
0x00924b3e, 0x734019c5, 0x731403a0, 0x731804a0, 0xe51c02a4, 0x3e01009f, 0xe500924d, 0x3e02009f,
0xe500924d, 0x3e03009f, 0xb200924d, 0x0149fe9f, 0x7f2c9990, 0x04997399, 0x96700088, 0x1a0cf404,
0x48019073, 0xf4019670, 0x90733608, 0x9d734c02, 0x3e00e303, 0x730092cf, 0x009b0799, 0xf4079670,
0x9073100c, 0x9d736905, 0x3e00cb06, 0x73009304, 0x009c0899, 0xbd099d73, 0x93393e00, 0x07ff8900,
0x04f9fdfe, 0x0093513e, 0xffc7ff49, 0x95f194f9, 0xc03e2000, 0xff490092, 0x94f9ffc7, 0x180095f1,
0xfe3fff8f, 0xe5049ffd, 0x3e40009f, 0x49009351, 0xf9ffc7ff, 0x0095f194, 0x92c03e10, 0xc7ff4900,
0xf194f9ff, 0x3e080095, 0x490092f5, 0xf9ffc7ff, 0x0095f194, 0x3fff8f10, 0x049ffdfe, 0x80009fe5,
0x0093513e, 0xffc7ff49, 0x95f194f9, 0x1c3e0800, 0xff490093, 0x94f9ffc7, 0x100095f1, 0xfe3fff8f,
0xe5049ffd, 0x3ec0009f, 0x49009351, 0xf9ffc7ff, 0x0095f194, 0x93433e08, 0xc7ff4900, 0xf194f9ff,
0x8f100095, 0xfdfe3fff, 0x008f049f, 0x9fff0100, 0x299cd9f5, 0x99180000, 0x00903350, 0x0000890f,
0x95f9ff02, 0x00936f3e, 0xfdffff89, 0xa094f9ff, 0x94313e49, 0x14a63000, 0x01480cf5, 0xd9ffafc4,
0x000004d0, 0xd9e89fbc, 0x0000299c, 0xefc7080a, 0x989fbc3b, 0xbb96efc7, 0x94f0059f, 0x2b0bf501,
0xff29c401, 0x010defe7, 0x0a029b54, 0xf5bf6604, 0xf0011918, 0xb9e400f3, 0xf9bcffff, 0x04c6b0c2,
0x0c090df4, 0x93cb3e04, 0xe44da000, 0xc4ffffba, 0xebe703e9, 0x94330142, 0xbabc1200, 0x29bcd9b0,
0x4ab20000, 0x0093f43e, 0x000644d9, 0xbc99bf00, 0x4ab2b0ba, 0x7eb09bbc, 0x3e000b7e, 0x32009431,
0x9acb7e9b, 0x94c83e00, 0x00a03300, 0x33080a0f, 0x00b1011d, 0x0094c83e, 0x900140fe, 0x0ab22400,
0x0072fb7e, 0xa54f093f, 0x00943300, 0xa05a0f06, 0x3e1f0a4f, 0xd90094c8, 0x0000299c, 0x33159918,
0x00870099, 0x3802a033, 0xf402a630, 0xa0330f0c, 0xa4331800, 0x703e6e01, 0xa0330094, 0xa4332c03,
0x903e6204, 0x3ab20094, 0x009d827e, 0x0094c83e, 0xcbb2bab2, 0x009ffc7e, 0x0094c83e, 0x0b7e2a32,
0xc83e009d, 0x2a320094, 0x00a2127e, 0x0094c83e, 0xa67e2a32, 0xc83e00a1, 0x9cd90094, 0x18000029,
0x90331599, 0xfbc72400, 0xb22c326c, 0xf05eb24d, 0xac7e0fa4, 0xc83e009e, 0x020a0094, 0x0094c83e,
0xc83e030a, 0x090a0094, 0x900149fe, 0x9fbf3099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e,
0xf01c55fb, 0xa4b6ffa4, 0x0acaa002, 0x3200f81f, 0x30040aaf, 0x0cf402f6, 0xfff4f012, 0x002a5cd9,
0xf89fbc00, 0xbfa01f0a, 0xaf3200f8, 0xf630040a, 0x100cf402, 0xd9fff4f0, 0x00002a5c, 0x9bbc1f0a,
0xf900f8f9, 0x10af9512, 0xae95b1b2, 0x299cd008, 0xff090000, 0x1bf4e926, 0x4909183d, 0x1bf5f926,
0x091800b2, 0x331c0a4a, 0x00ab0199, 0xf5019630, 0x0a00a108, 0x029d3306, 0x0998009d, 0x0af43d13,
0x18b9a01f, 0x0f354909, 0x0199104a, 0x3e490935, 0x180095f2, 0x0a0a4a09, 0x7a009433, 0x002a5cd9,
0xf099bf00, 0x99c7fff4, 0x0694b6e8, 0xb0f0f9bc, 0x0cf43ff6, 0x33030a5e, 0x905b0ce4, 0x96b104f9,
0x0cf40040, 0x02f9944e, 0x002a68df, 0x909fbc00, 0x9a589f7f, 0x73080d01, 0x981b02f4, 0x290d0409,
0x338094f0, 0x7e0f0090, 0x0900754b, 0x35d43d01, 0x9cdf5009, 0x18000029, 0xd9c449fe, 0x13f9b5ff,
0xf9350209, 0xffe4f04a, 0x1ea01c0a, 0x0095f23e, 0x11fb040a, 0xadb222f9, 0xa0c7b2b2, 0xb0bbbfe8,
0x0cf53f06, 0xbcc400cc, 0xffaec4ff, 0x0d0fe4b3, 0xc6b0050a, 0xbb0cf53f, 0x2a5cd900, 0x99bf0000,
0xc7ff9fc4, 0xf194e899, 0x0694b606, 0x2c0ee0b3, 0x440fe0b3, 0xedb31f0a, 0x7c009a0d, 0x96719009,
0x0cf500ff, 0x9fe4008c, 0x68d9ffff, 0xbc00002a, 0x2fa0f89f, 0x00966e3e, 0x7190017c, 0xf400ff96,
0x9fe46f0c, 0x68d9ffff, 0xbc00002a, 0x1f0af99b, 0x0096d03e, 0x0af0c9bc, 0xf0d9c705, 0x9002fb94,
0x9c940199, 0xe0cbbc02, 0x1000e6b1, 0xbc440cf4, 0x030a9001, 0xbc0294b6, 0xf6b1f0c9, 0x0cf41000,
0xf49ba632, 0x9ea60808, 0xa62008f4, 0x080df4b9, 0x08f4bfa6, 0x2a68df16, 0x9fbc0000, 0xb0bfbca0,
0x000b7e7e, 0x00966e3e, 0xd03e040a, 0x030a0096, 0xc9b221fb, 0x0fffa6b1, 0xbc2b0cf4, 0x96b1909a,
0x0cf41000, 0x2a68de21, 0xaebc0000, 0x00d03390, 0x3e9ab20a, 0xb20096fb, 0x7e9bb2ba, 0x0a000b7e,
0x0a00f81f, 0xf400f804, 0xdcdfe430, 0xf9000005, 0xfeffbf12, 0x99900149, 0xa0a0b220, 0xf0d1b29f,
0xedb2ffb4, 0xb40aa0b4, 0x09c40be0, 0xf49ba607, 0x0fc7751b, 0x0149fe2f, 0xa0089990, 0x029eb59d,
0xbc019ab5, 0x94bdb89f, 0x90014ffe, 0xf9a014ff, 0xb501fcb5, 0x09c702f1, 0xbcbabf23, 0x0fc7c8f9,
0x8a09c785, 0xf0e09f3c, 0x0dc71ff4, 0x05cfbb91, 0xb990d93c, 0xd4f000ee, 0x1fe4f01f, 0xbc0099b9,
0x94f0e0ef, 0xbcff0f1f, 0xf9bc909d, 0x05febb95, 0xfd049dbb, 0x99b904fc, 0x04fdbb00, 0xfd049afd,
0xb9a0059f, 0x900149fe, 0x9fbf2099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf41c15fb,
0xdcd9f430, 0xf9000005, 0xb299bf82, 0x014ffed1, 0xa02cff90, 0x92dd3ff9, 0x1f0003ff, 0xf0351709,
0x02f03501, 0xb6b2f920, 0xa5b2e3b2, 0x1900d433, 0x000528db, 0x7e240c00, 0x09000b7e, 0x200a3209,
0x98823e19, 0x30030a00, 0x0cf409d6, 0x0147fe78, 0xb2ffc4c4, 0x90043df8, 0x793e2477, 0x09c40098,
0x947bb2ff, 0x040c0292, 0x3da026bc, 0x96d27ed4, 0x1fa43300, 0xc47fbf6b, 0x94a607f9, 0xc75e18f4,
0x991223f9, 0x01963001, 0xc7520cf4, 0xe9c42ffe, 0xc8893cff, 0xc78afdc7, 0xd93c85f9, 0xf49c2690,
0xe0333b0c, 0xf9c73803, 0x909d3c91, 0x0cf49c26, 0x9052bc2c, 0xa0010010, 0x26193f9f, 0xa108f409,
0x49fe1f0a, 0x2c999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0xb23e230b, 0x0d0a0098, 0x0fc439bf,
0x0000deff, 0x9efdff00, 0x05f9fd04, 0x823e3fa0, 0x317e0098, 0x85fb003a, 0xa830f40c, 0x0005dcd9,
0xbf82f900, 0xf830f499, 0x4ffea7b2, 0x80ff9001, 0xaabff9a0, 0xb00eb1b0, 0xa6c70dc1, 0x01691268,
0xf5039630, 0xc7013b0c, 0x96306ca9, 0x310cf50a, 0x0141fe01, 0x900140fe, 0x00905711, 0x10a5b650,
0xb4bd1920, 0xe37e0cb2, 0xad330094, 0xbf011d1f, 0x0142fe09, 0x90ff6bc4, 0xb4b65822, 0xbc2ab204,
0x6c32b0b9, 0x7eb21db2, 0x0097bf7e, 0x333fa130, 0x00f51fad, 0x080141fe, 0x40119001, 0x1990243d,
0x0c1e9008, 0x54bd343d, 0xb00c91b0, 0x0e3e0be1, 0x90b4009a, 0x0c1bb214, 0xbcd43d10, 0x4ab24059,
0x0096d27e, 0xc31fad33, 0x9819bf00, 0xffde011f, 0xfde0ffff, 0x1fb5049e, 0x3319a002, 0x3d0a0020,
0x99a83e04, 0x0cb0b400, 0xb20bc0b4, 0x8d3e7e1a, 0x321fbf00, 0xffffdea0, 0x09c4e0ff, 0x04fefd1f,
0xfd1894b6, 0x19a0059f, 0x1bb24ab2, 0x010d100c, 0x0096d27e, 0x731fa433, 0x0a002033, 0x083e0102,
0x0433009a, 0x043d3f1f, 0x0099f53e, 0x98ff09c4, 0x1d98021c, 0x0de0b403, 0x90014ffe, 0xf9bc58ff,
0x0e90b4a8, 0x1001e1b0, 0x3b320100, 0xb20091b0, 0x97077e7e, 0x57903400, 0x08f40926, 0x9a083ed2,
0x3d19bf00, 0x1f929584, 0x90013310, 0x36261055, 0xff4208f5, 0x80331b0a, 0x243e1100, 0x030a009a,
0x009a273e, 0xfe3fa034, 0x99900149, 0xd99fbf80, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xf4003a31,
0x85fb0830, 0xf430f458, 0x0005dcdf, 0xbf12f900, 0x0149feff, 0xfe109990, 0x9fa00141, 0x4a0c1190,
0x040b00b8, 0x307e1cb2, 0xa433008c, 0x40fe2b1f, 0x00b44a01, 0x0b080090, 0x7e0cb204, 0x33008c30,
0xbf161fa4, 0xa60fbf19, 0x0b9cf09f, 0x320196f0, 0x9a973e9a, 0xfea43d00, 0x99900149, 0xd99fbf10,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0xa9980c15, 0x90afb204, 0x010b59ac, 0x4a2095f0,
0xf9b50090, 0x8c307e04, 0xf400f800, 0xdcd99030, 0xf9000005, 0xfe99bf52, 0xff90014f, 0xa0030e84,
0x00ad33f9, 0x9cd90105, 0x18000029, 0x99335999, 0x3200f600, 0x014cfeba, 0xcc90b4bd, 0x94e37e20,
0x33ae3200, 0x00e31fad, 0x4a0144fe, 0x449000b8, 0xb2040b1c, 0x8c307e4c, 0x33ae3200, 0x00cb1fad,
0x4a0140fe, 0x009000b4, 0xb2040b18, 0x8c307e0c, 0x33ae3200, 0x00b31fad, 0x4abf09bf, 0x0bf5a9a6,
0xaa9000a6, 0x0140febc, 0x0090010b, 0x7e0cb227, 0x32008c30, 0x1fad33ae, 0x093f0091, 0xb20142fe,
0x28229043, 0x45ff94f0, 0x91541000, 0x9baa3e02, 0xe43abf00, 0xbcffff1b, 0xb9a6925a, 0xb2050df4,
0x90b0729b, 0xb3f0bcaa, 0x7e2cb200, 0xe4008c30, 0x32ffff0f, 0x1fa433ae, 0x7b39bf51, 0x2fbc0210,
0x90f9bc20, 0x0fff94f1, 0x147339a0, 0x49fec700, 0x20999001, 0x99909abf, 0xfe9c3f07, 0x010d014b,
0xf028bb90, 0xc4b6ffc4, 0x96d27e02, 0x33ae3200, 0xb2171fa4, 0x00b84a4c, 0xf07e040b, 0xae32008a,
0x009be63e, 0x49fe090e, 0x84999001, 0xdcd99fbf, 0xbf000005, 0xa6ea3299, 0x070bf4f9, 0x003a317e,
0x987055fb, 0x008f04a9, 0x9ffd3ff0, 0x04a9b505, 0xaeb200f8, 0x0a10bf12, 0x26ee0904, 0x2e0df4f9,
0x0a00c433, 0x2d3eea7f, 0xea58009c, 0x00a07301, 0x26ff0918, 0x140bf4b9, 0xffffa9e4, 0xf0059bbb,
0x1bf40194, 0xf8090a07, 0xf81f0a00, 0xf830f400, 0x0005dcdf, 0xbf32f900, 0x0149feff, 0x900140fe,
0x43fe1499, 0xb29fa001, 0x90b1b2a2, 0x33901300, 0x10ec4a12, 0x0cb2010b, 0x008b707e, 0x741fa433,
0xa6300a3f, 0x690cf401, 0x210020b3, 0x94ffa4f0, 0x240b05a9, 0xb202a4b6, 0xa0a9bc2c, 0x10eeaab8,
0x8b707e00, 0x1fa43300, 0x0010b34b, 0x0b0a3f23, 0xf01cb204, 0xa994ffa4, 0x02a4b605, 0xb8a0a9bc,
0x0010eeaa, 0x008b707e, 0x281fa433, 0x0b10ec4a, 0x7e3cb201, 0x33008b70, 0x3f191fa4, 0x01f6303f,
0x3f0e0cf4, 0xf49f2609, 0xf03e8a1b, 0x050a009c, 0x900149fe, 0x9fbf1499, 0x0005dcd9, 0xa699bf00,
0x070bf4f9, 0x003a317e, 0xf40835fb, 0xdcdfd830, 0xf9000005, 0xfeffbf22, 0x99900149, 0xa0a13230,
0x299cd99f, 0x99980000, 0x0ab2b204, 0x0094f108, 0x360bf440, 0xbd0140fe, 0x0c0090b4, 0x4d7e0ab2,
0xa433009c, 0x0ab2251f, 0x010c1b32, 0x009c127e, 0x171fa433, 0x90ff19c4, 0x99bc0299, 0x9009bc90,
0x92f0997f, 0xfe29a00f, 0x99900149, 0xd99fbf30, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31,
0x30f42825, 0x05dcdfd8, 0x62f90000, 0x49feffbf, 0x40999001, 0x9fa0b2b2, 0x00299cd9, 0x04999800,
0xc3b2a6b2, 0x94f1080b, 0x0bf51000, 0xb4bd00e5, 0x900141fe, 0x1ab21c11, 0x009c4d7e, 0xad33ab32,
0x0b00d11f, 0x0c1ab2ff, 0x9c127e01, 0x33ab3200, 0x00c01fad, 0x1ab2ff0b, 0x127ec43d, 0xab32009c,
0xaf1fad33, 0x01145800, 0x29a094bd, 0x109039a0, 0x72157f04, 0x4da47d4c, 0xe4bd8000, 0x323e0101,
0xc9c4009e, 0x200bf401, 0xfd660f7f, 0xbc0a1df4, 0x273ea41e, 0xfd66009e, 0xbc0d1bf4, 0xa9fd941e,
0x9e273e05, 0x90df7200, 0xc57601ee, 0x02009001, 0xc473fd72, 0x6ebfd000, 0xc400d3f0, 0xffdfffa9,
0xb6ff00ff, 0xeffd1094, 0x00008c04, 0x059efdff, 0xfd049cfd, 0x69a0059d, 0x4ee429bf, 0xafc7ffff,
0x10ed94e8, 0xff0094f1, 0xfd059dfd, 0x2fa005f9, 0xffff59e4, 0xff00eeb9, 0x0bf4a4e9, 0xfd39bf15,
0x9afd049c, 0xbf39a005, 0x0095f129, 0xfe29a001, 0x99900149, 0xd99fbf40, 0x000005dc, 0xba3299bf,
0x0bf4f9a6, 0x3a317e07, 0x2865fb00, 0xdff030f4, 0x000005dc, 0xffbf62f9, 0x900149fe, 0xa1322899,
0xb0329fa0, 0xd5b2c432, 0xb630e6b2, 0x120cf504, 0x299cd901, 0x9e980000, 0xffb9c404, 0xc4119990,
0x080a1f9f, 0xb905efbb, 0x94f00099, 0x909fbc1f, 0xf9bbff0f, 0x34feff05, 0xe9013db3, 0xfe94bd00,
0xff90014f, 0x0142fe20, 0x9001f9b5, 0xf9a01c22, 0x2bb2a4bd, 0x009c4d7e, 0xc91fad33, 0x322ab200,
0x7e1b323c, 0x33009c12, 0x00ba1fad, 0x46020033, 0xf4020630, 0x0033100c, 0x0d331a00, 0x3e00a501,
0x33009f60, 0x33410300, 0x0098040d, 0x009f963e, 0xf1ff19c4, 0xb8012690, 0x0011369e, 0x009f6c3e,
0xf1ff19c4, 0xb8012690, 0x0011469e, 0xa53e100f, 0x19c4009f, 0x2690f1ff, 0xb8040f01, 0x0011569e,
0x009fa53e, 0xf1ff19c4, 0x0f012690, 0x5a9eb802, 0xa53e0011, 0x19c4009f, 0x2690f1ff, 0x01004f01,
0x115c9eb8, 0x03499400, 0x9cc4040a, 0xf4cfa6f8, 0xc9903218, 0xa6080b08, 0x060df49f, 0xbcb2fcbc,
0x40fea0ec, 0x20009001, 0x707e0cb2, 0xa433008b, 0x09bf131f, 0x009859a0, 0x3e60a001, 0x0a009fe1,
0x0149fe03, 0xbf289990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x1065fb00, 0xdfe830f4,
0x000005dc, 0xffbf52f9, 0x900149fe, 0xa3b22c99, 0x9cd99fa0, 0x98000029, 0xb2b20499, 0x94f1080a,
0x0bf52000, 0x40fe00ca, 0x90a4bd01, 0x0bb21800, 0x009c4d7e, 0xb81fad33, 0x0b0ab200, 0x7ec43dff,
0x33009c12, 0x00a91fad, 0x7f0141fe, 0x1c119000, 0x0b10dc4a, 0x7e1cb210, 0x33008b70, 0x00911fad,
0x15b20b72, 0x04bdc4bd, 0xff04e001, 0x00a0e83e, 0xf401b9c4, 0xc6b0690b, 0x350cf407, 0x5c3c3dbf,
0x1f0ec4f8, 0xb9030990, 0xf4f00099, 0x1f94f0ff, 0xbc909ebc, 0x9fff9549, 0x049ebbf4, 0xb904febb,
0x9dfd0099, 0x059ffd04, 0xdc3e39a0, 0x2dbf00a0, 0xc4f85c3c, 0x09921f1e, 0x0099b91d, 0xf0fff4f0,
0x9ebc1f94, 0x9549bc90, 0xbbf49fff, 0xfebb049e, 0x0099b904, 0xfd049dfd, 0x29a0059f, 0x7601cc90,
0x009001b5, 0x04119004, 0x8800b473, 0x900149fe, 0x9fbf2c99, 0x0005dcd9, 0xa699bf00, 0x070bf4f9,
0x003a317e, 0xf41855fb, 0xdcdfd430, 0xf9000005, 0xfeffbf22, 0x99900149, 0xfea23234, 0x9fa00141,
0x4a0c1190, 0x280b2398, 0x707e1cb2, 0xa433008b, 0x10985d1f, 0xbc19bf01, 0x90a6f290, 0xb01008f4,
0x9cf001f6, 0x0196f00b, 0x00a1563e, 0xf9a6e109, 0xf00b9cf0, 0x0b0a0196, 0x33009033, 0x0029b4d9,
0x019c9800, 0x4ffe9bbf, 0x0cff9001, 0x4d90f0bc, 0x9235239c, 0x90240e08, 0x94f00109, 0x04fa901f,
0x7e01f9b5, 0x7e002136, 0xfe008a84, 0x99900149, 0xd99fbf34, 0x000005dc, 0xf9a699bf, 0x7e070bf4,
0xfb003a31, 0x30f42c25, 0x05dcdff8, 0x12f90000, 0x49feffbf, 0x0c999001, 0x9fa0a132, 0x00299cd9,
0x049f9800, 0x0089080a, 0xf9fd0100, 0x2a0bf404, 0xbd0140fe, 0x080090a4, 0x4d7e0bb2, 0xa433009c,
0x0ab2191f, 0xc43d1b32, 0x009c127e, 0x0b1fa433, 0x7e1f1ac4, 0xfe00a107, 0x99900149, 0xd99fbf0c,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40815, 0x05dcdff8, 0x12f90000, 0x49feffbf,
0x0c999001, 0x9fa0a132, 0x00299cd9, 0x04999800, 0x94f1080a, 0x90738000, 0x40fe2e00, 0x90a4bd01,
0x0bb20800, 0x009c4d7e, 0x1c1fa433, 0x1b320ab2, 0x127ec43d, 0xa433009c, 0x1ac40e1f, 0x20a5f01f,
0x00a1077e, 0x900149fe, 0x9fbf0c99, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf90815fb,
0x06b99552, 0x94b6c4b2, 0xbcd5b203, 0xb0c430a9, 0xa2e03e3f, 0x9831bf00, 0x54b30132, 0x010a1800,
0x0cb2b4bd, 0x0039cd7e, 0xfd052bfd, 0xc83e051a, 0x0cb200a2, 0xb4bd010a, 0x0039cd7e, 0xb900b9b9,
0x29fd00aa, 0x041afd04, 0xb3014492, 0x900b0040, 0x04b30100, 0x31a0c840, 0xbd0132b5, 0x08339004,
0xb50044b3, 0xd4bd51fb, 0x00a27f7e, 0x010d00f8, 0x00a27f7e, 0xbcc400f8, 0x06b5b63f, 0xbc03b4b6,
0xab98a0ab, 0x7eaabf01, 0xf0003979, 0x00f801a4, 0xf4bdaeb2, 0xf0b3a43d, 0xef3c0a08, 0xa0a93c98,
0xb301ff90, 0xf30080fe, 0x3907a2f0, 0x00f801aa, 0xe9c4ae3f, 0x1b0bf401, 0xff0ef4bd, 0x9098af3c,
0x9e2601ff, 0x00c51bf5, 0xf410f4b3, 0x00a40d3e, 0xafbcf4bd, 0x09991890, 0x3301ff90, 0x00ae009d,
0xf207f4b3, 0x0c06ad18, 0xf5dc2680, 0x33009e0c, 0x183800e4, 0x9d3301a9, 0x18009300, 0x9d3302a9,
0x18008b00, 0x9d3303a9, 0x18008300, 0xa91804af, 0xfff4f005, 0xfd089476, 0x9473059f, 0xdc266f00,
0x3e691bf4, 0x1800a402, 0xa91804af, 0xfff4f005, 0xb6ff94f0, 0x9ffd0894, 0x7099cd05, 0x4d009473,
0x1201a918, 0x96304199, 0x400cf419, 0x3102a918, 0xf4004096, 0x9631361d, 0x1cf4005a, 0x03a9182f,
0x00409631, 0x31251df4, 0xf4005a96, 0xd0331e1c, 0xefc41b00, 0x04f9c4ff, 0xc4151bf4, 0x94b30af9,
0xa9180b02, 0x00903307, 0xf8060a08, 0xf8a4bd00, 0x0f12f900, 0xb2b1b202, 0x00a0b3a0, 0xf0a93f22,
0x1bf40894, 0xa3107e17, 0x0010b300, 0x181a2006, 0x060f0809, 0x1bf4a926, 0xb2f4bd05, 0xb211fbfa,
0xb3020aa9, 0xbf1200c0, 0xb6cdb29a, 0x804c07b4, 0xb7627e00, 0xf400f800, 0xdcdff830, 0xf9000005,
0xfeffbf22, 0x99900149, 0xa0a0b210, 0xb3020a9f, 0xbf340000, 0x94943d0a, 0x41fe07b2, 0x902bb201,
0x010c0f11, 0x1db21920, 0x00b7797e, 0x1700a4b3, 0x0abf193f, 0x1db22bb2, 0x0cfd94f0, 0x7e192001,
0xfe00b762, 0x99900149, 0xd99fbf10, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40825,
0x05dcdff8, 0x42f90000, 0x49feffbf, 0x18999001, 0x9fa0a1b2, 0xc0b2b4b2, 0xa0b3d3b2, 0xc0b35600,
0xcf185200, 0xfe94bd07, 0x22900142, 0x01ff1014, 0xcf3529a0, 0x7ecab207, 0xb200a310, 0x080a352b,
0xb27e1ab2, 0xa4b300a7, 0x2bbf2c00, 0x1ab20cb2, 0x00a43f7e, 0x1e00a4b3, 0x4bb21ab2, 0x00a4577e,
0x1200a4b3, 0x0e0030b3, 0x32a022bf, 0x00a5323e, 0x49fe020a, 0x18999001, 0xdcd99fbf, 0xbf000005,
0xf4f9a699, 0x317e070b, 0x45fb003a, 0xb202f908, 0x00a0b3c0, 0x00c0b324, 0xb6aabf20, 0x804c07b4,
0x7e0db200, 0xb300b779, 0xb21000a4, 0xa3307e0a, 0xa5773e00, 0xfb020a00, 0x00a0b301, 0x00c0b317,
0xb2aabf13, 0x07b4b6cd, 0x797e100c, 0x00f800b7, 0x00f8020a, 0xb3b242f9, 0xa2b2c4b2, 0xa0b30200,
0xea7e4200, 0x030000a5, 0xa0b3a1b2, 0x3bb23600, 0x1cb22ab2, 0x00a54d7e, 0xa4b3a0b2, 0x1ab21e00,
0x117eb4bd, 0xa0b200a4, 0x1000a4b3, 0x0c0040b3, 0xf0061918, 0x49a0ff94, 0x1bb22ab2, 0x00a60c7e,
0x41fb0ab2, 0x00f800f8, 0xaeb200f8, 0xb30eaa98, 0xbd0a00a0, 0xa6023ef4, 0x0fea9800, 0x0e00a0b3,
0xff90010f, 0xbc94bd0e, 0x00f8f9e9, 0x1a00b0b3, 0xb30ea998, 0x980d0090, 0x94b30fa9, 0x01090c00,
0xbc0e9990, 0x00f899ab, 0xa002b998, 0xb5ff09a9, 0xb99801a9, 0x04abb502, 0xb503acb5, 0x00f802a9,
0xa0b222f9, 0xd2b2c132, 0xb0b3020a, 0x0cb85e00, 0xbd000140, 0x04c998d4, 0x440090b3, 0x08001433,
0x3c0390b3, 0xb93fcf3f, 0x1bf4f926, 0x01cf1832, 0x2601b918, 0x271bf4f9, 0x1802ce18, 0xddbc02bf,
0x909dbc90, 0xb80394b6, 0x00014099, 0x269009bc, 0x0b1bf4ef, 0xa4bd29a0, 0x00a6a83e, 0x9001dd90,
0xd4b318cc, 0x040ab314, 0xabbf21fb, 0xf009acb2, 0x0bf4b9a6, 0x03aa980d, 0x7e01cbb5, 0xf800b65f,
0xb232f900, 0xbdb2b2a1, 0x3ef00304, 0xbf00a6f0, 0x01009019, 0x93a61ab2, 0x0a090df4, 0xa6f73e03,
0xf493a600, 0x020a091b, 0x00a6f73e, 0x00a6aa7e, 0x08f402a6, 0xfba4bddd, 0xf830f431, 0x0005dcdf,
0xbf82f900, 0x0149feff, 0xb2289990, 0xb29fa0a3, 0x00a9b3b8, 0xb0b30084, 0x47fe7f00, 0x05a49801,
0x14bd54bd, 0x779024bd, 0xa7613e24, 0x0c3a9800, 0x02bc94bd, 0xb279a0b0, 0xb65f7e7c, 0x0f79bf00,
0xf49fa6ff, 0x643d090b, 0x00a74f3e, 0x90015590, 0x04a60100, 0x33d908f4, 0x90070060, 0x24bc0111,
0x03399820, 0x18f429a6, 0xbd01060b, 0xa7523e04, 0xb24bb200, 0x16fc7e1a, 0xf45aa600, 0x1190060d,
0x06399801, 0x19a6f43d, 0x0f050cf4, 0xbd8f2001, 0xa7973ea4, 0xfe020a00, 0x99900149, 0xd99fbf28,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40885, 0x05dcdff0, 0x82f90000, 0x49feffbf,
0x30999001, 0xa00147fe, 0x08a9989f, 0xb1b0a6b2, 0xb0f10509, 0x843d0a91, 0x779090b2, 0x0369982c,
0x7fa0f4bd, 0x08f409a6, 0x0804bd07, 0x0a90b401, 0x1bf409a6, 0x00803335, 0xa85a3e32, 0x0c6a9800,
0xb24010bc, 0x7e4bb27c, 0xbf00b65f, 0xa6ff0f79, 0x0f1bf49f, 0x09012290, 0xf439a6f1, 0x43b2051b,
0x3e011190, 0xbd00a82d, 0xbdf10314, 0x05699824, 0x08f419a6, 0x0020b3cb, 0xf429a61e, 0x60b50f18,
0x09f0b408, 0x6b3ef3a0, 0xf10f00a8, 0x1bf45fa6, 0xbc05b205, 0xdd3e0009, 0x1a0a00a7, 0x59a6f109,
0xb50d0bf4, 0x90b40865, 0xbd95a009, 0x0149fea4, 0xbf309990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6,
0x3a317e07, 0x1085fb00, 0xd9f830f4, 0x000005dc, 0x99bf82f9, 0x90014ffe, 0xa3b228ff, 0xb4b2f9a0,
0xc033d0b2, 0xdab20e00, 0x140cb43d, 0x00b7907e, 0xbd0142fe, 0x24229014, 0xff07fe08, 0xfb05fc06,
0x00a93a3e, 0xbd0c3a98, 0xb014bc94, 0x2cb229a0, 0x00b65f7e, 0xf00f29bf, 0x0df49fa6, 0xa6fd0f56,
0x110cf49f, 0x18f496a6, 0xf495a630, 0x093e451b, 0x98a600a9, 0xa62f0bf4, 0x371bf497, 0x90010998,
0x09b50199, 0xa9373e01, 0x04099800, 0xb5019990, 0x373e0409, 0x099800a9, 0x01999002, 0x3e0209b5,
0x9800a937, 0x99900309, 0x0309b501, 0x00a9373e, 0x999009bf, 0x9009a001, 0x39980111, 0xf419a605,
0x49fe8508, 0x28999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x85fb003a, 0xf830f408,
0x0005dcdf, 0xb222f900, 0xb2ffbfa1, 0x03aa98b2, 0x49fe1bbf, 0x10999001, 0xa00140fe, 0x0c00909f,
0x5f7e0cb2, 0x0cbf00b6, 0xb2031a98, 0xb6767e2b, 0x011b9800, 0xb9a6ff09, 0x98101bf4, 0x12b50419,
0x0292b502, 0x00a9b13e, 0xb2031a98, 0xb6767e2c, 0x031a9800, 0xfd0c1bbf, 0x00b6767e, 0x900149fe,
0x12a01099, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a, 0xc830f408, 0x0005dcdf,
0xbf82f900, 0xf830f4ff, 0x900149fe, 0x9fa06099, 0x18049992, 0xf4bd1cae, 0xa9989fa0, 0x0aa2b205,
0x0b91b005, 0x1a00e933, 0x0c2b9802, 0xfe092c98, 0xf100014a, 0xfe44aa90, 0xa6b20144, 0x8b7e2001,
0x05b200b6, 0x4490a3b2, 0xaa723e30, 0x08299800, 0x0bf439a6, 0xb22ab231, 0xb2010c3b, 0xa8887e4d,
0x04499800, 0x1f0094b3, 0xb3034998, 0x98180094, 0x94b30249, 0x49bf3b00, 0x18f491a6, 0x3e30b209,
0xb200aa65, 0x0bb0b419, 0x6ab291b2, 0x00b6a47e, 0x35a6a3b2, 0x0ab91bf4, 0xf503a603, 0xb301a30b,
0xb20c0014, 0x3e743d03, 0xb200aa8f, 0x94010703, 0x54bd0738, 0x9b3e86b2, 0x2a9800ab, 0xbce4bd0c,
0x4cfe1053, 0x16e1b001, 0xb258cc90, 0xb65f7e1b, 0x00adb300, 0x90b400f3, 0xa6f00f16, 0xd80cf59f,
0xb294bd00, 0x1591b02a, 0x00a5ea7e, 0xa9b3a4b2, 0xbf00d600, 0x4c6bb22a, 0x4db20080, 0x00b7797e,
0xadb3a0b2, 0xb200a700, 0xb21bb22a, 0x014dfe4c, 0x7e50dd90, 0xb200a4be, 0x00adb3a0, 0x2ab20090,
0x0c014b90, 0x014dfe01, 0x7e54dd90, 0xb200a640, 0x00a4b3a0, 0x15b0b478, 0xfe0c2c98, 0xaa90014a,
0xa6287e30, 0x0c90b400, 0x1bf491a6, 0x14b0b41e, 0x90014afe, 0x5d7e30aa, 0x90b400a9, 0x059f9815,
0x2300f4b3, 0x00ab893e, 0x9ea6ef0e, 0x00090df4, 0xab893e03, 0x014afe00, 0x7e30aa90, 0x3e00a6aa,
0x9800ab25, 0xe0b402f9, 0xf491a614, 0xfeb5061b, 0xa6f9bf02, 0x091bf491, 0x893efea0, 0xf99800ab,
0xf491a601, 0xfeb5061b, 0xb24bb201, 0xa60c7e2a, 0x0004b300, 0x01559013, 0x98806690, 0x59a60529,
0xfefa08f5, 0x46007033, 0xb2042f98, 0xb2e4bd8d, 0x00f1b02a, 0x70dc020b, 0xfe000000, 0x11900141,
0x0111b05c, 0x00a5e47e, 0xbf042c98, 0x048bb22a, 0xb74b7efb, 0x981ebf00, 0xa0b2042c, 0x2ab2b4bd,
0xe67e0db2, 0x04b300a5, 0xff040600, 0x013e04bd, 0x2a9800ac, 0xb003bc0c, 0x00904cb2, 0xb6767e01,
0x0b90b400, 0x08f409a6, 0x032f98ec, 0xb59039bc, 0x9fa60929, 0xbd0808f4, 0x0929b594, 0x49fea4bd,
0x60999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x30f4003a, 0x3885fb08, 0xd9cc30f4,
0x000005dc, 0x99bf82f9, 0xfef830f4, 0xff90014f, 0xb0f9a05c, 0xc8b20be1, 0xa3b2d6b2, 0x8400b9b3,
0x00e9b302, 0xaf18027f, 0x0141fe2c, 0x119094bd, 0x0019a054, 0x00f93303, 0xc43d026d, 0x407e1db2,
0xa0b200a6, 0x5e00adb3, 0xbc17bf02, 0x7998f068, 0xf59fa601, 0x98024d08, 0x94b30479, 0x05000a01,
0x00aee23e, 0x3e0069b3, 0x027f9802, 0xf9a6f009, 0x022a0bf5, 0xea7e3ab2, 0xa2b200a5, 0x1e00a9b3,
0x0c3c9802, 0x40fe7bb2, 0x34009001, 0x287e0ab2, 0x0ab200a6, 0xcc0570b5, 0xc17e708b, 0xa0b200a6,
0xe900adb3, 0x0d00b401, 0x01a6f001, 0x01ce0bf5, 0x01d00cf5, 0x804cb43d, 0x7e2ab200, 0xbf00b790,
0x070b943a, 0xb200804c, 0xb7797e2d, 0x0ca1b000, 0xb600adb3, 0x05291801, 0x76042f18, 0xf4f00894,
0xe59fffff, 0xe966ff09, 0x01980bf5, 0xffffe9e4, 0x08f589a6, 0xf4bd018e, 0x18902fbc, 0x9d330999,
0x90018200, 0xf4b301ff, 0xfc3ef207, 0x8e3c00ae, 0xf59f26f2, 0xc4016d08, 0x94f0fffd, 0x529dbcff,
0x0df456a6, 0x9065b205, 0xa43d10d9, 0x3db029bc, 0x3ee4bdc4, 0xb100ada7, 0xf5006fd6, 0xb401450c,
0xbe3c0b10, 0xf81e3c98, 0x0bf4f926, 0xff94f017, 0xfd009939, 0x9033049f, 0x010a0600, 0x0ce9bf3c,
0x01ee9001, 0xa601dd90, 0xce08f4e5, 0xed00c933, 0xf0293f00, 0x0bf40894, 0x00a93308, 0x94bd00d0,
0x91b03ab2, 0x1391b014, 0x301291b0, 0x4bfe5b91, 0x5bbb9001, 0x00a6f97e, 0xadb3a0b2, 0x3400ef00,
0x90335b90, 0x3ab21100, 0x00a9d97e, 0xadb3a0b2, 0xb400db00, 0x40b40d00, 0x014ffe11, 0xb250ff90,
0x070d942e, 0x4101f1b0, 0x3ab20080, 0x4cb2010b, 0x7e0011b0, 0xb200a5e4, 0xb22cb20b, 0x014dfe3a,
0x7e4cdd90, 0xb400a4be, 0xa0b214e0, 0x3ab21cb2, 0x0db2b4bd, 0x00a5e67e, 0x91000db3, 0x13b0b400,
0x90014afe, 0x5d7e34aa, 0x3a9800a9, 0x0db0b40c, 0x90014cfe, 0x5f7e48cc, 0xa0b200b6, 0x6d00a4b3,
0x011290b4, 0xf491a6f0, 0x4e98321b, 0x70efcd01, 0x0600f4b3, 0x2918700f, 0xff94f006, 0xbb909ebc,
0x49b5029f, 0xae993e01, 0xb20bb200, 0x7e2cb23a, 0xb200a43f, 0x00a4b3a0, 0x0265bb34, 0x90014afe,
0xaa7e34aa, 0x60b300a6, 0x90b42000, 0x8085bc0b, 0xb09095bc, 0xe53e0b91, 0x020000ac, 0x00aec93e,
0xc93e0300, 0x00b400ae, 0xb23ab20c, 0xa60c7e2b, 0xb594bd00, 0xe23e0579, 0x030000ae, 0x00aee23e,
0x49fe0200, 0x5c999001, 0xdcd99fbf, 0xbf000005, 0xa60ab299, 0x170bf4f9, 0x00af083e, 0x33062918,
0xfe4f009d, 0x00aec03e, 0x003a317e, 0xfb0830f4, 0x30f43485, 0x05dcdfdc, 0x82f90000, 0x30f4ffbf,
0x0149fef8, 0xa04c9990, 0x0bb1b09f, 0xd4b2c2b2, 0xa5b2e6b2, 0x1700b9b3, 0x00e9b301, 0x94bd0112,
0x3d0141fe, 0x481190c4, 0x1db219a0, 0x00a6407e, 0xadb3a0b2, 0xbf00fb00, 0xf042bc19, 0xa6019998,
0xea08f59f, 0x005ab200, 0xa5ea7e03, 0xb3a3b200, 0x00de00a9, 0x5c981bbf, 0x0140fe0c, 0xb2300090,
0xa6287e0a, 0xcc0ab200, 0xc17e702b, 0xa8b200a6, 0xad00adb3, 0x7021cd00, 0x420147fe, 0x77900080,
0xb0383e44, 0x0c00b400, 0x79a094bd, 0x09a6f009, 0x00091bf4, 0xb03f3e02, 0xa6f00900, 0x090df409,
0x3f3e0300, 0xc0b400b0, 0x0704b60b, 0x0db2e4bd, 0xb4bd5ab2, 0xb00021b0, 0xe47e0171, 0x5abf00a5,
0x2cb20bb2, 0x797e3db2, 0x7ebf00b7, 0x3bb2a0b2, 0x2cb25ab2, 0xe67e0db2, 0x04b300a5, 0x3ab24500,
0x117eb4bd, 0xa0b200a4, 0x3700a4b3, 0x01bb7000, 0xf404a602, 0x40b2050d, 0xb2101b90, 0xb03bbc6a,
0x997e0cb2, 0x4afe00b7, 0x0240bb01, 0xbc30aa90, 0xaa7e6060, 0x14bd00a6, 0x6d004db3, 0xb280b2ff,
0x7e3bb25a, 0x3e00a60c, 0x0000b04d, 0x0149fe02, 0xbf4c9990, 0x05dcd99f, 0x99bf0000, 0xf9a60ab2,
0x7e070bf4, 0xf4003a31, 0x85fb0830, 0xf830f424, 0x0005dcd9, 0xbf32f900, 0x014ffe99, 0xb214ff90,
0xbdf9a0a1, 0xb2b2b294, 0x0140fec3, 0x9003204b, 0x09a01000, 0x9f7e0ab2, 0x09bf00b7, 0x4c0090b3,
0x4800a4b3, 0x09bf91a0, 0xbf0192b5, 0x1000490f, 0xbf04f9b5, 0xb520090f, 0x09bf05f9, 0xbf0693b5,
0x3501090f, 0x09bf1cf9, 0xbf2c9a35, 0xb5f0090f, 0x0fbf0af9, 0xb540f990, 0x0fbf0ef9, 0xb5c0f990,
0x0abf0ff9, 0x00b0ea3e, 0x49fea4bd, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x35fb003a, 0xd030f408, 0x0005dcdf, 0xbf82f900, 0x0149feff, 0xb2509990, 0x059fa0a3, 0x00a9b302,
0xb63004fb, 0x0b9cf000, 0xbd2ca935, 0x0ca9b594, 0x00a5ea7e, 0x3abfa0b2, 0x804cb4bd, 0x7e0db200,
0xb200b779, 0x00adb3a5, 0x093f04b1, 0xa24a9d33, 0x01091804, 0x9a469d33, 0x02091804, 0x92469d33,
0x03091804, 0x8a539d33, 0x040e1804, 0x18050918, 0x0d18060f, 0xffe4f007, 0xf0ff94f0, 0x94b6fff4,
0x10f4b608, 0xb6059efd, 0xf9fd18d4, 0x05dffd05, 0x045e0bf5, 0xd6b00505, 0x5d0cf503, 0x013db504,
0x0e01d4b3, 0xb5500049, 0xd83e0239, 0x0d1800b1, 0x09091808, 0x180a0f18, 0xd4f00b0e, 0xff94f0ff,
0xb6fff4f0, 0xf4b60894, 0x059dfd10, 0xfd18e4b6, 0xeffd05f9, 0x023eb505, 0x0bb23ab2, 0x00a60c7e,
0x09023a98, 0xf4a9a6ff, 0x04bd091b, 0x00b5ee3e, 0x9007a5b6, 0x3ab5303b, 0xb6d27e03, 0xb3a5b200,
0x03f500ad, 0x09033b98, 0x343a90c0, 0xfd3fbb90, 0xb5b604b9, 0xb79f7e03, 0xb3a5b200, 0x03d900ad,
0xfe0147fe, 0x77900148, 0x9044bd40, 0x88900179, 0x0991b03c, 0x00b3483e, 0x8ea0e4bd, 0x0f0044b3,
0xbd0c3a98, 0x3efe0cb4, 0xb200b26b, 0xb24bb23a, 0xa5797e7c, 0xb3a5b200, 0x039d00ad, 0x94f0793f,
0x120bf401, 0xb20c3a98, 0x7eff0c4b, 0x3e00b676, 0xb200b345, 0xa3307e7a, 0x00a0b300, 0x0c3a980f,
0xfd0c4bb2, 0x00b26b3e, 0x94f0793f, 0x0e1bf402, 0xb20c3a98, 0x3efd0c4b, 0xb400b33a, 0x3ab209b0,
0x8db2010c, 0x00a6407e, 0x5d00a0b3, 0x3fb2793f, 0x99c724bd, 0x01999002, 0x980a91b0, 0x54b354f5,
0xb0b43900, 0x0022bc09, 0x02bc030c, 0x0304b600, 0x014001b8, 0x1031bc00, 0x997e1ab2, 0x30bc00b7,
0x4309b800, 0x95200001, 0xb45302b5, 0x0fb50af0, 0x3e81a054, 0x9000b305, 0xff900122, 0x1424b318,
0xb6323ebe, 0x3f8ebf00, 0x027f5879, 0x98077d18, 0x3a9803ee, 0x0299c70d, 0xcc00f3f0, 0x96cb70ff,
0xcb4bb21f, 0x010cd8e6, 0xebf0d6cb, 0x7e01e0f6, 0x9800a2e6, 0x4bb20c3a, 0x767e6cb2, 0xa5b200b6,
0xb400adb3, 0x01449002, 0xa6033b98, 0xeb08f54b, 0xbc94bdfe, 0x89a0b0bb, 0xb57e8ab2, 0xa5b200b7,
0x9400adb3, 0xbd37b202, 0x547f9884, 0xbc9088bc, 0x94b69098, 0x4099b803, 0x39bc0001, 0x0b91b090,
0x5300f9b3, 0x033c9802, 0x3d0fa0b4, 0xbc24bdb4, 0x44bdc0cc, 0x00b7907e, 0x3e0f60b4, 0x9800b463,
0x2bb20d3a, 0x7e0c41b0, 0x3300a2f6, 0x00b500a9, 0xfe0c3a98, 0x2bb2014c, 0x7e38cc90, 0xb300b65f,
0x020c00ad, 0xb40be0b4, 0xef980e90, 0xd899c703, 0x1bf59fa6, 0x3a98008e, 0x0c2bb20d, 0xa2ee7e01,
0x014cfe00, 0x2bb23ab2, 0x7e30cc90, 0xb300a594, 0x981306a4, 0x2bb20c3a, 0x767efd0c, 0x603e00b6,
0xadb300b4, 0x7401cb00, 0x93f01c90, 0x9099bc00, 0x7f0069bc, 0xff19e401, 0x091bf4ff, 0x603e0260,
0x3a9800b4, 0x014cfe0c, 0xffff1be4, 0x7e34cc90, 0xb300b65f, 0x019800ad, 0x343af034, 0xf9263690,
0x60100df4, 0xff1be402, 0x0c3a98ff, 0x00b4553e, 0xb20c3a98, 0x7efd0c2b, 0xb300b676, 0x017000ad,
0x98012290, 0x2aa6033a, 0xff3708f5, 0x6eb264b2, 0xd43db43d, 0xc4bdf4bd, 0x00b4973e, 0x9473e97f,
0x010d0a00, 0x00b4913e, 0x0600d033, 0xcc90010b, 0x01ff9001, 0xa602ee90, 0xe308f4fa, 0x0b00c4b3,
0x3e547cb5, 0x3300b5d3, 0x00a600b9, 0xb0013998, 0x0cf40296, 0xb2030930, 0x5479b56d, 0xf4bde4bd,
0x00b4d63e, 0x9073d97f, 0x697c0a00, 0x01ee90e9, 0x9001ff90, 0x399802dd, 0xf4f9a603, 0x4d3ee908,
0x94bd00b5, 0x79b5f101, 0xb224bd54, 0xb5273e1b, 0xe4407f00, 0xf4ffff09, 0xf10f260b, 0x1bf4bfa6,
0xff0be40b, 0xb51f3eff, 0x0c3a9800, 0xffff0ce4, 0x00b6767e, 0xb900adb3, 0xff0be400, 0x9019b2ff,
0x44900122, 0x9891b202, 0x29a60339, 0x09c508f4, 0xf5b9a6f1, 0x9800a00b, 0x3c980c3a, 0xb6767e0a,
0x00adb300, 0x31b5008c, 0xb5d33e0a, 0xbd6f7f00, 0x01c19294, 0xf05179b5, 0x04bd00f3, 0x3e527fb5,
0x7f00b58b, 0x014c584b, 0x900c3a98, 0xb3f00100, 0x00c3f000, 0x7e024490, 0xb300b676, 0xb45200a4,
0xe9980be0, 0x70999001, 0xa601e9b5, 0xd608f401, 0x9808607c, 0xf00c0c3a, 0xffff0be4, 0x00b6767e,
0x2d00a4b3, 0xe4014cfe, 0xb2ffff0b, 0x40cc903a, 0x00a5797e, 0x1900a4b3, 0x98469034, 0x94f0517f,
0xf0f9bcff, 0x3e517fb5, 0x0a00b5d3, 0x3ea5b203, 0x9000b5de, 0x77900188, 0x148db318, 0x49fefd90,
0x3c999001, 0x497e9abf, 0xf43e00b7, 0x030500b5, 0x00b5f63e, 0x0bb204bd, 0x0c7e3ab2, 0x50b300a6,
0x3a981a00, 0x7e04bd0c, 0x9800b6c8, 0x30b50d3a, 0xb7497e0c, 0x0d30b500, 0x900149fe, 0x9fbf5099,
0x0005dcd9, 0xb299bf00, 0xf4f9a65a, 0x383e110b, 0x010500b6, 0x00b5f43e, 0x003a317e, 0xf93085fb,
0x7ea0b202, 0x9800a5e8, 0xc87e0c0a, 0x0a9800b6, 0xb7497e0d, 0x7e0ab200, 0xbd00b749, 0xbf01fba4,
0x0aafb2a9, 0xf4b9a602, 0xb9900d18, 0x98f9bc01, 0xc9a0a4bd, 0xa9bf00f8, 0x020aafb2, 0x18f4b9a6,
0x01b9900b, 0xfcbca4bd, 0xbf00f899, 0xb2afb2b9, 0xf4c9a6ca, 0xf10a0708, 0xfbb500f8, 0xb5fca002,
0x00f801fc, 0xaf98a9bf, 0x90b9bc02, 0xfbbfa9a0, 0x08f49ba6, 0x029bbb08, 0xa998a9a0, 0xa6aabf01,
0x051bf4a9, 0x00f8f10a, 0x0800a0b3, 0x00b7497e, 0x30f400f8, 0x05dcdff8, 0x32f90000, 0x49feffbf,
0x14999001, 0x9fa0a0b2, 0xa0b3b3b2, 0xfd024200, 0x0cf4a2a6, 0x01ab903a, 0xb60141fe, 0x119002b4,
0x7e1ab210, 0xb300b7b5, 0xbf2700a4, 0xb21db219, 0xa0e4bd2c, 0x90dfbf90, 0x9eb201e9, 0xa699fcbc,
0xf408f490, 0x3da0ddbf, 0x00b72e3e, 0x49fe020a, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699,
0x317e070b, 0x35fb003a, 0xda00f808, 0x00002944, 0x0041c77e, 0xf000a630, 0xa6f00bac, 0x01aab901,
0x44da00f8, 0x7e000029, 0x30004142, 0xacf000a6, 0x01a6f00b, 0xf801aab9, 0x2944da00, 0xd77e0000,
0xa6300042, 0x0bacf000, 0xb901a6f0, 0x00f801aa, 0x7effb4f0, 0xf8000b94, 0x0b7e7e00, 0xf900f800,
0x3da0b202, 0x384c7ea4, 0x00a6b000, 0xa00b9cf0, 0xfb9ab20a, 0xb202f901, 0x7ea43da0, 0xb000382a,
0x9cf000a6, 0xb20aa00b, 0xf401fb9a, 0xdcdfe430, 0xf9000005, 0xfeffbf82, 0x45fe0149, 0x3c999001,
0xa00147fe, 0x2455909f, 0xd9347790, 0x0000141c, 0x4bfe9abf, 0x90080c01, 0xff0d2cbb, 0x0000c17e,
0xeb00a433, 0x3f0c30b4, 0x0c943339, 0x043118e2, 0x0f001033, 0xb0011933, 0x3e043d00, 0x9800b971,
0x2cd9023f, 0x98000014, 0x34580431, 0x3f5fa00a, 0x0339989f, 0xb5183690, 0xff090159, 0xf43379a0,
0xf77e1800, 0xa0320032, 0x2900ad33, 0xdf010901, 0x0000142c, 0x1272f920, 0xbd0043f0, 0xb8b13e14,
0x0241bc00, 0x010006b1, 0x40060df4, 0x947e0100, 0x24d9000b, 0xbf000014, 0xff2ce49a, 0xb26bb2ff,
0x1300de0d, 0x127e0000, 0x7aa000af, 0xd400adb3, 0x985bbf00, 0x1d90015c, 0x7c0eb204, 0x10bc2020,
0x1300da10, 0x367e0000, 0xa0320021, 0xc500ad33, 0x4cb4bd00, 0x00da0100, 0xa6000013, 0xa408f414,
0x00b9603e, 0xd9023f98, 0x0000142c, 0x58043498, 0x5fa00a32, 0x39989f3f, 0x18389003, 0x090159b5,
0x3379a0ff, 0x7e1600f4, 0x320032f7, 0x00ad33a0, 0x2cdf0084, 0x20000014, 0xff26e4f1, 0x3e24bdff,
0xbc00b951, 0x16b11262, 0x0df40100, 0x01004106, 0x000b947e, 0x5c985bbf, 0x042d9001, 0x00da1eb2,
0x7e000013, 0xe40020d0, 0xbcffff4c, 0xa0322021, 0x1db28bb2, 0x001300de, 0x40417c00, 0x3500a433,
0x001424d9, 0x7e9abf00, 0xa000ac3c, 0x00a4b37a, 0x4cb4bd13, 0x00da0100, 0xa6000013, 0xa608f426,
0x5c985bbf, 0xbd7ab201, 0x7e040ed4, 0x32002136, 0x2db034a0, 0x817e3ab2, 0x0d33000f, 0x30fe7100,
0x020f3a01, 0x1838f130, 0x04090333, 0x30014afe, 0x31303991, 0x90b4bd3b, 0x717e38aa, 0xeb3e000f,
0x02f900b7, 0x002930d9, 0xbfa0b200, 0x7e640b9a, 0x090000de, 0x00a43310, 0xa6008961, 0x009fcf02,
0x1000f5f1, 0x8a009ff6, 0x4b02a600, 0xc4bd1000, 0xbd27104d, 0x198b7ee4, 0x00a43300, 0x2930d915,
0x9abf0000, 0x00009b7e, 0x163e0409, 0x0ab200ba, 0x7e03e84b, 0x890016fc, 0xb802a400, 0x000200aa,
0x920aa5b6, 0x9af601aa, 0x01114f00, 0x020099b8, 0x009ff600, 0x9a32943d, 0x000001fb, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
@ -2269,8 +2269,8 @@ const NvU32 soe_ucode_data_lr10_dbg[] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xb32dc4cc, 0x58018cca, 0x7c52cad0, 0x4a5277fe, 0xb22438cf, 0xcfd90bc8, 0xf23ebc55, 0x2e5c0e40,
0x705ea2e7, 0x0577e70f, 0xcf75f41f, 0xfe6e071a, 0x0d4a5d7d, 0x9c31ffb3, 0x95bc604f, 0x40cc834d,
0xb32dc4cc, 0x58018cca, 0x7c52cad0, 0x4a5277fe, 0x59305452, 0xfe64d88a, 0xe474c23b, 0xfee62bd9,
0x705ea2e7, 0x0577e70f, 0xcf75f41f, 0xfe6e071a, 0xd0954f7e, 0x7caea789, 0x40b32eb9, 0x80368ac3,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

View File

@ -443,19 +443,19 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x0032b13e, 0xb53e3505, 0x02050032, 0x0032b53e, 0x003a317e, 0xf42885fb, 0xdcdff430, 0xf9000005,
0xfeffbf22, 0x99900149, 0x0142fe14, 0x94bd9fa0, 0xa00c2290, 0x3da37e29, 0x00a03300, 0xda040b56,
0x00002944, 0x2db2bcb2, 0x0042d77e, 0xa433a032, 0x41fe4300, 0x10119001, 0x8e7e1ab2, 0xa0320033,
0x3100a433, 0x2bbf1cbf, 0x24d1a4bd, 0x7e000014, 0xa000b06c, 0x00a0b31a, 0x7eb43d1a, 0xb300b104,
0xbf1200a0, 0x7eff001a, 0x3e00b63b, 0x00003371, 0x0149feff, 0xbf149990, 0x05dcd99f, 0x99bf0000,
0x3100a433, 0x2bbf1cbf, 0x24d1a4bd, 0x7e000014, 0xa000b06d, 0x00a0b31a, 0x7eb43d1a, 0xb300b105,
0xbf1200a0, 0x7eff001a, 0x3e00b63f, 0x00003371, 0x0149feff, 0xbf149990, 0x05dcd99f, 0x99bf0000,
0xf9a60a32, 0x7e070bf4, 0xfb003a31, 0x0e090c25, 0xa43da9a0, 0x30f400f8, 0x05dcdfd8, 0x62f90000,
0x30f4ffbf, 0x0149fef4, 0xa04c9990, 0xb2a93f9f, 0x01a398a6, 0x0d019033, 0x60489d33, 0x35a33e03,
0x04301800, 0x1b010d33, 0x03329801, 0x3d043198, 0x10dc4ba4, 0xd501004c, 0x00000644, 0x0038327e,
0xa4b35aa0, 0x02f80c00, 0x1a3e0501, 0x49fe0037, 0x28999001, 0x00299cd4, 0xb51cb200, 0x91b50741,
0x352bb201, 0x42b51540, 0xbd92a006, 0x10dc4ed4, 0x0020d07e, 0xad33a132, 0xbf015900, 0x33993f59,
0x980d0090, 0x95f00149, 0x0149b508, 0x000644d9, 0x1899bf00, 0x90336999, 0x9cdf1300, 0x98000029,
0x95f101f9, 0xf9b54000, 0x299cda01, 0x027e0000, 0x3098009c, 0x01027e02, 0x8aa3d900, 0xacb20000,
0x95f101f9, 0xf9b54000, 0x299cda01, 0x037e0000, 0x3098009c, 0x01027e02, 0x8aa3d900, 0xacb20000,
0xb20091b0, 0xbdb4bd0d, 0x2e70da04, 0x01b00000, 0x08013001, 0xc87e010e, 0x9cd90013, 0xdf000029,
0x1e000000, 0xfe509035, 0x99900149, 0x0142fe34, 0x22909fa0, 0xb2010a38, 0x94ee7e2b, 0x1fa43300,
0xc42bbf1b, 0x1bf401b9, 0x01b5f014, 0x2ba0010a, 0x0095097e, 0x061fa033, 0xb4bd09f8, 0x097e020a,
0x9cda0095, 0x7e000029, 0xfe009ab1, 0xb4bd014a, 0x010dc4bd, 0x7e34aa90, 0x3e0075b0, 0x33003574,
0x1e000000, 0xfe509035, 0x99900149, 0x0142fe34, 0x22909fa0, 0xb2010a38, 0x94ef7e2b, 0x1fa43300,
0xc42bbf1b, 0x1bf401b9, 0x01b5f014, 0x2ba0010a, 0x00950a7e, 0x061fa033, 0xb4bd09f8, 0x0a7e020a,
0x9cda0095, 0x7e000029, 0xfe009ab2, 0xb4bd014a, 0x010dc4bd, 0x7e34aa90, 0x3e0075b0, 0x33003574,
0xd9320204, 0x00000644, 0xa0b39abf, 0xb4d97f00, 0x98000029, 0x9bbf019c, 0x9cd9f43d, 0xbd000029,
0x159f35d4, 0x7e10dc4e, 0x320020d0, 0x356f3ea1, 0x030d3300, 0x0e7e0207, 0x39180001, 0x00903308,
0x033e9824, 0x002a3cd9, 0x2a44df00, 0x9ea00000, 0xb5043e98, 0x3998019e, 0x98f9a005, 0xfeb5063e,
@ -464,7 +464,7 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0xff90014f, 0x3df92048, 0x02f93594, 0x09033318, 0xb2b4bd04, 0x03f335fa, 0x7e01f935, 0x3e000f71,
0xfe00371a, 0x41fe0140, 0x44009001, 0xfe401190, 0x0ab20142, 0xb23c2290, 0x3d2cb21b, 0x75b07ed4,
0x02399800, 0x010a0fbf, 0x1bf4f9a6, 0x0524de3c, 0xe93f0000, 0x0e009033, 0x1e0a943d, 0x063ee920,
0xffd90036, 0xff200000, 0x94b394f9, 0x0ab2121c, 0x2cb21bb2, 0x0098b87e, 0x0036063e, 0x1bb20ab2,
0xffd90036, 0xff200000, 0x94b394f9, 0x0ab2121c, 0x2cb21bb2, 0x0098b97e, 0x0036063e, 0x1bb20ab2,
0x3e7e2cb2, 0x4bfe008d, 0x44bb9001, 0xa9c4bebf, 0xffffdf1f, 0x94b6e0ff, 0x04effd18, 0xa0e59eff,
0x0000d9be, 0xe9ff4000, 0x6b0bf494, 0x681fa433, 0x900149fe, 0x9dbf4099, 0xbf049992, 0x1ee4339c,
0x0003df42, 0xff89ff00, 0xefff3fff, 0x94d9fff4, 0xff0294b6, 0xc0b3e5f9, 0xe9c50b00, 0x36703e03,
@ -646,7 +646,7 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x01b024a1, 0x08113001, 0x300c1130, 0x050d1c01, 0xda00c04e, 0x000005d0, 0x005d0a7e, 0x001404da,
0x0c040b00, 0x59377e08, 0x00ad3300, 0x4d4c00f6, 0x00c3f171, 0x00d8db00, 0xa1300000, 0x00a13028,
0x3010a130, 0xa13014a1, 0x20a13018, 0xb024a130, 0x11300101, 0x0c113008, 0x0d1c0130, 0x00804e09,
0x0005d4da, 0x5d0a7e00, 0x1428da00, 0x040b0000, 0x377e080c, 0xad330059, 0x4c00a900, 0xc3f1b7c7,
0x0005d4da, 0x5d0a7e00, 0x1428da00, 0x040b0000, 0x377e080c, 0xad330059, 0x4c00a900, 0xc3f1b7cb,
0xb4db0000, 0x30000000, 0xa13028a1, 0x10a13000, 0x3014a130, 0xa13018a1, 0x24a13020, 0x300c1130,
0x01b01c01, 0x08113001, 0xc04e0a0d, 0x05d8da00, 0x0a7e0000, 0x1cda005d, 0x0b000014, 0x7e080c04,
0x33005937, 0x7e5c00a4, 0x7e005c97, 0x7e004db4, 0x7e005931, 0x7e000a74, 0x7e003cf7, 0x7e005249,
@ -662,7 +662,7 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x3d071bf4, 0xc700f8a4, 0x96b024f9, 0x0b9cf002, 0x00f89a32, 0x0089050f, 0x9ff60180, 0xb8060f00,
0x00010099, 0xf8009ff6, 0x02008900, 0x0099cf01, 0x1000008f, 0xf4049ffd, 0x34da181b, 0x7e008204,
0xf0001a27, 0x1bf401a4, 0x0a02f809, 0x3d00f824, 0xd900f8a4, 0x00001430, 0x34da99bf, 0x98000014,
0x95f90e99, 0x1e0a00f8, 0x00b99e7e, 0x0600a033, 0x00f802f8, 0x0100008f, 0xf6590049, 0x00f8009f,
0x95f90e99, 0x1e0a00f8, 0x00b9a27e, 0x0600a033, 0x00f802f8, 0x0100008f, 0xf6590049, 0x00f8009f,
0x00900089, 0xf00099ce, 0x0bf40194, 0xf1008e20, 0x00e9ce00, 0x9ffdef0f, 0x00e9f704, 0x5200eeb8,
0x00e9ce02, 0xf7049ffd, 0x00f800e9, 0x7e0a004a, 0xe7001a27, 0xb30114aa, 0x4f1e06a4, 0xf9cf4f00,
0xe899c700, 0x110f94b3, 0xf000f9cf, 0x9cf0ff94, 0xf89a320b, 0xf8a43d00, 0x8902f900, 0xce009000,
@ -751,7 +751,7 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x00f0b305, 0x0a09584a, 0x90014afe, 0xafb508aa, 0x010f9801, 0xb60093f0, 0xa9b50294, 0x02afb503,
0xb2100918, 0x18a9351b, 0xb5020f98, 0x099804af, 0x05a9b503, 0xa0a000bf, 0x005b0b7e, 0xf001a6b0,
0x9a120b9c, 0x59ab3e01, 0xfb020a00, 0xe27e1c15, 0x943d0059, 0xf001a6b0, 0xa6f00bac, 0xa29a3c01,
0x4c8900f8, 0x9ebf0005, 0xb5019f98, 0x9ea0019f, 0x005a267e, 0x0801a4b3, 0x00f8a43d, 0xff0a09f8,
0x4c8900f8, 0x9ebf0005, 0xb5019f98, 0x9ea0019f, 0x005a267e, 0x0801a4b3, 0x00f8a43d, 0xff0a02f8,
0x12f900f8, 0x000f8c89, 0xf20a99bf, 0x380090b3, 0x000fa881, 0xf10a10bf, 0x2c0004b3, 0x000a747e,
0x19a00109, 0x000f9889, 0x948990a0, 0xff0f0010, 0x90899fa0, 0x90a0000f, 0x000f9489, 0x587e9fa0,
0x10a00037, 0x12f911fb, 0x000f8c89, 0xb4bd04bd, 0xb44c90a0, 0x0fac8a00, 0x0b947e00, 0x0cb4bd00,
@ -1157,371 +1157,371 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x0a3299bf, 0x0bf4f9a6, 0x3a317e07, 0x2875fb00, 0x00299cd9, 0x15991800, 0xbeb2adb2, 0x0a009033,
0x008b707e, 0x44d900f8, 0xbf000006, 0xb2cab29b, 0xb0bdbcec, 0x000b7e7e, 0x00f81f0a, 0xdff430f4,
0x000005dc, 0xffbf32f9, 0x900149fe, 0xa2b21899, 0xa9bf9fa0, 0xb39899c7, 0x00aa1d99, 0x00299cd9,
0x02999800, 0xb34299c7, 0x009a0099, 0x0a0140fe, 0x14009001, 0xee7e0bb2, 0xa4330094, 0x4bfe551f,
0x90020a01, 0xee7e10bb, 0xa4330094, 0x09bf451f, 0x04bd0103, 0xbc1493ff, 0x94f09530, 0x121bf401,
0x0f0204b3, 0x009a447e, 0x0700a033, 0x900415f0, 0x04b30100, 0x49fee509, 0x14999001, 0x19a699bf,
0x0a150bf4, 0x7e1bb201, 0x33009509, 0xf80a1fa0, 0x8d233e09, 0xfe2ebf00, 0x99900149, 0xdf99bf10,
0x02999800, 0xb34299c7, 0x009a0099, 0x0a0140fe, 0x14009001, 0xef7e0bb2, 0xa4330094, 0x4bfe551f,
0x90020a01, 0xef7e10bb, 0xa4330094, 0x09bf451f, 0x04bd0103, 0xbc1493ff, 0x94f09530, 0x121bf401,
0x0f0204b3, 0x009a457e, 0x0700a033, 0x900415f0, 0x04b30100, 0x49fee509, 0x14999001, 0x19a699bf,
0x0a150bf4, 0x7e1bb201, 0x3300950a, 0xf80a1fa0, 0x8d233e09, 0xfe2ebf00, 0x99900149, 0xdf99bf10,
0xbfffffff, 0xeffd1f0a, 0x0099b904, 0xf09419ff, 0x96f00b9c, 0x1e94b601, 0xa0059efd, 0x8d233e29,
0xfe1f0a00, 0x99900149, 0xd99fbf18, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40c35,
0x05dcdfe4, 0x52f90000, 0x49feffbf, 0x30999001, 0x9fa0a3b2, 0xc5b2afbf, 0xfdc7b4b2, 0x00ddb31d,
0xfa95075c, 0x10f99508, 0xa132f032, 0xf9339232, 0x3000d515, 0x0cf415f6, 0x05f93346, 0xf63005fb,
0x1c0cf405, 0x8701f933, 0x301f0a00, 0x08f501f6, 0xf6300739, 0x240cf503, 0x8e283e07, 0x10f93300,
0xf630041a, 0x0e0cf410, 0xf50df630, 0x3e070e08, 0x33009155, 0x070611fd, 0x00915f3e, 0x421df933,
0x1df63006, 0x33250cf4, 0x03fa18f9, 0xf418f630, 0xfd330c0c, 0x3e06e717, 0x33009408, 0x01001af9,
0xd91cfd33, 0x94c53e06, 0x21f93300, 0xf6300262, 0x0c0cf421, 0xc51efd33, 0x8ecd3e06, 0x24f93300,
0xfd330639, 0x3e06b725, 0xdf009499, 0x0000299c, 0x2614f918, 0x0d18f4a9, 0xbcffa9c4, 0x6e3e98f9,
0xbda00093, 0x0094303e, 0x1d33080a, 0x7e069d00, 0x330063f7, 0x490a0300, 0xa9fdff00, 0x3e4aa004,
0x0a009430, 0x04163003, 0x067f0cf5, 0x00299cd9, 0x0e99bf00, 0xbc080a01, 0x99c7f4e1, 0x049ffd98,
0x06670bf5, 0x0e021033, 0x10041033, 0x843eea32, 0xeab2008e, 0x008e7a3e, 0x4bfea4bd, 0x2cbb9001,
0x0063b47e, 0x008a847e, 0x3f1fad33, 0x0149fe06, 0xbf2c9990, 0x1fe9959e, 0x0a0190b3, 0xa73ed4bd,
0x00dd008e, 0xc4ff0000, 0x943380e9, 0xf4bd0a00, 0x008ebe3e, 0xe6b0010f, 0x051ff400, 0xe995ff0f,
0x95d9ff08, 0xa090f9bc, 0x94c73e49, 0xb29b3200, 0x7e5db24c, 0x3e0077ca, 0x330094c7, 0x305507a0,
0x0cf407a6, 0x299cd912, 0xa6300000, 0x2b0df402, 0x008f243e, 0xf40ca630, 0x9cd9120c, 0x30000029,
0x18f409a6, 0x8f473e57, 0x0da03300, 0x33030a61, 0x05b80e1d, 0x008f7a3e, 0xdf019998, 0x04000000,
0x008f603e, 0xdf019998, 0x08000000, 0x008f603e, 0x00299cd9, 0x02999800, 0x0200008f, 0xf5049ffd,
0x3e00c61b, 0x98009045, 0x008f0299, 0x9ffd0400, 0xc41bf504, 0x90453e00, 0x02999800, 0x0100008f,
0xf4049ffd, 0x453e2f1b, 0x9cd90090, 0x8f000029, 0x98400000, 0x873e0299, 0x9cd9008f, 0x98000029,
0x00df0299, 0xfd008000, 0x1bf5049f, 0x453e00a9, 0x10330090, 0x16307307, 0x1a0cf407, 0x4b021033,
0xf4021630, 0x1033540c, 0x1d332700, 0x3e048601, 0x30008fd7, 0x0cf40c16, 0x0916300d, 0x3e6518f4,
0x30009015, 0x0df40e16, 0x94303e6d, 0x7e4ab200, 0x3e00789f, 0x320094c7, 0xb22b321a, 0x7e5db24c,
0x3e007cca, 0x320094c7, 0xb22b321a, 0x7e5db24c, 0x3e007c3b, 0x320094c7, 0xb22b321a, 0x7e467e4c,
0x94c73e00, 0xb22b3200, 0x0a5db24c, 0x7ba27e07, 0x94c73e00, 0x32080a00, 0xb24cb22b, 0x7b037e5d,
0x321a3200, 0xb23cb22b, 0x7e5eb24d, 0x3e007ed3, 0x320094c7, 0xb22b321a, 0xb24db23c, 0x78a77e5e,
0x94c73e00, 0x3e080a00, 0x0a0094c7, 0x009d3304, 0x9cd9047a, 0x98000029, 0x080a0299, 0x400094f1,
0x04670bf5, 0xfe0149fe, 0x99900142, 0x1822902c, 0x2da09da0, 0xa0049992, 0x0499929d, 0x99929da0,
0x929da004, 0x9da00499, 0x85011933, 0x01163000, 0x0a0e08f4, 0x021d3303, 0x213e0432, 0x41fe0091,
0x0140fe01, 0x902c1190, 0x1ab22800, 0x607e0bb2, 0x19bf0075, 0x43fe00bf, 0x0142fe01, 0x900794f0,
0x22902433, 0xfe3ab220, 0x2bb20141, 0xf01c1190, 0x1cb20704, 0xfd0404b6, 0x5c7e0509, 0x29bf006a,
0x1ebf3fbf, 0xb60141fe, 0xf4f00894, 0xff94f1ff, 0x10f4b6ff, 0x9018e4b6, 0x09fd1811, 0xfd1ab205,
0x0efd050f, 0x6a497e05, 0x91473e00, 0x7e2ab200, 0xb2006a39, 0x7e20bf2a, 0xbf006a29, 0x914d3e29,
0x0141fe00, 0xb2181190, 0x6a167e1a, 0xbf1ab200, 0x6a037e10, 0xb219bf00, 0xff04f11a, 0x1094b6ff,
0x7e0590ff, 0xbf0069f0, 0xff94f119, 0xa040a0ff, 0x94303e59, 0x7efab200, 0x3e0095f3, 0x330094c7,
0x330d00a0, 0x035c01ad, 0x0091ad3e, 0x9033b0bf, 0x94330c01, 0x9d3e2f02, 0x41fe0091, 0x90010a01,
0x1bb21811, 0x0094ee7e, 0x3f1fad33, 0x091fbf03, 0x9509fffe, 0xa0049fff, 0x91a13e10, 0xff04f100,
0xb22a3201, 0x95097e0b, 0x94c73e00, 0x7e9a3200, 0x3e0094ee, 0xb20094c7, 0x95227efa, 0x94c73e00,
0x299cd300, 0x39bf0000, 0x000000df, 0xfd080a20, 0x0bf5049f, 0x030a02f5, 0xef001d33, 0x0140fe02,
0x90014cfe, 0xcc902800, 0xfe0bb22c, 0x22900142, 0x7e2ab224, 0x7f007347, 0x03967009, 0x940b9cf0,
0x0e7e0791, 0x30180001, 0x01087e58, 0x00003300, 0x3e1fb20a, 0x7f00924c, 0x00a4732a, 0x3e19b20a,
0xc500924a, 0xa0734019, 0xa0731403, 0xa4731804, 0x9fe51c02, 0x4c3e0100, 0x9fe50092, 0x4c3e0200,
0x9fe50092, 0x4c3e0300, 0x9fb20092, 0x900149fe, 0x997f2c99, 0x88049973, 0x04967000, 0x731a0cf4,
0x70480190, 0x08f40196, 0x02907336, 0x039d734c, 0xce3e00e3, 0x99730092, 0x70009b07, 0x0cf40796,
0x05907310, 0x069d7369, 0x033e00cb, 0x99730093, 0x73009c08, 0x00bd099d, 0x0093383e, 0xfe07ff89,
0x3e04f9fd, 0x49009350, 0xf9ffc7ff, 0x0095f194, 0x92bf3e20, 0xc7ff4900, 0xf194f9ff, 0x8f180095,
0xfdfe3fff, 0x9fe5049f, 0x503e4000, 0xff490093, 0x94f9ffc7, 0x100095f1, 0x0092bf3e, 0xffc7ff49,
0x95f194f9, 0xf43e0800, 0xff490092, 0x94f9ffc7, 0x100095f1, 0xfe3fff8f, 0xe5049ffd, 0x3e80009f,
0x49009350, 0xf9ffc7ff, 0x0095f194, 0x931b3e08, 0xc7ff4900, 0xf194f9ff, 0x8f100095, 0xfdfe3fff,
0x9fe5049f, 0x503ec000, 0xff490093, 0x94f9ffc7, 0x080095f1, 0x0093423e, 0xffc7ff49, 0x95f194f9,
0xff8f1000, 0x9ffdfe3f, 0x00008f04, 0xf59fff01, 0x00299cd9, 0x50991800, 0x0f009033, 0x02000089,
0x3e95f9ff, 0x8900936e, 0xfffdffff, 0x49a094f9, 0x0094303e, 0xf514a630, 0xc401480c, 0xd0d9ffaf,
0xbc000004, 0x9cd9e89f, 0x0a000029, 0x3befc708, 0xc7989fbc, 0x9fbb96ef, 0x0194f005, 0x012b0bf5,
0xe7ff29c4, 0x54010def, 0x040a029b, 0x18f5bf66, 0xf3f00119, 0xffb9e400, 0xc2f9bcff, 0xf404c6b0,
0x040c090d, 0x0093ca3e, 0xbae44da0, 0xe9c4ffff, 0x42ebe703, 0x00943301, 0xb0babc12, 0x0029bcd9,
0x3e4ab200, 0xd90093f3, 0x00000644, 0xbabc99bf, 0xbc4ab2b0, 0x7e7eb09b, 0x303e000b, 0x9b320094,
0x009aca7e, 0x0094c73e, 0x0f00a033, 0x1d33080a, 0x3e00b101, 0xfe0094c7, 0x00900140, 0x7e0ab224,
0x3f0072fb, 0x00a54f09, 0x06009433, 0x4fa05a0f, 0xc73e1f0a, 0x9cd90094, 0x18000029, 0x99331599,
0x33008700, 0x303802a0, 0x0cf402a6, 0x00a0330f, 0x01a43318, 0x946f3e6e, 0x03a03300, 0x04a4332c,
0x948f3e62, 0x7e3ab200, 0x3e009d81, 0xb20094c7, 0x7ecbb2ba, 0x3e009ffb, 0x320094c7, 0x9d0a7e2a,
0x94c73e00, 0x7e2a3200, 0x3e00a211, 0x320094c7, 0xa1a57e2a, 0x94c73e00, 0x299cd900, 0x99180000,
0x00903315, 0x6cfbc724, 0x4db22c32, 0xa4f05eb2, 0x9eab7e0f, 0x94c73e00, 0x3e020a00, 0x0a0094c7,
0x94c73e03, 0xfe090a00, 0x99900149, 0xd99fbf30, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31,
0xa4f01c55, 0x02a4b6ff, 0x1f0acaa0, 0xaf3200f8, 0xf630040a, 0x120cf402, 0xd9fff4f0, 0x00002a5c,
0x0af89fbc, 0xf8bfa01f, 0x0aaf3200, 0x02f63004, 0xf0100cf4, 0x5cd9fff4, 0x0a00002a, 0xf99bbc1f,
0x12f900f8, 0xb210af95, 0x08ae95b1, 0x00299cd0, 0x26ff0900, 0x3d1bf4e9, 0x26490918, 0xb21bf5f9,
0x4a091800, 0x99331c0a, 0x3000ab01, 0x08f50196, 0x060a00a1, 0x9d029d33, 0x13099800, 0x1f0af43d,
0x0918b9a0, 0x4a0f3549, 0x35019910, 0xf13e4909, 0x09180095, 0x330a0a4a, 0xd97a0094, 0x00002a5c,
0xf4f099bf, 0xe899c7ff, 0xbc0694b6, 0xf6b0f0f9, 0x5e0cf43f, 0xe433030a, 0xf9905b0c, 0x4096b104,
0x4e0cf400, 0xdf02f994, 0x00002a68, 0x7f909fbc, 0x019a589f, 0xf473080d, 0x09981b02, 0xf0290d04,
0x90338094, 0x4b7e0f00, 0x01090075, 0x0935d43d, 0x299cdf50, 0xfe180000, 0xffd9c449, 0x0913f9b5,
0x4af93502, 0x0affe4f0, 0x3e1ea01c, 0x0a0095f1, 0xf911fb04, 0xb2adb222, 0xe8a0c7b2, 0x06b0bbbf,
0xcc0cf53f, 0xffbcc400, 0xb3ffaec4, 0x0a0d0fe4, 0x3fc6b005, 0x00bb0cf5, 0x002a5cd9, 0xc499bf00,
0x99c7ff9f, 0x06f194e8, 0xb30694b6, 0xb32c0ee0, 0x0a440fe0, 0x0dedb31f, 0x097c009a, 0xff967190,
0x8c0cf500, 0xff9fe400, 0x2a68d9ff, 0x9fbc0000, 0x3e2fa0f8, 0x7c00966d, 0x96719001, 0x0cf400ff,
0xff9fe46f, 0x2a68d9ff, 0x9bbc0000, 0x3e1f0af9, 0xbc0096cf, 0x050af0c9, 0x94f0d9c7, 0x999002fb,
0x029c9401, 0xb1e0cbbc, 0xf41000e6, 0x01bc440c, 0xb6030a90, 0xc9bc0294, 0x00f6b1f0, 0x320cf410,
0x08f49ba6, 0xf49ea608, 0xb9a62008, 0xa6080df4, 0x1608f4bf, 0x002a68df, 0xa09fbc00, 0x7eb0bfbc,
0x3e000b7e, 0x0a00966d, 0x96cf3e04, 0xfb030a00, 0xb1c9b221, 0xf40fffa6, 0x9abc2b0c, 0x0096b190,
0x210cf410, 0x002a68de, 0x90aebc00, 0x0a00d033, 0xfa3e9ab2, 0xbab20096, 0x7e7e9bb2, 0x1f0a000b,
0x040a00f8, 0x30f400f8, 0x05dcdfe4, 0x12f90000, 0x49feffbf, 0x20999001, 0x9fa0a0b2, 0xb4f0d1b2,
0xb4edb2ff, 0xe0b40aa0, 0x0709c40b, 0x1bf49ba6, 0x2f0fc775, 0x900149fe, 0x9da00899, 0xb5029eb5,
0x9fbc019a, 0xfe94bdb8, 0xff90014f, 0xb5f9a014, 0xf1b501fc, 0x2309c702, 0xf9bcbabf, 0x850fc7c8,
0x3c8a09c7, 0xf4f0e09f, 0x910dc71f, 0x3c05cfbb, 0xeeb990d9, 0x1fd4f000, 0xb91fe4f0, 0xefbc0099,
0x1f94f0e0, 0x9dbcff0f, 0x95f9bc90, 0xbb05febb, 0xfcfd049d, 0x0099b904, 0xfd04fdbb, 0x9ffd049a,
0xfeb9a005, 0x99900149, 0xd99fbf20, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f41c15,
0x05dcd9f4, 0x82f90000, 0xd1b299bf, 0x90014ffe, 0xf9a02cff, 0xff92dd3f, 0x091f0003, 0x01f03517,
0x2002f035, 0xb2b6b2f9, 0x33a5b2e3, 0xdb1900d4, 0x00000528, 0x7e7e240c, 0x0909000b, 0x19200a32,
0x0098813e, 0xd630030a, 0x780cf409, 0xc40147fe, 0xf8b2ffc4, 0x7790043d, 0x98783e24, 0xff09c400,
0x92947bb2, 0xbc040c02, 0xd43da026, 0x0096d17e, 0x6b1fa433, 0xf9c47fbf, 0xf494a607, 0xf9c75e18,
0x01991223, 0xf4019630, 0xfec7520c, 0xffe9c42f, 0xc7c8893c, 0xf9c78afd, 0x90d93c85, 0x0cf49c26,
0x03e0333b, 0x91f9c738, 0x26909d3c, 0x2c0cf49c, 0x109052bc, 0x9fa00100, 0x0926193f, 0x0aa108f4,
0x0149fe1f, 0xbf2c9990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x98b13e23, 0xbf0d0a00, 0xff0fc439,
0x000000de, 0x049efdff, 0xa005f9fd, 0x98813e3f, 0x3a317e00, 0x0c85fb00, 0xd9a830f4, 0x000005dc,
0x99bf82f9, 0xb2f830f4, 0x014ffea7, 0xa080ff90, 0xb0aabff9, 0xc1b00eb1, 0x68a6c70d, 0x30016912,
0x0cf50396, 0xa9c7013b, 0x0a96306c, 0x01310cf5, 0xfe0141fe, 0x11900140, 0x50009057, 0x2010a5b6,
0xb2b4bd19, 0x94e27e0c, 0x1fad3300, 0x09bf011d, 0xc40142fe, 0x2290ff6b, 0x04b4b658, 0xb9bc2ab2,
0xb26c32b0, 0x7e7eb21d, 0x300097be, 0xad333fa1, 0xfe00f51f, 0x01080141, 0x3d401190, 0x08199024,
0x3d0c1e90, 0xb054bd34, 0xe1b00c91, 0x9a0d3e0b, 0x1490b400, 0x100c1bb2, 0x59bcd43d, 0x7e4ab240,
0x330096d1, 0x00c31fad, 0x1f9819bf, 0xffffde01, 0x9efde0ff, 0x021fb504, 0x203319a0, 0x043d0a00,
0x0099a73e, 0xb40cb0b4, 0x1ab20bc0, 0x008d3e7e, 0xa0321fbf, 0xffffffde, 0x1f09c4e0, 0xb604fefd,
0x9ffd1894, 0xb219a005, 0x0c1bb24a, 0x7e010d10, 0x330096d1, 0x33731fa4, 0x020a0020, 0x9a073e01,
0x1f043300, 0x3e043d3f, 0xc40099f4, 0x1c98ff09, 0x031d9802, 0xfe0de0b4, 0xff90014f, 0xa8f9bc58,
0xb00e90b4, 0x001001e1, 0xb03b3201, 0x7eb20091, 0x0097067e, 0x26579034, 0xd208f409, 0x009a073e,
0x843d19bf, 0x101f9295, 0x55900133, 0xf5362610, 0x0aff4208, 0x0080331b, 0x9a233e11, 0x3e030a00,
0x34009a26, 0x49fe3fa0, 0x80999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x30f4003a,
0x5885fb08, 0xdff430f4, 0x000005dc, 0xffbf12f9, 0x900149fe, 0x41fe1099, 0x909fa001, 0xb84a0c11,
0xb2040b00, 0x8c307e1c, 0x1fa43300, 0x0140fe2b, 0x9000b44a, 0x040b0800, 0x307e0cb2, 0xa433008c,
0x19bf161f, 0x9fa60fbf, 0xf00b9cf0, 0x9a320196, 0x009a963e, 0x49fea43d, 0x10999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x15fb003a, 0x04a9980c, 0xac90afb2, 0xf0010b59, 0x904a2095,
0x04f9b500, 0x008c307e, 0x30f400f8, 0x05dcd990, 0x52f90000, 0x4ffe99bf, 0x84ff9001, 0xf9a0030e,
0x0500ad33, 0x299cd901, 0x99180000, 0x00993359, 0xba3200f6, 0xbd014cfe, 0x20cc90b4, 0x0094e27e,
0xad33ae32, 0xfe00e31f, 0xb84a0144, 0x1c449000, 0x4cb2040b, 0x008c307e, 0xad33ae32, 0xfe00cb1f,
0xb44a0140, 0x18009000, 0x0cb2040b, 0x008c307e, 0xad33ae32, 0xbf00b31f, 0xa64abf09, 0xa60bf5a9,
0xbcaa9000, 0x0b0140fe, 0x27009001, 0x307e0cb2, 0xae32008c, 0x911fad33, 0xfe093f00, 0x43b20142,
0xf0282290, 0x0045ff94, 0x02915410, 0x009ba93e, 0x1be43abf, 0x5abcffff, 0xf4b9a692, 0x9bb2050d,
0xaa90b072, 0x00b3f0bc, 0x307e2cb2, 0x0fe4008c, 0xae32ffff, 0x511fa433, 0x107b39bf, 0x202fbc02,
0xf190f9bc, 0xa00fff94, 0x00147339, 0x0149fec7, 0xbf209990, 0x0799909a, 0x4bfe9c3f, 0x90010d01,
0xc4f028bb, 0x02c4b6ff, 0x0096d17e, 0xa433ae32, 0x4cb2171f, 0x0b00b84a, 0x8af07e04, 0x3eae3200,
0x0e009be5, 0x0149fe09, 0xbf849990, 0x05dcd99f, 0x99bf0000, 0xf9a6ea32, 0x7e070bf4, 0xfb003a31,
0xa9987055, 0xf0008f04, 0x059ffd3f, 0xf804a9b5, 0x12aeb200, 0x040a10bf, 0xf926ee09, 0x332e0df4,
0x7f0a00c4, 0x9c2c3eea, 0x01ea5800, 0x1800a073, 0xb926ff09, 0xe4140bf4, 0xbbffffa9, 0x94f0059b,
0x071bf401, 0x00f8090a, 0x00f81f0a, 0xdff830f4, 0x000005dc, 0xffbf32f9, 0xfe0149fe, 0x99900140,
0x0143fe14, 0xa2b29fa0, 0x0090b1b2, 0x12339013, 0x0b10ec4a, 0x7e0cb201, 0x33008b70, 0x3f741fa4,
0x01a6300a, 0xb3690cf4, 0xf0210020, 0xa994ffa4, 0xb6240b05, 0x2cb202a4, 0xb8a0a9bc, 0x0010eeaa,
0x008b707e, 0x4b1fa433, 0x230010b3, 0x040b0a3f, 0xa4f01cb2, 0x05a994ff, 0xbc02a4b6, 0xaab8a0a9,
0x7e0010ee, 0x33008b70, 0x4a281fa4, 0x010b10ec, 0x707e3cb2, 0xa433008b, 0x3f3f191f, 0xf401f630,
0x093f0e0c, 0x1bf49f26, 0x9cef3e8a, 0xfe050a00, 0x99900149, 0xd99fbf14, 0x000005dc, 0xf9a699bf,
0x7e070bf4, 0xfb003a31, 0x30f40835, 0x05dcdfd8, 0x22f90000, 0x49feffbf, 0x30999001, 0x9fa0a132,
0x00299cd9, 0x04999800, 0x080ab2b2, 0x400094f1, 0xfe360bf4, 0xb4bd0140, 0xb20c0090, 0x9c4c7e0a,
0x1fa43300, 0x320ab225, 0x7e010c1b, 0x33009c11, 0xc4171fa4, 0x9990ff19, 0x9099bc02, 0x7f9009bc,
0x0f92f099, 0x49fe29a0, 0x30999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a,
0xd830f428, 0x0005dcdf, 0xbf62f900, 0x0149feff, 0xb2409990, 0xd99fa0b2, 0x0000299c, 0xb2049998,
0x0bc3b2a6, 0x0094f108, 0xe50bf510, 0xfeb4bd00, 0x11900141, 0x7e1ab21c, 0x32009c4c, 0x1fad33ab,
0xff0b00d1, 0x010c1ab2, 0x009c117e, 0xad33ab32, 0x0b00c01f, 0x3d1ab2ff, 0x9c117ec4, 0x33ab3200,
0x00af1fad, 0xbd011458, 0xa029a094, 0x04109039, 0x4c72157f, 0x004da47d, 0x01e4bd80, 0x9e313e01,
0x01c9c400, 0x7f200bf4, 0xf4fd660f, 0x1ebc0a1d, 0x9e263ea4, 0xf4fd6600, 0x1ebc0d1b, 0x05a9fd94,
0x009e263e, 0xee90df72, 0x01c57601, 0x72020090, 0x00c473fd, 0xf06ebfd0, 0xa9c400d3, 0xffffdfff,
0x94b6ff00, 0x04effd10, 0xff00008c, 0xfd059efd, 0x9dfd049c, 0xbf69a005, 0xff4ee429, 0xe8afc7ff,
0xf110ed94, 0xfdff0094, 0xf9fd059d, 0xe42fa005, 0xb9ffff59, 0xe9ff00ee, 0x150bf4a4, 0x9cfd39bf,
0x059afd04, 0x29bf39a0, 0x010095f1, 0x49fe29a0, 0x40999001, 0xdcd99fbf, 0xbf000005, 0xa6ba3299,
0x070bf4f9, 0x003a317e, 0xf42865fb, 0xdcdff030, 0xf9000005, 0xfeffbf62, 0x99900149, 0xa0a13228,
0x32b0329f, 0xb2d5b2c4, 0x04b630e6, 0x01120cf5, 0x00299cd9, 0x049e9800, 0x90ffb9c4, 0x9fc41199,
0xbb080a1f, 0x99b905ef, 0x1f94f000, 0x0f909fbc, 0x05f9bbff, 0xb334feff, 0x00e9013d, 0x4ffe94bd,
0x20ff9001, 0xb50142fe, 0x229001f9, 0xbdf9a01c, 0x7e2bb2a4, 0x33009c4c, 0x00c91fad, 0x3c322ab2,
0x117e1b32, 0xad33009c, 0x3300ba1f, 0x30460200, 0x0cf40206, 0x00003310, 0x010d331a, 0x5f3e00a5,
0x0033009f, 0x0d334103, 0x3e009804, 0xc4009f95, 0x90f1ff19, 0x9eb80126, 0x3e001136, 0xc4009f6b,
0x90f1ff19, 0x9eb80126, 0x0f001146, 0x9fa43e10, 0xff19c400, 0x012690f1, 0x9eb8040f, 0x3e001156,
0xc4009fa4, 0x90f1ff19, 0x020f0126, 0x115a9eb8, 0x9fa43e00, 0xff19c400, 0x012690f1, 0xb801004f,
0x00115c9e, 0x0a034994, 0xf89cc404, 0x18f4cfa6, 0x08c99032, 0x9fa6080b, 0xbc060df4, 0xecbcb2fc,
0x0140fea0, 0xb2200090, 0x8b707e0c, 0x1fa43300, 0xa009bf13, 0x01009859, 0xe03e60a0, 0x030a009f,
0x900149fe, 0x9fbf2899, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf41065fb, 0xdcdfe830,
0xf9000005, 0xfeffbf52, 0x99900149, 0xa0a3b22c, 0x299cd99f, 0x99980000, 0x0ab2b204, 0x0094f108,
0xca0bf520, 0x0140fe00, 0x0090a4bd, 0x7e0bb218, 0x33009c4c, 0x00b81fad, 0xff0b0ab2, 0x117ec43d,
0xad33009c, 0xfe00a91f, 0x007f0141, 0x4a1c1190, 0x100b10dc, 0x707e1cb2, 0xad33008b, 0x7200911f,
0xbd15b20b, 0x0104bdc4, 0x3eff04e0, 0xc400a0e7, 0x0bf401b9, 0x07c6b069, 0xbf350cf4, 0xf85c3c3d,
0x901f0ec4, 0x99b90309, 0xfff4f000, 0xbc1f94f0, 0x49bc909e, 0xf49fff95, 0xbb049ebb, 0x99b904fe,
0x049dfd00, 0xa0059ffd, 0xa0db3e39, 0x3c2dbf00, 0x1ec4f85c, 0x1d09921f, 0xf00099b9, 0x94f0fff4,
0x909ebc1f, 0xff9549bc, 0x9ebbf49f, 0x04febb04, 0xfd0099b9, 0x9ffd049d, 0x9029a005, 0xb57601cc,
0x04009001, 0x73041190, 0xfe8800b4, 0x99900149, 0xd99fbf2c, 0x000005dc, 0xf9a699bf, 0x7e070bf4,
0xfb003a31, 0x30f41855, 0x05dcdfd4, 0x22f90000, 0x49feffbf, 0x34999001, 0x41fea232, 0x909fa001,
0x984a0c11, 0xb2280b23, 0x8b707e1c, 0x1fa43300, 0x0110985d, 0x90bc19bf, 0xf490a6f2, 0xf6b01008,
0x0b9cf001, 0x3e0196f0, 0x0900a155, 0xf0f9a6e1, 0x96f00b9c, 0x330b0a01, 0xd9330090, 0x000029b4,
0xbf019c98, 0x014ffe9b, 0xbc0cff90, 0x9c4d90f0, 0x08923523, 0x0990240e, 0x1f94f001, 0xb504fa90,
0x367e01f9, 0x847e0021, 0x49fe008a, 0x34999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x25fb003a, 0xf830f42c, 0x0005dcdf, 0xbf12f900, 0x0149feff, 0x320c9990, 0xd99fa0a1, 0x0000299c,
0x0a049f98, 0x00008908, 0x04f9fd01, 0xfe2a0bf4, 0xa4bd0140, 0xb2080090, 0x9c4c7e0b, 0x1fa43300,
0x320ab219, 0x7ec43d1b, 0x33009c11, 0xc40b1fa4, 0x067e1f1a, 0x49fe00a1, 0x0c999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x15fb003a, 0xf830f408, 0x0005dcdf, 0xbf12f900, 0x0149feff,
0x320c9990, 0xd99fa0a1, 0x0000299c, 0x0a049998, 0x0094f108, 0x00907380, 0x0140fe2e, 0x0090a4bd,
0x7e0bb208, 0x33009c4c, 0xb21c1fa4, 0x3d1b320a, 0x9c117ec4, 0x1fa43300, 0x1f1ac40e, 0x7e20a5f0,
0xfe00a106, 0x99900149, 0xd99fbf0c, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x52f90815,
0xb206b995, 0x0394b6c4, 0xa9bcd5b2, 0x3fb0c430, 0x00a2df3e, 0x329831bf, 0x0054b301, 0xbd010a18,
0x7e0cb2b4, 0xfd0039cd, 0x1afd052b, 0xa2c73e05, 0x0a0cb200, 0x7eb4bd01, 0xb90039cd, 0xaab900b9,
0x0429fd00, 0x92041afd, 0x40b30144, 0x00900b00, 0x4004b301, 0xb531a0c8, 0x04bd0132, 0xb3083390,
0xfbb50044, 0x7ed4bd51, 0xf800a27e, 0x7e010d00, 0xf800a27e, 0x3fbcc400, 0xb606b5b6, 0xabbc03b4,
0x01ab98a0, 0x797eaabf, 0xa4f00039, 0xb200f801, 0x3df4bdae, 0x08f0b3a4, 0x98ef3c0a, 0x90a0a93c,
0xfeb301ff, 0xf0f30080, 0xaa3907a2, 0x3f00f801, 0x01e9c4ae, 0xbd1b0bf4, 0x3cff0ef4, 0xff9098af,
0xf59e2601, 0xb300c51b, 0x3ef410f4, 0xbd00a40c, 0x90afbcf4, 0x90099918, 0x9d3301ff, 0xb300ae00,
0x18f207f4, 0x800c06ad, 0x0cf5dc26, 0xe433009e, 0xa9183800, 0x009d3301, 0xa9180093, 0x009d3302,
0xa918008b, 0x009d3303, 0xaf180083, 0x05a91804, 0x76fff4f0, 0x9ffd0894, 0x00947305, 0xf4dc266f,
0x013e691b, 0xaf1800a4, 0x05a91804, 0xf0fff4f0, 0x94b6ff94, 0x059ffd08, 0x737099cd, 0x184d0094,
0x991201a9, 0x19963041, 0x18400cf4, 0x963102a9, 0x1df40040, 0x5a963136, 0x2f1cf400, 0x3103a918,
0xf4004096, 0x9631251d, 0x1cf4005a, 0x00d0331e, 0xffefc41b, 0xf404f9c4, 0xf9c4151b, 0x0294b30a,
0x07a9180b, 0x08009033, 0x00f8060a, 0x00f8a4bd, 0x020f12f9, 0xa0b2b1b2, 0x2200a0b3, 0x94f0a93f,
0x171bf408, 0x00a30f7e, 0x060010b3, 0x09181a20, 0x26060f08, 0x051bf4a9, 0xfab2f4bd, 0xa9b211fb,
0xc0b3020a, 0x9abf1200, 0xb4b6cdb2, 0x00804c07, 0x00b75e7e, 0x30f400f8, 0x05dcdff8, 0x22f90000,
0x49feffbf, 0x10999001, 0x9fa0a0b2, 0x00b3020a, 0x0abf3400, 0xb294943d, 0x0141fe07, 0x11902bb2,
0x20010c0f, 0x7e1db219, 0xb300b775, 0x3f1700a4, 0xb20abf19, 0xf01db22b, 0x010cfd94, 0x5e7e1920,
0x49fe00b7, 0x10999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a, 0xf830f408,
0x0005dcdf, 0xbf42f900, 0x0149feff, 0xb2189990, 0xb29fa0a1, 0xb2c0b2b4, 0x00a0b3d3, 0x00c0b356,
0x07cf1852, 0x42fe94bd, 0x14229001, 0xa001ff10, 0x07cf3529, 0x0f7ecab2, 0x2bb200a3, 0xb2080a35,
0xa7b17e1a, 0x00a4b300, 0xb22bbf2c, 0x7e1ab20c, 0xb300a43e, 0xb21e00a4, 0x7e4bb21a, 0xb300a456,
0xb31200a4, 0xbf0e0030, 0x3e32a022, 0x0a00a531, 0x0149fe02, 0xbf189990, 0x05dcd99f, 0x99bf0000,
0x0bf4f9a6, 0x3a317e07, 0x0845fb00, 0xc0b202f9, 0x2400a0b3, 0x2000c0b3, 0xb4b6aabf, 0x00804c07,
0x757e0db2, 0xa4b300b7, 0x0ab21000, 0x00a32f7e, 0x00a5763e, 0x01fb020a, 0x1700a0b3, 0x1300c0b3,
0xcdb2aabf, 0x0c07b4b6, 0xb7757e10, 0x0a00f800, 0xf900f802, 0xb2b3b242, 0x00a2b2c4, 0x00a0b302,
0xa5e97e42, 0xb2030000, 0x00a0b3a1, 0xb23bb236, 0x7e1cb22a, 0xb200a54c, 0x00a4b3a0, 0xbd1ab21e,
0xa4107eb4, 0xb3a0b200, 0xb31000a4, 0x180c0040, 0x94f00619, 0xb249a0ff, 0x7e1bb22a, 0xb200a60b,
0xf841fb0a, 0xf800f800, 0x98aeb200, 0xa0b30eaa, 0xf4bd0a00, 0x00a6013e, 0xb30fea98, 0x0f0e00a0,
0x0eff9001, 0xe9bc94bd, 0xb300f8f9, 0x981a00b0, 0x90b30ea9, 0xa9980d00, 0x0094b30f, 0x9001090c,
0xabbc0e99, 0x9800f899, 0xa9a002b9, 0xa9b5ff09, 0x02b99801, 0xb504abb5, 0xa9b503ac, 0xf900f802,
0x32a0b222, 0x0ad2b2c1, 0x00b0b302, 0x400cb85e, 0xd4bd0001, 0xb304c998, 0x33440090, 0xb3080014,
0x3f3c0390, 0x26b93fcf, 0x321bf4f9, 0x1801cf18, 0xf92601b9, 0x18271bf4, 0xbf1802ce, 0x90ddbc02,
0xb6909dbc, 0x99b80394, 0xbc000140, 0xef269009, 0xa00b1bf4, 0x3ea4bd29, 0x9000a6a7, 0xcc9001dd,
0x14d4b318, 0xfb040ab3, 0xb2abbf21, 0xa6f009ac, 0x0d0bf4b9, 0xb503aa98, 0x5b7e01cb, 0x00f800b6,
0xa1b232f9, 0x04bdb2b2, 0xef3ef003, 0x19bf00a6, 0xb2010090, 0xf493a61a, 0x030a090d, 0x00a6f63e,
0x1bf493a6, 0x3e020a09, 0x7e00a6f6, 0xa600a6a9, 0xdd08f402, 0x31fba4bd, 0xdff830f4, 0x000005dc,
0xffbf82f9, 0x900149fe, 0xa3b22899, 0xb8b29fa0, 0x8400a9b3, 0x00b0b300, 0x0147fe7f, 0xbd05a498,
0xbd54bd24, 0x24779014, 0x00a7603e, 0xbd0c3a98, 0xb002bc94, 0x7cb279a0, 0x00b65b7e, 0xff0f79bf,
0x0bf49fa6, 0x3e643d09, 0x9000a74e, 0x00900155, 0xf404a601, 0x6033d908, 0x11900700, 0x2024bc01,
0xa6033998, 0x0b18f429, 0x04bd0106, 0x00a7513e, 0x1ab24bb2, 0x0016fc7e, 0x0df45aa6, 0x01119006,
0x3d063998, 0xf419a6f4, 0x010f050c, 0xa4bd8f20, 0x00a7963e, 0x49fe020a, 0x28999001, 0xdcd99fbf,
0xbf000005, 0xf4f9a699, 0x317e070b, 0x85fb003a, 0xf030f408, 0x0005dcdf, 0xbf82f900, 0x0149feff,
0xfe309990, 0x9fa00147, 0xb208a998, 0x09b1b0a6, 0x91b0f105, 0xb2843d0a, 0x2c779090, 0xbd036998,
0xa67fa0f4, 0x0708f409, 0x010804bd, 0xa60a90b4, 0x351bf409, 0x32008033, 0x00a8593e, 0xbc0c6a98,
0x7cb24010, 0x5b7e4bb2, 0x79bf00b6, 0x9fa6ff0f, 0x900f1bf4, 0xf1090122, 0x1bf439a6, 0x9043b205,
0x2c3e0111, 0x24bd00a8, 0xf10314bd, 0xa6056998, 0xcb08f419, 0x1e0020b3, 0x18f429a6, 0x0860b50f,
0xa009f0b4, 0xa86a3ef3, 0xa6f10f00, 0x051bf45f, 0x09bc05b2, 0xa7dc3e00, 0x091a0a00, 0xf459a6f1,
0x65b50d0b, 0x0990b408, 0xa4bd95a0, 0x900149fe, 0x9fbf3099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9,
0x003a317e, 0xf41085fb, 0xdcd9f830, 0xf9000005, 0xfe99bf82, 0xff90014f, 0xa0a3b228, 0xb2b4b2f9,
0x00c033d0, 0x3ddab20e, 0x7e140cb4, 0xfe00b78c, 0x14bd0142, 0x08242290, 0x06ff07fe, 0x3efb05fc,
0x9800a939, 0x94bd0c3a, 0xa0b014bc, 0x7e2cb229, 0xbf00b65b, 0xa6f00f29, 0x560df49f, 0x9fa6fd0f,
0xa6110cf4, 0x3018f496, 0x1bf495a6, 0xa9083e45, 0xf498a600, 0x97a62f0b, 0x98371bf4, 0x99900109,
0x0109b501, 0x00a9363e, 0x90040998, 0x09b50199, 0xa9363e04, 0x02099800, 0xb5019990, 0x363e0209,
0x099800a9, 0x01999003, 0x3e0309b5, 0xbf00a936, 0x01999009, 0x119009a0, 0x05399801, 0x08f419a6,
0x0149fe85, 0xbf289990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0885fb00, 0xdff830f4,
0x000005dc, 0xa1b222f9, 0xb2b2ffbf, 0xbf03aa98, 0x0149fe1b, 0xfe109990, 0x9fa00140, 0xb20c0090,
0xb65b7e0c, 0x980cbf00, 0x2bb2031a, 0x00b6727e, 0x09011b98, 0xf4b9a6ff, 0x1998101b, 0x0212b504,
0x3e0292b5, 0x9800a9b0, 0x2cb2031a, 0x00b6727e, 0xbf031a98, 0x7efd0c1b, 0xfe00b672, 0x99900149,
0xbf12a010, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0825fb00, 0xdfc830f4, 0x000005dc,
0xffbf82f9, 0xfef830f4, 0x99900149, 0x929fa060, 0xae180499, 0xa0f4bd1c, 0x05a9989f, 0x050aa2b2,
0x330b91b0, 0x021a00e9, 0x980c2b98, 0x4afe092c, 0x90f10001, 0x44fe44aa, 0x01a6b201, 0xb6877e20,
0xb205b200, 0x304490a3, 0x00aa713e, 0xa6082998, 0x310bf439, 0x3bb22ab2, 0x4db2010c, 0x00a8877e,
0xb3044998, 0x981f0094, 0x94b30349, 0x49981800, 0x0094b302, 0xa649bf3b, 0x0918f491, 0x643e30b2,
0x19b200aa, 0xb20bb0b4, 0x7e6ab291, 0xb200b6a0, 0xf435a6a3, 0x030ab91b, 0x0bf503a6, 0x14b301a3,
0x03b20c00, 0x8e3e743d, 0x03b200aa, 0x38940107, 0xb254bd07, 0xab9a3e86, 0x0c2a9800, 0x53bce4bd,
0x014cfe10, 0x9016e1b0, 0x1bb258cc, 0x00b65b7e, 0xf300adb3, 0x1690b400, 0x9fa6f00f, 0x00d80cf5,
0x2ab294bd, 0x7e1591b0, 0xb200a5e9, 0x00a9b3a4, 0x2abf00d6, 0x804c6bb2, 0x7e4db200, 0xb200b775,
0x00adb3a0, 0x2ab200a7, 0x4cb21bb2, 0x90014dfe, 0xbd7e50dd, 0xa0b200a4, 0x9000adb3, 0x902ab200,
0x010c014b, 0x90014dfe, 0x3f7e54dd, 0xa0b200a6, 0x7800a4b3, 0x9815b0b4, 0x4afe0c2c, 0x30aa9001,
0x00a6277e, 0xa60c90b4, 0x1e1bf491, 0xfe14b0b4, 0xaa90014a, 0xa95c7e30, 0x1590b400, 0xb3059f98,
0x3e2300f4, 0x0e00ab88, 0xf49ea6ef, 0x0300090d, 0x00ab883e, 0x90014afe, 0xa97e30aa, 0x243e00a6,
0xf99800ab, 0x14e0b402, 0x1bf491a6, 0x02feb506, 0x91a6f9bf, 0xa0091bf4, 0xab883efe, 0x01f99800,
0x1bf491a6, 0x01feb506, 0x2ab24bb2, 0x00a60b7e, 0x130004b3, 0x90015590, 0x29988066, 0xf559a605,
0x33fefa08, 0x98460070, 0x8db2042f, 0x2ab2e4bd, 0x0b00f1b0, 0x0070dc02, 0x41fe0000, 0x5c119001,
0x7e0111b0, 0x9800a5e3, 0x2abf042c, 0xfb048bb2, 0x00b7477e, 0x2c981ebf, 0xbda0b204, 0xb22ab2b4,
0xa5e57e0d, 0x0004b300, 0xbdff0406, 0xac003e04, 0x0c2a9800, 0xb2b003bc, 0x0100904c, 0x00b6727e,
0xa60b90b4, 0xec08f409, 0xbc032f98, 0x29b59039, 0xf49fa609, 0x94bd0808, 0xbd0929b5, 0x0149fea4,
0xbf609990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x0830f400, 0xf43885fb, 0xdcd9cc30,
0xf9000005, 0xf499bf82, 0x4ffef830, 0x5cff9001, 0xe1b0f9a0, 0xb2c8b20b, 0xb3a3b2d6, 0x028400b9,
0x7f00e9b3, 0x2caf1802, 0xbd0141fe, 0x54119094, 0x030019a0, 0x6d00f933, 0xb2c43d02, 0xa63f7e1d,
0xb3a0b200, 0x025e00ad, 0x68bc17bf, 0x017998f0, 0x08f59fa6, 0x7998024d, 0x0194b304, 0x3e05000a,
0xb300aee1, 0x023e0069, 0x09027f98, 0xf5f9a6f0, 0xb2022a0b, 0xa5e97e3a, 0xb3a2b200, 0x021e00a9,
0xb20c3c98, 0x0140fe7b, 0xb2340090, 0xa6277e0a, 0xb50ab200, 0x8bcc0570, 0xa6c07e70, 0xb3a0b200,
0x01e900ad, 0x010d00b4, 0xf501a6f0, 0xf501ce0b, 0x3d01d00c, 0x00804cb4, 0x8c7e2ab2, 0x3abf00b7,
0x4c070b94, 0x2db20080, 0x00b7757e, 0xb30ca1b0, 0x01b600ad, 0x18052918, 0x9476042f, 0xfff4f008,
0x09e59fff, 0xf5e966ff, 0xe401980b, 0xa6ffffe9, 0x8e08f589, 0xbcf4bd01, 0x9918902f, 0x009d3309,
0xff900182, 0x07f4b301, 0xaefb3ef2, 0xf28e3c00, 0x08f59f26, 0xfdc4016d, 0xff94f0ff, 0xa6529dbc,
0x050df456, 0xd99065b2, 0xbca43d10, 0xc43db029, 0xa63ee4bd, 0xd6b100ad, 0x0cf5006f, 0x10b40145,
0x98be3c0b, 0x26f81e3c, 0x170bf4f9, 0x39ff94f0, 0x9ffd0099, 0x00903304, 0x3c010a06, 0x010ce9bf,
0x9001ee90, 0xe5a601dd, 0x33ce08f4, 0x00ed00c9, 0x94f0293f, 0x080bf408, 0xd000a933, 0xb294bd00,
0x1491b03a, 0xb01391b0, 0x91301291, 0x014bfe5b, 0x7e5bbb90, 0xb200a6f8, 0x00adb3a0, 0x903400ef,
0x0090335b, 0x7e3ab211, 0xb200a9d8, 0x00adb3a0, 0x00b400db, 0x1140b40d, 0x90014ffe, 0x2eb250ff,
0xb0070d94, 0x804101f1, 0x0b3ab200, 0xb04cb201, 0xe37e0011, 0x0bb200a5, 0x3ab22cb2, 0x90014dfe,
0xbd7e4cdd, 0xe0b400a4, 0xb2a0b214, 0xbd3ab21c, 0x7e0db2b4, 0xb300a5e5, 0x0091000d, 0xfe13b0b4,
0xaa90014a, 0xa95c7e34, 0x0c3a9800, 0xfe0db0b4, 0xcc90014c, 0xb65b7e48, 0xb3a0b200, 0xb46d00a4,
0xf0011290, 0x1bf491a6, 0x014e9832, 0xb370efcd, 0x0f0600f4, 0x06291870, 0xbcff94f0, 0x9fbb909e,
0x0149b502, 0x00ae983e, 0x3ab20bb2, 0x3e7e2cb2, 0xa0b200a4, 0x3400a4b3, 0xfe0265bb, 0xaa90014a,
0xa6a97e34, 0x0060b300, 0x0b90b420, 0xbc8085bc, 0x91b09095, 0xace43e0b, 0x3e020000, 0x0000aec8,
0xaec83e03, 0x0c00b400, 0x2bb23ab2, 0x00a60b7e, 0x79b594bd, 0xaee13e05, 0x3e030000, 0x0000aee1,
0x0149fe02, 0xbf5c9990, 0x05dcd99f, 0x99bf0000, 0xf9a60ab2, 0x3e170bf4, 0x1800af07, 0x9d330629,
0x3efe4f00, 0x7e00aebf, 0xf4003a31, 0x85fb0830, 0xdc30f434, 0x0005dcdf, 0xbf82f900, 0xf830f4ff,
0x900149fe, 0x9fa04c99, 0xb20bb1b0, 0xb2d4b2c2, 0xb3a5b2e6, 0x011700b9, 0x1200e9b3, 0xfe94bd01,
0xc43d0141, 0xa0481190, 0x7e1db219, 0xb200a63f, 0x00adb3a0, 0x19bf00fb, 0x98f042bc, 0x9fa60199,
0x00ea08f5, 0x03005ab2, 0x00a5e97e, 0xa9b3a3b2, 0xbf00de00, 0x0c5c981b, 0x900140fe, 0x0ab23000,
0x00a6277e, 0x2bcc0ab2, 0xa6c07e70, 0xb3a8b200, 0x00ad00ad, 0xfe7021cd, 0x80420147, 0x44779000,
0x00b0373e, 0xbd0c00b4, 0x0979a094, 0xf409a6f0, 0x0200091b, 0x00b03e3e, 0x09a6f009, 0x00090df4,
0xb03e3e03, 0x0bc0b400, 0xbd0704b6, 0xb20db2e4, 0xb0b4bd5a, 0x71b00021, 0xa5e37e01, 0xb25abf00,
0xb22cb20b, 0xb7757e3d, 0xb27ebf00, 0xb23bb2a0, 0xb22cb25a, 0xa5e57e0d, 0x0004b300, 0xbd3ab245,
0xa4107eb4, 0xb3a0b200, 0x003700a4, 0x0201bb70, 0x0df404a6, 0x9040b205, 0x6ab2101b, 0xb2b03bbc,
0xb7957e0c, 0x014afe00, 0x900240bb, 0x60bc30aa, 0xa6a97e60, 0xb314bd00, 0xff6d004d, 0x5ab280b2,
0x0b7e3bb2, 0x4c3e00a6, 0x020000b0, 0x900149fe, 0x9fbf4c99, 0x0005dcd9, 0xb299bf00, 0xf4f9a60a,
0x317e070b, 0x30f4003a, 0x2485fb08, 0xd9f830f4, 0x000005dc, 0x99bf32f9, 0x90014ffe, 0xa1b214ff,
0x94bdf9a0, 0xc3b2b2b2, 0x4b0140fe, 0x00900320, 0xb209a010, 0xb79b7e0a, 0xb309bf00, 0xb34c0090,
0xa04800a4, 0xb509bf91, 0x0fbf0192, 0xb5100049, 0x0fbf04f9, 0xf9b52009, 0xb509bf05, 0x0fbf0693,
0xf9350109, 0x3509bf1c, 0x0fbf2c9a, 0xf9b5f009, 0x900fbf0a, 0xf9b540f9, 0x900fbf0e, 0xf9b5c0f9,
0x3e0abf0f, 0xbd00b0e9, 0x0149fea4, 0xbf149990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07,
0x0835fb00, 0xdfd030f4, 0x000005dc, 0xffbf82f9, 0x900149fe, 0xa3b25099, 0x02059fa0, 0xf800a9b3,
0x00b63004, 0x350b9cf0, 0x94bd2ca9, 0x7e0ca9b5, 0xb200a5e9, 0xbd3abfa0, 0x00804cb4, 0x757e0db2,
0xa5b200b7, 0xae00adb3, 0x33093f04, 0x049f4a9d, 0x33010918, 0x0497469d, 0x33020918, 0x048f469d,
0x33030918, 0x0487539d, 0x18040e18, 0x0f180509, 0x070d1806, 0xf0ffe4f0, 0xf4f0ff94, 0x0894b6ff,
0xfd10f4b6, 0xd4b6059e, 0x05f9fd18, 0xf505dffd, 0x05045b0b, 0x03d6b005, 0x045a0cf5, 0xb3013db5,
0x490e01d4, 0x39b55000, 0xb1d73e02, 0x080d1800, 0x18090918, 0x0e180a0f, 0xffd4f00b, 0xf0ff94f0,
0x94b6fff4, 0x10f4b608, 0xb6059dfd, 0xf9fd18e4, 0x05effd05, 0xb2023eb5, 0x7e0bb23a, 0x9800a60b,
0xff09023a, 0xa9a60305, 0x04080bf5, 0x9007a5b6, 0x3ab5303b, 0xb6ce7e03, 0xb3a5b200, 0x03f500ad,
0x09033b98, 0x343a90c0, 0xfd3fbb90, 0xb5b604b9, 0xb79b7e03, 0xb3a5b200, 0x03d900ad, 0xfe0147fe,
0x77900148, 0x9044bd40, 0x88900179, 0x0991b03c, 0x00b3443e, 0x8ea0e4bd, 0x0f0044b3, 0xbd0c3a98,
0x3efe0cb4, 0xb200b267, 0xb24bb23a, 0xa5787e7c, 0xb3a5b200, 0x039d00ad, 0x94f0793f, 0x120bf401,
0xb20c3a98, 0x7eff0c4b, 0x3e00b672, 0xb200b341, 0xa32f7e7a, 0x00a0b300, 0x0c3a980f, 0xfd0c4bb2,
0x00b2673e, 0x94f0793f, 0x0e1bf402, 0xb20c3a98, 0x3efd0c4b, 0xb400b336, 0x3ab209b0, 0x8db2010c,
0x00a63f7e, 0x5d00a0b3, 0x3fb2793f, 0x99c724bd, 0x01999002, 0x980a91b0, 0x54b354f5, 0xb0b43900,
0x0022bc09, 0x02bc030c, 0x0304b600, 0x014001b8, 0x1031bc00, 0x957e1ab2, 0x30bc00b7, 0x4309b800,
0x95200001, 0xb45302b5, 0x0fb50af0, 0x3e81a054, 0x9000b301, 0xff900122, 0x1424b318, 0xb62e3ebe,
0x3f8ebf00, 0x027f5879, 0x98077d18, 0x3a9803ee, 0x0299c70d, 0xcc00f3f0, 0x96cb70ff, 0xcb4bb21f,
0x010cd8e6, 0xebf0d6cb, 0x7e01e0f6, 0x9800a2e5, 0x4bb20c3a, 0x727e6cb2, 0xa5b200b6, 0xb400adb3,
0x01449002, 0xa6033b98, 0xeb08f54b, 0xbc94bdfe, 0x89a0b0bb, 0xb17e8ab2, 0xa5b200b7, 0x9400adb3,
0xbd37b202, 0x547f9884, 0xbc9088bc, 0x94b69098, 0x4099b803, 0x39bc0001, 0x0b91b090, 0x5300f9b3,
0x033c9802, 0x3d0fa0b4, 0xbc24bdb4, 0x44bdc0cc, 0x00b78c7e, 0x3e0f60b4, 0x9800b45f, 0x2bb20d3a,
0x7e0c41b0, 0x3300a2f5, 0x00b500a9, 0xfe0c3a98, 0x2bb2014c, 0x7e38cc90, 0xb300b65b, 0x020c00ad,
0xb40be0b4, 0xef980e90, 0xd899c703, 0x1bf59fa6, 0x3a98008e, 0x0c2bb20d, 0xa2ed7e01, 0x014cfe00,
0x2bb23ab2, 0x7e30cc90, 0xb300a593, 0x981306a4, 0x2bb20c3a, 0x727efd0c, 0x5c3e00b6, 0xadb300b4,
0x7401cb00, 0x93f01c90, 0x9099bc00, 0x7f0069bc, 0xff19e401, 0x091bf4ff, 0x5c3e0260, 0x3a9800b4,
0x014cfe0c, 0xffff1be4, 0x7e34cc90, 0xb300b65b, 0x019800ad, 0x343af034, 0xf9263690, 0x60100df4,
0xff1be402, 0x0c3a98ff, 0x00b4513e, 0xb20c3a98, 0x7efd0c2b, 0xb300b672, 0x017000ad, 0x98012290,
0x2aa6033a, 0xff3708f5, 0x6eb264b2, 0xd43db43d, 0xc4bdf4bd, 0x00b4933e, 0x9473e97f, 0x010d0a00,
0x00b48d3e, 0x0600d033, 0xcc90010b, 0x01ff9001, 0xa602ee90, 0xe308f4fa, 0x0b00c4b3, 0x3e547cb5,
0x3300b5cf, 0x00a600b9, 0xb0013998, 0x0cf40296, 0xb2030930, 0x5479b56d, 0xf4bde4bd, 0x00b4d23e,
0x9073d97f, 0x697c0a00, 0x01ee90e9, 0x9001ff90, 0x399802dd, 0xf4f9a603, 0x493ee908, 0x94bd00b5,
0x79b5f101, 0xb224bd54, 0xb5233e1b, 0xe4407f00, 0xf4ffff09, 0xf10f260b, 0x1bf4bfa6, 0xff0be40b,
0xb51b3eff, 0x0c3a9800, 0xffff0ce4, 0x00b6727e, 0xb900adb3, 0xff0be400, 0x9019b2ff, 0x44900122,
0x9891b202, 0x29a60339, 0x09c508f4, 0xf5b9a6f1, 0x9800a00b, 0x3c980c3a, 0xb6727e0a, 0x00adb300,
0x31b5008c, 0xb5cf3e0a, 0xbd6f7f00, 0x01c19294, 0xf05179b5, 0x04bd00f3, 0x3e527fb5, 0x7f00b587,
0x014c584b, 0x900c3a98, 0xb3f00100, 0x00c3f000, 0x7e024490, 0xb300b672, 0xb45200a4, 0xe9980be0,
0x70999001, 0xa601e9b5, 0xd608f401, 0x9808607c, 0xf00c0c3a, 0xffff0be4, 0x00b6727e, 0x2d00a4b3,
0xe4014cfe, 0xb2ffff0b, 0x40cc903a, 0x00a5787e, 0x1900a4b3, 0x98469034, 0x94f0517f, 0xf0f9bcff,
0x3e517fb5, 0x0a00b5cf, 0x3ea5b203, 0x9000b5da, 0x77900188, 0x148db318, 0x49fefd90, 0x3c999001,
0x457e9abf, 0xf03e00b7, 0x030500b5, 0x00b5f23e, 0x0bb204bd, 0x0b7e3ab2, 0x50b300a6, 0x3a981a00,
0x7e04bd0c, 0x9800b6c4, 0x30b50d3a, 0xb7457e0c, 0x0d30b500, 0x900149fe, 0x9fbf5099, 0x0005dcd9,
0xb299bf00, 0xf4f9a65a, 0x343e110b, 0x010500b6, 0x00b5f03e, 0x003a317e, 0xf93085fb, 0x7ea0b202,
0x9800a5e7, 0xc47e0c0a, 0x0a9800b6, 0xb7457e0d, 0x7e0ab200, 0xbd00b745, 0xbf01fba4, 0x0aafb2a9,
0xf4b9a602, 0xb9900d18, 0x98f9bc01, 0xc9a0a4bd, 0xa9bf00f8, 0x020aafb2, 0x18f4b9a6, 0x01b9900b,
0xfcbca4bd, 0xbf00f899, 0xb2afb2b9, 0xf4c9a6ca, 0xf10a0708, 0xfbb500f8, 0xb5fca002, 0x00f801fc,
0xaf98a9bf, 0x90b9bc02, 0xfbbfa9a0, 0x08f49ba6, 0x029bbb08, 0xa998a9a0, 0xa6aabf01, 0x051bf4a9,
0x00f8f10a, 0x0800a0b3, 0x00b7457e, 0x30f400f8, 0x05dcdff8, 0x32f90000, 0x49feffbf, 0x14999001,
0x9fa0a0b2, 0xa0b3b3b2, 0xfd024200, 0x0cf4a2a6, 0x01ab903a, 0xb60141fe, 0x119002b4, 0x7e1ab210,
0xb300b7b1, 0xbf2700a4, 0xb21db219, 0xa0e4bd2c, 0x90dfbf90, 0x9eb201e9, 0xa699fcbc, 0xf408f490,
0x3da0ddbf, 0x00b72a3e, 0x49fe020a, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x35fb003a, 0xda00f808, 0x00002944, 0x0041c77e, 0xf000a630, 0xa6f00bac, 0x01aab901, 0x44da00f8,
0x7e000029, 0x30004142, 0xacf000a6, 0x01a6f00b, 0xf801aab9, 0x2944da00, 0xd77e0000, 0xa6300042,
0x0bacf000, 0xb901a6f0, 0x00f801aa, 0x7effb4f0, 0xf8000b94, 0x0b7e7e00, 0xf900f800, 0x3da0b202,
0x384c7ea4, 0x00a6b000, 0xa00b9cf0, 0xfb9ab20a, 0xb202f901, 0x7ea43da0, 0xb000382a, 0x9cf000a6,
0xb20aa00b, 0xf401fb9a, 0xdcdfe430, 0xf9000005, 0xfeffbf82, 0x45fe0149, 0x3c999001, 0xa00147fe,
0x2455909f, 0xd9347790, 0x0000141c, 0x4bfe9abf, 0x90080c01, 0xff0d2cbb, 0x0000c17e, 0xeb00a433,
0x3f0c30b4, 0x0c943339, 0x043118e2, 0x0f001033, 0xb0011933, 0x3e043d00, 0x9800b96d, 0x2cd9023f,
0x98000014, 0x34580431, 0x3f5fa00a, 0x0339989f, 0xb5183690, 0xff090159, 0xf43379a0, 0xf77e1800,
0xa0320032, 0x2900ad33, 0xdf010901, 0x0000142c, 0x1272f920, 0xbd0043f0, 0xb8ad3e14, 0x0241bc00,
0x010006b1, 0x40060df4, 0x947e0100, 0x24d9000b, 0xbf000014, 0xff2ce49a, 0xb26bb2ff, 0x1300de0d,
0x117e0000, 0x7aa000af, 0xd400adb3, 0x985bbf00, 0x1d90015c, 0x7c0eb204, 0x10bc2020, 0x1300da10,
0x367e0000, 0xa0320021, 0xc500ad33, 0x4cb4bd00, 0x00da0100, 0xa6000013, 0xa408f414, 0x00b95c3e,
0xd9023f98, 0x0000142c, 0x58043498, 0x5fa00a32, 0x39989f3f, 0x18389003, 0x090159b5, 0x3379a0ff,
0x7e1600f4, 0x320032f7, 0x00ad33a0, 0x2cdf0084, 0x20000014, 0xff26e4f1, 0x3e24bdff, 0xbc00b94d,
0x16b11262, 0x0df40100, 0x01004106, 0x000b947e, 0x5c985bbf, 0x042d9001, 0x00da1eb2, 0x7e000013,
0xe40020d0, 0xbcffff4c, 0xa0322021, 0x1db28bb2, 0x001300de, 0x40417c00, 0x3500a433, 0x001424d9,
0x7e9abf00, 0xa000ac3b, 0x00a4b37a, 0x4cb4bd13, 0x00da0100, 0xa6000013, 0xa608f426, 0x5c985bbf,
0xbd7ab201, 0x7e040ed4, 0x32002136, 0x2db034a0, 0x817e3ab2, 0x0d33000f, 0x30fe7100, 0x020f3a01,
0x1838f130, 0x04090333, 0x30014afe, 0x31303991, 0x90b4bd3b, 0x717e38aa, 0xe73e000f, 0x02f900b7,
0x002930d9, 0xbfa0b200, 0x7e640b9a, 0x090000de, 0x00a43310, 0xa6008961, 0x009fcf02, 0x1000f5f1,
0x8a009ff6, 0x4b02a600, 0xc4bd1000, 0xbd27104d, 0x198b7ee4, 0x00a43300, 0x2930d915, 0x9abf0000,
0x00009b7e, 0x123e0409, 0x0ab200ba, 0x7e03e84b, 0x890016fc, 0xb802a400, 0x000200aa, 0x920aa5b6,
0x9af601aa, 0x01114f00, 0x020099b8, 0x009ff600, 0x9a32943d, 0x000001fb, 0x00000000, 0x00000000,
0xfa95075d, 0x10f99508, 0xa132f032, 0xf9339232, 0x3000d515, 0x0cf415f6, 0x05f93346, 0xf63005fc,
0x1c0cf405, 0x8701f933, 0x301f0a00, 0x08f501f6, 0xf630073a, 0x250cf503, 0x8e283e07, 0x10f93300,
0xf630041b, 0x0e0cf410, 0xf50df630, 0x3e070f08, 0x33009156, 0x070711fd, 0x0091603e, 0x431df933,
0x1df63006, 0x33250cf4, 0x03fb18f9, 0xf418f630, 0xfd330c0c, 0x3e06e817, 0x33009409, 0x01011af9,
0xda1cfd33, 0x94c63e06, 0x21f93300, 0xf6300263, 0x0c0cf421, 0xc61efd33, 0x8ece3e06, 0x24f93300,
0xfd33063a, 0x3e06b825, 0xdf00949a, 0x0000299c, 0x2614f918, 0x0d18f4a9, 0xbcffa9c4, 0x6f3e98f9,
0xbda00093, 0x0094313e, 0x1d33080a, 0x7e069e00, 0x330063f7, 0x490a0300, 0xa9fdff00, 0x3e4aa004,
0x0a009431, 0x09163003, 0x06800cf5, 0x00299cd9, 0x0e99bf00, 0xbc080a01, 0x99e7f4e1, 0x9ffd0133,
0x670bf504, 0x02103306, 0x0410330e, 0x3eea3210, 0xb2008e85, 0x8e7b3eea, 0xfea4bd00, 0xbb90014b,
0x63b47e2c, 0x8a847e00, 0x1fad3300, 0x49fe063f, 0x2c999001, 0xe9959ebf, 0x0190b31f, 0x3ed4bd0a,
0xdd008ea8, 0xff000000, 0x3380e9c4, 0xbd0a0094, 0x8ebf3ef4, 0xb0010f00, 0x1ff400e6, 0x95ff0f05,
0xd9ff08e9, 0x90f9bc95, 0xc83e49a0, 0x9b320094, 0x5db24cb2, 0x0077ca7e, 0x0094c83e, 0x5507a033,
0xf407a630, 0x9cd9120c, 0x30000029, 0x0df402a6, 0x8f253e2b, 0x0ca63000, 0xd9120cf4, 0x0000299c,
0xf409a630, 0x483e5718, 0xa033008f, 0x030a610d, 0xb80e1d33, 0x8f7b3e05, 0x01999800, 0x000000df,
0x8f613e04, 0x01999800, 0x000000df, 0x8f613e08, 0x299cd900, 0x99980000, 0x00008f02, 0x049ffd02,
0x00c61bf5, 0x0090463e, 0x8f029998, 0xfd040000, 0x1bf5049f, 0x463e00c4, 0x99980090, 0x00008f02,
0x049ffd01, 0x3e2f1bf4, 0xd9009046, 0x0000299c, 0x4000008f, 0x3e029998, 0xd9008f88, 0x0000299c,
0xdf029998, 0x00800000, 0xf5049ffd, 0x3e00a91b, 0x33009046, 0x30730710, 0x0cf40716, 0x0210331a,
0x0216304b, 0x33540cf4, 0x33270010, 0x0486011d, 0x008fd83e, 0xf40c1630, 0x16300d0c, 0x6518f409,
0x0090163e, 0xf40e1630, 0x313e6d0d, 0x4ab20094, 0x00789f7e, 0x0094c83e, 0x2b321a32, 0x5db24cb2,
0x007cca7e, 0x0094c83e, 0x2b321a32, 0x5db24cb2, 0x007c3b7e, 0x0094c83e, 0x2b321a32, 0x467e4cb2,
0xc83e007e, 0x2b320094, 0x5db24cb2, 0xa27e070a, 0xc83e007b, 0x080a0094, 0x4cb22b32, 0x037e5db2,
0x1a32007b, 0x3cb22b32, 0x5eb24db2, 0x007ed37e, 0x0094c83e, 0x2b321a32, 0x4db23cb2, 0xa77e5eb2,
0xc83e0078, 0x080a0094, 0x0094c83e, 0x9d33040a, 0xd9047a00, 0x0000299c, 0x0a029998, 0x0094f108,
0x670bf540, 0x0149fe04, 0x900142fe, 0x22902c99, 0xa09da018, 0x0499922d, 0x99929da0, 0x929da004,
0x9da00499, 0xa0049992, 0x0119339d, 0x16300085, 0x0e08f401, 0x1d33030a, 0x3e043202, 0xfe009122,
0x40fe0141, 0x2c119001, 0xb2280090, 0x7e0bb21a, 0xbf007560, 0xfe00bf19, 0x42fe0143, 0x0794f001,
0x90243390, 0x3ab22022, 0xb20141fe, 0x1c11902b, 0xb20704f0, 0x0404b61c, 0x7e0509fd, 0xbf006a5c,
0xbf3fbf29, 0x0141fe1e, 0xf00894b6, 0x94f1fff4, 0xf4b6ffff, 0x18e4b610, 0xfd181190, 0x1ab20509,
0xfd050ffd, 0x497e050e, 0x483e006a, 0x2ab20091, 0x006a397e, 0x20bf2ab2, 0x006a297e, 0x4e3e29bf,
0x41fe0091, 0x18119001, 0x167e1ab2, 0x1ab2006a, 0x037e10bf, 0x19bf006a, 0x04f11ab2, 0x94b6ffff,
0x0590ff10, 0x0069f07e, 0x94f119bf, 0x40a0ffff, 0x313e59a0, 0xfab20094, 0x0095f47e, 0x0094c83e,
0x0d00a033, 0x5c01ad33, 0x91ae3e03, 0x33b0bf00, 0x330c0190, 0x3e2f0294, 0xfe00919e, 0x010a0141,
0xb2181190, 0x94ef7e1b, 0x1fad3300, 0x1fbf033f, 0x09fffe09, 0x049fff95, 0xa23e10a0, 0x04f10091,
0x2a3201ff, 0x0a7e0bb2, 0xc83e0095, 0x9a320094, 0x0094ef7e, 0x0094c83e, 0x237efab2, 0xc83e0095,
0x9cd30094, 0xbf000029, 0x0000df39, 0x080a2000, 0xf5049ffd, 0x0a02f50b, 0x001d3303, 0x40fe02ef,
0x014cfe01, 0x90280090, 0x0bb22ccc, 0x900142fe, 0x2ab22422, 0x0073477e, 0x9670097f, 0x0b9cf003,
0x7e079194, 0x1800010e, 0x087e5830, 0x00330001, 0x1fb20a00, 0x00924d3e, 0xa4732a7f, 0x19b20a00,
0x00924b3e, 0x734019c5, 0x731403a0, 0x731804a0, 0xe51c02a4, 0x3e01009f, 0xe500924d, 0x3e02009f,
0xe500924d, 0x3e03009f, 0xb200924d, 0x0149fe9f, 0x7f2c9990, 0x04997399, 0x96700088, 0x1a0cf404,
0x48019073, 0xf4019670, 0x90733608, 0x9d734c02, 0x3e00e303, 0x730092cf, 0x009b0799, 0xf4079670,
0x9073100c, 0x9d736905, 0x3e00cb06, 0x73009304, 0x009c0899, 0xbd099d73, 0x93393e00, 0x07ff8900,
0x04f9fdfe, 0x0093513e, 0xffc7ff49, 0x95f194f9, 0xc03e2000, 0xff490092, 0x94f9ffc7, 0x180095f1,
0xfe3fff8f, 0xe5049ffd, 0x3e40009f, 0x49009351, 0xf9ffc7ff, 0x0095f194, 0x92c03e10, 0xc7ff4900,
0xf194f9ff, 0x3e080095, 0x490092f5, 0xf9ffc7ff, 0x0095f194, 0x3fff8f10, 0x049ffdfe, 0x80009fe5,
0x0093513e, 0xffc7ff49, 0x95f194f9, 0x1c3e0800, 0xff490093, 0x94f9ffc7, 0x100095f1, 0xfe3fff8f,
0xe5049ffd, 0x3ec0009f, 0x49009351, 0xf9ffc7ff, 0x0095f194, 0x93433e08, 0xc7ff4900, 0xf194f9ff,
0x8f100095, 0xfdfe3fff, 0x008f049f, 0x9fff0100, 0x299cd9f5, 0x99180000, 0x00903350, 0x0000890f,
0x95f9ff02, 0x00936f3e, 0xfdffff89, 0xa094f9ff, 0x94313e49, 0x14a63000, 0x01480cf5, 0xd9ffafc4,
0x000004d0, 0xd9e89fbc, 0x0000299c, 0xefc7080a, 0x989fbc3b, 0xbb96efc7, 0x94f0059f, 0x2b0bf501,
0xff29c401, 0x010defe7, 0x0a029b54, 0xf5bf6604, 0xf0011918, 0xb9e400f3, 0xf9bcffff, 0x04c6b0c2,
0x0c090df4, 0x93cb3e04, 0xe44da000, 0xc4ffffba, 0xebe703e9, 0x94330142, 0xbabc1200, 0x29bcd9b0,
0x4ab20000, 0x0093f43e, 0x000644d9, 0xbc99bf00, 0x4ab2b0ba, 0x7eb09bbc, 0x3e000b7e, 0x32009431,
0x9acb7e9b, 0x94c83e00, 0x00a03300, 0x33080a0f, 0x00b1011d, 0x0094c83e, 0x900140fe, 0x0ab22400,
0x0072fb7e, 0xa54f093f, 0x00943300, 0xa05a0f06, 0x3e1f0a4f, 0xd90094c8, 0x0000299c, 0x33159918,
0x00870099, 0x3802a033, 0xf402a630, 0xa0330f0c, 0xa4331800, 0x703e6e01, 0xa0330094, 0xa4332c03,
0x903e6204, 0x3ab20094, 0x009d827e, 0x0094c83e, 0xcbb2bab2, 0x009ffc7e, 0x0094c83e, 0x0b7e2a32,
0xc83e009d, 0x2a320094, 0x00a2127e, 0x0094c83e, 0xa67e2a32, 0xc83e00a1, 0x9cd90094, 0x18000029,
0x90331599, 0xfbc72400, 0xb22c326c, 0xf05eb24d, 0xac7e0fa4, 0xc83e009e, 0x020a0094, 0x0094c83e,
0xc83e030a, 0x090a0094, 0x900149fe, 0x9fbf3099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e,
0xf01c55fb, 0xa4b6ffa4, 0x0acaa002, 0x3200f81f, 0x30040aaf, 0x0cf402f6, 0xfff4f012, 0x002a5cd9,
0xf89fbc00, 0xbfa01f0a, 0xaf3200f8, 0xf630040a, 0x100cf402, 0xd9fff4f0, 0x00002a5c, 0x9bbc1f0a,
0xf900f8f9, 0x10af9512, 0xae95b1b2, 0x299cd008, 0xff090000, 0x1bf4e926, 0x4909183d, 0x1bf5f926,
0x091800b2, 0x331c0a4a, 0x00ab0199, 0xf5019630, 0x0a00a108, 0x029d3306, 0x0998009d, 0x0af43d13,
0x18b9a01f, 0x0f354909, 0x0199104a, 0x3e490935, 0x180095f2, 0x0a0a4a09, 0x7a009433, 0x002a5cd9,
0xf099bf00, 0x99c7fff4, 0x0694b6e8, 0xb0f0f9bc, 0x0cf43ff6, 0x33030a5e, 0x905b0ce4, 0x96b104f9,
0x0cf40040, 0x02f9944e, 0x002a68df, 0x909fbc00, 0x9a589f7f, 0x73080d01, 0x981b02f4, 0x290d0409,
0x338094f0, 0x7e0f0090, 0x0900754b, 0x35d43d01, 0x9cdf5009, 0x18000029, 0xd9c449fe, 0x13f9b5ff,
0xf9350209, 0xffe4f04a, 0x1ea01c0a, 0x0095f23e, 0x11fb040a, 0xadb222f9, 0xa0c7b2b2, 0xb0bbbfe8,
0x0cf53f06, 0xbcc400cc, 0xffaec4ff, 0x0d0fe4b3, 0xc6b0050a, 0xbb0cf53f, 0x2a5cd900, 0x99bf0000,
0xc7ff9fc4, 0xf194e899, 0x0694b606, 0x2c0ee0b3, 0x440fe0b3, 0xedb31f0a, 0x7c009a0d, 0x96719009,
0x0cf500ff, 0x9fe4008c, 0x68d9ffff, 0xbc00002a, 0x2fa0f89f, 0x00966e3e, 0x7190017c, 0xf400ff96,
0x9fe46f0c, 0x68d9ffff, 0xbc00002a, 0x1f0af99b, 0x0096d03e, 0x0af0c9bc, 0xf0d9c705, 0x9002fb94,
0x9c940199, 0xe0cbbc02, 0x1000e6b1, 0xbc440cf4, 0x030a9001, 0xbc0294b6, 0xf6b1f0c9, 0x0cf41000,
0xf49ba632, 0x9ea60808, 0xa62008f4, 0x080df4b9, 0x08f4bfa6, 0x2a68df16, 0x9fbc0000, 0xb0bfbca0,
0x000b7e7e, 0x00966e3e, 0xd03e040a, 0x030a0096, 0xc9b221fb, 0x0fffa6b1, 0xbc2b0cf4, 0x96b1909a,
0x0cf41000, 0x2a68de21, 0xaebc0000, 0x00d03390, 0x3e9ab20a, 0xb20096fb, 0x7e9bb2ba, 0x0a000b7e,
0x0a00f81f, 0xf400f804, 0xdcdfe430, 0xf9000005, 0xfeffbf12, 0x99900149, 0xa0a0b220, 0xf0d1b29f,
0xedb2ffb4, 0xb40aa0b4, 0x09c40be0, 0xf49ba607, 0x0fc7751b, 0x0149fe2f, 0xa0089990, 0x029eb59d,
0xbc019ab5, 0x94bdb89f, 0x90014ffe, 0xf9a014ff, 0xb501fcb5, 0x09c702f1, 0xbcbabf23, 0x0fc7c8f9,
0x8a09c785, 0xf0e09f3c, 0x0dc71ff4, 0x05cfbb91, 0xb990d93c, 0xd4f000ee, 0x1fe4f01f, 0xbc0099b9,
0x94f0e0ef, 0xbcff0f1f, 0xf9bc909d, 0x05febb95, 0xfd049dbb, 0x99b904fc, 0x04fdbb00, 0xfd049afd,
0xb9a0059f, 0x900149fe, 0x9fbf2099, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf41c15fb,
0xdcd9f430, 0xf9000005, 0xb299bf82, 0x014ffed1, 0xa02cff90, 0x92dd3ff9, 0x1f0003ff, 0xf0351709,
0x02f03501, 0xb6b2f920, 0xa5b2e3b2, 0x1900d433, 0x000528db, 0x7e240c00, 0x09000b7e, 0x200a3209,
0x98823e19, 0x30030a00, 0x0cf409d6, 0x0147fe78, 0xb2ffc4c4, 0x90043df8, 0x793e2477, 0x09c40098,
0x947bb2ff, 0x040c0292, 0x3da026bc, 0x96d27ed4, 0x1fa43300, 0xc47fbf6b, 0x94a607f9, 0xc75e18f4,
0x991223f9, 0x01963001, 0xc7520cf4, 0xe9c42ffe, 0xc8893cff, 0xc78afdc7, 0xd93c85f9, 0xf49c2690,
0xe0333b0c, 0xf9c73803, 0x909d3c91, 0x0cf49c26, 0x9052bc2c, 0xa0010010, 0x26193f9f, 0xa108f409,
0x49fe1f0a, 0x2c999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0xb23e230b, 0x0d0a0098, 0x0fc439bf,
0x0000deff, 0x9efdff00, 0x05f9fd04, 0x823e3fa0, 0x317e0098, 0x85fb003a, 0xa830f40c, 0x0005dcd9,
0xbf82f900, 0xf830f499, 0x4ffea7b2, 0x80ff9001, 0xaabff9a0, 0xb00eb1b0, 0xa6c70dc1, 0x01691268,
0xf5039630, 0xc7013b0c, 0x96306ca9, 0x310cf50a, 0x0141fe01, 0x900140fe, 0x00905711, 0x10a5b650,
0xb4bd1920, 0xe37e0cb2, 0xad330094, 0xbf011d1f, 0x0142fe09, 0x90ff6bc4, 0xb4b65822, 0xbc2ab204,
0x6c32b0b9, 0x7eb21db2, 0x0097bf7e, 0x333fa130, 0x00f51fad, 0x080141fe, 0x40119001, 0x1990243d,
0x0c1e9008, 0x54bd343d, 0xb00c91b0, 0x0e3e0be1, 0x90b4009a, 0x0c1bb214, 0xbcd43d10, 0x4ab24059,
0x0096d27e, 0xc31fad33, 0x9819bf00, 0xffde011f, 0xfde0ffff, 0x1fb5049e, 0x3319a002, 0x3d0a0020,
0x99a83e04, 0x0cb0b400, 0xb20bc0b4, 0x8d3e7e1a, 0x321fbf00, 0xffffdea0, 0x09c4e0ff, 0x04fefd1f,
0xfd1894b6, 0x19a0059f, 0x1bb24ab2, 0x010d100c, 0x0096d27e, 0x731fa433, 0x0a002033, 0x083e0102,
0x0433009a, 0x043d3f1f, 0x0099f53e, 0x98ff09c4, 0x1d98021c, 0x0de0b403, 0x90014ffe, 0xf9bc58ff,
0x0e90b4a8, 0x1001e1b0, 0x3b320100, 0xb20091b0, 0x97077e7e, 0x57903400, 0x08f40926, 0x9a083ed2,
0x3d19bf00, 0x1f929584, 0x90013310, 0x36261055, 0xff4208f5, 0x80331b0a, 0x243e1100, 0x030a009a,
0x009a273e, 0xfe3fa034, 0x99900149, 0xd99fbf80, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xf4003a31,
0x85fb0830, 0xf430f458, 0x0005dcdf, 0xbf12f900, 0x0149feff, 0xfe109990, 0x9fa00141, 0x4a0c1190,
0x040b00b8, 0x307e1cb2, 0xa433008c, 0x40fe2b1f, 0x00b44a01, 0x0b080090, 0x7e0cb204, 0x33008c30,
0xbf161fa4, 0xa60fbf19, 0x0b9cf09f, 0x320196f0, 0x9a973e9a, 0xfea43d00, 0x99900149, 0xd99fbf10,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0xa9980c15, 0x90afb204, 0x010b59ac, 0x4a2095f0,
0xf9b50090, 0x8c307e04, 0xf400f800, 0xdcd99030, 0xf9000005, 0xfe99bf52, 0xff90014f, 0xa0030e84,
0x00ad33f9, 0x9cd90105, 0x18000029, 0x99335999, 0x3200f600, 0x014cfeba, 0xcc90b4bd, 0x94e37e20,
0x33ae3200, 0x00e31fad, 0x4a0144fe, 0x449000b8, 0xb2040b1c, 0x8c307e4c, 0x33ae3200, 0x00cb1fad,
0x4a0140fe, 0x009000b4, 0xb2040b18, 0x8c307e0c, 0x33ae3200, 0x00b31fad, 0x4abf09bf, 0x0bf5a9a6,
0xaa9000a6, 0x0140febc, 0x0090010b, 0x7e0cb227, 0x32008c30, 0x1fad33ae, 0x093f0091, 0xb20142fe,
0x28229043, 0x45ff94f0, 0x91541000, 0x9baa3e02, 0xe43abf00, 0xbcffff1b, 0xb9a6925a, 0xb2050df4,
0x90b0729b, 0xb3f0bcaa, 0x7e2cb200, 0xe4008c30, 0x32ffff0f, 0x1fa433ae, 0x7b39bf51, 0x2fbc0210,
0x90f9bc20, 0x0fff94f1, 0x147339a0, 0x49fec700, 0x20999001, 0x99909abf, 0xfe9c3f07, 0x010d014b,
0xf028bb90, 0xc4b6ffc4, 0x96d27e02, 0x33ae3200, 0xb2171fa4, 0x00b84a4c, 0xf07e040b, 0xae32008a,
0x009be63e, 0x49fe090e, 0x84999001, 0xdcd99fbf, 0xbf000005, 0xa6ea3299, 0x070bf4f9, 0x003a317e,
0x987055fb, 0x008f04a9, 0x9ffd3ff0, 0x04a9b505, 0xaeb200f8, 0x0a10bf12, 0x26ee0904, 0x2e0df4f9,
0x0a00c433, 0x2d3eea7f, 0xea58009c, 0x00a07301, 0x26ff0918, 0x140bf4b9, 0xffffa9e4, 0xf0059bbb,
0x1bf40194, 0xf8090a07, 0xf81f0a00, 0xf830f400, 0x0005dcdf, 0xbf32f900, 0x0149feff, 0x900140fe,
0x43fe1499, 0xb29fa001, 0x90b1b2a2, 0x33901300, 0x10ec4a12, 0x0cb2010b, 0x008b707e, 0x741fa433,
0xa6300a3f, 0x690cf401, 0x210020b3, 0x94ffa4f0, 0x240b05a9, 0xb202a4b6, 0xa0a9bc2c, 0x10eeaab8,
0x8b707e00, 0x1fa43300, 0x0010b34b, 0x0b0a3f23, 0xf01cb204, 0xa994ffa4, 0x02a4b605, 0xb8a0a9bc,
0x0010eeaa, 0x008b707e, 0x281fa433, 0x0b10ec4a, 0x7e3cb201, 0x33008b70, 0x3f191fa4, 0x01f6303f,
0x3f0e0cf4, 0xf49f2609, 0xf03e8a1b, 0x050a009c, 0x900149fe, 0x9fbf1499, 0x0005dcd9, 0xa699bf00,
0x070bf4f9, 0x003a317e, 0xf40835fb, 0xdcdfd830, 0xf9000005, 0xfeffbf22, 0x99900149, 0xa0a13230,
0x299cd99f, 0x99980000, 0x0ab2b204, 0x0094f108, 0x360bf440, 0xbd0140fe, 0x0c0090b4, 0x4d7e0ab2,
0xa433009c, 0x0ab2251f, 0x010c1b32, 0x009c127e, 0x171fa433, 0x90ff19c4, 0x99bc0299, 0x9009bc90,
0x92f0997f, 0xfe29a00f, 0x99900149, 0xd99fbf30, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31,
0x30f42825, 0x05dcdfd8, 0x62f90000, 0x49feffbf, 0x40999001, 0x9fa0b2b2, 0x00299cd9, 0x04999800,
0xc3b2a6b2, 0x94f1080b, 0x0bf51000, 0xb4bd00e5, 0x900141fe, 0x1ab21c11, 0x009c4d7e, 0xad33ab32,
0x0b00d11f, 0x0c1ab2ff, 0x9c127e01, 0x33ab3200, 0x00c01fad, 0x1ab2ff0b, 0x127ec43d, 0xab32009c,
0xaf1fad33, 0x01145800, 0x29a094bd, 0x109039a0, 0x72157f04, 0x4da47d4c, 0xe4bd8000, 0x323e0101,
0xc9c4009e, 0x200bf401, 0xfd660f7f, 0xbc0a1df4, 0x273ea41e, 0xfd66009e, 0xbc0d1bf4, 0xa9fd941e,
0x9e273e05, 0x90df7200, 0xc57601ee, 0x02009001, 0xc473fd72, 0x6ebfd000, 0xc400d3f0, 0xffdfffa9,
0xb6ff00ff, 0xeffd1094, 0x00008c04, 0x059efdff, 0xfd049cfd, 0x69a0059d, 0x4ee429bf, 0xafc7ffff,
0x10ed94e8, 0xff0094f1, 0xfd059dfd, 0x2fa005f9, 0xffff59e4, 0xff00eeb9, 0x0bf4a4e9, 0xfd39bf15,
0x9afd049c, 0xbf39a005, 0x0095f129, 0xfe29a001, 0x99900149, 0xd99fbf40, 0x000005dc, 0xba3299bf,
0x0bf4f9a6, 0x3a317e07, 0x2865fb00, 0xdff030f4, 0x000005dc, 0xffbf62f9, 0x900149fe, 0xa1322899,
0xb0329fa0, 0xd5b2c432, 0xb630e6b2, 0x120cf504, 0x299cd901, 0x9e980000, 0xffb9c404, 0xc4119990,
0x080a1f9f, 0xb905efbb, 0x94f00099, 0x909fbc1f, 0xf9bbff0f, 0x34feff05, 0xe9013db3, 0xfe94bd00,
0xff90014f, 0x0142fe20, 0x9001f9b5, 0xf9a01c22, 0x2bb2a4bd, 0x009c4d7e, 0xc91fad33, 0x322ab200,
0x7e1b323c, 0x33009c12, 0x00ba1fad, 0x46020033, 0xf4020630, 0x0033100c, 0x0d331a00, 0x3e00a501,
0x33009f60, 0x33410300, 0x0098040d, 0x009f963e, 0xf1ff19c4, 0xb8012690, 0x0011369e, 0x009f6c3e,
0xf1ff19c4, 0xb8012690, 0x0011469e, 0xa53e100f, 0x19c4009f, 0x2690f1ff, 0xb8040f01, 0x0011569e,
0x009fa53e, 0xf1ff19c4, 0x0f012690, 0x5a9eb802, 0xa53e0011, 0x19c4009f, 0x2690f1ff, 0x01004f01,
0x115c9eb8, 0x03499400, 0x9cc4040a, 0xf4cfa6f8, 0xc9903218, 0xa6080b08, 0x060df49f, 0xbcb2fcbc,
0x40fea0ec, 0x20009001, 0x707e0cb2, 0xa433008b, 0x09bf131f, 0x009859a0, 0x3e60a001, 0x0a009fe1,
0x0149fe03, 0xbf289990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6, 0x3a317e07, 0x1065fb00, 0xdfe830f4,
0x000005dc, 0xffbf52f9, 0x900149fe, 0xa3b22c99, 0x9cd99fa0, 0x98000029, 0xb2b20499, 0x94f1080a,
0x0bf52000, 0x40fe00ca, 0x90a4bd01, 0x0bb21800, 0x009c4d7e, 0xb81fad33, 0x0b0ab200, 0x7ec43dff,
0x33009c12, 0x00a91fad, 0x7f0141fe, 0x1c119000, 0x0b10dc4a, 0x7e1cb210, 0x33008b70, 0x00911fad,
0x15b20b72, 0x04bdc4bd, 0xff04e001, 0x00a0e83e, 0xf401b9c4, 0xc6b0690b, 0x350cf407, 0x5c3c3dbf,
0x1f0ec4f8, 0xb9030990, 0xf4f00099, 0x1f94f0ff, 0xbc909ebc, 0x9fff9549, 0x049ebbf4, 0xb904febb,
0x9dfd0099, 0x059ffd04, 0xdc3e39a0, 0x2dbf00a0, 0xc4f85c3c, 0x09921f1e, 0x0099b91d, 0xf0fff4f0,
0x9ebc1f94, 0x9549bc90, 0xbbf49fff, 0xfebb049e, 0x0099b904, 0xfd049dfd, 0x29a0059f, 0x7601cc90,
0x009001b5, 0x04119004, 0x8800b473, 0x900149fe, 0x9fbf2c99, 0x0005dcd9, 0xa699bf00, 0x070bf4f9,
0x003a317e, 0xf41855fb, 0xdcdfd430, 0xf9000005, 0xfeffbf22, 0x99900149, 0xfea23234, 0x9fa00141,
0x4a0c1190, 0x280b2398, 0x707e1cb2, 0xa433008b, 0x10985d1f, 0xbc19bf01, 0x90a6f290, 0xb01008f4,
0x9cf001f6, 0x0196f00b, 0x00a1563e, 0xf9a6e109, 0xf00b9cf0, 0x0b0a0196, 0x33009033, 0x0029b4d9,
0x019c9800, 0x4ffe9bbf, 0x0cff9001, 0x4d90f0bc, 0x9235239c, 0x90240e08, 0x94f00109, 0x04fa901f,
0x7e01f9b5, 0x7e002136, 0xfe008a84, 0x99900149, 0xd99fbf34, 0x000005dc, 0xf9a699bf, 0x7e070bf4,
0xfb003a31, 0x30f42c25, 0x05dcdff8, 0x12f90000, 0x49feffbf, 0x0c999001, 0x9fa0a132, 0x00299cd9,
0x049f9800, 0x0089080a, 0xf9fd0100, 0x2a0bf404, 0xbd0140fe, 0x080090a4, 0x4d7e0bb2, 0xa433009c,
0x0ab2191f, 0xc43d1b32, 0x009c127e, 0x0b1fa433, 0x7e1f1ac4, 0xfe00a107, 0x99900149, 0xd99fbf0c,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40815, 0x05dcdff8, 0x12f90000, 0x49feffbf,
0x0c999001, 0x9fa0a132, 0x00299cd9, 0x04999800, 0x94f1080a, 0x90738000, 0x40fe2e00, 0x90a4bd01,
0x0bb20800, 0x009c4d7e, 0x1c1fa433, 0x1b320ab2, 0x127ec43d, 0xa433009c, 0x1ac40e1f, 0x20a5f01f,
0x00a1077e, 0x900149fe, 0x9fbf0c99, 0x0005dcd9, 0xa699bf00, 0x070bf4f9, 0x003a317e, 0xf90815fb,
0x06b99552, 0x94b6c4b2, 0xbcd5b203, 0xb0c430a9, 0xa2e03e3f, 0x9831bf00, 0x54b30132, 0x010a1800,
0x0cb2b4bd, 0x0039cd7e, 0xfd052bfd, 0xc83e051a, 0x0cb200a2, 0xb4bd010a, 0x0039cd7e, 0xb900b9b9,
0x29fd00aa, 0x041afd04, 0xb3014492, 0x900b0040, 0x04b30100, 0x31a0c840, 0xbd0132b5, 0x08339004,
0xb50044b3, 0xd4bd51fb, 0x00a27f7e, 0x010d00f8, 0x00a27f7e, 0xbcc400f8, 0x06b5b63f, 0xbc03b4b6,
0xab98a0ab, 0x7eaabf01, 0xf0003979, 0x00f801a4, 0xf4bdaeb2, 0xf0b3a43d, 0xef3c0a08, 0xa0a93c98,
0xb301ff90, 0xf30080fe, 0x3907a2f0, 0x00f801aa, 0xe9c4ae3f, 0x1b0bf401, 0xff0ef4bd, 0x9098af3c,
0x9e2601ff, 0x00c51bf5, 0xf410f4b3, 0x00a40d3e, 0xafbcf4bd, 0x09991890, 0x3301ff90, 0x00ae009d,
0xf207f4b3, 0x0c06ad18, 0xf5dc2680, 0x33009e0c, 0x183800e4, 0x9d3301a9, 0x18009300, 0x9d3302a9,
0x18008b00, 0x9d3303a9, 0x18008300, 0xa91804af, 0xfff4f005, 0xfd089476, 0x9473059f, 0xdc266f00,
0x3e691bf4, 0x1800a402, 0xa91804af, 0xfff4f005, 0xb6ff94f0, 0x9ffd0894, 0x7099cd05, 0x4d009473,
0x1201a918, 0x96304199, 0x400cf419, 0x3102a918, 0xf4004096, 0x9631361d, 0x1cf4005a, 0x03a9182f,
0x00409631, 0x31251df4, 0xf4005a96, 0xd0331e1c, 0xefc41b00, 0x04f9c4ff, 0xc4151bf4, 0x94b30af9,
0xa9180b02, 0x00903307, 0xf8060a08, 0xf8a4bd00, 0x0f12f900, 0xb2b1b202, 0x00a0b3a0, 0xf0a93f22,
0x1bf40894, 0xa3107e17, 0x0010b300, 0x181a2006, 0x060f0809, 0x1bf4a926, 0xb2f4bd05, 0xb211fbfa,
0xb3020aa9, 0xbf1200c0, 0xb6cdb29a, 0x804c07b4, 0xb7627e00, 0xf400f800, 0xdcdff830, 0xf9000005,
0xfeffbf22, 0x99900149, 0xa0a0b210, 0xb3020a9f, 0xbf340000, 0x94943d0a, 0x41fe07b2, 0x902bb201,
0x010c0f11, 0x1db21920, 0x00b7797e, 0x1700a4b3, 0x0abf193f, 0x1db22bb2, 0x0cfd94f0, 0x7e192001,
0xfe00b762, 0x99900149, 0xd99fbf10, 0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40825,
0x05dcdff8, 0x42f90000, 0x49feffbf, 0x18999001, 0x9fa0a1b2, 0xc0b2b4b2, 0xa0b3d3b2, 0xc0b35600,
0xcf185200, 0xfe94bd07, 0x22900142, 0x01ff1014, 0xcf3529a0, 0x7ecab207, 0xb200a310, 0x080a352b,
0xb27e1ab2, 0xa4b300a7, 0x2bbf2c00, 0x1ab20cb2, 0x00a43f7e, 0x1e00a4b3, 0x4bb21ab2, 0x00a4577e,
0x1200a4b3, 0x0e0030b3, 0x32a022bf, 0x00a5323e, 0x49fe020a, 0x18999001, 0xdcd99fbf, 0xbf000005,
0xf4f9a699, 0x317e070b, 0x45fb003a, 0xb202f908, 0x00a0b3c0, 0x00c0b324, 0xb6aabf20, 0x804c07b4,
0x7e0db200, 0xb300b779, 0xb21000a4, 0xa3307e0a, 0xa5773e00, 0xfb020a00, 0x00a0b301, 0x00c0b317,
0xb2aabf13, 0x07b4b6cd, 0x797e100c, 0x00f800b7, 0x00f8020a, 0xb3b242f9, 0xa2b2c4b2, 0xa0b30200,
0xea7e4200, 0x030000a5, 0xa0b3a1b2, 0x3bb23600, 0x1cb22ab2, 0x00a54d7e, 0xa4b3a0b2, 0x1ab21e00,
0x117eb4bd, 0xa0b200a4, 0x1000a4b3, 0x0c0040b3, 0xf0061918, 0x49a0ff94, 0x1bb22ab2, 0x00a60c7e,
0x41fb0ab2, 0x00f800f8, 0xaeb200f8, 0xb30eaa98, 0xbd0a00a0, 0xa6023ef4, 0x0fea9800, 0x0e00a0b3,
0xff90010f, 0xbc94bd0e, 0x00f8f9e9, 0x1a00b0b3, 0xb30ea998, 0x980d0090, 0x94b30fa9, 0x01090c00,
0xbc0e9990, 0x00f899ab, 0xa002b998, 0xb5ff09a9, 0xb99801a9, 0x04abb502, 0xb503acb5, 0x00f802a9,
0xa0b222f9, 0xd2b2c132, 0xb0b3020a, 0x0cb85e00, 0xbd000140, 0x04c998d4, 0x440090b3, 0x08001433,
0x3c0390b3, 0xb93fcf3f, 0x1bf4f926, 0x01cf1832, 0x2601b918, 0x271bf4f9, 0x1802ce18, 0xddbc02bf,
0x909dbc90, 0xb80394b6, 0x00014099, 0x269009bc, 0x0b1bf4ef, 0xa4bd29a0, 0x00a6a83e, 0x9001dd90,
0xd4b318cc, 0x040ab314, 0xabbf21fb, 0xf009acb2, 0x0bf4b9a6, 0x03aa980d, 0x7e01cbb5, 0xf800b65f,
0xb232f900, 0xbdb2b2a1, 0x3ef00304, 0xbf00a6f0, 0x01009019, 0x93a61ab2, 0x0a090df4, 0xa6f73e03,
0xf493a600, 0x020a091b, 0x00a6f73e, 0x00a6aa7e, 0x08f402a6, 0xfba4bddd, 0xf830f431, 0x0005dcdf,
0xbf82f900, 0x0149feff, 0xb2289990, 0xb29fa0a3, 0x00a9b3b8, 0xb0b30084, 0x47fe7f00, 0x05a49801,
0x14bd54bd, 0x779024bd, 0xa7613e24, 0x0c3a9800, 0x02bc94bd, 0xb279a0b0, 0xb65f7e7c, 0x0f79bf00,
0xf49fa6ff, 0x643d090b, 0x00a74f3e, 0x90015590, 0x04a60100, 0x33d908f4, 0x90070060, 0x24bc0111,
0x03399820, 0x18f429a6, 0xbd01060b, 0xa7523e04, 0xb24bb200, 0x16fc7e1a, 0xf45aa600, 0x1190060d,
0x06399801, 0x19a6f43d, 0x0f050cf4, 0xbd8f2001, 0xa7973ea4, 0xfe020a00, 0x99900149, 0xd99fbf28,
0x000005dc, 0xf9a699bf, 0x7e070bf4, 0xfb003a31, 0x30f40885, 0x05dcdff0, 0x82f90000, 0x49feffbf,
0x30999001, 0xa00147fe, 0x08a9989f, 0xb1b0a6b2, 0xb0f10509, 0x843d0a91, 0x779090b2, 0x0369982c,
0x7fa0f4bd, 0x08f409a6, 0x0804bd07, 0x0a90b401, 0x1bf409a6, 0x00803335, 0xa85a3e32, 0x0c6a9800,
0xb24010bc, 0x7e4bb27c, 0xbf00b65f, 0xa6ff0f79, 0x0f1bf49f, 0x09012290, 0xf439a6f1, 0x43b2051b,
0x3e011190, 0xbd00a82d, 0xbdf10314, 0x05699824, 0x08f419a6, 0x0020b3cb, 0xf429a61e, 0x60b50f18,
0x09f0b408, 0x6b3ef3a0, 0xf10f00a8, 0x1bf45fa6, 0xbc05b205, 0xdd3e0009, 0x1a0a00a7, 0x59a6f109,
0xb50d0bf4, 0x90b40865, 0xbd95a009, 0x0149fea4, 0xbf309990, 0x05dcd99f, 0x99bf0000, 0x0bf4f9a6,
0x3a317e07, 0x1085fb00, 0xd9f830f4, 0x000005dc, 0x99bf82f9, 0x90014ffe, 0xa3b228ff, 0xb4b2f9a0,
0xc033d0b2, 0xdab20e00, 0x140cb43d, 0x00b7907e, 0xbd0142fe, 0x24229014, 0xff07fe08, 0xfb05fc06,
0x00a93a3e, 0xbd0c3a98, 0xb014bc94, 0x2cb229a0, 0x00b65f7e, 0xf00f29bf, 0x0df49fa6, 0xa6fd0f56,
0x110cf49f, 0x18f496a6, 0xf495a630, 0x093e451b, 0x98a600a9, 0xa62f0bf4, 0x371bf497, 0x90010998,
0x09b50199, 0xa9373e01, 0x04099800, 0xb5019990, 0x373e0409, 0x099800a9, 0x01999002, 0x3e0209b5,
0x9800a937, 0x99900309, 0x0309b501, 0x00a9373e, 0x999009bf, 0x9009a001, 0x39980111, 0xf419a605,
0x49fe8508, 0x28999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x85fb003a, 0xf830f408,
0x0005dcdf, 0xb222f900, 0xb2ffbfa1, 0x03aa98b2, 0x49fe1bbf, 0x10999001, 0xa00140fe, 0x0c00909f,
0x5f7e0cb2, 0x0cbf00b6, 0xb2031a98, 0xb6767e2b, 0x011b9800, 0xb9a6ff09, 0x98101bf4, 0x12b50419,
0x0292b502, 0x00a9b13e, 0xb2031a98, 0xb6767e2c, 0x031a9800, 0xfd0c1bbf, 0x00b6767e, 0x900149fe,
0x12a01099, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x25fb003a, 0xc830f408, 0x0005dcdf,
0xbf82f900, 0xf830f4ff, 0x900149fe, 0x9fa06099, 0x18049992, 0xf4bd1cae, 0xa9989fa0, 0x0aa2b205,
0x0b91b005, 0x1a00e933, 0x0c2b9802, 0xfe092c98, 0xf100014a, 0xfe44aa90, 0xa6b20144, 0x8b7e2001,
0x05b200b6, 0x4490a3b2, 0xaa723e30, 0x08299800, 0x0bf439a6, 0xb22ab231, 0xb2010c3b, 0xa8887e4d,
0x04499800, 0x1f0094b3, 0xb3034998, 0x98180094, 0x94b30249, 0x49bf3b00, 0x18f491a6, 0x3e30b209,
0xb200aa65, 0x0bb0b419, 0x6ab291b2, 0x00b6a47e, 0x35a6a3b2, 0x0ab91bf4, 0xf503a603, 0xb301a30b,
0xb20c0014, 0x3e743d03, 0xb200aa8f, 0x94010703, 0x54bd0738, 0x9b3e86b2, 0x2a9800ab, 0xbce4bd0c,
0x4cfe1053, 0x16e1b001, 0xb258cc90, 0xb65f7e1b, 0x00adb300, 0x90b400f3, 0xa6f00f16, 0xd80cf59f,
0xb294bd00, 0x1591b02a, 0x00a5ea7e, 0xa9b3a4b2, 0xbf00d600, 0x4c6bb22a, 0x4db20080, 0x00b7797e,
0xadb3a0b2, 0xb200a700, 0xb21bb22a, 0x014dfe4c, 0x7e50dd90, 0xb200a4be, 0x00adb3a0, 0x2ab20090,
0x0c014b90, 0x014dfe01, 0x7e54dd90, 0xb200a640, 0x00a4b3a0, 0x15b0b478, 0xfe0c2c98, 0xaa90014a,
0xa6287e30, 0x0c90b400, 0x1bf491a6, 0x14b0b41e, 0x90014afe, 0x5d7e30aa, 0x90b400a9, 0x059f9815,
0x2300f4b3, 0x00ab893e, 0x9ea6ef0e, 0x00090df4, 0xab893e03, 0x014afe00, 0x7e30aa90, 0x3e00a6aa,
0x9800ab25, 0xe0b402f9, 0xf491a614, 0xfeb5061b, 0xa6f9bf02, 0x091bf491, 0x893efea0, 0xf99800ab,
0xf491a601, 0xfeb5061b, 0xb24bb201, 0xa60c7e2a, 0x0004b300, 0x01559013, 0x98806690, 0x59a60529,
0xfefa08f5, 0x46007033, 0xb2042f98, 0xb2e4bd8d, 0x00f1b02a, 0x70dc020b, 0xfe000000, 0x11900141,
0x0111b05c, 0x00a5e47e, 0xbf042c98, 0x048bb22a, 0xb74b7efb, 0x981ebf00, 0xa0b2042c, 0x2ab2b4bd,
0xe67e0db2, 0x04b300a5, 0xff040600, 0x013e04bd, 0x2a9800ac, 0xb003bc0c, 0x00904cb2, 0xb6767e01,
0x0b90b400, 0x08f409a6, 0x032f98ec, 0xb59039bc, 0x9fa60929, 0xbd0808f4, 0x0929b594, 0x49fea4bd,
0x60999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b, 0x30f4003a, 0x3885fb08, 0xd9cc30f4,
0x000005dc, 0x99bf82f9, 0xfef830f4, 0xff90014f, 0xb0f9a05c, 0xc8b20be1, 0xa3b2d6b2, 0x8400b9b3,
0x00e9b302, 0xaf18027f, 0x0141fe2c, 0x119094bd, 0x0019a054, 0x00f93303, 0xc43d026d, 0x407e1db2,
0xa0b200a6, 0x5e00adb3, 0xbc17bf02, 0x7998f068, 0xf59fa601, 0x98024d08, 0x94b30479, 0x05000a01,
0x00aee23e, 0x3e0069b3, 0x027f9802, 0xf9a6f009, 0x022a0bf5, 0xea7e3ab2, 0xa2b200a5, 0x1e00a9b3,
0x0c3c9802, 0x40fe7bb2, 0x34009001, 0x287e0ab2, 0x0ab200a6, 0xcc0570b5, 0xc17e708b, 0xa0b200a6,
0xe900adb3, 0x0d00b401, 0x01a6f001, 0x01ce0bf5, 0x01d00cf5, 0x804cb43d, 0x7e2ab200, 0xbf00b790,
0x070b943a, 0xb200804c, 0xb7797e2d, 0x0ca1b000, 0xb600adb3, 0x05291801, 0x76042f18, 0xf4f00894,
0xe59fffff, 0xe966ff09, 0x01980bf5, 0xffffe9e4, 0x08f589a6, 0xf4bd018e, 0x18902fbc, 0x9d330999,
0x90018200, 0xf4b301ff, 0xfc3ef207, 0x8e3c00ae, 0xf59f26f2, 0xc4016d08, 0x94f0fffd, 0x529dbcff,
0x0df456a6, 0x9065b205, 0xa43d10d9, 0x3db029bc, 0x3ee4bdc4, 0xb100ada7, 0xf5006fd6, 0xb401450c,
0xbe3c0b10, 0xf81e3c98, 0x0bf4f926, 0xff94f017, 0xfd009939, 0x9033049f, 0x010a0600, 0x0ce9bf3c,
0x01ee9001, 0xa601dd90, 0xce08f4e5, 0xed00c933, 0xf0293f00, 0x0bf40894, 0x00a93308, 0x94bd00d0,
0x91b03ab2, 0x1391b014, 0x301291b0, 0x4bfe5b91, 0x5bbb9001, 0x00a6f97e, 0xadb3a0b2, 0x3400ef00,
0x90335b90, 0x3ab21100, 0x00a9d97e, 0xadb3a0b2, 0xb400db00, 0x40b40d00, 0x014ffe11, 0xb250ff90,
0x070d942e, 0x4101f1b0, 0x3ab20080, 0x4cb2010b, 0x7e0011b0, 0xb200a5e4, 0xb22cb20b, 0x014dfe3a,
0x7e4cdd90, 0xb400a4be, 0xa0b214e0, 0x3ab21cb2, 0x0db2b4bd, 0x00a5e67e, 0x91000db3, 0x13b0b400,
0x90014afe, 0x5d7e34aa, 0x3a9800a9, 0x0db0b40c, 0x90014cfe, 0x5f7e48cc, 0xa0b200b6, 0x6d00a4b3,
0x011290b4, 0xf491a6f0, 0x4e98321b, 0x70efcd01, 0x0600f4b3, 0x2918700f, 0xff94f006, 0xbb909ebc,
0x49b5029f, 0xae993e01, 0xb20bb200, 0x7e2cb23a, 0xb200a43f, 0x00a4b3a0, 0x0265bb34, 0x90014afe,
0xaa7e34aa, 0x60b300a6, 0x90b42000, 0x8085bc0b, 0xb09095bc, 0xe53e0b91, 0x020000ac, 0x00aec93e,
0xc93e0300, 0x00b400ae, 0xb23ab20c, 0xa60c7e2b, 0xb594bd00, 0xe23e0579, 0x030000ae, 0x00aee23e,
0x49fe0200, 0x5c999001, 0xdcd99fbf, 0xbf000005, 0xa60ab299, 0x170bf4f9, 0x00af083e, 0x33062918,
0xfe4f009d, 0x00aec03e, 0x003a317e, 0xfb0830f4, 0x30f43485, 0x05dcdfdc, 0x82f90000, 0x30f4ffbf,
0x0149fef8, 0xa04c9990, 0x0bb1b09f, 0xd4b2c2b2, 0xa5b2e6b2, 0x1700b9b3, 0x00e9b301, 0x94bd0112,
0x3d0141fe, 0x481190c4, 0x1db219a0, 0x00a6407e, 0xadb3a0b2, 0xbf00fb00, 0xf042bc19, 0xa6019998,
0xea08f59f, 0x005ab200, 0xa5ea7e03, 0xb3a3b200, 0x00de00a9, 0x5c981bbf, 0x0140fe0c, 0xb2300090,
0xa6287e0a, 0xcc0ab200, 0xc17e702b, 0xa8b200a6, 0xad00adb3, 0x7021cd00, 0x420147fe, 0x77900080,
0xb0383e44, 0x0c00b400, 0x79a094bd, 0x09a6f009, 0x00091bf4, 0xb03f3e02, 0xa6f00900, 0x090df409,
0x3f3e0300, 0xc0b400b0, 0x0704b60b, 0x0db2e4bd, 0xb4bd5ab2, 0xb00021b0, 0xe47e0171, 0x5abf00a5,
0x2cb20bb2, 0x797e3db2, 0x7ebf00b7, 0x3bb2a0b2, 0x2cb25ab2, 0xe67e0db2, 0x04b300a5, 0x3ab24500,
0x117eb4bd, 0xa0b200a4, 0x3700a4b3, 0x01bb7000, 0xf404a602, 0x40b2050d, 0xb2101b90, 0xb03bbc6a,
0x997e0cb2, 0x4afe00b7, 0x0240bb01, 0xbc30aa90, 0xaa7e6060, 0x14bd00a6, 0x6d004db3, 0xb280b2ff,
0x7e3bb25a, 0x3e00a60c, 0x0000b04d, 0x0149fe02, 0xbf4c9990, 0x05dcd99f, 0x99bf0000, 0xf9a60ab2,
0x7e070bf4, 0xf4003a31, 0x85fb0830, 0xf830f424, 0x0005dcd9, 0xbf32f900, 0x014ffe99, 0xb214ff90,
0xbdf9a0a1, 0xb2b2b294, 0x0140fec3, 0x9003204b, 0x09a01000, 0x9f7e0ab2, 0x09bf00b7, 0x4c0090b3,
0x4800a4b3, 0x09bf91a0, 0xbf0192b5, 0x1000490f, 0xbf04f9b5, 0xb520090f, 0x09bf05f9, 0xbf0693b5,
0x3501090f, 0x09bf1cf9, 0xbf2c9a35, 0xb5f0090f, 0x0fbf0af9, 0xb540f990, 0x0fbf0ef9, 0xb5c0f990,
0x0abf0ff9, 0x00b0ea3e, 0x49fea4bd, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699, 0x317e070b,
0x35fb003a, 0xd030f408, 0x0005dcdf, 0xbf82f900, 0x0149feff, 0xb2509990, 0x059fa0a3, 0x00a9b302,
0xb63004fb, 0x0b9cf000, 0xbd2ca935, 0x0ca9b594, 0x00a5ea7e, 0x3abfa0b2, 0x804cb4bd, 0x7e0db200,
0xb200b779, 0x00adb3a5, 0x093f04b1, 0xa24a9d33, 0x01091804, 0x9a469d33, 0x02091804, 0x92469d33,
0x03091804, 0x8a539d33, 0x040e1804, 0x18050918, 0x0d18060f, 0xffe4f007, 0xf0ff94f0, 0x94b6fff4,
0x10f4b608, 0xb6059efd, 0xf9fd18d4, 0x05dffd05, 0x045e0bf5, 0xd6b00505, 0x5d0cf503, 0x013db504,
0x0e01d4b3, 0xb5500049, 0xd83e0239, 0x0d1800b1, 0x09091808, 0x180a0f18, 0xd4f00b0e, 0xff94f0ff,
0xb6fff4f0, 0xf4b60894, 0x059dfd10, 0xfd18e4b6, 0xeffd05f9, 0x023eb505, 0x0bb23ab2, 0x00a60c7e,
0x09023a98, 0xf4a9a6ff, 0x04bd091b, 0x00b5ee3e, 0x9007a5b6, 0x3ab5303b, 0xb6d27e03, 0xb3a5b200,
0x03f500ad, 0x09033b98, 0x343a90c0, 0xfd3fbb90, 0xb5b604b9, 0xb79f7e03, 0xb3a5b200, 0x03d900ad,
0xfe0147fe, 0x77900148, 0x9044bd40, 0x88900179, 0x0991b03c, 0x00b3483e, 0x8ea0e4bd, 0x0f0044b3,
0xbd0c3a98, 0x3efe0cb4, 0xb200b26b, 0xb24bb23a, 0xa5797e7c, 0xb3a5b200, 0x039d00ad, 0x94f0793f,
0x120bf401, 0xb20c3a98, 0x7eff0c4b, 0x3e00b676, 0xb200b345, 0xa3307e7a, 0x00a0b300, 0x0c3a980f,
0xfd0c4bb2, 0x00b26b3e, 0x94f0793f, 0x0e1bf402, 0xb20c3a98, 0x3efd0c4b, 0xb400b33a, 0x3ab209b0,
0x8db2010c, 0x00a6407e, 0x5d00a0b3, 0x3fb2793f, 0x99c724bd, 0x01999002, 0x980a91b0, 0x54b354f5,
0xb0b43900, 0x0022bc09, 0x02bc030c, 0x0304b600, 0x014001b8, 0x1031bc00, 0x997e1ab2, 0x30bc00b7,
0x4309b800, 0x95200001, 0xb45302b5, 0x0fb50af0, 0x3e81a054, 0x9000b305, 0xff900122, 0x1424b318,
0xb6323ebe, 0x3f8ebf00, 0x027f5879, 0x98077d18, 0x3a9803ee, 0x0299c70d, 0xcc00f3f0, 0x96cb70ff,
0xcb4bb21f, 0x010cd8e6, 0xebf0d6cb, 0x7e01e0f6, 0x9800a2e6, 0x4bb20c3a, 0x767e6cb2, 0xa5b200b6,
0xb400adb3, 0x01449002, 0xa6033b98, 0xeb08f54b, 0xbc94bdfe, 0x89a0b0bb, 0xb57e8ab2, 0xa5b200b7,
0x9400adb3, 0xbd37b202, 0x547f9884, 0xbc9088bc, 0x94b69098, 0x4099b803, 0x39bc0001, 0x0b91b090,
0x5300f9b3, 0x033c9802, 0x3d0fa0b4, 0xbc24bdb4, 0x44bdc0cc, 0x00b7907e, 0x3e0f60b4, 0x9800b463,
0x2bb20d3a, 0x7e0c41b0, 0x3300a2f6, 0x00b500a9, 0xfe0c3a98, 0x2bb2014c, 0x7e38cc90, 0xb300b65f,
0x020c00ad, 0xb40be0b4, 0xef980e90, 0xd899c703, 0x1bf59fa6, 0x3a98008e, 0x0c2bb20d, 0xa2ee7e01,
0x014cfe00, 0x2bb23ab2, 0x7e30cc90, 0xb300a594, 0x981306a4, 0x2bb20c3a, 0x767efd0c, 0x603e00b6,
0xadb300b4, 0x7401cb00, 0x93f01c90, 0x9099bc00, 0x7f0069bc, 0xff19e401, 0x091bf4ff, 0x603e0260,
0x3a9800b4, 0x014cfe0c, 0xffff1be4, 0x7e34cc90, 0xb300b65f, 0x019800ad, 0x343af034, 0xf9263690,
0x60100df4, 0xff1be402, 0x0c3a98ff, 0x00b4553e, 0xb20c3a98, 0x7efd0c2b, 0xb300b676, 0x017000ad,
0x98012290, 0x2aa6033a, 0xff3708f5, 0x6eb264b2, 0xd43db43d, 0xc4bdf4bd, 0x00b4973e, 0x9473e97f,
0x010d0a00, 0x00b4913e, 0x0600d033, 0xcc90010b, 0x01ff9001, 0xa602ee90, 0xe308f4fa, 0x0b00c4b3,
0x3e547cb5, 0x3300b5d3, 0x00a600b9, 0xb0013998, 0x0cf40296, 0xb2030930, 0x5479b56d, 0xf4bde4bd,
0x00b4d63e, 0x9073d97f, 0x697c0a00, 0x01ee90e9, 0x9001ff90, 0x399802dd, 0xf4f9a603, 0x4d3ee908,
0x94bd00b5, 0x79b5f101, 0xb224bd54, 0xb5273e1b, 0xe4407f00, 0xf4ffff09, 0xf10f260b, 0x1bf4bfa6,
0xff0be40b, 0xb51f3eff, 0x0c3a9800, 0xffff0ce4, 0x00b6767e, 0xb900adb3, 0xff0be400, 0x9019b2ff,
0x44900122, 0x9891b202, 0x29a60339, 0x09c508f4, 0xf5b9a6f1, 0x9800a00b, 0x3c980c3a, 0xb6767e0a,
0x00adb300, 0x31b5008c, 0xb5d33e0a, 0xbd6f7f00, 0x01c19294, 0xf05179b5, 0x04bd00f3, 0x3e527fb5,
0x7f00b58b, 0x014c584b, 0x900c3a98, 0xb3f00100, 0x00c3f000, 0x7e024490, 0xb300b676, 0xb45200a4,
0xe9980be0, 0x70999001, 0xa601e9b5, 0xd608f401, 0x9808607c, 0xf00c0c3a, 0xffff0be4, 0x00b6767e,
0x2d00a4b3, 0xe4014cfe, 0xb2ffff0b, 0x40cc903a, 0x00a5797e, 0x1900a4b3, 0x98469034, 0x94f0517f,
0xf0f9bcff, 0x3e517fb5, 0x0a00b5d3, 0x3ea5b203, 0x9000b5de, 0x77900188, 0x148db318, 0x49fefd90,
0x3c999001, 0x497e9abf, 0xf43e00b7, 0x030500b5, 0x00b5f63e, 0x0bb204bd, 0x0c7e3ab2, 0x50b300a6,
0x3a981a00, 0x7e04bd0c, 0x9800b6c8, 0x30b50d3a, 0xb7497e0c, 0x0d30b500, 0x900149fe, 0x9fbf5099,
0x0005dcd9, 0xb299bf00, 0xf4f9a65a, 0x383e110b, 0x010500b6, 0x00b5f43e, 0x003a317e, 0xf93085fb,
0x7ea0b202, 0x9800a5e8, 0xc87e0c0a, 0x0a9800b6, 0xb7497e0d, 0x7e0ab200, 0xbd00b749, 0xbf01fba4,
0x0aafb2a9, 0xf4b9a602, 0xb9900d18, 0x98f9bc01, 0xc9a0a4bd, 0xa9bf00f8, 0x020aafb2, 0x18f4b9a6,
0x01b9900b, 0xfcbca4bd, 0xbf00f899, 0xb2afb2b9, 0xf4c9a6ca, 0xf10a0708, 0xfbb500f8, 0xb5fca002,
0x00f801fc, 0xaf98a9bf, 0x90b9bc02, 0xfbbfa9a0, 0x08f49ba6, 0x029bbb08, 0xa998a9a0, 0xa6aabf01,
0x051bf4a9, 0x00f8f10a, 0x0800a0b3, 0x00b7497e, 0x30f400f8, 0x05dcdff8, 0x32f90000, 0x49feffbf,
0x14999001, 0x9fa0a0b2, 0xa0b3b3b2, 0xfd024200, 0x0cf4a2a6, 0x01ab903a, 0xb60141fe, 0x119002b4,
0x7e1ab210, 0xb300b7b5, 0xbf2700a4, 0xb21db219, 0xa0e4bd2c, 0x90dfbf90, 0x9eb201e9, 0xa699fcbc,
0xf408f490, 0x3da0ddbf, 0x00b72e3e, 0x49fe020a, 0x14999001, 0xdcd99fbf, 0xbf000005, 0xf4f9a699,
0x317e070b, 0x35fb003a, 0xda00f808, 0x00002944, 0x0041c77e, 0xf000a630, 0xa6f00bac, 0x01aab901,
0x44da00f8, 0x7e000029, 0x30004142, 0xacf000a6, 0x01a6f00b, 0xf801aab9, 0x2944da00, 0xd77e0000,
0xa6300042, 0x0bacf000, 0xb901a6f0, 0x00f801aa, 0x7effb4f0, 0xf8000b94, 0x0b7e7e00, 0xf900f800,
0x3da0b202, 0x384c7ea4, 0x00a6b000, 0xa00b9cf0, 0xfb9ab20a, 0xb202f901, 0x7ea43da0, 0xb000382a,
0x9cf000a6, 0xb20aa00b, 0xf401fb9a, 0xdcdfe430, 0xf9000005, 0xfeffbf82, 0x45fe0149, 0x3c999001,
0xa00147fe, 0x2455909f, 0xd9347790, 0x0000141c, 0x4bfe9abf, 0x90080c01, 0xff0d2cbb, 0x0000c17e,
0xeb00a433, 0x3f0c30b4, 0x0c943339, 0x043118e2, 0x0f001033, 0xb0011933, 0x3e043d00, 0x9800b971,
0x2cd9023f, 0x98000014, 0x34580431, 0x3f5fa00a, 0x0339989f, 0xb5183690, 0xff090159, 0xf43379a0,
0xf77e1800, 0xa0320032, 0x2900ad33, 0xdf010901, 0x0000142c, 0x1272f920, 0xbd0043f0, 0xb8b13e14,
0x0241bc00, 0x010006b1, 0x40060df4, 0x947e0100, 0x24d9000b, 0xbf000014, 0xff2ce49a, 0xb26bb2ff,
0x1300de0d, 0x127e0000, 0x7aa000af, 0xd400adb3, 0x985bbf00, 0x1d90015c, 0x7c0eb204, 0x10bc2020,
0x1300da10, 0x367e0000, 0xa0320021, 0xc500ad33, 0x4cb4bd00, 0x00da0100, 0xa6000013, 0xa408f414,
0x00b9603e, 0xd9023f98, 0x0000142c, 0x58043498, 0x5fa00a32, 0x39989f3f, 0x18389003, 0x090159b5,
0x3379a0ff, 0x7e1600f4, 0x320032f7, 0x00ad33a0, 0x2cdf0084, 0x20000014, 0xff26e4f1, 0x3e24bdff,
0xbc00b951, 0x16b11262, 0x0df40100, 0x01004106, 0x000b947e, 0x5c985bbf, 0x042d9001, 0x00da1eb2,
0x7e000013, 0xe40020d0, 0xbcffff4c, 0xa0322021, 0x1db28bb2, 0x001300de, 0x40417c00, 0x3500a433,
0x001424d9, 0x7e9abf00, 0xa000ac3c, 0x00a4b37a, 0x4cb4bd13, 0x00da0100, 0xa6000013, 0xa608f426,
0x5c985bbf, 0xbd7ab201, 0x7e040ed4, 0x32002136, 0x2db034a0, 0x817e3ab2, 0x0d33000f, 0x30fe7100,
0x020f3a01, 0x1838f130, 0x04090333, 0x30014afe, 0x31303991, 0x90b4bd3b, 0x717e38aa, 0xeb3e000f,
0x02f900b7, 0x002930d9, 0xbfa0b200, 0x7e640b9a, 0x090000de, 0x00a43310, 0xa6008961, 0x009fcf02,
0x1000f5f1, 0x8a009ff6, 0x4b02a600, 0xc4bd1000, 0xbd27104d, 0x198b7ee4, 0x00a43300, 0x2930d915,
0x9abf0000, 0x00009b7e, 0x163e0409, 0x0ab200ba, 0x7e03e84b, 0x890016fc, 0xb802a400, 0x000200aa,
0x920aa5b6, 0x9af601aa, 0x01114f00, 0x020099b8, 0x009ff600, 0x9a32943d, 0x000001fb, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
@ -2269,8 +2269,8 @@ const NvU32 soe_ucode_data_lr10_prd[] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xb32dc4cc, 0x58018cca, 0x7c52cad0, 0x4a5277fe, 0xb22438cf, 0xcfd90bc8, 0xf23ebc55, 0x2e5c0e40,
0x705ea2e7, 0x0577e70f, 0xcf75f41f, 0xfe6e071a, 0x0d4a5d7d, 0x9c31ffb3, 0x95bc604f, 0x40cc834d,
0xb32dc4cc, 0x58018cca, 0x7c52cad0, 0x4a5277fe, 0x59305452, 0xfe64d88a, 0xe474c23b, 0xfee62bd9,
0x705ea2e7, 0x0577e70f, 0xcf75f41f, 0xfe6e071a, 0xd0954f7e, 0x7caea789, 0x40b32eb9, 0x80368ac3,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -124,9 +124,27 @@ nvswitch_inforom_bbx_get_sxid
status = device->hal.nvswitch_bbx_get_sxid(device, params);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "nvswitch_inforom_bbx_load failed, status=%d\n", status);
NVSWITCH_PRINT(device, ERROR, "nvswitch_bbx_get_sxid failed, status=%d\n", status);
}
return status;
}
NvlStatus
nvswitch_inforom_bbx_get_data
(
nvswitch_device *device,
NvU8 dataType,
void *params
)
{
NvlStatus status;
status = device->hal.nvswitch_bbx_get_data(device, dataType, params);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: (type=%d) failed, status=%d\n", __FUNCTION__, dataType, status);
}
return status;
}

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -32,7 +32,188 @@ nvswitch_inforom_nvlink_flush
struct nvswitch_device *device
)
{
return -NVL_ERR_NOT_SUPPORTED;
NvlStatus status = NVL_SUCCESS;
struct inforom *pInforom = device->pInforom;
PINFOROM_NVLINK_STATE pNvlinkState;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState != NULL && pNvlinkState->bDirty)
{
status = nvswitch_inforom_write_object(device, "NVL",
pNvlinkState->pFmt, pNvlinkState->pNvl,
pNvlinkState->pPackedObject);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR,
"Failed to flush NVL object to InfoROM, rc: %d\n", status);
}
else
{
pNvlinkState->bDirty = NV_FALSE;
}
}
return status;
}
static void
_inforom_nvlink_get_correctable_error_counts
(
nvswitch_device *device,
NvU32 linkId,
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pErrorCounts
)
{
NvlStatus status;
NvU32 lane, idx;
NVSWITCH_NVLINK_GET_COUNTERS_PARAMS p = { 0 };
ct_assert(NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE__SIZE <=
INFOROM_NVL_OBJECT_MAX_SUBLINK_WIDTH);
nvswitch_os_memset(pErrorCounts, 0, sizeof(*pErrorCounts));
p.linkId = linkId;
p.counterMask = NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_FLIT
| NVSWITCH_NVLINK_COUNTER_DL_TX_ERR_REPLAY
| NVSWITCH_NVLINK_COUNTER_DL_TX_ERR_RECOVERY
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_REPLAY
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L0
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L1
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L2
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L3
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L4
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L5
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L6
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L7
| NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L7;
status = device->hal.nvswitch_ctrl_get_counters(device, &p);
if (status != NVL_SUCCESS)
{
return;
}
pErrorCounts->flitCrc =
p.nvlinkCounters[BIT_IDX_32(NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_FLIT)];
pErrorCounts->txLinkReplay =
p.nvlinkCounters[BIT_IDX_32(NVSWITCH_NVLINK_COUNTER_DL_TX_ERR_REPLAY)];
pErrorCounts->rxLinkReplay =
p.nvlinkCounters[BIT_IDX_32(NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_REPLAY)];
pErrorCounts->linkRecovery =
p.nvlinkCounters[BIT_IDX_32(NVSWITCH_NVLINK_COUNTER_DL_TX_ERR_RECOVERY)];
for (lane = 0; lane < NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE__SIZE; lane++)
{
idx = BIT_IDX_32(NVSWITCH_NVLINK_COUNTER_DL_RX_ERR_CRC_LANE_L(lane));
pErrorCounts->laneCrc[lane] = p.nvlinkCounters[idx];
}
}
static void
_inforom_nvlink_update_correctable_error_rates
(
nvswitch_device *device,
struct inforom *pInforom
)
{
PINFOROM_NVLINK_STATE pNvlinkState = pInforom->pNvlinkState;
NvU64 enabledLinkMask;
NvU32 linkId, publicId, localLinkIdx;
NvBool bDirty = NV_FALSE;
NvBool bDirtyTemp;
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS errorCounts = { 0 };
if (pNvlinkState == NULL)
{
return;
}
enabledLinkMask = nvswitch_get_enabled_link_mask(device);
FOR_EACH_INDEX_IN_MASK(64, linkId, enabledLinkMask)
{
if (device->hal.nvswitch_get_link_public_id(device, linkId, &publicId) != NVL_SUCCESS)
{
continue;
}
if (device->hal.nvswitch_get_link_local_idx(device, linkId, &localLinkIdx) != NVL_SUCCESS)
{
continue;
}
_inforom_nvlink_get_correctable_error_counts(device, linkId, &errorCounts);
if (device->hal.nvswitch_inforom_nvl_update_link_correctable_error_info(device,
pNvlinkState->pNvl, &pNvlinkState->correctableErrorRateState, linkId,
publicId, localLinkIdx, &errorCounts, &bDirtyTemp) != NVL_SUCCESS)
{
continue;
}
bDirty |= bDirtyTemp;
}
FOR_EACH_INDEX_IN_MASK_END;
pNvlinkState->bDirty |= bDirty;
}
static void _nvswitch_nvlink_1hz_callback
(
nvswitch_device *device
)
{
struct inforom *pInforom = device->pInforom;
if ((pInforom == NULL) || (pInforom->pNvlinkState == NULL) ||
pInforom->pNvlinkState->bCallbackPending)
{
return;
}
pInforom->pNvlinkState->bCallbackPending = NV_TRUE;
_inforom_nvlink_update_correctable_error_rates(device, pInforom);
pInforom->pNvlinkState->bCallbackPending = NV_FALSE;
}
static void
_inforom_nvlink_start_correctable_error_recording
(
nvswitch_device *device,
struct inforom *pInforom
)
{
PINFOROM_NVLINK_STATE pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return;
}
if (pNvlinkState->bDisableCorrectableErrorLogging)
{
NVSWITCH_PRINT(device, INFO,
"%s: Correctable error recording disabled by regkey or unsupported\n",
__FUNCTION__);
return;
}
pNvlinkState->bCallbackPending = NV_FALSE;
nvswitch_task_create(device, &_nvswitch_nvlink_1hz_callback,
NVSWITCH_INTERVAL_1SEC_IN_NS, 0);
}
NvlStatus
@ -41,7 +222,82 @@ nvswitch_inforom_nvlink_load
nvswitch_device *device
)
{
return -NVL_ERR_NOT_SUPPORTED;
NvlStatus status;
NvU8 version = 0;
NvU8 subversion = 0;
INFOROM_NVLINK_STATE *pNvlinkState = NULL;
struct inforom *pInforom = device->pInforom;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
status = nvswitch_inforom_get_object_version_info(device, "NVL", &version,
&subversion);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, WARN, "no NVL object found, rc:%d\n", status);
return NVL_SUCCESS;
}
if (!INFOROM_OBJECT_SUBVERSION_SUPPORTS_NVSWITCH(subversion))
{
NVSWITCH_PRINT(device, WARN, "NVL v%u.%u not supported\n",
version, subversion);
return -NVL_ERR_NOT_SUPPORTED;
}
NVSWITCH_PRINT(device, INFO, "NVL v%u.%u found\n", version, subversion);
pNvlinkState = nvswitch_os_malloc(sizeof(INFOROM_NVLINK_STATE));
if (pNvlinkState == NULL)
{
return -NVL_NO_MEM;
}
nvswitch_os_memset(pNvlinkState, 0, sizeof(INFOROM_NVLINK_STATE));
pNvlinkState->bDirty = NV_FALSE;
pNvlinkState->bDisableFatalErrorLogging = NV_FALSE;
pNvlinkState->bDisableCorrectableErrorLogging = NV_TRUE;
status = device->hal.nvswitch_inforom_nvl_setup_nvlink_state(device, pNvlinkState, version);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "Failed to set up NVL object, rc:%d\n", status);
goto nvswitch_inforom_nvlink_version_fail;
}
status = nvswitch_inforom_read_object(device, "NVL", pNvlinkState->pFmt,
pNvlinkState->pPackedObject,
pNvlinkState->pNvl);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "Failed to read NVL object, rc:%d\n", status);
goto nvswitch_inforom_read_fail;
}
status = nvswitch_inforom_add_object(pInforom, &pNvlinkState->pNvl->header);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "Failed to cache NVL object header, rc:%d\n",
status);
goto nvswitch_inforom_read_fail;
}
pInforom->pNvlinkState = pNvlinkState;
_inforom_nvlink_start_correctable_error_recording(device, pInforom);
return NVL_SUCCESS;
nvswitch_inforom_read_fail:
nvswitch_os_free(pNvlinkState->pPackedObject);
nvswitch_os_free(pNvlinkState->pNvl);
nvswitch_inforom_nvlink_version_fail:
nvswitch_os_free(pNvlinkState);
return status;
}
void
@ -50,30 +306,29 @@ nvswitch_inforom_nvlink_unload
nvswitch_device *device
)
{
return;
}
INFOROM_NVLINK_STATE *pNvlinkState;
struct inforom *pInforom = device->pInforom;
NvlStatus
nvswitch_inforom_nvlink_get_minion_data
(
nvswitch_device *device,
NvU8 linkId,
NvU32 *seedData
)
{
return -NVL_ERR_NOT_SUPPORTED;
}
if (pInforom == NULL)
{
return;
}
NvlStatus
nvswitch_inforom_nvlink_set_minion_data
(
nvswitch_device *device,
NvU8 linkId,
NvU32 *seedData,
NvU32 size
)
{
return -NVL_ERR_NOT_SUPPORTED;
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return;
}
if (nvswitch_inforom_nvlink_flush(device) != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "Failed to flush NVL object on object unload\n");
}
nvswitch_os_free(pNvlinkState->pPackedObject);
nvswitch_os_free(pNvlinkState->pNvl);
nvswitch_os_free(pNvlinkState);
pInforom->pNvlinkState = NULL;
}
NvlStatus
@ -83,7 +338,35 @@ nvswitch_inforom_nvlink_log_error_event
void *error_event
)
{
return -NVL_ERR_NOT_SUPPORTED;
NvlStatus status;
NvBool bDirty = NV_FALSE;
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
status = device->hal.nvswitch_inforom_nvl_log_error_event(device,
pNvlinkState->pNvl,
(INFOROM_NVLINK_ERROR_EVENT *)error_event,
&bDirty);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "Failed to log error to inforom, rc:%d\n",
status);
}
pNvlinkState->bDirty |= bDirty;
return status;
}
NvlStatus
@ -93,7 +376,14 @@ nvswitch_inforom_nvlink_get_max_correctable_error_rate
NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
struct inforom *pInforom = device->pInforom;
if ((pInforom == NULL) || (pInforom->pNvlinkState == NULL))
{
return -NVL_ERR_NOT_SUPPORTED;
}
return device->hal.nvswitch_inforom_nvl_get_max_correctable_error_rate(device, params);
}
NvlStatus
@ -103,5 +393,67 @@ nvswitch_inforom_nvlink_get_errors
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
struct inforom *pInforom = device->pInforom;
if ((pInforom == NULL) || (pInforom->pNvlinkState == NULL))
{
return -NVL_ERR_NOT_SUPPORTED;
}
return device->hal.nvswitch_inforom_nvl_get_errors(device, params);
}
NvlStatus nvswitch_inforom_nvlink_setL1Threshold
(
nvswitch_device *device,
NvU32 word1,
NvU32 word2
)
{
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
return device->hal.nvswitch_inforom_nvl_setL1Threshold(device,
pNvlinkState->pNvl,
word1,
word2);
}
NvlStatus nvswitch_inforom_nvlink_getL1Threshold
(
nvswitch_device *device,
NvU32 *word1,
NvU32 *word2
)
{
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
return device->hal.nvswitch_inforom_nvl_getL1Threshold(device,
pNvlinkState->pNvl,
word1,
word2);
}

View File

@ -0,0 +1,619 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#include "common_nvswitch.h"
#include "inforom/inforom_nvswitch.h"
#include "inforom/inforom_nvl_v3_nvswitch.h"
#include "lr10/lr10.h"
NvlStatus inforom_nvl_v3_map_error
(
INFOROM_NVLINK_ERROR_TYPES error,
NvU8 *pHeader,
NvU16 *pMetadata,
NvU8 *pErrorSubtype,
INFOROM_NVL_ERROR_BLOCK_TYPE *pBlockType
)
{
static const struct
{ NvU8 header;
NvU16 metadata;
NvU8 errorSubtype;
INFOROM_NVL_ERROR_BLOCK_TYPE blockType;
} lut[] =
{
LUT_ELEMENT(DL, _RX, _FAULT_DL_PROTOCOL_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _RX, _FAULT_SUBLINK_CHANGE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _RX, _FLIT_CRC_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _RX, _LANE0_CRC_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _RX, _LANE1_CRC_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _RX, _LANE2_CRC_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _RX, _LANE3_CRC_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _RX, _LINK_REPLAY_EVENTS_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _TX, _FAULT_RAM_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _TX, _FAULT_INTERFACE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _TX, _FAULT_SUBLINK_CHANGE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _TX, _LINK_REPLAY_EVENTS_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(DL, _NA, _LTSSM_FAULT_UP_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _NA, _LTSSM_FAULT_DOWN_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _NA, _LINK_RECOVERY_EVENTS_CORR, _ACCUM, _CORRECTABLE),
LUT_ELEMENT(TLC, _RX, _DL_HDR_PARITY_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DL_DATA_PARITY_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DL_CTRL_PARITY_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_AE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_BE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_ADDR_ALIGN_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _PKTLEN_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSVD_PACKET_STATUS_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DATLEN_GT_RMW_REQ_MAX_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DATLEN_LT_ATR_RSP_MIN_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_CR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_COLLAPSED_RESPONSE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _HDR_OVERFLOW_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DATA_OVERFLOW_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _STOMP_DETECTED_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSVD_CMD_ENC_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSVD_DAT_LEN_ENC_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _INVALID_PO_FOR_CACHE_ATTR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _RSP_STATUS_HW_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _RX, _RSP_STATUS_UR_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _RX, _RSP_STATUS_PRIV_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _RX, _POISON_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _RX, _AN1_HEARTBEAT_TIMEOUT_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _RX, _ILLEGAL_PRI_WRITE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _DL_CREDIT_PARITY_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _TX, _NCISOC_HDR_ECC_DBE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _TX, _NCISOC_PARITY_ERR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _TX, _ILLEGAL_PRI_WRITE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC0_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC1_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC2_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC3_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC4_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC5_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC6_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _AN1_TIMEOUT_VC7_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _POISON_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _RSP_STATUS_HW_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _RSP_STATUS_UR_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _RSP_STATUS_PRIV_ERR_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _SLEEP_WHILE_ACTIVE_LINK_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _RSTSEQ_PHYCTL_TIMEOUT_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _RSTSEQ_CLKCTL_TIMEOUT_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _CLKCTL_ILLEGAL_REQUEST_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _RSTSEQ_PLL_TIMEOUT_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _RSTSEQ_PHYARB_TIMEOUT_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(NVLIPT, _NA, _ILLEGAL_LINK_STATE_REQUEST_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _FAILED_MINION_REQUEST_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _RESERVED_REQUEST_VALUE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _LINK_STATE_WRITE_WHILE_BUSY_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(NVLIPT, _NA, _LINK_STATE_REQUEST_TIMEOUT_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
// TODO 3014908 log these in the NVL object until we have ECC object support
LUT_ELEMENT(TLC, _RX, _HDR_RAM_ECC_DBE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DAT0_RAM_ECC_DBE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _RX, _DAT1_RAM_ECC_DBE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(TLC, _TX, _CREQ_DAT_RAM_ECC_DBE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _RSP_DAT_RAM_ECC_DBE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _COM_DAT_RAM_ECC_DBE_NONFATAL, _COUNT, _UNCORRECTABLE_NONFATAL),
LUT_ELEMENT(TLC, _TX, _RSP1_DAT_RAM_ECC_DBE_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _NA, _PHY_A_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _RX, _CRC_COUNTER_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _TX, _PL_ERROR_FATAL, _COUNT, _UNCORRECTABLE_FATAL),
LUT_ELEMENT(DL, _RX, _PL_ERROR_FATAL, _COUNT, _UNCORRECTABLE_FATAL)
};
ct_assert(INFOROM_NVLINK_DL_RX_FAULT_DL_PROTOCOL_FATAL == 0);
ct_assert(INFOROM_NVLINK_DL_RX_FAULT_SUBLINK_CHANGE_FATAL == 1);
ct_assert(INFOROM_NVLINK_DL_RX_FLIT_CRC_CORR == 2);
ct_assert(INFOROM_NVLINK_DL_RX_LANE0_CRC_CORR == 3);
ct_assert(INFOROM_NVLINK_DL_RX_LANE1_CRC_CORR == 4);
ct_assert(INFOROM_NVLINK_DL_RX_LANE2_CRC_CORR == 5);
ct_assert(INFOROM_NVLINK_DL_RX_LANE3_CRC_CORR == 6);
ct_assert(INFOROM_NVLINK_DL_RX_LINK_REPLAY_EVENTS_CORR == 7);
ct_assert(INFOROM_NVLINK_DL_TX_FAULT_RAM_FATAL == 8);
ct_assert(INFOROM_NVLINK_DL_TX_FAULT_INTERFACE_FATAL == 9);
ct_assert(INFOROM_NVLINK_DL_TX_FAULT_SUBLINK_CHANGE_FATAL == 10);
ct_assert(INFOROM_NVLINK_DL_TX_LINK_REPLAY_EVENTS_CORR == 11);
ct_assert(INFOROM_NVLINK_DL_LTSSM_FAULT_UP_FATAL == 12);
ct_assert(INFOROM_NVLINK_DL_LTSSM_FAULT_DOWN_FATAL == 13);
ct_assert(INFOROM_NVLINK_DL_LINK_RECOVERY_EVENTS_CORR == 14);
ct_assert(INFOROM_NVLINK_TLC_RX_DL_HDR_PARITY_ERR_FATAL == 15);
ct_assert(INFOROM_NVLINK_TLC_RX_DL_DATA_PARITY_ERR_FATAL == 16);
ct_assert(INFOROM_NVLINK_TLC_RX_DL_CTRL_PARITY_ERR_FATAL == 17);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_AE_FATAL == 18);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_BE_FATAL == 19);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_ADDR_ALIGN_FATAL == 20);
ct_assert(INFOROM_NVLINK_TLC_RX_PKTLEN_ERR_FATAL == 21);
ct_assert(INFOROM_NVLINK_TLC_RX_RSVD_PACKET_STATUS_ERR_FATAL == 22);
ct_assert(INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL == 23);
ct_assert(INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL == 24);
ct_assert(INFOROM_NVLINK_TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL == 25);
ct_assert(INFOROM_NVLINK_TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL == 26);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_CR_FATAL == 27);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL == 28);
ct_assert(INFOROM_NVLINK_TLC_RX_HDR_OVERFLOW_FATAL == 29);
ct_assert(INFOROM_NVLINK_TLC_RX_DATA_OVERFLOW_FATAL == 30);
ct_assert(INFOROM_NVLINK_TLC_RX_STOMP_DETECTED_FATAL == 31);
ct_assert(INFOROM_NVLINK_TLC_RX_RSVD_CMD_ENC_FATAL == 32);
ct_assert(INFOROM_NVLINK_TLC_RX_RSVD_DAT_LEN_ENC_FATAL == 33);
ct_assert(INFOROM_NVLINK_TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL == 34);
ct_assert(INFOROM_NVLINK_TLC_RX_RSP_STATUS_HW_ERR_NONFATAL == 35);
ct_assert(INFOROM_NVLINK_TLC_RX_RSP_STATUS_UR_ERR_NONFATAL == 36);
ct_assert(INFOROM_NVLINK_TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL == 37);
ct_assert(INFOROM_NVLINK_TLC_RX_POISON_NONFATAL == 38);
ct_assert(INFOROM_NVLINK_TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL == 39);
ct_assert(INFOROM_NVLINK_TLC_RX_ILLEGAL_PRI_WRITE_NONFATAL == 40);
ct_assert(INFOROM_NVLINK_TLC_TX_DL_CREDIT_PARITY_ERR_FATAL == 41);
ct_assert(INFOROM_NVLINK_TLC_TX_NCISOC_HDR_ECC_DBE_FATAL == 42);
ct_assert(INFOROM_NVLINK_TLC_TX_NCISOC_PARITY_ERR_FATAL == 43);
ct_assert(INFOROM_NVLINK_TLC_TX_ILLEGAL_PRI_WRITE_NONFATAL == 44);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC0_NONFATAL == 45);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC1_NONFATAL == 46);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC2_NONFATAL == 47);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC3_NONFATAL == 48);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC4_NONFATAL == 49);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC5_NONFATAL == 50);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC6_NONFATAL == 51);
ct_assert(INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC7_NONFATAL == 52);
ct_assert(INFOROM_NVLINK_TLC_TX_POISON_NONFATAL == 53);
ct_assert(INFOROM_NVLINK_TLC_TX_RSP_STATUS_HW_ERR_NONFATAL == 54);
ct_assert(INFOROM_NVLINK_TLC_TX_RSP_STATUS_UR_ERR_NONFATAL == 55);
ct_assert(INFOROM_NVLINK_TLC_TX_RSP_STATUS_PRIV_ERR_NONFATAL == 56);
ct_assert(INFOROM_NVLINK_NVLIPT_SLEEP_WHILE_ACTIVE_LINK_FATAL == 57);
ct_assert(INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYCTL_TIMEOUT_FATAL == 58);
ct_assert(INFOROM_NVLINK_NVLIPT_RSTSEQ_CLKCTL_TIMEOUT_FATAL == 59);
ct_assert(INFOROM_NVLINK_NVLIPT_CLKCTL_ILLEGAL_REQUEST_FATAL == 60);
ct_assert(INFOROM_NVLINK_NVLIPT_RSTSEQ_PLL_TIMEOUT_FATAL == 61);
ct_assert(INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYARB_TIMEOUT_FATAL == 62);
ct_assert(INFOROM_NVLINK_NVLIPT_ILLEGAL_LINK_STATE_REQUEST_NONFATAL == 63);
ct_assert(INFOROM_NVLINK_NVLIPT_FAILED_MINION_REQUEST_NONFATAL == 64);
ct_assert(INFOROM_NVLINK_NVLIPT_RESERVED_REQUEST_VALUE_NONFATAL == 65);
ct_assert(INFOROM_NVLINK_NVLIPT_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL == 66);
ct_assert(INFOROM_NVLINK_NVLIPT_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL == 67);
ct_assert(INFOROM_NVLINK_NVLIPT_LINK_STATE_REQUEST_TIMEOUT_NONFATAL == 68);
ct_assert(INFOROM_NVLINK_TLC_RX_HDR_RAM_ECC_DBE_FATAL == 69);
ct_assert(INFOROM_NVLINK_TLC_RX_DAT0_RAM_ECC_DBE_FATAL == 70);
ct_assert(INFOROM_NVLINK_TLC_RX_DAT1_RAM_ECC_DBE_FATAL == 71);
ct_assert(INFOROM_NVLINK_TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL == 72);
ct_assert(INFOROM_NVLINK_TLC_TX_RSP_DAT_RAM_ECC_DBE_NONFATAL == 73);
ct_assert(INFOROM_NVLINK_TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL == 74);
ct_assert(INFOROM_NVLINK_TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL == 75);
ct_assert(INFOROM_NVLINK_DL_PHY_A_FATAL == 76);
ct_assert(INFOROM_NVLINK_DL_RX_CRC_COUNTER_FATAL == 77);
ct_assert(INFOROM_NVLINK_DL_TX_PL_ERROR_FATAL == 78);
ct_assert(INFOROM_NVLINK_DL_RX_PL_ERROR_FATAL == 79);
ct_assert(NV_ARRAY_ELEMENTS(lut) == INFOROM_NVLINK_MAX_ERROR_TYPE);
if (error >= NV_ARRAY_ELEMENTS(lut))
{
return -NVL_BAD_ARGS;
}
*pHeader = lut[error].header;
*pMetadata = lut[error].metadata;
*pErrorSubtype = lut[error].errorSubtype;
*pBlockType = lut[error].blockType;
return NVL_SUCCESS;
}
NvlStatus
inforom_nvl_v3_encode_nvlipt_error_subtype
(
NvU8 localLinkIdx,
NvU8 *pSubtype
)
{
static const NvBool linkIdxValidLut[] =
{
NV_TRUE,
NV_TRUE,
NV_TRUE,
NV_FALSE,
NV_FALSE,
NV_FALSE,
NV_TRUE,
NV_TRUE,
NV_TRUE,
NV_TRUE,
NV_TRUE,
NV_TRUE
};
ct_assert(NVLIPT_NA_SLEEP_WHILE_ACTIVE_LINK_FATAL_COUNT == 0);
ct_assert(NVLIPT_NA_RSTSEQ_PHYCTL_TIMEOUT_FATAL_COUNT == 1);
ct_assert(NVLIPT_NA_RSTSEQ_CLKCTL_TIMEOUT_FATAL_COUNT == 2);
ct_assert(NVLIPT_NA_CLKCTL_ILLEGAL_REQUEST_FATAL_COUNT == 3);
ct_assert(NVLIPT_NA_RSTSEQ_PLL_TIMEOUT_FATAL_COUNT == 4);
ct_assert(NVLIPT_NA_RSTSEQ_PHYARB_TIMEOUT_FATAL_COUNT == 5);
ct_assert(NVLIPT_NA_ILLEGAL_LINK_STATE_REQUEST_NONFATAL_COUNT == 6);
ct_assert(NVLIPT_NA_FAILED_MINION_REQUEST_NONFATAL_COUNT == 7);
ct_assert(NVLIPT_NA_RESERVED_REQUEST_VALUE_NONFATAL_COUNT == 8);
ct_assert(NVLIPT_NA_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL_COUNT == 9);
ct_assert(NVLIPT_NA_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL_COUNT == 10);
ct_assert(NVLIPT_NA_LINK_STATE_REQUEST_TIMEOUT_NONFATAL_COUNT == 11);
if ((localLinkIdx >= NV_INFOROM_NVL_OBJECT_V3_NVLIPT_ERROR_LINK_ID_COMMON) ||
(*pSubtype >= NV_ARRAY_ELEMENTS(linkIdxValidLut)))
{
return -NVL_BAD_ARGS;
}
if (linkIdxValidLut[*pSubtype])
{
*pSubtype = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _NVLIPT_ERROR,
_LINK_ID, localLinkIdx, *pSubtype);
}
else
{
*pSubtype = FLD_SET_DRF(_INFOROM_NVL_OBJECT_V3, _NVLIPT_ERROR, _LINK_ID,
_COMMON, *pSubtype);
}
return NVL_SUCCESS;
}
NvBool
inforom_nvl_v3_should_replace_error_rate_entry
(
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate,
NvU32 flitCrcRate,
NvU32 *pLaneCrcRates
)
{
NvU32 i;
NvU64 currentLaneCrcRateSum = 0;
NvU64 maxLaneCrcRateSum = 0;
for (i = 0; i < NV_ARRAY_ELEMENTS(pErrorRate->laneCrcErrorsPerMinute); i++)
{
currentLaneCrcRateSum += pLaneCrcRates[i];
maxLaneCrcRateSum += pErrorRate->laneCrcErrorsPerMinute[i];
}
return (flitCrcRate > pErrorRate->flitCrcErrorsPerMinute) ||
(currentLaneCrcRateSum > maxLaneCrcRateSum);
}
void
inforom_nvl_v3_seconds_to_day_and_month
(
NvU32 sec,
NvU32 *pDay,
NvU32 *pMonth
)
{
*pDay = sec / (60 * 60 * 24);
*pMonth = *pDay / 30;
}
void
inforom_nvl_v3_update_error_rate_entry
(
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate,
NvU32 newSec,
NvU32 newFlitCrcRate,
NvU32 *pNewLaneCrcRates
)
{
pErrorRate->lastUpdated = newSec;
pErrorRate->flitCrcErrorsPerMinute = newFlitCrcRate;
nvswitch_os_memcpy(pErrorRate->laneCrcErrorsPerMinute, pNewLaneCrcRates,
sizeof(pErrorRate->laneCrcErrorsPerMinute));
}
NvlStatus
inforom_nvl_v3_map_error_to_userspace_error
(
nvswitch_device *device,
INFOROM_NVL_OBJECT_V3_ERROR_ENTRY *pErrorLog,
NVSWITCH_NVLINK_ERROR_ENTRY *pNvlError
)
{
static const NvU32 DL_RX_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_DL_RX_FAULT_DL_PROTOCOL_FATAL,
NVSWITCH_NVLINK_ERR_DL_RX_FAULT_SUBLINK_CHANGE_FATAL,
NVSWITCH_NVLINK_ERR_DL_RX_FLIT_CRC_CORR,
NVSWITCH_NVLINK_ERR_DL_RX_LANE0_CRC_CORR,
NVSWITCH_NVLINK_ERR_DL_RX_LANE1_CRC_CORR,
NVSWITCH_NVLINK_ERR_DL_RX_LANE2_CRC_CORR,
NVSWITCH_NVLINK_ERR_DL_RX_LANE3_CRC_CORR,
NVSWITCH_NVLINK_ERR_DL_RX_LINK_REPLAY_EVENTS_CORR
};
static const NvU32 DL_TX_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_DL_TX_FAULT_RAM_FATAL,
NVSWITCH_NVLINK_ERR_DL_TX_FAULT_INTERFACE_FATAL,
NVSWITCH_NVLINK_ERR_DL_TX_FAULT_SUBLINK_CHANGE_FATAL,
NVSWITCH_NVLINK_ERR_DL_TX_LINK_REPLAY_EVENTS_CORR
};
static const NvU32 DL_NA_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_DL_LTSSM_FAULT_UP_FATAL,
NVSWITCH_NVLINK_ERR_DL_LTSSM_FAULT_DOWN_FATAL,
NVSWITCH_NVLINK_ERR_DL_LINK_RECOVERY_EVENTS_CORR
};
static const NvU32 TLC_RX_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_TLC_RX_DL_HDR_PARITY_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DL_DATA_PARITY_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DL_CTRL_PARITY_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_AE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_BE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_ADDR_ALIGN_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_PKTLEN_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSVD_PACKET_STATUS_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_CR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_HDR_OVERFLOW_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DATA_OVERFLOW_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_STOMP_DETECTED_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSVD_CMD_ENC_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSVD_DAT_LEN_ENC_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSP_STATUS_HW_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSP_STATUS_UR_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_POISON_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_ILLEGAL_PRI_WRITE_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_HDR_RAM_ECC_DBE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DAT0_RAM_ECC_DBE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_RX_DAT1_RAM_ECC_DBE_FATAL
};
static const NvU32 TLC_TX_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_TLC_TX_DL_CREDIT_PARITY_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_NCISOC_HDR_ECC_DBE_FATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_NCISOC_PARITY_ERR_FATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_ILLEGAL_PRI_WRITE_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC0_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC1_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC2_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC3_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC4_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC5_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC6_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_AN1_TIMEOUT_VC7_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_POISON_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_RSP_STATUS_HW_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_RSP_STATUS_UR_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_RSP_STATUS_PRIV_ERR_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_RSP_DAT_RAM_ECC_DBE_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL,
NVSWITCH_NVLINK_ERR_TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL
};
static const NvU32 LIPT_ERRORS[] =
{
NVSWITCH_NVLINK_ERR_NVLIPT_SLEEP_WHILE_ACTIVE_LINK_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_RSTSEQ_PHYCTL_TIMEOUT_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_RSTSEQ_CLKCTL_TIMEOUT_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_CLKCTL_ILLEGAL_REQUEST_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_RSTSEQ_PLL_TIMEOUT_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_RSTSEQ_PHYARB_TIMEOUT_FATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_ILLEGAL_LINK_STATE_REQUEST_NONFATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_FAILED_MINION_REQUEST_NONFATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_RESERVED_REQUEST_VALUE_NONFATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL,
NVSWITCH_NVLINK_ERR_NVLIPT_LINK_STATE_REQUEST_TIMEOUT_NONFATAL
};
NvU32 subType = 0;
NvU8 nvliptInstance = 0, localLinkIdx = 0;
NvU8 numLinksPerNvlipt = device->hal.nvswitch_get_num_links_per_nvlipt(device);;
if ((pErrorLog == NULL) || (pNvlError == NULL))
{
return -NVL_BAD_ARGS;
}
subType = DRF_VAL(_INFOROM_NVL_OBJECT_V3, _NVLIPT_ERROR, _SUBTYPE, pErrorLog->errorSubtype);
nvliptInstance = DRF_VAL(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _NVLIPT_INSTANCE_ID, pErrorLog->metadata);
pNvlError->timeStamp = pErrorLog->data.event.lastError;
if (pErrorLog->header == INFOROM_NVL_ERROR_TYPE_COUNT)
{
pNvlError->count = (NvU64)pErrorLog->data.event.totalCount;
}
else if (pErrorLog->header == INFOROM_NVL_ERROR_TYPE_ACCUM)
{
pNvlError->count = pErrorLog->data.accum.totalCount.hi;
pNvlError->count = (pNvlError->count << 32) | pErrorLog->data.accum.totalCount.lo;
}
else
{
return -NVL_ERR_NOT_SUPPORTED;
}
if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL0, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL1, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL2, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL3, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL4, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _DL5, pErrorLog->metadata))
{
localLinkIdx = DRF_VAL(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, pErrorLog->metadata);
pNvlError->instance = nvliptInstance * numLinksPerNvlipt + localLinkIdx;
if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, _NA, pErrorLog->metadata) &&
(subType < (sizeof(DL_NA_ERRORS) / sizeof(DL_NA_ERRORS[0]))))
{
pNvlError->error = DL_NA_ERRORS[subType];
return NVL_SUCCESS;
}
else if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, _RX, pErrorLog->metadata) &&
(subType < (sizeof(DL_RX_ERRORS) / sizeof(DL_RX_ERRORS[0]))))
{
pNvlError->error = DL_RX_ERRORS[subType];
return NVL_SUCCESS;
}
else if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, _TX, pErrorLog->metadata) &&
(subType < (sizeof(DL_TX_ERRORS) / sizeof(DL_TX_ERRORS[0]))))
{
pNvlError->error = DL_TX_ERRORS[subType];
return NVL_SUCCESS;
}
}
else if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC0, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC1, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC2, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC3, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC4, pErrorLog->metadata) ||
FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _TLC5, pErrorLog->metadata))
{
localLinkIdx = DRF_VAL(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, pErrorLog->metadata)
- NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC0;
pNvlError->instance = nvliptInstance * numLinksPerNvlipt + localLinkIdx;
if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, _RX, pErrorLog->metadata) &&
(subType < (sizeof(TLC_RX_ERRORS) / sizeof(TLC_RX_ERRORS[0]))))
{
pNvlError->error = TLC_RX_ERRORS[subType];
return NVL_SUCCESS;
}
else if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _DIRECTION, _TX, pErrorLog->metadata) &&
(subType < (sizeof(TLC_TX_ERRORS) / sizeof(TLC_TX_ERRORS[0]))))
{
pNvlError->error = TLC_TX_ERRORS[subType];
return NVL_SUCCESS;
}
}
else if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID, _NVLIPT, pErrorLog->metadata))
{
if (subType < (sizeof(LIPT_ERRORS) / sizeof(LIPT_ERRORS[0])))
{
if (FLD_TEST_DRF(_INFOROM_NVL_OBJECT_V3, _NVLIPT_ERROR, _LINK_ID, _COMMON, pErrorLog->errorSubtype))
{
localLinkIdx = 0; //common nvlipt error
}
else
{
localLinkIdx = DRF_VAL(_INFOROM_NVL_OBJECT_V3, _NVLIPT_ERROR, _LINK_ID, pErrorLog->errorSubtype);
}
pNvlError->instance = nvliptInstance * numLinksPerNvlipt + localLinkIdx;
pNvlError->error = LIPT_ERRORS[subType];
return NVL_SUCCESS;
}
}
return -NVL_ERR_NOT_SUPPORTED;
}
void
inforom_nvl_v3_update_correctable_error_rates
(
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3S *pState,
NvU8 link,
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pCounts
)
{
NvU32 i;
NvU32 tempFlitCrc, tempRxLinkReplay, tempTxLinkReplay, tempLinkRecovery;
NvU32 tempLaneCrc[4];
//
// If the registers have decreased from last reported, then
// they must have been reset or have overflowed. Set the last
// register value to 0.
//
if (pCounts->flitCrc < pState->lastRead[link].flitCrc)
{
pState->lastRead[link].flitCrc = 0;
}
for (i = 0; i < NV_ARRAY_ELEMENTS(pState->lastRead[link].laneCrc); i++)
{
if (pCounts->laneCrc[i] < pState->lastRead[link].laneCrc[i])
{
pState->lastRead[link].laneCrc[i] = 0;
}
}
// Get number of new errors since the last register read
tempFlitCrc = pCounts->flitCrc;
pCounts->flitCrc -= pState->lastRead[link].flitCrc;
// Update errors per minute with error delta
m_inforom_nvl_get_new_errors_per_minute(pCounts->flitCrc,
&pState->errorsPerMinute[link].flitCrc);
// Save the current register value for the next callback
pState->lastRead[link].flitCrc = tempFlitCrc;
for (i = 0; i < NV_ARRAY_ELEMENTS(pState->lastRead[link].laneCrc); i++)
{
tempLaneCrc[i] = pCounts->laneCrc[i];
pCounts->laneCrc[i] -= pState->lastRead[link].laneCrc[i];
m_inforom_nvl_get_new_errors_per_minute(pCounts->laneCrc[i],
&pState->errorsPerMinute[link].laneCrc[i]);
pState->lastRead[link].laneCrc[i] = tempLaneCrc[i];
}
//
// We don't track rates for the following errors. We just need to stash
// the current register value and update pCounts with the delta since
// the last register read.
//
if (pCounts->rxLinkReplay < pState->lastRead[link].rxLinkReplay)
{
pState->lastRead[link].rxLinkReplay = 0;
}
tempRxLinkReplay = pCounts->rxLinkReplay;
pCounts->rxLinkReplay -= pState->lastRead[link].rxLinkReplay;
pState->lastRead[link].rxLinkReplay = tempRxLinkReplay;
if (pCounts->txLinkReplay < pState->lastRead[link].txLinkReplay)
{
pState->lastRead[link].txLinkReplay = 0;
}
tempTxLinkReplay = pCounts->txLinkReplay;
pCounts->txLinkReplay -= pState->lastRead[link].txLinkReplay;
pState->lastRead[link].txLinkReplay = tempTxLinkReplay;
if (pCounts->linkRecovery < pState->lastRead[link].linkRecovery)
{
pState->lastRead[link].linkRecovery = 0;
}
tempLinkRecovery = pCounts->linkRecovery;
pCounts->linkRecovery -= pState->lastRead[link].linkRecovery;
pState->lastRead[link].linkRecovery = tempLinkRecovery;
}

View File

@ -0,0 +1,108 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* 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 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.
*/
#include "common_nvswitch.h"
#include "inforom/inforom_nvswitch.h"
#include "inforom/inforom_nvl_v4_nvswitch.h"
#include "ls10/ls10.h"
void
inforom_nvl_v4_update_correctable_error_rates
(
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4S *pState,
NvU8 link,
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pCounts
)
{
NvU32 i;
NvU32 tempFlitCrc, tempRxLinkReplay, tempTxLinkReplay, tempLinkRecovery;
NvU32 tempLaneCrc[4];
//
// If the registers have decreased from last reported, then
// they must have been reset or have overflowed. Set the last
// register value to 0.
//
if (pCounts->flitCrc < pState->lastRead[link].flitCrc)
{
pState->lastRead[link].flitCrc = 0;
}
for (i = 0; i < NV_ARRAY_ELEMENTS(pState->lastRead[link].laneCrc); i++)
{
if (pCounts->laneCrc[i] < pState->lastRead[link].laneCrc[i])
{
pState->lastRead[link].laneCrc[i] = 0;
}
}
// Get number of new errors since the last register read
tempFlitCrc = pCounts->flitCrc;
pCounts->flitCrc -= pState->lastRead[link].flitCrc;
// Update errors per minute with error delta
m_inforom_nvl_get_new_errors_per_minute(pCounts->flitCrc,
&pState->errorsPerMinute[link].flitCrc);
// Save the current register value for the next callback
pState->lastRead[link].flitCrc = tempFlitCrc;
for (i = 0; i < NV_ARRAY_ELEMENTS(pState->lastRead[link].laneCrc); i++)
{
tempLaneCrc[i] = pCounts->laneCrc[i];
pCounts->laneCrc[i] -= pState->lastRead[link].laneCrc[i];
m_inforom_nvl_get_new_errors_per_minute(pCounts->laneCrc[i],
&pState->errorsPerMinute[link].laneCrc[i]);
pState->lastRead[link].laneCrc[i] = tempLaneCrc[i];
}
//
// We don't track rates for the following errors. We just need to stash
// the current register value and update pCounts with the delta since
// the last register read.
//
if (pCounts->rxLinkReplay < pState->lastRead[link].rxLinkReplay)
{
pState->lastRead[link].rxLinkReplay = 0;
}
tempRxLinkReplay = pCounts->rxLinkReplay;
pCounts->rxLinkReplay -= pState->lastRead[link].rxLinkReplay;
pState->lastRead[link].rxLinkReplay = tempRxLinkReplay;
if (pCounts->txLinkReplay < pState->lastRead[link].txLinkReplay)
{
pState->lastRead[link].txLinkReplay = 0;
}
tempTxLinkReplay = pCounts->txLinkReplay;
pCounts->txLinkReplay -= pState->lastRead[link].txLinkReplay;
pState->lastRead[link].txLinkReplay = tempTxLinkReplay;
if (pCounts->linkRecovery < pState->lastRead[link].linkRecovery)
{
pState->lastRead[link].linkRecovery = 0;
}
tempLinkRecovery = pCounts->linkRecovery;
pCounts->linkRecovery -= pState->lastRead[link].linkRecovery;
pState->lastRead[link].linkRecovery = tempLinkRecovery;
}

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2019-2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -31,12 +31,15 @@
#include "nvswitch/lr10/dev_pmgr.h"
#include "nvVer.h"
#include "regkey_nvswitch.h"
#include "inforom/inforom_nvl_v3_nvswitch.h"
#include "soe/soeififr.h"
//
// TODO: Split individual object hals to their own respective files
//
static void _oms_parse(nvswitch_device *device, INFOROM_OMS_STATE *pOmsState);
static void _oms_refresh(nvswitch_device *device, INFOROM_OMS_STATE *pOmsState);
NvlStatus
nvswitch_inforom_nvl_log_error_event_lr10
(
@ -46,7 +49,147 @@ nvswitch_inforom_nvl_log_error_event_lr10
NvBool *bDirty
)
{
return -NVL_ERR_NOT_SUPPORTED;
NvlStatus status;
INFOROM_NVL_OBJECT_V3S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v3s;
INFOROM_NVLINK_ERROR_EVENT *pErrorEvent = (INFOROM_NVLINK_ERROR_EVENT *)pNvlErrorEvent;
INFOROM_NVL_OBJECT_V3_ERROR_ENTRY *pErrorEntry;
NvU32 i;
NvU32 sec;
NvU8 header = 0;
NvU16 metadata = 0;
NvU8 errorSubtype;
NvU64 accumTotalCount;
INFOROM_NVL_ERROR_BLOCK_TYPE blockType;
if (pErrorEvent->nvliptInstance > INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u NVLIPTs (NVLIPT = %u requested)\n",
INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX, pErrorEvent->nvliptInstance);
return -NVL_BAD_ARGS;
}
if (pErrorEvent->localLinkIdx > INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u internal links (internal link = %u requested)\n",
INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX, pErrorEvent->localLinkIdx);
return -NVL_BAD_ARGS;
}
sec = (NvU32) (nvswitch_os_get_platform_time_epoch() / NVSWITCH_INTERVAL_1SEC_IN_NS);
status = inforom_nvl_v3_map_error(pErrorEvent->error, &header, &metadata,
&errorSubtype, &blockType);
if (status != NVL_SUCCESS)
{
return status;
}
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA,
_NVLIPT_INSTANCE_ID, pErrorEvent->nvliptInstance, metadata);
if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_DL)
{
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID,
NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL(pErrorEvent->localLinkIdx),
metadata);
}
else if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_TLC)
{
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID,
NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC(pErrorEvent->localLinkIdx),
metadata);
}
else if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_NVLIPT)
{
metadata = FLD_SET_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA,
_BLOCK_ID, _NVLIPT, metadata);
status = inforom_nvl_v3_encode_nvlipt_error_subtype(pErrorEvent->localLinkIdx,
&errorSubtype);
if (status != NVL_SUCCESS)
{
return status;
}
}
for (i = 0; i < INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES; i++)
{
pErrorEntry = &pNvlObject->errorLog[i];
if ((pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_INVALID) ||
((pErrorEntry->metadata == metadata) &&
(pErrorEntry->errorSubtype == errorSubtype)))
{
break;
}
}
if (i >= INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES)
{
NVSWITCH_PRINT(device, ERROR, "%s: NVL error log is full -- unable to log error\n",
__FUNCTION__);
return -NVL_ERR_INVALID_STATE;
}
if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_INVALID)
{
pErrorEntry->header = header;
pErrorEntry->metadata = metadata;
pErrorEntry->errorSubtype = errorSubtype;
}
if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_ACCUM)
{
accumTotalCount = NvU64_ALIGN32_VAL(&pErrorEntry->data.accum.totalCount);
if (accumTotalCount != NV_U64_MAX)
{
if (pErrorEvent->count > NV_U64_MAX - accumTotalCount)
{
accumTotalCount = NV_U64_MAX;
}
else
{
accumTotalCount += pErrorEvent->count;
}
NvU64_ALIGN32_PACK(&pErrorEntry->data.accum.totalCount, &accumTotalCount);
if (sec < pErrorEntry->data.accum.lastUpdated)
{
NVSWITCH_PRINT(device, ERROR,
"%s: System clock reporting earlier time than error timestamp\n",
__FUNCTION__);
}
pErrorEntry->data.accum.lastUpdated = sec;
*bDirty = NV_TRUE;
}
}
else if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_COUNT)
{
if (pErrorEntry->data.event.totalCount != NV_U32_MAX)
{
pErrorEntry->data.event.totalCount++;
if (sec < pErrorEntry->data.event.lastError)
{
NVSWITCH_PRINT(device, ERROR,
"%s: System clock reporting earlier time than error timestamp\n",
__FUNCTION__);
}
else
{
pErrorEntry->data.event.avgEventDelta =
(pErrorEntry->data.event.avgEventDelta + sec -
pErrorEntry->data.event.lastError) >> 1;
}
pErrorEntry->data.event.lastError = sec;
*bDirty = NV_TRUE;
}
}
else
{
return -NVL_ERR_INVALID_STATE;
}
return NVL_SUCCESS;
}
NvlStatus
@ -56,7 +199,37 @@ nvswitch_inforom_nvl_get_max_correctable_error_rate_lr10
NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
NvU8 linkID = params->linkId;
if (linkID >= NVSWITCH_NUM_LINKS_LR10)
{
return -NVL_BAD_ARGS;
}
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
nvswitch_os_memset(params, 0, sizeof(NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS));
params->linkId = linkID;
nvswitch_os_memcpy(&params->dailyMaxCorrectableErrorRates, &pNvlinkState->pNvl->v3s.maxCorrectableErrorRates.dailyMaxCorrectableErrorRates[0][linkID],
sizeof(params->dailyMaxCorrectableErrorRates));
nvswitch_os_memcpy(&params->monthlyMaxCorrectableErrorRates, &pNvlinkState->pNvl->v3s.maxCorrectableErrorRates.monthlyMaxCorrectableErrorRates[0][linkID],
sizeof(params->monthlyMaxCorrectableErrorRates));
return NVL_SUCCESS;
}
NvlStatus
@ -66,8 +239,64 @@ nvswitch_inforom_nvl_get_errors_lr10
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
NvU32 maxReadSize = sizeof(params->errorLog)/sizeof(NVSWITCH_NVLINK_ERROR_ENTRY);
NvU32 errorLeftCount = 0, errorReadCount = 0, errIndx = 0;
NvU32 errorStart = params->errorIndex;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
if (errorStart >= INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES)
{
return -NVL_BAD_ARGS;
}
nvswitch_os_memset(params->errorLog, 0, sizeof(params->errorLog));
while (((errorStart + errorLeftCount) < INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES) &&
(pNvlinkState->pNvl->v3s.errorLog[errorStart + errorLeftCount].header != INFOROM_NVL_ERROR_TYPE_INVALID))
{
errorLeftCount++;
}
if (errorLeftCount > maxReadSize)
{
errorReadCount = maxReadSize;
}
else
{
errorReadCount = errorLeftCount;
}
params->errorIndex = errorStart + errorReadCount;
params->errorCount = errorReadCount;
if (errorReadCount > 0)
{
for (errIndx = 0; errIndx < errorReadCount; errIndx++)
{
if (inforom_nvl_v3_map_error_to_userspace_error(device,
&pNvlinkState->pNvl->v3s.errorLog[errorStart+errIndx],
&params->errorLog[errIndx]) != NVL_SUCCESS)
{
return -NVL_ERR_NOT_SUPPORTED;
}
}
}
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_update_link_correctable_error_info_lr10
(
nvswitch_device *device,
@ -79,9 +308,251 @@ NvlStatus nvswitch_inforom_nvl_update_link_correctable_error_info_lr10
void *pNvlErrorCounts,
NvBool *bDirty
)
{
INFOROM_NVL_OBJECT_V3S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v3s;
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3S *pState =
&((INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE *)pData)->v3s;
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pErrorCounts =
(INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *)pNvlErrorCounts;
NvU32 i;
NvU32 sec;
NvU32 day, month, currentEntryDay, currentEntryMonth;
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate;
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pOldestErrorRate = NULL;
INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES *pCorrErrorRates;
NvBool bUpdated = NV_FALSE;
INFOROM_NVLINK_ERROR_EVENT errorEvent;
NvU32 currentFlitCrcRate;
NvU32 *pCurrentLaneCrcRates;
if (bDirty == NULL)
{
return -NVL_BAD_ARGS;
}
*bDirty = NV_FALSE;
if (linkId >= INFOROM_NVL_OBJECT_V3S_NUM_LINKS)
{
NVSWITCH_PRINT(device, ERROR,
"object does not store data for more than %u links (linkId = %u requested)\n",
INFOROM_NVL_OBJECT_V3S_NUM_LINKS, linkId);
return -NVL_BAD_ARGS;
}
if (nvliptInstance > INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u NVLIPTs (NVLIPT = %u requested)\n",
INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX, nvliptInstance);
return -NVL_BAD_ARGS;
}
if (localLinkIdx > INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u internal links (internal link = %u requested)\n",
INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX, localLinkIdx);
return -NVL_BAD_ARGS;
}
sec = (NvU32) (nvswitch_os_get_platform_time_epoch() / NVSWITCH_INTERVAL_1SEC_IN_NS);
inforom_nvl_v3_seconds_to_day_and_month(sec, &day, &month);
inforom_nvl_v3_update_correctable_error_rates(pState, linkId, pErrorCounts);
currentFlitCrcRate = pState->errorsPerMinute[linkId].flitCrc;
pCurrentLaneCrcRates = pState->errorsPerMinute[linkId].laneCrc;
pCorrErrorRates = &pNvlObject->maxCorrectableErrorRates;
for (i = 0; i < NV_ARRAY_ELEMENTS(pCorrErrorRates->dailyMaxCorrectableErrorRates); i++)
{
pErrorRate = &pCorrErrorRates->dailyMaxCorrectableErrorRates[i][linkId];
inforom_nvl_v3_seconds_to_day_and_month(pErrorRate->lastUpdated, &currentEntryDay,
&currentEntryMonth);
if ((pErrorRate->lastUpdated == 0) || (currentEntryDay == day))
{
if (inforom_nvl_v3_should_replace_error_rate_entry(pErrorRate,
currentFlitCrcRate,
pCurrentLaneCrcRates))
{
inforom_nvl_v3_update_error_rate_entry(pErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
pOldestErrorRate = NULL;
break;
}
else if ((pOldestErrorRate == NULL) ||
(pErrorRate->lastUpdated < pOldestErrorRate->lastUpdated))
{
pOldestErrorRate = pErrorRate;
}
}
if (pOldestErrorRate != NULL)
{
inforom_nvl_v3_update_error_rate_entry(pOldestErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
for (i = 0; i < NV_ARRAY_ELEMENTS(pCorrErrorRates->monthlyMaxCorrectableErrorRates); i++)
{
pErrorRate = &pCorrErrorRates->monthlyMaxCorrectableErrorRates[i][linkId];
inforom_nvl_v3_seconds_to_day_and_month(pErrorRate->lastUpdated, &currentEntryDay,
&currentEntryMonth);
if ((pErrorRate->lastUpdated == 0) || (currentEntryMonth == month))
{
if (inforom_nvl_v3_should_replace_error_rate_entry(pErrorRate,
currentFlitCrcRate,
pCurrentLaneCrcRates))
{
inforom_nvl_v3_update_error_rate_entry(pErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
pOldestErrorRate = NULL;
break;
}
else if ((pOldestErrorRate == NULL) ||
(pErrorRate->lastUpdated < pOldestErrorRate->lastUpdated))
{
pOldestErrorRate = pErrorRate;
}
}
if (pOldestErrorRate != NULL)
{
inforom_nvl_v3_update_error_rate_entry(pOldestErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
*bDirty = bUpdated;
// Update aggregate error counts for each correctable error
errorEvent.nvliptInstance = nvliptInstance;
errorEvent.localLinkIdx = localLinkIdx;
if (pErrorCounts->flitCrc > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_RX_FLIT_CRC_CORR;
errorEvent.count = pErrorCounts->flitCrc;
nvswitch_inforom_nvl_log_error_event_lr10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->rxLinkReplay > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_RX_LINK_REPLAY_EVENTS_CORR;
errorEvent.count = pErrorCounts->rxLinkReplay;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_lr10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->txLinkReplay > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_TX_LINK_REPLAY_EVENTS_CORR;
errorEvent.count = pErrorCounts->txLinkReplay;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_lr10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->linkRecovery > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_LINK_RECOVERY_EVENTS_CORR;
errorEvent.count = pErrorCounts->linkRecovery;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_lr10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
for (i = 0; i < 4; i++)
{
if (pErrorCounts->laneCrc[i] == 0)
{
continue;
}
errorEvent.error = INFOROM_NVLINK_DL_RX_LANE0_CRC_CORR + i;
errorEvent.count = pErrorCounts->laneCrc[i];
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_lr10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_setL1Threshold_lr10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 word1,
NvU32 word2
)
{
return -NVL_ERR_NOT_SUPPORTED;
}
NvlStatus nvswitch_inforom_nvl_getL1Threshold_lr10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 *word1,
NvU32 *word2
)
{
return -NVL_ERR_NOT_SUPPORTED;
}
NvlStatus nvswitch_inforom_nvl_setup_nvlink_state_lr10
(
nvswitch_device *device,
INFOROM_NVLINK_STATE *pNvlinkState,
NvU8 version
)
{
if (version != 3)
{
NVSWITCH_PRINT(device, WARN, "NVL v%u not supported\n", version);
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState->pFmt = INFOROM_NVL_OBJECT_V3S_FMT;
pNvlinkState->pPackedObject = nvswitch_os_malloc(INFOROM_NVL_OBJECT_V3S_PACKED_SIZE);
if (pNvlinkState->pPackedObject == NULL)
{
return -NVL_NO_MEM;
}
pNvlinkState->pNvl = nvswitch_os_malloc(sizeof(INFOROM_NVL_OBJECT));
if (pNvlinkState->pNvl == NULL)
{
nvswitch_os_free(pNvlinkState->pPackedObject);
return -NVL_NO_MEM;
}
pNvlinkState->bDisableCorrectableErrorLogging = NV_FALSE;
return NVL_SUCCESS;
}
static
NvlStatus
_inforom_ecc_find_useable_entry_index
@ -810,3 +1281,14 @@ nvswitch_bbx_get_sxid_lr10
return -NVL_ERR_NOT_SUPPORTED;
}
NvlStatus
nvswitch_bbx_get_data_lr10
(
nvswitch_device *device,
NvU8 dataType,
void *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
}

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2018-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2018-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -3492,11 +3492,16 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_0_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event;
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_NON_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
pending = report.raw_pending & report.mask;
if (pending == 0)
{
@ -3505,6 +3510,7 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_0_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXRSPSTATUS_PRIV_ERR, 1);
if (nvswitch_test_flags(pending, bit))
@ -3512,6 +3518,11 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_0_lr10
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_PRIV_ERR, "RX Rsp Status PRIV Error");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_RX_LNK, _ERR_REPORT_INJECT_0, _RXRSPSTATUS_PRIV_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -3544,12 +3555,17 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event;
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_NON_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -3557,12 +3573,20 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _CREQ_RAM_DAT_ECC_DBE_ERR, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_CREQ_RAM_DAT_ECC_DBE_ERR, "CREQ RAM DAT ECC DBE Error");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_TX_LNK, _ERR_REPORT_INJECT_0, _CREQ_RAM_DAT_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _CREQ_RAM_ECC_LIMIT_ERR, 1);
@ -3591,6 +3615,13 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_COM_RAM_DAT_ECC_DBE_ERR, "COM RAM DAT ECC DBE Error");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_TX_LNK, _ERR_REPORT_INJECT_0, _COM_RAM_DAT_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _COM_RAM_ECC_LIMIT_ERR, 1);
@ -3642,14 +3673,19 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_1_lr10
NvU32 link
)
{
NvU32 pending, bit, unhandled, injected;
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event;
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_1);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_NON_FATAL_REPORT_EN_1);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -3667,6 +3703,8 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_1_lr10
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _AN1_HEARTBEAT_TIMEOUT_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
//
// WAR Bug 200627368: Mask off HBTO to avoid a storm
// During the start of reset_and_drain, all links on the GPU
@ -3719,12 +3757,17 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_1);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_NON_FATAL_REPORT_EN_1);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -3732,12 +3775,19 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_FIRST_1);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_REPORT_INJECT_1);
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC0, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC0, "AN1 Timeout VC0");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC0, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC0_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC1, 1);
@ -3745,6 +3795,12 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC1, "AN1 Timeout VC1");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC1, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC1_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC2, 1);
@ -3752,6 +3808,12 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC2, "AN1 Timeout VC2");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC2, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC2_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC3, 1);
@ -3760,6 +3822,11 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC3, "AN1 Timeout VC3");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC3, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC3_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC4, 1);
@ -3768,6 +3835,11 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC4, "AN1 Timeout VC4");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC4, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC4_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC5, 1);
@ -3775,6 +3847,12 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC5, "AN1 Timeout VC5");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC5, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC5_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC6, 1);
@ -3782,6 +3860,12 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC6, "AN1 Timeout VC6");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC6, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC6_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _AN1_TIMEOUT_VC7, 1);
@ -3789,6 +3873,12 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC7, "AN1 Timeout VC7");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_1, _AN1_TIMEOUT_VC7, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC7_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -3890,11 +3980,16 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
NvU32 pending, bit, unhandled;
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_NON_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
pending = report.raw_pending & report.mask;
if (pending == 0)
{
@ -3903,12 +3998,19 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _ILLEGALLINKSTATEREQUEST, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_ILLEGALLINKSTATEREQUEST, "_HW_NVLIPT_LNK_ILLEGALLINKSTATEREQUEST");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _ILLEGALLINKSTATEREQUEST, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_ILLEGAL_LINK_STATE_REQUEST_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _FAILEDMINIONREQUEST, 1);
@ -3916,6 +4018,12 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_FAILEDMINIONREQUEST, "_FAILEDMINIONREQUEST");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _FAILEDMINIONREQUEST, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_FAILED_MINION_REQUEST_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _RESERVEDREQUESTVALUE, 1);
@ -3923,6 +4031,12 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_RESERVEDREQUESTVALUE, "_RESERVEDREQUESTVALUE");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _RESERVEDREQUESTVALUE, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_RESERVED_REQUEST_VALUE_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _LINKSTATEWRITEWHILEBUSY, 1);
@ -3930,6 +4044,12 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_LINKSTATEWRITEWHILEBUSY, "_LINKSTATEWRITEWHILEBUSY");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _LINKSTATEWRITEWHILEBUSY, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _LINK_STATE_REQUEST_TIMEOUT, 1);
@ -3937,6 +4057,12 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_LINK_STATE_REQUEST_TIMEOUT, "_LINK_STATE_REQUEST_TIMEOUT");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _LINK_STATE_REQUEST_TIMEOUT, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_LINK_STATE_REQUEST_TIMEOUT_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _WRITE_TO_LOCKED_SYSTEM_REG_ERR, 1);
@ -3944,6 +4070,12 @@ _nvswitch_service_nvlipt_lnk_nonfatal_lr10
{
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_WRITE_TO_LOCKED_SYSTEM_REG_ERR, "_WRITE_TO_LOCKED_SYSTEM_REG_ERR");
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _WRITE_TO_LOCKED_SYSTEM_REG_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -4456,12 +4588,16 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLDL, _NVLDL_TOP, _INTR);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLDL, _NVLDL_TOP, _INTR_STALL_EN);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -4474,6 +4610,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_RAM, "TX Fault Ram", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_RAM_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _TX_FAULT_INTERFACE, 1);
@ -4481,6 +4619,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_INTERFACE, "TX Fault Interface", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_INTERFACE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _TX_FAULT_SUBLINK_CHANGE, 1);
@ -4488,6 +4628,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_SUBLINK_CHANGE, "TX Fault Sublink Change", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_SUBLINK_CHANGE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_FAULT_SUBLINK_CHANGE, 1);
@ -4495,6 +4637,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_RX_FAULT_SUBLINK_CHANGE, "RX Fault Sublink Change", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_RX_FAULT_SUBLINK_CHANGE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_FAULT_DL_PROTOCOL, 1);
@ -4502,6 +4646,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_RX_FAULT_DL_PROTOCOL, "RX Fault DL Protocol", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_RX_FAULT_DL_PROTOCOL_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_FAULT_DOWN, 1);
@ -4509,6 +4655,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_LTSSM_FAULT_DOWN, "LTSSM Fault Down", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_LTSSM_FAULT_DOWN_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_FAULT_UP, 1);
@ -4516,6 +4664,8 @@ nvswitch_service_nvldl_fatal_link_lr10
{
NVSWITCH_REPORT_FATAL(_HW_DLPL_LTSSM_FAULT_UP, "LTSSM Fault Up", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
error_event.error = INFOROM_NVLINK_DL_LTSSM_FAULT_UP_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_PROTOCOL, 1);
@ -4621,12 +4771,17 @@ _nvswitch_service_nvltlc_tx_sys_fatal_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -4634,12 +4789,19 @@ _nvswitch_service_nvltlc_tx_sys_fatal_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_TX_SYS, _ERR_STATUS_0, _NCISOC_PARITY_ERR, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_SYS_NCISOC_PARITY_ERR, "NCISOC Parity Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_SYS_ERR_REPORT_INJECT_0, _NCISOC_PARITY_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_NCISOC_PARITY_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_SYS, _ERR_STATUS_0, _NCISOC_HDR_ECC_DBE_ERR, 1);
@ -4647,6 +4809,12 @@ _nvswitch_service_nvltlc_tx_sys_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_SYS_NCISOC_HDR_ECC_DBE_ERR, "NCISOC HDR ECC DBE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_SYS_ERR_REPORT_INJECT_0, _NCISOC_HDR_ECC_DBE_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_NCISOC_HDR_ECC_DBE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_SYS, _ERR_STATUS_0, _NCISOC_DAT_ECC_DBE_ERR, 1);
@ -4729,12 +4897,17 @@ _nvswitch_service_nvltlc_rx_sys_fatal_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -4742,6 +4915,7 @@ _nvswitch_service_nvltlc_rx_sys_fatal_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _NCISOC_PARITY_ERR, 1);
if (nvswitch_test_flags(pending, bit))
@ -4755,6 +4929,13 @@ _nvswitch_service_nvltlc_rx_sys_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_HDR_RAM_ECC_DBE_ERR, "HDR RAM ECC DBE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_RX_SYS, _ERR_REPORT_INJECT_0, _HDR_RAM_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_RX_HDR_RAM_ECC_DBE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _HDR_RAM_ECC_LIMIT_ERR, 1);
@ -4769,6 +4950,13 @@ _nvswitch_service_nvltlc_rx_sys_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_DAT0_RAM_ECC_DBE_ERR, "DAT0 RAM ECC DBE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_RX_SYS, _ERR_REPORT_INJECT_0, _DAT0_RAM_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_RX_DAT0_RAM_ECC_DBE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _DAT0_RAM_ECC_LIMIT_ERR, 1);
@ -4783,6 +4971,13 @@ _nvswitch_service_nvltlc_rx_sys_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_DAT1_RAM_ECC_DBE_ERR, "DAT1 RAM ECC DBE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_RX_SYS, _ERR_REPORT_INJECT_0, _DAT1_RAM_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_RX_DAT1_RAM_ECC_DBE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _DAT1_RAM_ECC_LIMIT_ERR, 1);
@ -4830,12 +5025,17 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -4843,12 +5043,19 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _TXDLCREDITPARITYERR, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TXDLCREDITPARITYERR, "TX DL Credit Parity Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _TX_LNK_ERR_REPORT_INJECT_0, _TXDLCREDITPARITYERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_TX_DL_CREDIT_PARITY_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _CREQ_RAM_HDR_ECC_DBE_ERR, 1);
@ -4884,6 +5091,13 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_LNK_RSP1_RAM_DAT_ECC_DBE_ERR, "RSP1 RAM DAT ECC DBE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC_TX_LNK, _ERR_REPORT_INJECT_0, _RSP1_RAM_DAT_ECC_DBE_ERR, 0x0, injected))
{
// TODO 3014908 log these in the NVL object until we have ECC object support
error_event.error = INFOROM_NVLINK_TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -4923,11 +5137,17 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FATAL_REPORT_EN_0);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -4935,12 +5155,19 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXDLHDRPARITYERR, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLHDRPARITYERR, "RX DL HDR Parity Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXDLHDRPARITYERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DL_HDR_PARITY_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXDLDATAPARITYERR, 1);
@ -4948,6 +5175,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLDATAPARITYERR, "RX DL Data Parity Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXDLDATAPARITYERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DL_DATA_PARITY_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXDLCTRLPARITYERR, 1);
@ -4955,6 +5188,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLCTRLPARITYERR, "RX DL Ctrl Parity Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXDLCTRLPARITYERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DL_CTRL_PARITY_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXINVALIDAEERR, 1);
@ -4962,6 +5201,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXINVALIDAEERR, "RX Invalid DAE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXINVALIDAEERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_AE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXINVALIDBEERR, 1);
@ -4969,6 +5214,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXINVALIDBEERR, "RX Invalid BE Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXINVALIDBEERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_BE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXINVALIDADDRALIGNERR, 1);
@ -4976,6 +5227,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXINVALIDADDRALIGNERR, "RX Invalid Addr Align Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXINVALIDADDRALIGNERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_ADDR_ALIGN_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXPKTLENERR, 1);
@ -4983,6 +5240,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXPKTLENERR, "RX Packet Length Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXPKTLENERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_PKTLEN_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVCMDENCERR, 1);
@ -4990,6 +5253,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVCMDENCERR, "RSV Cmd Encoding Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RSVCMDENCERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_CMD_ENC_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVDATLENENCERR, 1);
@ -4997,6 +5266,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVDATLENENCERR, "RSV Data Length Encoding Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RSVDATLENENCERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_DAT_LEN_ENC_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVPKTSTATUSERR, 1);
@ -5004,6 +5279,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVPKTSTATUSERR, "RSV Packet Status Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RSVPKTSTATUSERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_PACKET_STATUS_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVCACHEATTRPROBEREQERR, 1);
@ -5011,6 +5292,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVCACHEATTRPROBEREQERR, "RSV Packet Status Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RSVCACHEATTRPROBEREQERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVCACHEATTRPROBERSPERR, 1);
@ -5018,6 +5305,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVCACHEATTRPROBERSPERR, "RSV CacheAttr Probe Rsp Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RSVCACHEATTRPROBERSPERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _DATLENGTRMWREQMAXERR, 1);
@ -5025,6 +5318,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_DATLENGTRMWREQMAXERR, "Data Length RMW Req Max Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _DATLENGTRMWREQMAXERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _DATLENLTATRRSPMINERR, 1);
@ -5032,6 +5331,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_DATLENLTATRRSPMINERR, "Data Len Lt ATR RSP Min Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _DATLENLTATRRSPMINERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _INVALIDCACHEATTRPOERR, 1);
@ -5039,6 +5344,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_INVALIDCACHEATTRPOERR, "Invalid Cache Attr PO Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _INVALIDCACHEATTRPOERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _INVALIDCRERR, 1);
@ -5046,6 +5357,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_INVALIDCRERR, "Invalid CR Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _INVALIDCRERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_CR_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXRSPSTATUS_HW_ERR, 1);
@ -5053,6 +5370,13 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_HW_ERR, "RX Rsp Status HW Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
// TODO 200564153 _RX_RSPSTATUS_HW_ERR should be reported as non-fatal
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXRSPSTATUS_HW_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_HW_ERR_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXRSPSTATUS_UR_ERR, 1);
@ -5060,6 +5384,13 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_UR_ERR, "RX Rsp Status UR Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
// TODO 200564153 _RX_RSPSTATUS_UR_ERR should be reported as non-fatal
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _RXRSPSTATUS_UR_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_UR_ERR_NONFATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _INVALID_COLLAPSED_RESPONSE_ERR, 1);
@ -5067,6 +5398,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_INVALID_COLLAPSED_RESPONSE_ERR, "Invalid Collapsed Response Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_0, _INVALID_COLLAPSED_RESPONSE_ERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -5106,12 +5443,17 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_lr10
{
NvU32 pending, bit, unhandled;
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_1);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FATAL_REPORT_EN_1);
report.mask = report.raw_enable;
pending = report.raw_pending & report.mask;
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
if (pending == 0)
{
return -NVL_NOT_FOUND;
@ -5119,12 +5461,19 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_lr10
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FIRST_1);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_REPORT_INJECT_1);
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXHDROVFERR, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXHDROVFERR, "RX HDR OVF Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _RXHDROVFERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_HDR_OVERFLOW_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXDATAOVFERR, 1);
@ -5132,6 +5481,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDATAOVFERR, "RX Data OVF Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _RXDATAOVFERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_DATA_OVERFLOW_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _STOMPDETERR, 1);
@ -5139,6 +5494,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_STOMPDETERR, "Stomp Det Error", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _STOMPDETERR, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_TLC_RX_STOMP_DETECTED_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXPOISONERR, 1);
@ -5253,6 +5614,8 @@ _nvswitch_service_nvlipt_common_fatal_lr10
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
NvU32 pending, bit, contain, unhandled;
NvU32 link, local_link_idx;
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_NVLIPT_RD32_LR10(device, instance, _NVLIPT_COMMON, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_NVLIPT_RD32_LR10(device, instance, _NVLIPT_COMMON, _ERR_FATAL_REPORT_EN_0);
@ -5267,9 +5630,12 @@ _nvswitch_service_nvlipt_common_fatal_lr10
return -NVL_NOT_FOUND;
}
error_event.nvliptInstance = (NvU8) instance;
unhandled = pending;
report.raw_first = NVSWITCH_NVLIPT_RD32_LR10(device, instance, _NVLIPT_COMMON, _ERR_FIRST_0);
contain = NVSWITCH_NVLIPT_RD32_LR10(device, instance, _NVLIPT_COMMON, _ERR_CONTAIN_EN_0);
injected = NVSWITCH_NVLIPT_RD32_LR10(device, instance, _NVLIPT_COMMON, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLIPT_COMMON, _ERR_STATUS_0, _CLKCTL_ILLEGAL_REQUEST, 1);
if (nvswitch_test_flags(pending, bit))
@ -5284,6 +5650,12 @@ _nvswitch_service_nvlipt_common_fatal_lr10
}
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_COMMON, _ERR_REPORT_INJECT_0, _CLKCTL_ILLEGAL_REQUEST, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_CLKCTL_ILLEGAL_REQUEST_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_COMMON, _ERR_STATUS_0, _RSTSEQ_PLL_TIMEOUT, 1);
@ -5299,6 +5671,12 @@ _nvswitch_service_nvlipt_common_fatal_lr10
}
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_COMMON, _ERR_REPORT_INJECT_0, _RSTSEQ_PLL_TIMEOUT, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_PLL_TIMEOUT_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_COMMON, _ERR_STATUS_0, _RSTSEQ_PHYARB_TIMEOUT, 1);
@ -5314,6 +5692,12 @@ _nvswitch_service_nvlipt_common_fatal_lr10
}
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_COMMON, _ERR_REPORT_INJECT_0, _RSTSEQ_PHYARB_TIMEOUT, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYARB_TIMEOUT_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
@ -5360,6 +5744,8 @@ _nvswitch_service_nvlipt_lnk_fatal_lr10
{
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
NvU32 pending, bit, unhandled;
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
NvU32 injected;
report.raw_pending = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_STATUS_0);
report.raw_enable = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_FATAL_REPORT_EN_0);
@ -5371,14 +5757,24 @@ _nvswitch_service_nvlipt_lnk_fatal_lr10
return -NVL_NOT_FOUND;
}
error_event.nvliptInstance = (NvU8) nvlipt_instance;
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LR10(link);
unhandled = pending;
report.raw_first = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_FIRST_0);
injected = NVSWITCH_LINK_RD32_LR10(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_REPORT_INJECT_0);
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _SLEEPWHILEACTIVELINK, 1);
if (nvswitch_test_flags(pending, bit))
{
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_SLEEPWHILEACTIVELINK, "No non-empty link is detected", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _SLEEPWHILEACTIVELINK, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_SLEEP_WHILE_ACTIVE_LINK_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _RSTSEQ_PHYCTL_TIMEOUT, 1);
@ -5386,6 +5782,12 @@ _nvswitch_service_nvlipt_lnk_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_RSTSEQ_PHYCTL_TIMEOUT, "Reset sequencer timed out waiting for a handshake from PHYCTL", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _RSTSEQ_PHYCTL_TIMEOUT, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYCTL_TIMEOUT_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _RSTSEQ_CLKCTL_TIMEOUT, 1);
@ -5393,6 +5795,12 @@ _nvswitch_service_nvlipt_lnk_fatal_lr10
{
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_RSTSEQ_CLKCTL_TIMEOUT, "Reset sequencer timed out waiting for a handshake from CLKCTL", NV_FALSE);
nvswitch_clear_flags(&unhandled, bit);
if (FLD_TEST_DRF_NUM(_NVLIPT_LNK, _ERR_REPORT_INJECT_0, _RSTSEQ_CLKCTL_TIMEOUT, 0x0, injected))
{
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_CLKCTL_TIMEOUT_FATAL;
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
}
}
NVSWITCH_UNHANDLED_CHECK(device, unhandled);

View File

@ -28,6 +28,7 @@
#include "regkey_nvswitch.h"
#include "lr10/lr10.h"
#include "lr10/minion_lr10.h"
#include "lr10/pmgr_lr10.h"
#include "nvswitch/lr10/dev_nvldl_ip.h"
#include "nvswitch/lr10/dev_nvldl_ip_addendum.h"
@ -42,6 +43,73 @@
#include "nvswitch/lr10/dev_nvlipt_ip.h"
#include "nvswitch/lr10/dev_nport_ip.h"
#define NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK 12 // This must be incremented if any entries are added to the array below
lr10_links_connected_to_disabled_remote_end nvswitchDisconnetedRemoteLinkMasks[] =
{
{
0x8, // switchPhysicalId
0x56A000500, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x9, // switchPhysicalId
0x509009900, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0xa, // switchPhysicalId
0x0, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0xb, // switchPhysicalId
0x56A000600, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0xc, // switchPhysicalId
0x4A9009400, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0xd, // switchPhysicalId
0x0, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x18, // switchPhysicalId
0x56A000500, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x19, // switchPhysicalId
0x509009900, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x1a, // switchPhysicalId
0x0, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x1b, // switchPhysicalId
0x56A000600, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x1c, // switchPhysicalId
0x4A9009400, // accessLinkMask
0xFF00FF // trunkLinkMask
},
{
0x1d, // switchPhysicalId
0x0, // accessLinkMask
0xFF00FF // trunkLinkMask
},
};
ct_assert(sizeof(nvswitchDisconnetedRemoteLinkMasks)/sizeof(lr10_links_connected_to_disabled_remote_end) == NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK);
void
nvswitch_setup_link_loopback_mode_lr10
(
@ -498,6 +566,11 @@ nvswitch_init_lpwr_regs_lr10
NvU8 softwareDesired, hardwareDisable;
NvBool bLpEnable;
if (nvswitch_is_link_in_reset(device, link))
{
return;
}
if (device->regkeys.enable_pm == NV_SWITCH_REGKEY_ENABLE_PM_NO)
{
return;
@ -613,6 +686,15 @@ nvswitch_init_lpwr_regs_lr10
tempRegVal);
}
void
nvswitch_program_l1_scratch_reg_lr10
(
nvswitch_device *device,
NvU32 linkNumber
)
{
// Not Implemented for LR10
}
void
nvswitch_init_buffer_ready_lr10
@ -799,6 +881,22 @@ nvswitch_corelib_set_dl_link_mode_lr10
return -NVL_UNBOUND_DEVICE;
}
if (nvswitch_does_link_need_termination_enabled(device, link))
{
if (mode == NVLINK_LINKSTATE_INITPHASE1)
{
status = nvswitch_link_termination_setup(device, link);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR,
"%s: Failed to enable termination on link #%d\n", __FUNCTION__, link->linkNumber);
}
}
// return SUCCESS to avoid errors being propogated
return NVL_SUCCESS;
}
switch (mode)
{
case NVLINK_LINKSTATE_SAFE:
@ -1233,6 +1331,15 @@ nvswitch_corelib_set_tl_link_mode_lr10
return -NVL_UNBOUND_DEVICE;
}
if (nvswitch_does_link_need_termination_enabled(device, link))
{
NVSWITCH_PRINT(device, INFO,
"%s: link #% is connected to a disabled remote end. Skipping TL link mode request!\n", __FUNCTION__, link->linkNumber);
// return SUCCESS to avoid errors being propogated
return NVL_SUCCESS;
}
switch (mode)
{
case NVLINK_LINKSTATE_RESET:
@ -1351,6 +1458,15 @@ nvswitch_corelib_set_tx_mode_lr10
return -NVL_UNBOUND_DEVICE;
}
if (nvswitch_does_link_need_termination_enabled(device, link))
{
NVSWITCH_PRINT(device, INFO,
"%s: link #% is connected to a disabled remote end. Skipping TX mode request!\n", __FUNCTION__, link->linkNumber);
// return SUCCESS to avoid errors being propogated
return NVL_SUCCESS;
}
// check if link is in reset
if (nvswitch_is_link_in_reset(device, link))
{
@ -1614,6 +1730,15 @@ nvswitch_corelib_set_rx_mode_lr10
return -NVL_UNBOUND_DEVICE;
}
if (nvswitch_does_link_need_termination_enabled(device, link))
{
NVSWITCH_PRINT(device, INFO,
"%s: link #% is connected to a disabled remote end. Skipping RX mode request!\n", __FUNCTION__, link->linkNumber);
// return SUCCESS to avoid errors being propogated
return NVL_SUCCESS;
}
// check if link is in reset
if (nvswitch_is_link_in_reset(device, link))
{
@ -1824,6 +1949,15 @@ nvswitch_corelib_set_rx_detect_lr10
NvlStatus status;
nvswitch_device *device = link->dev->pDevInfo;
if (nvswitch_does_link_need_termination_enabled(device, link))
{
NVSWITCH_PRINT(device, INFO,
"%s: link #% is connected to a disabled remote end. Skipping RxDet request!\n", __FUNCTION__, link->linkNumber);
// return SUCCESS to avoid errors being propogated
return NVL_SUCCESS;
}
status = nvswitch_minion_send_command(device, link->linkNumber,
NV_MINION_NVLINK_DL_CMD_COMMAND_TURING_RXDET, 0);
@ -2275,6 +2409,8 @@ nvswitch_load_link_disable_settings_lr10
NvU32 val;
NVLINK_CONFIG_DATA_LINKENTRY *vbios_link_entry = NULL;
NVSWITCH_BIOS_NVLINK_CONFIG *bios_config;
NvlStatus status;
lr10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device);
bios_config = nvswitch_get_bios_nvlink_config(device);
if ((bios_config == NULL) || (bios_config->bit_address == 0))
@ -2315,15 +2451,16 @@ nvswitch_load_link_disable_settings_lr10
__FUNCTION__, link->linkNumber);
return;
}
val = FLD_SET_DRF(_NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, _LINK_DISABLE,
_DISABLED, val);
NVSWITCH_LINK_WR32_LR10(device, link->linkNumber,
NVLIPT_LNK, _NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, val);
// Set link to invalid and unregister from corelib
device->link[link->linkNumber].valid = NV_FALSE;
nvlink_lib_unregister_link(link);
nvswitch_destroy_link(link);
status = nvswitch_link_termination_setup(device, link);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR,
"%s: Failed to enable termination on link #%d\n", __FUNCTION__, link->linkNumber);
return;
}
// add link to disabledRemoteEndLinkMask
chip_device->disabledRemoteEndLinkMask |= NVBIT64(link->linkNumber);
return;
}
@ -2379,3 +2516,124 @@ nvswitch_reset_and_train_link_lr10
{
return NVL_ERR_NOT_IMPLEMENTED;
}
NvBool
nvswitch_does_link_need_termination_enabled_lr10
(
nvswitch_device *device,
nvlink_link *link
)
{
#if defined(INCLUDE_NVLINK_LIB)
NvU32 i;
NvU32 physicalId;
lr10_device *chip_device;
NvU32 numNvswitches;
NvlStatus status;
physicalId = nvswitch_read_physical_id(device);
chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device);
if (chip_device == NULL)
{
NVSWITCH_PRINT(device, ERROR,
"%s: Failed to get lr10 chip device!\n", __FUNCTION__);
return NV_FALSE;
}
//
// If disabledRemoteEndLinkMask has not been cached then
// using the switch's physicalId search nvswitchDisconnetedRemoteLinkMasks
// til a match is found then copy out the linkMask to the chip_device
// Only run this operation if there is a registed device with a reduced
// nvlink config
//
if (chip_device->bDisabledRemoteEndLinkMaskCached == NV_FALSE)
{
chip_device->disabledRemoteEndLinkMask = 0;
if (nvlink_lib_is_registerd_device_with_reduced_config())
{
for (i = 0; i < NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK; ++i)
{
if (nvswitchDisconnetedRemoteLinkMasks[i].switchPhysicalId == physicalId)
{
chip_device->disabledRemoteEndLinkMask |=
nvswitchDisconnetedRemoteLinkMasks[i].accessLinkMask;
status = nvlink_lib_return_device_count_by_type(NVLINK_DEVICE_TYPE_NVSWITCH, &numNvswitches);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR,
"%s: Failed to get nvswitch device count!\n", __FUNCTION__);
break;
}
if (numNvswitches <= NVSWITCH_NUM_DEVICES_PER_DELTA_LR10)
{
chip_device->disabledRemoteEndLinkMask |=
nvswitchDisconnetedRemoteLinkMasks[i].trunkLinkMask;
}
break;
}
}
}
chip_device->bDisabledRemoteEndLinkMaskCached = NV_TRUE;
}
return ((BIT64(link->linkNumber) & chip_device->disabledRemoteEndLinkMask) != 0);
#else
return NV_FALSE;
#endif //defined(INCLUDE_NVLINK_LIB)
}
NvlStatus
nvswitch_link_termination_setup_lr10
(
nvswitch_device *device,
nvlink_link* link
)
{
NvlStatus status;
NvU32 linkId = link->linkNumber;
// Sanity check
if ((link == NULL) ||
(linkId >= NVSWITCH_NVLINK_MAX_LINKS) ||
!NVSWITCH_IS_LINK_ENG_VALID_LR10(device, NVLDL, linkId))
{
NVSWITCH_PRINT(device, ERROR, "%s: Link %d is invalid!\n", __FUNCTION__, linkId);
return NVL_BAD_ARGS;
}
// Sanity check nvlink version
if (link->version != NVLINK_DEVICE_VERSION_30)
{
NVSWITCH_PRINT(device, ERROR, "%s: Link %d: only nvlink version 3.0 can run the termination setup\n",
__FUNCTION__, linkId);
return NVL_BAD_ARGS;
}
// Send INITPHASE1 to the link
status = nvswitch_minion_send_command_lr10(device, link->linkNumber,
NV_MINION_NVLINK_DL_CMD_COMMAND_INITPHASE1, 0);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to send initphase1 to link %d", __FUNCTION__, linkId);
return NVL_ERR_INVALID_STATE;
}
// Send INITRXTXTERM to the link
nvswitch_minion_send_command_lr10(device, link->linkNumber,
NV_MINION_NVLINK_DL_CMD_COMMAND_INITRXTXTERM, 0);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to send INITRXTXTERM to link %d", __FUNCTION__, linkId);
}
NVSWITCH_PRINT(device, INFO,
"%s: enabled termination for switchPhysicalId %d link# %d\n",
__FUNCTION__, nvswitch_read_physical_id(device), linkId);
return NVL_SUCCESS;
}

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2018-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2018-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -3655,6 +3655,15 @@ nvswitch_initialize_device_state_lr10
goto nvswitch_initialize_device_state_exit;
}
retval = nvswitch_check_io_sanity(device);
if (NVL_SUCCESS != retval)
{
NVSWITCH_PRINT(device, ERROR,
"%s: IO sanity test failed\n",
__FUNCTION__);
goto nvswitch_initialize_device_state_exit;
}
NVSWITCH_PRINT(device, SETUP,
"%s: MMIO discovery\n",
__FUNCTION__);
@ -3855,7 +3864,7 @@ nvswitch_initialize_device_state_lr10
}
else
{
NVSWITCH_PRINT(device, ERROR,
NVSWITCH_PRINT(device, WARN,
"%s: Skipping SPI init.\n",
__FUNCTION__);
}
@ -3874,7 +3883,7 @@ nvswitch_initialize_device_state_lr10
}
else
{
NVSWITCH_PRINT(device, ERROR,
NVSWITCH_PRINT(device, WARN,
"%s: Skipping SMBPBI init.\n",
__FUNCTION__);
}
@ -4579,26 +4588,6 @@ _nvswitch_get_info_revision_minor_ext
return (DRF_VAL(_PSMC, _BOOT_42, _MINOR_EXTENDED_REVISION, val));
}
static NvU32
_nvswitch_get_info_voltage
(
nvswitch_device *device
)
{
NvU32 voltage = 0;
return voltage;
}
static NvBool
_nvswitch_inforom_nvl_supported
(
nvswitch_device *device
)
{
return NV_FALSE;
}
static NvBool
_nvswitch_inforom_bbx_supported
(
@ -4769,7 +4758,7 @@ nvswitch_ctrl_get_info_lr10
p->info[i] = device->switch_pll.vco_freq_khz;
break;
case NVSWITCH_GET_INFO_INDEX_VOLTAGE_MVOLT:
p->info[i] = _nvswitch_get_info_voltage(device);
retval = -NVL_ERR_NOT_SUPPORTED;
break;
case NVSWITCH_GET_INFO_INDEX_PHYSICAL_ID:
p->info[i] = nvswitch_read_physical_id(device);
@ -6323,7 +6312,6 @@ nvswitch_get_nvlink_ecc_errors_lr10
NvU32 sublinkWidth;
link = nvswitch_get_link(device, i);
sublinkWidth = device->hal.nvswitch_get_sublink_width(device, i);
if ((link == NULL) ||
!NVSWITCH_IS_LINK_ENG_VALID_LR10(device, NVLDL, link->linkNumber) ||
@ -6332,6 +6320,8 @@ nvswitch_get_nvlink_ecc_errors_lr10
return -NVL_BAD_ARGS;
}
sublinkWidth = device->hal.nvswitch_get_sublink_width(device, i);
minion_enabled = nvswitch_is_minion_initialized(device,
NVSWITCH_GET_LINK_ENG_INST(device, link->linkNumber, MINION));
@ -6380,6 +6370,15 @@ nvswitch_get_num_links_lr10
return num_links;
}
static NvU8
nvswitch_get_num_links_per_nvlipt_lr10
(
nvswitch_device *device
)
{
return NVSWITCH_LINKS_PER_NVLIPT;
}
NvBool
nvswitch_is_link_valid_lr10
(
@ -6413,13 +6412,6 @@ nvswitch_ctrl_get_fom_values_lr10
return -NVL_BAD_ARGS;
}
if (nvswitch_is_link_in_reset(device, link))
{
NVSWITCH_PRINT(device, ERROR, "%s: link #%d is in reset\n",
__FUNCTION__, p->linkId);
return -NVL_ERR_INVALID_STATE;
}
status = nvswitch_minion_get_dl_status(device, p->linkId,
NV_NVLSTAT_TR16, 0, &statData);
p->figureOfMeritValues[0] = (NvU16) (statData & 0xFFFF);
@ -7664,7 +7656,7 @@ nvswitch_ctrl_get_sw_info_lr10
switch (p->index[i])
{
case NVSWITCH_GET_SW_INFO_INDEX_INFOROM_NVL_SUPPORTED:
p->info[i] = (NvU32)_nvswitch_inforom_nvl_supported(device);
p->info[i] = NV_TRUE;
break;
case NVSWITCH_GET_SW_INFO_INDEX_INFOROM_BBX_SUPPORTED:
p->info[i] = (NvU32)_nvswitch_inforom_bbx_supported(device);
@ -7847,6 +7839,15 @@ nvswitch_ctrl_get_nvlink_error_threshold_lr10
return -NVL_ERR_NOT_SUPPORTED;
}
NvlStatus
nvswitch_check_io_sanity_lr10
(
nvswitch_device *device
)
{
return NVL_SUCCESS;
}
//
// This function auto creates the lr10 HAL connectivity from the NVSWITCH_INIT_HAL
// macro in haldef_nvswitch.h

View File

@ -314,3 +314,13 @@ nvswitch_ctrl_therm_read_voltage_lr10
return -NVL_ERR_NOT_SUPPORTED;
}
NvlStatus
nvswitch_ctrl_therm_read_power_lr10
(
nvswitch_device *device,
NVSWITCH_GET_POWER_PARAMS *info
)
{
return -NVL_ERR_NOT_SUPPORTED;
}

View File

@ -279,6 +279,7 @@ _flcnDbgInfoCaptureRiscvPcTrace_LS10
{
NvU32 ctl, ridx, widx, bufferSize;
NvBool bWasFull;
NvU64 bios_version;
// Only supported on riscv
if (!UPROC_ENG_ARCH_FALCON_RISCV(pFlcn))
@ -354,8 +355,13 @@ _flcnDbgInfoCaptureRiscvPcTrace_LS10
break;
}
NVSWITCH_PRINT(device, ERROR, "%s: TRACE[%d] = 0x%16llx\n", __FUNCTION__, entry, pc);
NVSWITCH_PRINT_SXID_NO_BBX(device, NVSWITCH_ERR_HW_SOE_HALT, "SOE HALT data[%d] = 0x%16llx\n", entry, pc);
}
// Print VBIOS version at the end
nvswitch_lib_get_bios_version(device, &bios_version);
NVSWITCH_PRINT_SXID_NO_BBX(device, NVSWITCH_ERR_HW_SOE_HALT,
"SOE HALT data[%d] = 0x%16llx\n", entry, bios_version);
}
// reset trace buffer

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2020-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -30,6 +30,8 @@
#include "rmsoecmdif.h"
#include "flcn/flcn_nvswitch.h"
#include "rmflcncmdif_nvswitch.h"
#include "inforom/inforom_nvl_v3_nvswitch.h"
#include "inforom/inforom_nvl_v4_nvswitch.h"
NvlStatus
nvswitch_inforom_nvl_log_error_event_ls10
@ -40,7 +42,252 @@ nvswitch_inforom_nvl_log_error_event_ls10
NvBool *bDirty
)
{
return -NVL_ERR_NOT_IMPLEMENTED;
NvlStatus status;
INFOROM_NVL_OBJECT_V4S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v4s;
INFOROM_NVLINK_ERROR_EVENT *pErrorEvent = (INFOROM_NVLINK_ERROR_EVENT *)pNvlErrorEvent;
INFOROM_NVL_OBJECT_V3_ERROR_ENTRY *pErrorEntry;
NvU32 i;
NvU32 sec;
NvU8 header = 0;
NvU16 metadata = 0;
NvU8 errorSubtype;
NvU64 accumTotalCount;
INFOROM_NVL_ERROR_BLOCK_TYPE blockType;
if (pErrorEvent->nvliptInstance > INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u NVLIPTs (NVLIPT = %u requested)\n",
INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX, pErrorEvent->nvliptInstance);
return -NVL_BAD_ARGS;
}
if (pErrorEvent->localLinkIdx > INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u internal links (internal link = %u requested)\n",
INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX, pErrorEvent->localLinkIdx);
return -NVL_BAD_ARGS;
}
sec = (NvU32) (nvswitch_os_get_platform_time_epoch() / NVSWITCH_INTERVAL_1SEC_IN_NS);
status = inforom_nvl_v3_map_error(pErrorEvent->error, &header, &metadata,
&errorSubtype, &blockType);
if (status != NVL_SUCCESS)
{
return status;
}
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA,
_NVLIPT_INSTANCE_ID, pErrorEvent->nvliptInstance, metadata);
if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_DL)
{
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID,
NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL(pErrorEvent->localLinkIdx),
metadata);
}
else if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_TLC)
{
metadata = FLD_SET_DRF_NUM(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA, _BLOCK_ID,
NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC(pErrorEvent->localLinkIdx),
metadata);
}
else if (blockType == INFOROM_NVL_ERROR_BLOCK_TYPE_NVLIPT)
{
metadata = FLD_SET_DRF(_INFOROM_NVL_OBJECT_V3, _ERROR_METADATA,
_BLOCK_ID, _NVLIPT, metadata);
status = inforom_nvl_v3_encode_nvlipt_error_subtype(pErrorEvent->localLinkIdx,
&errorSubtype);
if (status != NVL_SUCCESS)
{
return status;
}
}
for (i = 0; i < INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES; i++)
{
pErrorEntry = &pNvlObject->errorLog[i];
if ((pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_INVALID) ||
((pErrorEntry->metadata == metadata) &&
(pErrorEntry->errorSubtype == errorSubtype)))
{
break;
}
}
if (i >= INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES)
{
NVSWITCH_PRINT(device, ERROR, "%s: NVL error log is full -- unable to log error\n",
__FUNCTION__);
return -NVL_ERR_INVALID_STATE;
}
if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_INVALID)
{
pErrorEntry->header = header;
pErrorEntry->metadata = metadata;
pErrorEntry->errorSubtype = errorSubtype;
}
if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_ACCUM)
{
accumTotalCount = NvU64_ALIGN32_VAL(&pErrorEntry->data.accum.totalCount);
if (accumTotalCount != NV_U64_MAX)
{
if (pErrorEvent->count > NV_U64_MAX - accumTotalCount)
{
accumTotalCount = NV_U64_MAX;
}
else
{
accumTotalCount += pErrorEvent->count;
}
NvU64_ALIGN32_PACK(&pErrorEntry->data.accum.totalCount, &accumTotalCount);
if (sec < pErrorEntry->data.accum.lastUpdated)
{
NVSWITCH_PRINT(device, ERROR,
"%s: System clock reporting earlier time than error timestamp\n",
__FUNCTION__);
}
pErrorEntry->data.accum.lastUpdated = sec;
*bDirty = NV_TRUE;
}
}
else if (pErrorEntry->header == INFOROM_NVL_ERROR_TYPE_COUNT)
{
if (pErrorEntry->data.event.totalCount != NV_U32_MAX)
{
pErrorEntry->data.event.totalCount++;
if (sec < pErrorEntry->data.event.lastError)
{
NVSWITCH_PRINT(device, ERROR,
"%s: System clock reporting earlier time than error timestamp\n",
__FUNCTION__);
}
else
{
pErrorEntry->data.event.avgEventDelta =
(pErrorEntry->data.event.avgEventDelta + sec -
pErrorEntry->data.event.lastError) >> 1;
}
pErrorEntry->data.event.lastError = sec;
*bDirty = NV_TRUE;
}
}
else
{
return -NVL_ERR_INVALID_STATE;
}
return NVL_SUCCESS;
}
NvlStatus
nvswitch_inforom_nvl_get_max_correctable_error_rate_ls10
(
nvswitch_device *device,
NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS *params
)
{
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
NvU8 linkID = params->linkId;
if (linkID >= NVSWITCH_NUM_LINKS_LS10)
{
return -NVL_BAD_ARGS;
}
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
nvswitch_os_memset(params, 0, sizeof(NVSWITCH_GET_NVLINK_MAX_CORRECTABLE_ERROR_RATES_PARAMS));
params->linkId = linkID;
nvswitch_os_memcpy(&params->dailyMaxCorrectableErrorRates, &pNvlinkState->pNvl->v4s.maxCorrectableErrorRates.dailyMaxCorrectableErrorRates[0][linkID],
sizeof(params->dailyMaxCorrectableErrorRates));
nvswitch_os_memcpy(&params->monthlyMaxCorrectableErrorRates, &pNvlinkState->pNvl->v4s.maxCorrectableErrorRates.monthlyMaxCorrectableErrorRates[0][linkID],
sizeof(params->monthlyMaxCorrectableErrorRates));
return NVL_SUCCESS;
}
NvlStatus
nvswitch_inforom_nvl_get_errors_ls10
(
nvswitch_device *device,
NVSWITCH_GET_NVLINK_ERROR_COUNTS_PARAMS *params
)
{
struct inforom *pInforom = device->pInforom;
INFOROM_NVLINK_STATE *pNvlinkState;
NvU32 maxReadSize = sizeof(params->errorLog)/sizeof(NVSWITCH_NVLINK_ERROR_ENTRY);
NvU32 errorLeftCount = 0, errorReadCount = 0, errIndx = 0;
NvU32 errorStart = params->errorIndex;
if (pInforom == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState = pInforom->pNvlinkState;
if (pNvlinkState == NULL)
{
return -NVL_ERR_NOT_SUPPORTED;
}
if (errorStart >= INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES)
{
return -NVL_BAD_ARGS;
}
nvswitch_os_memset(params->errorLog, 0, sizeof(params->errorLog));
while (((errorStart + errorLeftCount) < INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES) &&
(pNvlinkState->pNvl->v4s.errorLog[errorStart + errorLeftCount].header != INFOROM_NVL_ERROR_TYPE_INVALID))
{
errorLeftCount++;
}
if (errorLeftCount > maxReadSize)
{
errorReadCount = maxReadSize;
}
else
{
errorReadCount = errorLeftCount;
}
params->errorIndex = errorStart + errorReadCount;
params->errorCount = errorReadCount;
if (errorReadCount > 0)
{
for (errIndx = 0; errIndx < errorReadCount; errIndx++)
{
if (inforom_nvl_v3_map_error_to_userspace_error(device,
&pNvlinkState->pNvl->v4s.errorLog[errorStart+errIndx],
&params->errorLog[errIndx]) != NVL_SUCCESS)
{
return -NVL_ERR_NOT_SUPPORTED;
}
}
}
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_update_link_correctable_error_info_ls10
@ -55,7 +302,258 @@ NvlStatus nvswitch_inforom_nvl_update_link_correctable_error_info_ls10
NvBool *bDirty
)
{
return -NVL_ERR_NOT_IMPLEMENTED;
INFOROM_NVL_OBJECT_V4S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v4s;
INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4S *pState =
&((INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE *)pData)->v4s;
INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *pErrorCounts =
(INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS *)pNvlErrorCounts;
NvU32 i;
NvU32 sec;
NvU32 day, month, currentEntryDay, currentEntryMonth;
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pErrorRate;
INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE *pOldestErrorRate = NULL;
INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES *pCorrErrorRates;
NvBool bUpdated = NV_FALSE;
INFOROM_NVLINK_ERROR_EVENT errorEvent;
NvU32 currentFlitCrcRate;
NvU32 *pCurrentLaneCrcRates;
if (bDirty == NULL)
{
return -NVL_BAD_ARGS;
}
*bDirty = NV_FALSE;
if (linkId >= INFOROM_NVL_OBJECT_V4S_NUM_LINKS)
{
NVSWITCH_PRINT(device, ERROR,
"object does not store data for more than %u links (linkId = %u requested)\n",
INFOROM_NVL_OBJECT_V4S_NUM_LINKS, linkId);
return -NVL_BAD_ARGS;
}
if (nvliptInstance > INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u NVLIPTs (NVLIPT = %u requested)\n",
INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX, nvliptInstance);
return -NVL_BAD_ARGS;
}
if (localLinkIdx > INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX)
{
NVSWITCH_PRINT(device, ERROR,
"object cannot log data for more than %u internal links (internal link = %u requested)\n",
INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX, localLinkIdx);
return -NVL_BAD_ARGS;
}
sec = (NvU32) (nvswitch_os_get_platform_time_epoch() / NVSWITCH_INTERVAL_1SEC_IN_NS);
inforom_nvl_v3_seconds_to_day_and_month(sec, &day, &month);
inforom_nvl_v4_update_correctable_error_rates(pState, linkId, pErrorCounts);
currentFlitCrcRate = pState->errorsPerMinute[linkId].flitCrc;
pCurrentLaneCrcRates = pState->errorsPerMinute[linkId].laneCrc;
pCorrErrorRates = &pNvlObject->maxCorrectableErrorRates;
for (i = 0; i < NV_ARRAY_ELEMENTS(pCorrErrorRates->dailyMaxCorrectableErrorRates); i++)
{
pErrorRate = &pCorrErrorRates->dailyMaxCorrectableErrorRates[i][linkId];
inforom_nvl_v3_seconds_to_day_and_month(pErrorRate->lastUpdated, &currentEntryDay,
&currentEntryMonth);
if ((pErrorRate->lastUpdated == 0) || (currentEntryDay == day))
{
if (inforom_nvl_v3_should_replace_error_rate_entry(pErrorRate,
currentFlitCrcRate,
pCurrentLaneCrcRates))
{
inforom_nvl_v3_update_error_rate_entry(pErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
pOldestErrorRate = NULL;
break;
}
else if ((pOldestErrorRate == NULL) ||
(pErrorRate->lastUpdated < pOldestErrorRate->lastUpdated))
{
pOldestErrorRate = pErrorRate;
}
}
if (pOldestErrorRate != NULL)
{
inforom_nvl_v3_update_error_rate_entry(pOldestErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
for (i = 0; i < NV_ARRAY_ELEMENTS(pCorrErrorRates->monthlyMaxCorrectableErrorRates); i++)
{
pErrorRate = &pCorrErrorRates->monthlyMaxCorrectableErrorRates[i][linkId];
inforom_nvl_v3_seconds_to_day_and_month(pErrorRate->lastUpdated, &currentEntryDay,
&currentEntryMonth);
if ((pErrorRate->lastUpdated == 0) || (currentEntryMonth == month))
{
if (inforom_nvl_v3_should_replace_error_rate_entry(pErrorRate,
currentFlitCrcRate,
pCurrentLaneCrcRates))
{
inforom_nvl_v3_update_error_rate_entry(pErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
pOldestErrorRate = NULL;
break;
}
else if ((pOldestErrorRate == NULL) ||
(pErrorRate->lastUpdated < pOldestErrorRate->lastUpdated))
{
pOldestErrorRate = pErrorRate;
}
}
if (pOldestErrorRate != NULL)
{
inforom_nvl_v3_update_error_rate_entry(pOldestErrorRate, sec,
currentFlitCrcRate,
pCurrentLaneCrcRates);
bUpdated = NV_TRUE;
}
*bDirty = bUpdated;
// Update aggregate error counts for each correctable error
errorEvent.nvliptInstance = nvliptInstance;
errorEvent.localLinkIdx = localLinkIdx;
if (pErrorCounts->flitCrc > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_RX_FLIT_CRC_CORR;
errorEvent.count = pErrorCounts->flitCrc;
nvswitch_inforom_nvl_log_error_event_ls10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->rxLinkReplay > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_RX_LINK_REPLAY_EVENTS_CORR;
errorEvent.count = pErrorCounts->rxLinkReplay;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_ls10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->txLinkReplay > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_TX_LINK_REPLAY_EVENTS_CORR;
errorEvent.count = pErrorCounts->txLinkReplay;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_ls10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
if (pErrorCounts->linkRecovery > 0)
{
errorEvent.error = INFOROM_NVLINK_DL_LINK_RECOVERY_EVENTS_CORR;
errorEvent.count = pErrorCounts->linkRecovery;
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_ls10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
for (i = 0; i < 4; i++)
{
if (pErrorCounts->laneCrc[i] == 0)
{
continue;
}
errorEvent.error = INFOROM_NVLINK_DL_RX_LANE0_CRC_CORR + i;
errorEvent.count = pErrorCounts->laneCrc[i];
bUpdated = NV_FALSE;
nvswitch_inforom_nvl_log_error_event_ls10(device,
pNvlGeneric, &errorEvent, &bUpdated);
*bDirty |= bUpdated;
}
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_setL1Threshold_ls10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 word1,
NvU32 word2
)
{
INFOROM_NVL_OBJECT_V4S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v4s;
pNvlObject->l1ThresholdData.word1 = word1;
pNvlObject->l1ThresholdData.word2 = word2;
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_getL1Threshold_ls10
(
nvswitch_device *device,
void *pNvlGeneric,
NvU32 *word1,
NvU32 *word2
)
{
INFOROM_NVL_OBJECT_V4S *pNvlObject = &((PINFOROM_NVL_OBJECT)pNvlGeneric)->v4s;
*word1 = pNvlObject->l1ThresholdData.word1;
*word2 = pNvlObject->l1ThresholdData.word2;
return NVL_SUCCESS;
}
NvlStatus nvswitch_inforom_nvl_setup_nvlink_state_ls10
(
nvswitch_device *device,
INFOROM_NVLINK_STATE *pNvlinkState,
NvU8 version
)
{
if (version != 4)
{
NVSWITCH_PRINT(device, WARN, "NVL v%u not supported\n", version);
return -NVL_ERR_NOT_SUPPORTED;
}
pNvlinkState->pFmt = INFOROM_NVL_OBJECT_V4S_FMT;
pNvlinkState->pPackedObject = nvswitch_os_malloc(INFOROM_NVL_OBJECT_V4S_PACKED_SIZE);
if (pNvlinkState->pPackedObject == NULL)
{
return -NVL_NO_MEM;
}
pNvlinkState->pNvl = nvswitch_os_malloc(sizeof(INFOROM_NVL_OBJECT));
if (pNvlinkState->pNvl == NULL)
{
nvswitch_os_free(pNvlinkState->pPackedObject);
return -NVL_NO_MEM;
}
pNvlinkState->bDisableCorrectableErrorLogging = NV_FALSE;
return NVL_SUCCESS;
}
NvlStatus
@ -271,5 +769,268 @@ nvswitch_bbx_get_sxid_ls10
NVSWITCH_GET_SXIDS_PARAMS *params
)
{
return -NVL_ERR_NOT_SUPPORTED;
NvlStatus status;
void *pDmaBuf;
NvU64 dmaHandle;
FLCN *pFlcn;
RM_FLCN_CMD_SOE bbxCmd;
NvU32 cmdSeqDesc;
NVSWITCH_TIMEOUT timeout;
NvU32 transferSize;
RM_SOE_BBX_GET_SXID_DATA bbxSxidData;
NvU32 sxidIdx;
if (!nvswitch_is_inforom_supported_ls10(device))
{
NVSWITCH_PRINT(device, INFO, "%s: InfoROM is not supported\n", __FUNCTION__);
return -NVL_ERR_NOT_SUPPORTED;
}
if (params == NULL)
{
return -NVL_BAD_ARGS;
}
transferSize = sizeof(bbxSxidData);
status = nvswitch_os_alloc_contig_memory(device->os_handle, &pDmaBuf, transferSize,
(device->dma_addr_width == 32));
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to allocate contig memory. rc:%d\n", __FUNCTION__, status);
return status;
}
status = nvswitch_os_map_dma_region(device->os_handle, pDmaBuf, &dmaHandle,
transferSize, NVSWITCH_DMA_DIR_TO_SYSMEM);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to map DMA region. rc:%d\n", __FUNCTION__, status);
goto nvswitch_bbx_get_sxid_ls10_free_and_exit;
}
nvswitch_os_memset(pDmaBuf, 0, transferSize);
pFlcn = device->pSoe->pFlcn;
nvswitch_timeout_create(NVSWITCH_INTERVAL_5MSEC_IN_NS, &timeout);
nvswitch_os_memset(&bbxCmd, 0, sizeof(bbxCmd));
bbxCmd.hdr.unitId = RM_SOE_UNIT_IFR;
bbxCmd.hdr.size = sizeof(bbxCmd);
bbxCmd.cmd.ifr.cmdType = RM_SOE_IFR_BBX_SXID_GET;
bbxCmd.cmd.ifr.bbxSxidGet.sizeInBytes = transferSize;
RM_FLCN_U64_PACK(&bbxCmd.cmd.ifr.bbxSxidGet.dmaHandle, &dmaHandle);
status = flcnQueueCmdPostBlocking(device, pFlcn,
(PRM_FLCN_CMD)&bbxCmd,
NULL, // pMsg
NULL, // pPayload
SOE_RM_CMDQ_LOG_ID,
&cmdSeqDesc,
&timeout);
if (status != NV_OK)
{
NVSWITCH_PRINT(device, ERROR, "%s: BBX cmd %d failed. rc:%d\n",
__FUNCTION__, bbxCmd.cmd.ifr.cmdType, status);
goto nvswitch_bbx_get_sxid_ls10_unmap_and_exit;
}
status = nvswitch_os_sync_dma_region_for_cpu(device->os_handle, dmaHandle,
transferSize,
NVSWITCH_DMA_DIR_TO_SYSMEM);
if (status != NV_OK)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to sync DMA region. rc:%d\n", __FUNCTION__, status);
goto nvswitch_bbx_get_sxid_ls10_unmap_and_exit;
}
nvswitch_os_memcpy((NvU8 *)&bbxSxidData, (NvU8 *)pDmaBuf, sizeof(bbxSxidData));
// Copy out SXIDs
params->sxidCount = bbxSxidData.sxidCount;
for (sxidIdx = 0; sxidIdx < INFOROM_BBX_OBJ_XID_ENTRIES; sxidIdx++)
{
params->sxidFirst[sxidIdx].sxid = bbxSxidData.sxidFirst[sxidIdx].sxid;
params->sxidFirst[sxidIdx].timestamp = bbxSxidData.sxidFirst[sxidIdx].timestamp;
params->sxidLast[sxidIdx].sxid = bbxSxidData.sxidLast[sxidIdx].sxid;
params->sxidLast[sxidIdx].timestamp = bbxSxidData.sxidLast[sxidIdx].timestamp;
}
nvswitch_bbx_get_sxid_ls10_unmap_and_exit:
nvswitch_os_unmap_dma_region(device->os_handle, pDmaBuf, dmaHandle,
transferSize, NVSWITCH_DMA_DIR_FROM_SYSMEM);
nvswitch_bbx_get_sxid_ls10_free_and_exit:
nvswitch_os_free_contig_memory(device->os_handle, pDmaBuf, transferSize);
return status;
}
NvlStatus
nvswitch_bbx_get_data_ls10
(
nvswitch_device *device,
NvU8 dataType,
void *params
)
{
NvlStatus status;
void *pDmaBuf;
NvU64 dmaHandle;
FLCN *pFlcn;
RM_FLCN_CMD_SOE bbxCmd;
NvU32 cmdSeqDesc;
NVSWITCH_TIMEOUT timeout;
NvU32 transferSize;
if (!nvswitch_is_inforom_supported_ls10(device))
{
NVSWITCH_PRINT(device, ERROR, "%s: InfoROM is not supported\n", __FUNCTION__);
return -NVL_ERR_NOT_SUPPORTED;
}
if (params == NULL)
{
NVSWITCH_PRINT(device, ERROR, "%s: params is NULL\n", __FUNCTION__);
return -NVL_BAD_ARGS;
}
switch (dataType)
{
case RM_SOE_IFR_BBX_GET_SYS_INFO:
transferSize = sizeof(NVSWITCH_GET_SYS_INFO_PARAMS);
break;
case RM_SOE_IFR_BBX_GET_TIME_INFO:
transferSize = sizeof(NVSWITCH_GET_TIME_INFO_PARAMS);
break;
case RM_SOE_IFR_BBX_GET_TEMP_DATA:
transferSize = sizeof(NVSWITCH_GET_TEMP_DATA_PARAMS);
break;
case RM_SOE_IFR_BBX_GET_TEMP_SAMPLES:
transferSize = sizeof(NVSWITCH_GET_TEMP_SAMPLES_PARAMS);
break;
default:
NVSWITCH_PRINT(device, ERROR, "Unknown dataType %d", dataType);
return -NVL_BAD_ARGS;
break;
}
status = nvswitch_os_alloc_contig_memory(device->os_handle, &pDmaBuf, transferSize,
(device->dma_addr_width == 32));
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to allocate contig memory. rc:%d\n", __FUNCTION__, status);
return status;
}
status = nvswitch_os_map_dma_region(device->os_handle, pDmaBuf, &dmaHandle,
transferSize, NVSWITCH_DMA_DIR_TO_SYSMEM);
if (status != NVL_SUCCESS)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to map DMA region. rc:%d\n", __FUNCTION__, status);
goto nvswitch_bbx_get_data_ls10_free_and_exit;
}
nvswitch_os_memset(pDmaBuf, 0, transferSize);
pFlcn = device->pSoe->pFlcn;
nvswitch_timeout_create(NVSWITCH_INTERVAL_5MSEC_IN_NS, &timeout);
nvswitch_os_memset(&bbxCmd, 0, sizeof(bbxCmd));
bbxCmd.hdr.unitId = RM_SOE_UNIT_IFR;
bbxCmd.hdr.size = sizeof(bbxCmd);
bbxCmd.cmd.ifr.cmdType = RM_SOE_IFR_BBX_DATA_GET;
bbxCmd.cmd.ifr.bbxDataGet.sizeInBytes = transferSize;
bbxCmd.cmd.ifr.bbxDataGet.dataType = dataType;
RM_FLCN_U64_PACK(&bbxCmd.cmd.ifr.bbxDataGet.dmaHandle, &dmaHandle);
status = flcnQueueCmdPostBlocking(device, pFlcn,
(PRM_FLCN_CMD)&bbxCmd,
NULL, // pMsg
NULL, // pPayload
SOE_RM_CMDQ_LOG_ID,
&cmdSeqDesc,
&timeout);
if (status != NV_OK)
{
NVSWITCH_PRINT(device, ERROR, "%s: BX_GET_DATA type=%d failed. rc:%d\n",
__FUNCTION__, dataType, status);
goto nvswitch_bbx_get_data_ls10_unmap_and_exit;
}
status = nvswitch_os_sync_dma_region_for_cpu(device->os_handle, dmaHandle,
transferSize,
NVSWITCH_DMA_DIR_TO_SYSMEM);
if (status != NV_OK)
{
NVSWITCH_PRINT(device, ERROR, "%s: Failed to sync DMA region. rc:%d\n", __FUNCTION__, status);
goto nvswitch_bbx_get_data_ls10_unmap_and_exit;
}
if (dataType == RM_SOE_IFR_BBX_GET_SYS_INFO)
{
NVSWITCH_GET_SYS_INFO_PARAMS bbxSysInfoData = {0};
nvswitch_os_memcpy((NvU8 *)&bbxSysInfoData, (NvU8 *)pDmaBuf, sizeof(NVSWITCH_GET_SYS_INFO_PARAMS));
nvswitch_os_memcpy((NvU8 *)params, (NvU8 *)&bbxSysInfoData, sizeof(NVSWITCH_GET_SYS_INFO_PARAMS));
}
else if (dataType == RM_SOE_IFR_BBX_GET_TIME_INFO)
{
NVSWITCH_GET_TIME_INFO_PARAMS bbxTimeInfoData = {0};
nvswitch_os_memcpy((NvU8 *)&bbxTimeInfoData, (NvU8 *)pDmaBuf, sizeof(NVSWITCH_GET_TIME_INFO_PARAMS));
nvswitch_os_memcpy((NvU8 *)params, (NvU8 *)&bbxTimeInfoData, sizeof(NVSWITCH_GET_TIME_INFO_PARAMS));
}
else if (dataType == RM_SOE_IFR_BBX_GET_TEMP_DATA)
{
NVSWITCH_GET_TEMP_DATA_PARAMS *pBbxTempData = NULL;
pBbxTempData = nvswitch_os_malloc(sizeof(NVSWITCH_GET_TEMP_DATA_PARAMS));
if (pBbxTempData == NULL)
{
NVSWITCH_PRINT(device, ERROR, "Out of memory: dataType %d", dataType);
status = -NVL_NO_MEM;
goto nvswitch_bbx_get_data_ls10_unmap_and_exit;
}
nvswitch_os_memset(pBbxTempData, 0, sizeof(NVSWITCH_GET_TEMP_DATA_PARAMS));
nvswitch_os_memcpy((NvU8 *)pBbxTempData, (NvU8 *)pDmaBuf, sizeof(NVSWITCH_GET_TEMP_DATA_PARAMS));
nvswitch_os_memcpy((NvU8 *)params, (NvU8 *)pBbxTempData, sizeof(NVSWITCH_GET_TEMP_DATA_PARAMS));
nvswitch_os_free(pBbxTempData);
}
else if (dataType == RM_SOE_IFR_BBX_GET_TEMP_SAMPLES)
{
NVSWITCH_GET_TEMP_SAMPLES_PARAMS *pBbxTempSamples = NULL;
pBbxTempSamples = nvswitch_os_malloc(sizeof(NVSWITCH_GET_TEMP_SAMPLES_PARAMS));
if (pBbxTempSamples == NULL)
{
NVSWITCH_PRINT(device, ERROR, "Out of memory: dataType %d", dataType);
status = -NVL_NO_MEM;
goto nvswitch_bbx_get_data_ls10_unmap_and_exit;
}
nvswitch_os_memset(pBbxTempSamples, 0, sizeof(NVSWITCH_GET_TEMP_SAMPLES_PARAMS));
nvswitch_os_memcpy((NvU8 *)pBbxTempSamples, (NvU8 *)pDmaBuf, sizeof(NVSWITCH_GET_TEMP_SAMPLES_PARAMS));
nvswitch_os_memcpy((NvU8 *)params, (NvU8 *)pBbxTempSamples, sizeof(NVSWITCH_GET_TEMP_SAMPLES_PARAMS));
nvswitch_os_free(pBbxTempSamples);
}
else
{
NVSWITCH_PRINT(device, ERROR, "Unknown dataType %d", dataType);
goto nvswitch_bbx_get_data_ls10_unmap_and_exit;
}
nvswitch_bbx_get_data_ls10_unmap_and_exit:
nvswitch_os_unmap_dma_region(device->os_handle, pDmaBuf, dmaHandle,
transferSize, NVSWITCH_DMA_DIR_FROM_SYSMEM);
nvswitch_bbx_get_data_ls10_free_and_exit:
nvswitch_os_free_contig_memory(device->os_handle, pDmaBuf, transferSize);
return status;
}

Some files were not shown because too many files have changed in this diff Show More