drivers/gpu/drm/openchrome/openchrome_drv.c       |  115 ++++++++++++++++------
 drivers/gpu/drm/openchrome/openchrome_drv.h       |   11 +-
 drivers/gpu/drm/openchrome/openchrome_h1_cmdbuf.c |    2 
 drivers/gpu/drm/openchrome/openchrome_ttm.c       |   32 ------
 4 files changed, 94 insertions(+), 66 deletions(-)

New commits:
commit 46caf7ce2b78b498240b4eb01d9889635e39531d
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Thu Oct 11 20:29:39 2018 -0700

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

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h 
b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 429c44495efc..5bde11a83947 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -31,11 +31,11 @@
 #define DRIVER_AUTHOR          "OpenChrome Project"
 #define DRIVER_NAME            "openchrome"
 #define DRIVER_DESC            "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE            "20180905"
+#define DRIVER_DATE            "20181011"
 
 #define DRIVER_MAJOR           3
 #define DRIVER_MINOR           0
-#define DRIVER_PATCHLEVEL      86
+#define DRIVER_PATCHLEVEL      87
 #include <linux/module.h>
 
 #include "ttm/ttm_bo_api.h"
commit 0ff2fa7f7d4dde2026a43c49a91971f085c91ca5
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Thu Oct 11 20:27:12 2018 -0700

    drm/openchrome: Map MMIO without TTM
    
    Previously, it was done via TTM, but it can be done without it.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c 
b/drivers/gpu/drm/openchrome/openchrome_drv.c
index dabc0f6c064d..d5899ed20506 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -135,28 +135,72 @@ static void via_agp_engine_init(struct via_device 
*dev_priv)
 }
 #endif
 
-static void via_mmio_setup(struct via_device *dev_priv)
+static int openchrome_mmio_init(struct via_device *dev_priv)
 {
-       void __iomem *regs = ioport_map(0x3c0, 100);
-       u8 val;
+       struct drm_device *dev = dev_priv->dev;
+       int ret = 0;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       val = ioread8(regs + 0x03);
-       iowrite8(val | 0x1, regs + 0x03);
-       val = ioread8(regs + 0x0C);
-       iowrite8(val | 0x1, regs + 0x02);
+       /*
+        * PCI BAR1 is the MMIO memory window for all
+        * VIA Technologies Chrome IGPs.
+        * Obtain the starting base address and size, and
+        * map it to the OS for use.
+        */
+       dev_priv->mmio_base = pci_resource_start(dev->pdev, 1);
+       dev_priv->mmio_size = pci_resource_len(dev->pdev, 1);
+       dev_priv->mmio = ioremap(dev_priv->mmio_base,
+                                       dev_priv->mmio_size);
+       if (!dev_priv->mmio) {
+               ret = -ENOMEM;
+               goto exit;
+       }
 
-       /* Unlock Extended IO Space */
-       iowrite8(0x10, regs + 0x04);
-       iowrite8(0x01, regs + 0x05);
-       /* Unlock CRTC register protect */
-       iowrite8(0x47, regs + 0x14);
+       DRM_INFO("VIA Technologies Chrome IGP MMIO Physical Address: "
+                       "0x%08llx\n",
+                       dev_priv->mmio_base);
+exit:
+       DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+       return ret;
+}
 
