drivers/gpu/drm/openchrome/via_drv.c |   59 +++++++++++++++++++++++++----------
 drivers/gpu/drm/openchrome/via_drv.h |    4 +-
 2 files changed, 45 insertions(+), 18 deletions(-)

New commits:
commit 544222399bf6662bb618e229e8f42e345fb7e014
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Tue Feb 13 07:09:02 2018 -0800

    drm/openchrome: Version bumped to 3.0.73
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_drv.h 
b/drivers/gpu/drm/openchrome/via_drv.h
index 119aa9aa46ac..5fc0f3c292eb 100644
--- a/drivers/gpu/drm/openchrome/via_drv.h
+++ b/drivers/gpu/drm/openchrome/via_drv.h
@@ -30,11 +30,11 @@
 #define DRIVER_AUTHOR       "OpenChrome Project"
 #define DRIVER_NAME         "openchrome"
 #define DRIVER_DESC         "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE         "20180204"
+#define DRIVER_DATE         "20180213"
 
 #define DRIVER_MAJOR           3
 #define DRIVER_MINOR           0
-#define DRIVER_PATCHLEVEL      72
+#define DRIVER_PATCHLEVEL      73
 
 #include <linux/module.h>
 
commit 6ef5766ac952a71d0d0ee03170bdc6babbadff70
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Tue Feb 13 07:04:16 2018 -0800

    drm/openchrome: Fix for chip_revision_info
    
    Starting with the newer PCIe generation Chrome IGP found in VX800,
    VX855, and VX900 chipsets, the PCI bus location of the device was
    changed from the earlier AGP generation Chrome IGP. There are
    situations where the device's PCI subvendor ID and subsystem ID need to
    be available to DRM, and this fix corrects the problem for the newer
    PCIe generation Chrome IGP.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_drv.c 
b/drivers/gpu/drm/openchrome/via_drv.c
index 9cc23a86d307..2e3ddb964d93 100644
--- a/drivers/gpu/drm/openchrome/via_drv.c
+++ b/drivers/gpu/drm/openchrome/via_drv.c
@@ -163,53 +163,78 @@ static void via_mmio_setup(struct via_device *dev_priv)
 static void chip_revision_info(struct drm_device *dev)
 {
        struct via_device *dev_priv = dev->dev_private;
-       struct pci_bus *bus;
-       struct pci_dev *device;
+       struct pci_bus *bus = NULL;
        u16 device_id, subsystem_vendor_id, subsystem_device_id;
        u8 tmp;
+       int pci_bus;
+       u8 pci_device, pci_function;
        int ret;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       bus = pci_find_bus(0, 1);
-       if (!bus) {
-               goto pci_error;
+       /*
+        * VX800, VX855, and VX900 chipsets have Chrome IGP
+        * connected as Bus 0, Device 1 PCI device.
+        */
+       if ((dev->pdev->device == PCI_DEVICE_ID_VIA_VT1122) ||
+               (dev->pdev->device == PCI_DEVICE_ID_VIA_VX875) ||
+               (dev->pdev->device == PCI_DEVICE_ID_VIA_VX900_VGA)) {
+
+               pci_bus = 0;
+               pci_device = 1;
+               pci_function = 0;
+
+       /*
+        * For all other devices, Chrome IGP is connected as
+        * Bus 1, Device 0 PCI Device.
+        */
+       } else {
+               pci_bus = 1;
+               pci_device = 0;
+               pci_function = 0;
        }
 
-       device = pci_get_slot(bus, PCI_DEVFN(0, 0));
-       if (!device) {
+       bus = pci_find_bus(0, pci_bus);
+       if (!bus) {
                goto pci_error;
        }
 
-       ret = pci_read_config_word(device, 0x02, &device_id);
+       ret = pci_bus_read_config_word(bus, PCI_DEVFN(pci_device,
+                                                       pci_function),
+                                       PCI_DEVICE_ID,
+                                       &device_id);
        if (ret) {
                goto pci_error;
        }
 
-       ret = pci_read_config_word(device, 0x2c,
+       ret = pci_bus_read_config_word(bus, PCI_DEVFN(pci_device,
+                                                       pci_function),
+                                       PCI_SUBSYSTEM_VENDOR_ID,
                                        &subsystem_vendor_id);
        if (ret) {
                goto pci_error;
        }
 
-       ret = pci_read_config_word(device, 0x2e,
+       ret = pci_bus_read_config_word(bus, PCI_DEVFN(pci_device,
+                                                       pci_function),
+                                       PCI_SUBSYSTEM_ID,
                                        &subsystem_device_id);
        if (ret) {
                goto pci_error;
        }
 
+       DRM_DEBUG_KMS("DRM Device ID: "
+                       "0x%04x\n", dev->pdev->device);
        DRM_DEBUG_KMS("Chrome IGP Device ID: "
-                       "0x%04X\n", device_id);
+                       "0x%04x\n", device_id);
        DRM_DEBUG_KMS("Chrome IGP Subsystem Vendor ID: "
-                       "0x%04X\n", subsystem_vendor_id);
+                       "0x%04x\n", subsystem_vendor_id);
        DRM_DEBUG_KMS("Chrome IGP Subsystem Device ID: "
-                       "0x%04X\n", subsystem_device_id);
+                       "0x%04x\n", subsystem_device_id);
 
        switch (dev->pdev->device) {
-
-       /* Check the revision of CLE266 chipset. */
+       /* CLE266 Chipset */
        case PCI_DEVICE_ID_VIA_CLE266:
-
                /* CR4F only defined in CLE266.CX chipset. */
                tmp = vga_rcrt(VGABASE, 0x4F);
                vga_wcrt(VGABASE, 0x4F, 0x55);
@@ -259,7 +284,9 @@ static void chip_revision_info(struct drm_device *dev)
                }
 
                break;
+       /* VX855 / VX875 Chipset */
        case PCI_DEVICE_ID_VIA_VX875:
+       /* VX900 Chipset */
        case PCI_DEVICE_ID_VIA_VX900_VGA:
                dev_priv->revision = vga_rseq(VGABASE, 0x3B);
                break;
_______________________________________________
Openchrome-devel mailing list
Openchrome-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/openchrome-devel

Reply via email to