From 7303dd33ef69f0a533ebce31caf658e9c35a7091 Mon Sep 17 00:00:00 2001 From: Sami Kiminki Date: Mon, 5 Sep 2016 19:11:41 +0300 Subject: gpu: nvgpu: Expose PCI device id info Expose PCI device id info for PCI devices. Bug 1643487 Change-Id: Ib0e3295b33c2343d99553a5c48e3f67d419d207b Signed-off-by: Sami Kiminki Reviewed-on: http://git-master/r/1214946 (cherry picked from commit a6e23a315a094f1df1f7db8e4307a10d06f28411) Reviewed-on: http://git-master/r/1216336 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a.c | 7 +++++++ drivers/gpu/nvgpu/gk20a/gk20a.h | 6 ++++++ drivers/gpu/nvgpu/pci.c | 7 +++++++ include/uapi/linux/nvgpu.h | 7 +++++++ 4 files changed, 27 insertions(+) diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 47ce220f..ebe2dca4 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -2014,6 +2014,13 @@ int gk20a_init_gpu_characteristics(struct gk20a *g) gpu->local_video_memory_size = g->mm.vidmem.size; + gpu->pci_vendor_id = g->pci_vendor_id; + gpu->pci_device_id = g->pci_device_id; + gpu->pci_subsystem_vendor_id = g->pci_subsystem_vendor_id; + gpu->pci_subsystem_device_id = g->pci_subsystem_device_id; + gpu->pci_class = g->pci_class; + gpu->pci_revision = g->pci_revision; + return 0; } diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 72170362..b534389e 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -908,6 +908,12 @@ struct gk20a { struct debugfs_blob_wrapper bios_blob; struct gk20a_ce_app ce_app; + + /* PCI device identifier */ + u16 pci_vendor_id, pci_device_id; + u16 pci_subsystem_vendor_id, pci_subsystem_device_id; + u16 pci_class; + u8 pci_revision; }; static inline unsigned long gk20a_get_gr_idle_timeout(struct gk20a *g) diff --git a/drivers/gpu/nvgpu/pci.c b/drivers/gpu/nvgpu/pci.c index a67bbd54..7641c7be 100644 --- a/drivers/gpu/nvgpu/pci.c +++ b/drivers/gpu/nvgpu/pci.c @@ -201,6 +201,13 @@ static int nvgpu_pci_probe(struct pci_dev *pdev, return err; pci_set_master(pdev); + g->pci_vendor_id = pdev->vendor; + g->pci_device_id = pdev->device; + g->pci_subsystem_vendor_id = pdev->subsystem_vendor; + g->pci_subsystem_device_id = pdev->subsystem_device; + g->pci_class = (pdev->class >> 8) & 0xFFFFU; // we only want base/sub + g->pci_revision = pdev->revision; + g->irq_stall = pdev->irq; g->irq_nonstall = pdev->irq; if (g->irq_stall < 0) diff --git a/include/uapi/linux/nvgpu.h b/include/uapi/linux/nvgpu.h index 66ea05b3..fe4e6de9 100644 --- a/include/uapi/linux/nvgpu.h +++ b/include/uapi/linux/nvgpu.h @@ -198,6 +198,13 @@ struct nvgpu_gpu_characteristics { __u64 local_video_memory_size; /* in bytes, non-zero only for dGPUs */ + /* These are meaningful only for PCI devices */ + __u16 pci_vendor_id, pci_device_id; + __u16 pci_subsystem_vendor_id, pci_subsystem_device_id; + __u16 pci_class; + __u8 pci_revision; + __u8 reserved2[5]; + /* Notes: - This struct can be safely appended with new fields. However, always keep the structure size multiple of 8 and make sure that the binary -- cgit v1.2.2