-       /* Enable MMIO */
-       iowrite8(0x1a, regs + 0x04);
-       val = ioread8(regs + 0x05);
-       iowrite8(val | 0x38, regs + 0x05);
+static void openchrome_mmio_fini(struct via_device *dev_priv)
+{
+       DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+       if (dev_priv->mmio) {
+               iounmap(dev_priv->mmio);
+               dev_priv->mmio = NULL;
+       }
+
+       DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
+static void openchrome_graphics_unlock(struct via_device *dev_priv)
+{
+       uint8_t temp;
+
+       DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+       /*
+        * Enable VGA subsystem.
+        */
+       temp = vga_io_r(0x03C3);
+       vga_io_w(0x03C3, temp | 0x01);
+       svga_wmisc_mask(VGABASE, BIT(0), BIT(0));
+
+       /*
+        * Unlock VIA Technologies Chrome IGP extended
+        * registers.
+        */
+       svga_wseq_mask(VGABASE, 0x10, BIT(0), BIT(0));
+
+       /*
+        * Unlock VIA Technologies Chrome IGP extended
+        * graphics functionality.
+        */
+       svga_wseq_mask(VGABASE, 0x1a, BIT(3), BIT(3));
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
@@ -403,7 +447,13 @@ static int via_device_init(struct via_device *dev_priv)
                goto exit;
        }
 
-       via_mmio_setup(dev_priv);
+       ret = openchrome_mmio_init(dev_priv);
+       if (ret) {
+               DRM_ERROR("Failed to initialize MMIO.\n");
+               goto exit;
+       }
+
+       openchrome_graphics_unlock(dev_priv);
 exit:
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
        return ret;
@@ -447,14 +497,10 @@ static void via_driver_unload(struct drm_device *dev)
                ttm_bo_unref(&bo);
        }
 
-       bo = dev_priv->mmio.bo;
-       if (bo) {
-               via_bo_unpin(bo, &dev_priv->mmio);
-               ttm_bo_unref(&bo);
-       }
-
        via_mm_fini(dev);
 
