...
                  255 = /dev/osd255     256th OSD Device
 
+ 261 char      Compute Acceleration Devices
+                 0 = /dev/accel/accel0 First acceleration device
+                 1 = /dev/accel/accel1 Second acceleration device
+                   ...
+
  384-511 char  RESERVED FOR DYNAMIC ASSIGNMENT
                Character devices that request a dynamic allocation of major
                number will take numbers starting from 511 and downward,
 
 F:     include/linux/vga*
 F:     include/uapi/drm/drm*
 
+DRM COMPUTE ACCELERATORS DRIVERS AND FRAMEWORK
+M:     Oded Gabbay <ogabbay@kernel.org>
+L:     dri-devel@lists.freedesktop.org
+S:     Maintained
+C:     irc://irc.oftc.net/dri-devel
+T:     git https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/accel.git
+F:     drivers/accel/
+
 DRM DRIVERS FOR ALLWINNER A10
 M:     Maxime Ripard <mripard@kernel.org>
 M:     Chen-Yu Tsai <wens@csie.org>
 
 
 source "drivers/video/Kconfig"
 
+source "drivers/accel/Kconfig"
+
 source "sound/Kconfig"
 
 source "drivers/hid/Kconfig"
 
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Compute Acceleration device configuration
+#
+# This framework provides support for compute acceleration devices, such
+# as, but not limited to, Machine-Learning and Deep-Learning acceleration
+# devices
+#
+menuconfig DRM_ACCEL
+       bool "Compute Acceleration Framework"
+       depends on DRM
+       help
+         Framework for device drivers of compute acceleration devices, such
+         as, but not limited to, Machine-Learning and Deep-Learning
+         acceleration devices.
+         If you say Y here, you need to select the module that's right for
+         your acceleration device from the list below.
+         This framework is integrated with the DRM subsystem as compute
+         accelerators and GPUs share a lot in common and can use almost the
+         same infrastructure code.
+         Having said that, acceleration devices will have a different
+         major number than GPUs, and will be exposed to user-space using
+         different device files, called accel/accel* (in /dev, sysfs
+         and debugfs).
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0
+
+/*
+ * Copyright 2022 HabanaLabs, Ltd.
+ * All Rights Reserved.
+ *
+ */
+
+#include <linux/debugfs.h>
+#include <linux/device.h>
+
+#include <drm/drm_accel.h>
+#include <drm/drm_ioctl.h>
+#include <drm/drm_print.h>
+
+static struct dentry *accel_debugfs_root;
+static struct class *accel_class;
+
+static char *accel_devnode(struct device *dev, umode_t *mode)
+{
+       return kasprintf(GFP_KERNEL, "accel/%s", dev_name(dev));
+}
+
+static int accel_sysfs_init(void)
+{
+       accel_class = class_create(THIS_MODULE, "accel");
+       if (IS_ERR(accel_class))
+               return PTR_ERR(accel_class);
+
+       accel_class->devnode = accel_devnode;
+
+       return 0;
+}
+
+static void accel_sysfs_destroy(void)
+{
+       if (IS_ERR_OR_NULL(accel_class))
+               return;
+       class_destroy(accel_class);
+       accel_class = NULL;
+}
+
+static int accel_stub_open(struct inode *inode, struct file *filp)
+{
+       return -EOPNOTSUPP;
+}
+
+static const struct file_operations accel_stub_fops = {
+       .owner = THIS_MODULE,
+       .open = accel_stub_open,
+       .llseek = noop_llseek,
+};
+
+void accel_core_exit(void)
+{
+       unregister_chrdev(ACCEL_MAJOR, "accel");
+       debugfs_remove(accel_debugfs_root);
+       accel_sysfs_destroy();
+}
+
+int __init accel_core_init(void)
+{
+       int ret;
+
+       ret = accel_sysfs_init();
+       if (ret < 0) {
+               DRM_ERROR("Cannot create ACCEL class: %d\n", ret);
+               goto error;
+       }
+
+       accel_debugfs_root = debugfs_create_dir("accel", NULL);
+
+       ret = register_chrdev(ACCEL_MAJOR, "accel", &accel_stub_fops);
+       if (ret < 0)
+               DRM_ERROR("Cannot register ACCEL major: %d\n", ret);
+
+error:
+       /*
+        * Any cleanup due to errors will be done in drm_core_exit() that
+        * will call accel_core_exit()
+        */
+       return ret;
+}
 
 drm-$(CONFIG_DRM_PRIVACY_SCREEN) += \
        drm_privacy_screen.o \
        drm_privacy_screen_x86.o
+drm-$(CONFIG_DRM_ACCEL) += ../../accel/drm_accel.o
 obj-$(CONFIG_DRM)      += drm.o
 
 obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o
 
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright 2022 HabanaLabs, Ltd.
+ * All Rights Reserved.
+ *
+ */
+
+#ifndef DRM_ACCEL_H_
+#define DRM_ACCEL_H_
+
+#define ACCEL_MAJOR            261
+
+#if IS_ENABLED(CONFIG_DRM_ACCEL)
+
+void accel_core_exit(void);
+int accel_core_init(void);
+
+#else
+
+static inline void accel_core_exit(void)
+{
+}
+
+static inline int __init accel_core_init(void)
+{
+       /* Return 0 to allow drm_core_init to complete successfully */
+       return 0;
+}
+
+#endif /* IS_ENABLED(CONFIG_DRM_ACCEL) */
+
+#endif /* DRM_ACCEL_H_ */