diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index 6d21603c6..f5ea52671 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h @@ -2173,6 +2173,7 @@ struct gk20a { u16 pci_subsystem_vendor_id, pci_subsystem_device_id; u16 pci_class; u8 pci_revision; + bool is_fusa_sku; /* * PCI power management: i2c device index, port and address for diff --git a/drivers/gpu/nvgpu/os/linux/pci.c b/drivers/gpu/nvgpu/os/linux/pci.c index 7beaf8876..c2b686cee 100644 --- a/drivers/gpu/nvgpu/os/linux/pci.c +++ b/drivers/gpu/nvgpu/os/linux/pci.c @@ -158,6 +158,7 @@ static struct gk20a_platform nvgpu_pci_device[] = { #define PCI_DEVICE_FLAGS(driver_data) ((driver_data) & 0xFFFF0000U) #define PCI_DEVICE_F_INTERNAL_CHIP_SKU BIT(31) +#define PCI_DEVICE_F_FUSA_CHIP_SKU BIT(30) static struct pci_device_id nvgpu_pci_table[] = { { @@ -202,6 +203,20 @@ static struct pci_device_id nvgpu_pci_table[] = { .class_mask = 0xff << 16, .driver_data = 1 | PCI_DEVICE_F_INTERNAL_CHIP_SKU, }, + { + /* TU104-QS SKU*/ + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x1ebc), + .class = PCI_BASE_CLASS_DISPLAY << 16, + .class_mask = 0xff << 16, + .driver_data = 1 | PCI_DEVICE_F_FUSA_CHIP_SKU, + }, + { + /* TU104-QS SKU*/ + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x1efc), + .class = PCI_BASE_CLASS_DISPLAY << 16, + .class_mask = 0xff << 16, + .driver_data = 1 | PCI_DEVICE_F_FUSA_CHIP_SKU, + }, {} }; @@ -453,6 +468,10 @@ static int nvgpu_pci_probe(struct pci_dev *pdev, nvgpu_err(g, "replace board, or use at your own risks"); } + if ((device_flags & PCI_DEVICE_F_FUSA_CHIP_SKU) != 0U) { + g->is_fusa_sku = true; + } + g->ina3221_dcb_index = platform->ina3221_dcb_index; g->ina3221_i2c_address = platform->ina3221_i2c_address; g->ina3221_i2c_port = platform->ina3221_i2c_port;