+       openchrome_mmio_fini(dev_priv);
+
 #if IS_ENABLED(CONFIG_AGP)
        if (dev->agp && dev->agp->acquired)
                drm_agp_release(dev);
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h 
b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 73e5e933fb76..429c44495efc 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -150,7 +150,6 @@ struct via_device {
        int revision;
 
        struct ttm_bo_kmap_obj dmabuf;
-       struct ttm_bo_kmap_obj mmio;
        struct ttm_bo_kmap_obj gart;
        struct ttm_bo_kmap_obj vq;
 
@@ -160,6 +159,10 @@ struct via_device {
        unsigned int vram_size;
        int vram_mtrr;
 
+       unsigned long long      mmio_base;
+       unsigned int            mmio_size;
+       void __iomem            *mmio;
+
        struct via_state pm_cache;
 
        enum via_engine engine_type;
@@ -291,7 +294,7 @@ struct via_device {
 #define VIA_MEM_DDR3_1600      0x12
 
 /* VIA MMIO register access */
-#define VIA_BASE ((dev_priv->mmio.virtual))
+#define VIA_BASE ((dev_priv->mmio))
 
 #define VIA_READ(reg)          ioread32(VIA_BASE + reg)
 #define VIA_WRITE(reg, val)    iowrite32(val, VIA_BASE + reg)
diff --git a/drivers/gpu/drm/openchrome/openchrome_h1_cmdbuf.c 
b/drivers/gpu/drm/openchrome/openchrome_h1_cmdbuf.c
index efec57522a5b..85a7a0ea77ae 100644
--- a/drivers/gpu/drm/openchrome/openchrome_h1_cmdbuf.c
+++ b/drivers/gpu/drm/openchrome/openchrome_h1_cmdbuf.c
@@ -176,7 +176,7 @@ static int via_initialize(struct drm_device *dev,
        dev_priv->dma_offset = bo->offset;
        dev_priv->last_pause_ptr = NULL;
        dev_priv->hw_addr_ptr =
-               (void *)(dev_priv->mmio.virtual + init->reg_pause_addr);
+               (void *)(dev_priv->mmio + init->reg_pause_addr);
 
        via_cmdbuf_start(dev_priv);
 out_err:
diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c 
b/drivers/gpu/drm/openchrome/openchrome_ttm.c
index 33f7754b9297..29ccfd9e1ff0 100644
--- a/drivers/gpu/drm/openchrome/openchrome_ttm.c
+++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c
@@ -582,9 +582,6 @@ static struct ttm_bo_driver via_bo_driver = {
 int via_mm_init(struct via_device *dev_priv)
 {
        struct drm_device *dev = dev_priv->dev;
-       struct ttm_buffer_object *bo;
-       unsigned long long start;
-       int len;
        int ret;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
@@ -623,35 +620,6 @@ int via_mm_init(struct via_device *dev_priv)
                "address 0x%08llx.\n",
                (unsigned long long) dev_priv->vram_size >> 20,
                dev_priv->vram_start);
-
-       start = (unsigned long long) pci_resource_start(dev->pdev, 1);
-       len = pci_resource_len(dev->pdev, 1);
-       ret = ttm_bo_init_mm(&dev_priv->ttm.bdev,
-                               TTM_PL_PRIV, len >> PAGE_SHIFT);
-       if (ret) {
-               DRM_ERROR("Failed to map MMIO: %d\n", ret);
-               goto exit;
-       }
-
-       ret = via_bo_create(&dev_priv->ttm.bdev, &bo, VIA_MMIO_REGSIZE,
-                               ttm_bo_type_kernel, TTM_PL_FLAG_PRIV,
-                               1, PAGE_SIZE, false, NULL, NULL);
-       if (ret) {
-               DRM_ERROR("Failed to create a buffer object "
-                               "for MMIO: %d\n", ret);
-               goto exit;
-       }
-
-       ret = via_bo_pin(bo, &dev_priv->mmio);
-       if (ret) {
-               DRM_ERROR("Failed to map a buffer object for "
-                               "MMIO: %d\n", ret);
-               ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_PRIV);
-               goto exit;
-       }
-
-       DRM_INFO("Mapped MMIO at physical address 0x%08llx.\n",
-                       start);
 exit:
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
        return ret;
commit 07443cf35f9ba1c044548fbf6f2d3e878d9f70b4
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Thu Oct 11 20:24:37 2018 -0700

    drm/openchrome: Add openchrome_flag_init
    
    Initialize private data struct flag registers here.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c 
b/drivers/gpu/drm/openchrome/openchrome_drv.c
index 28924204ffef..dabc0f6c064d 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -376,15 +376,26 @@ static int gem_dumb_destroy(struct drm_file *filp,
        return ret;
 }
 
+static void openchrome_flag_init(struct via_device *dev_priv)
+{
+       DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+       /*
+        * Special handling flags for a few special models.
+        */
+       dev_priv->is_via_nanobook = false;
+       dev_priv->is_quanta_il1 = false;
+
+       DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
 static int via_device_init(struct via_device *dev_priv)
 {
        int ret;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       /* Temporary implementation. */
-       dev_priv->is_via_nanobook = false;
-       dev_priv->is_quanta_il1 = false;
+       openchrome_flag_init(dev_priv);
 
        ret = via_vram_init(dev_priv);
        if (ret) {
commit c5408ffdbc1afaf4b3fa840ed43161cb136da730
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Thu Oct 11 20:21:14 2018 -0700

    drm/openchrome: Change chip_revision_info input parameter
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c 
b/drivers/gpu/drm/openchrome/openchrome_drv.c
index 2eb616c03ecb..28924204ffef 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -161,9 +161,9 @@ static void via_mmio_setup(struct via_device *dev_priv)
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
 
-static void chip_revision_info(struct drm_device *dev)
+static void chip_revision_info(struct via_device *dev_priv)
 {
-       struct via_device *dev_priv = dev->dev_private;
+       struct drm_device *dev = dev_priv->dev;
        struct pci_bus *bus = NULL;
        u16 device_id, subsystem_vendor_id, subsystem_device_id;
        u8 tmp;
@@ -489,7 +489,7 @@ static int via_driver_load(struct drm_device *dev,
                goto init_error;
        }
 
-       chip_revision_info(dev);
+       chip_revision_info(dev_priv);
 
 #if IS_ENABLED(CONFIG_AGP)
        if ((dev_priv->engine_type <= VIA_ENG_H2) ||
_______________________________________________
openchrome-devel mailing list
openchrome-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/openchrome-devel

Reply via email to