Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2 Add some amdgpu goo.



details:   https://anonhg.NetBSD.org/src/rev/3930c1d95bd4
branches:  trunk
changeset: 835308:3930c1d95bd4
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Mon Aug 27 14:02:32 2018 +0000

description:
Add some amdgpu goo.

diffstat:

 sys/external/bsd/drm2/amdgpu/amdgpu2netbsd      |   26 ++
 sys/external/bsd/drm2/amdgpu/amdgpu_module.c    |  161 +++++++++++++
 sys/external/bsd/drm2/amdgpu/amdgpu_pci.c       |  290 ++++++++++++++++++++++++
 sys/external/bsd/drm2/amdgpu/amdgpu_task.h      |   55 ++++
 sys/external/bsd/drm2/amdgpu/amdgpufb.c         |  198 ++++++++++++++++
 sys/external/bsd/drm2/amdgpu/files.amdgpu       |   98 ++++++++
 sys/external/bsd/drm2/include/amdgpu_trace.h    |  114 +++++++++
 sys/external/bsd/drm2/include/amdgpufb.h        |   48 +++
 sys/external/bsd/drm2/include/gpu_sched_trace.h |   45 +++
 sys/external/bsd/drm2/pci/files.drmkms_pci      |    3 +-
 10 files changed, 1037 insertions(+), 1 deletions(-)

diffs (truncated from 1088 to 300 lines):

diff -r 75e72fa082a9 -r 3930c1d95bd4 sys/external/bsd/drm2/amdgpu/amdgpu2netbsd
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd        Mon Aug 27 14:02:32 2018 +0000
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+#      $NetBSD: amdgpu2netbsd,v 1.1 2018/08/27 14:02:32 riastradh Exp $
+#
+# $ /path/to/amdgpu2netbsd > /path/to/files.amdgpu.new
+#
+# Run from the top-level amd/amdgpu source directory.
+
+set -Ceu
+
+# Location of the amdgpu sources relative to $NETBSDSRCDIR.
+amdgpu_top=external/bsd/drm2/dist/drm/amd/amdgpu
+
+# config(5) flag for the amdgpu driver.
+amdgpu_flag=amdgpu
+
+env CONFIG_ACPI=y \
+env src=. \
+make -f Makefile -V '$(amdgpu-y)' \
+| tr ' ' '\n' \
+| grep -v '^$' \
+| sed -e 's,\.o$,.c,' \
+| sort -u \
+| while read f; do
+       printf 'file\t%s\t%s\n' "$amdgpu_top/$f" "$amdgpu_flag"
+done
diff -r 75e72fa082a9 -r 3930c1d95bd4 sys/external/bsd/drm2/amdgpu/amdgpu_module.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/external/bsd/drm2/amdgpu/amdgpu_module.c      Mon Aug 27 14:02:32 2018 +0000
@@ -0,0 +1,161 @@
+/*     $NetBSD: amdgpu_module.c,v 1.1 2018/08/27 14:02:32 riastradh Exp $      */
+
+/*-
+ * Copyright (c) 2018 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_module.c,v 1.1 2018/08/27 14:02:32 riastradh Exp $");
+
+#include <sys/types.h>
+#include <sys/module.h>
+#ifndef _MODULE
+#include <sys/once.h>
+#endif
+#include <sys/systm.h>
+
+#include <drm/drmP.h>
+#include <drm/drm_sysctl.h>
+
+#include "amdgpu_amdkfd.h"
+#include "amdgpu_drv.h"
+
+MODULE(MODULE_CLASS_DRIVER, amdgpu, "amdgpu,drmkms_pci"); /* XXX drmkms_i2c, drmkms_ttm */
+
+#ifdef _MODULE
+#include "ioconf.c"
+#endif
+
+/* XXX Kludge to get these from amdgpu_drv.c.  */
+extern struct drm_driver *const amdgpu_drm_driver;
+extern int amdgpu_max_kms_ioctl;
+
+struct drm_sysctl_def amdgpu_def = DRM_SYSCTL_INIT();
+
+static int
+amdgpu_init(void)
+{
+       extern int drm_guarantee_initialized(void);
+       int error;
+
+       error = drm_guarantee_initialized();
+       if (error)
+               return error;
+
+       amdgpu_drm_driver->num_ioctls = amdgpu_max_kms_ioctl;
+       amdgpu_drm_driver->driver_features |= DRIVER_MODESET;
+
+#if notyet                     /* XXX amdgpu acpi */
+       amdgpu_register_atpx_handler();
+#endif
+
+       amdgpu_amdkfd_init();
+
+       error = drm_pci_init(amdgpu_drm_driver, NULL);
+       if (error) {
+               aprint_error("amdgpu: failed to init pci: %d\n",
+                   error);
+               return error;
+       }
+       drm_sysctl_init(&amdgpu_def);
+
+       return 0;
+}
+
+int    amdgpu_guarantee_initialized(void); /* XXX */
+int
+amdgpu_guarantee_initialized(void)
+{
+#ifdef _MODULE
+       return 0;
+#else
+       static ONCE_DECL(amdgpu_init_once);
+
+       return RUN_ONCE(&amdgpu_init_once, &amdgpu_init);
+#endif
+}
+
+static void
+amdgpu_fini(void)
+{
+
+       drm_sysctl_fini(&amdgpu_def);
+       drm_pci_exit(amdgpu_drm_driver, NULL);
+       amdgpu_amdkfd_fini();
+#if notyet                     /* XXX amdgpu acpi */
+       amdgpu_unregister_atpx_handler();
+#endif
+}
+
+static int
+amdgpu_modcmd(modcmd_t cmd, void *arg __unused)
+{
+       int error;
+
+       switch (cmd) {
+       case MODULE_CMD_INIT:
+               /* XXX Kludge it up...  Must happen before attachment.  */
+#ifdef _MODULE
+               error = amdgpu_init();
+#else
+               error = amdgpu_guarantee_initialized();
+#endif
+               if (error) {
+                       aprint_error("amdgpu: failed to initialize: %d\n",
+                           error);
+                       return error;
+               }
+#ifdef _MODULE
+               error = config_init_component(cfdriver_ioconf_amdgpu,
+                   cfattach_ioconf_amdgpu, cfdata_ioconf_amdgpu);
+               if (error) {
+                       aprint_error("amdgpu: failed to init component"
+                           ": %d\n", error);
+                       amdgpu_fini();
+                       return error;
+               }
+#endif
+               return 0;
+
+       case MODULE_CMD_FINI:
+#ifdef _MODULE
+               error = config_fini_component(cfdriver_ioconf_amdgpu,
+                   cfattach_ioconf_amdgpu, cfdata_ioconf_amdgpu);
+               if (error) {
+                       aprint_error("amdgpu: failed to fini component"
+                           ": %d\n", error);
+                       return error;
+               }
+#endif
+               amdgpu_fini();
+               return 0;
+
+       default:
+               return ENOTTY;
+       }
+}
diff -r 75e72fa082a9 -r 3930c1d95bd4 sys/external/bsd/drm2/amdgpu/amdgpu_pci.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/external/bsd/drm2/amdgpu/amdgpu_pci.c Mon Aug 27 14:02:32 2018 +0000
@@ -0,0 +1,290 @@
+/*     $NetBSD: amdgpu_pci.c,v 1.1 2018/08/27 14:02:32 riastradh Exp $ */
+
+/*-
+ * Copyright (c) 2018 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_pci.c,v 1.1 2018/08/27 14:02:32 riastradh Exp $");
+
+#include <sys/types.h>
+#include <sys/queue.h>
+#include <sys/systm.h>
+#include <sys/workqueue.h>
+
+#include <drm/drmP.h>
+
+#include <amdgpu.h>
+#include "amdgpu_drv.h"
+#include "amdgpu_task.h"
+
+SIMPLEQ_HEAD(amdgpu_task_head, amdgpu_task);
+
+struct amdgpu_softc {
+       device_t                        sc_dev;
+       struct pci_attach_args          sc_pa;
+       enum {
+               AMDGPU_TASK_ATTACH,
+               AMDGPU_TASK_WORKQUEUE,
+       }                               sc_task_state;
+       union {
+               struct workqueue                *workqueue;
+               struct amdgpu_task_head         attach;
+       }                               sc_task_u;
+       struct drm_device               *sc_drm_dev;
+       struct pci_dev                  sc_pci_dev;
+};
+
+static bool    amdgpu_pci_lookup(const struct pci_attach_args *,
+                   unsigned long *);
+
+static int     amdgpu_match(device_t, cfdata_t, void *);
+static void    amdgpu_attach(device_t, device_t, void *);
+static void    amdgpu_attach_real(device_t);
+static int     amdgpu_detach(device_t, int);
+static bool    amdgpu_do_suspend(device_t, const pmf_qual_t *);
+static bool    amdgpu_do_resume(device_t, const pmf_qual_t *);
+
+static void    amdgpu_task_work(struct work *, void *);
+
+CFATTACH_DECL_NEW(amdgpu, sizeof(struct amdgpu_softc),
+    amdgpu_match, amdgpu_attach, amdgpu_detach, NULL);
+
+/* XXX Kludge to get these from amdgpu_drv.c.  */
+extern struct drm_driver *const amdgpu_drm_driver;
+extern const struct pci_device_id *const amdgpu_device_ids;
+extern const size_t amdgpu_n_device_ids;
+
+static bool
+amdgpu_pci_lookup(const struct pci_attach_args *pa, unsigned long *flags)
+{
+       size_t i;
+
+       for (i = 0; i < amdgpu_n_device_ids; i++) {
+               if ((PCI_VENDOR(pa->pa_id) == amdgpu_device_ids[i].vendor) &&
+                   (PCI_PRODUCT(pa->pa_id) == amdgpu_device_ids[i].device))
+                       break;
+       }
+
+       /* Did we find it?  */
+       if (i == amdgpu_n_device_ids)
+               return false;
+
+       if (flags)
+               *flags = amdgpu_device_ids[i].driver_data;
+       return true;
+}



Home | Main Index | Thread Index | Old Index