mirror of
https://abf.rosa.ru/djam/kernel-5.15.git
synced 2025-02-23 10:32:54 +00:00

Information about config values was taken from: From 804820df7bcb3d53a33ecd074b1eac277e938f24 Mon Sep 17 00:00:00 2001 From: Alexey Sheplyakov <asheplyakov@altlinux.org> Date: Thu, 4 Feb 2021 19:35:14 +0400 Subject: [PATCH] config-aarch64: adjusted for Baikal-M (MBM1.0 board) * DW_APB_TIMER=y, DW_APB_TIMER_OF=y: SoC clocks * SERIAL_8250_DW=y: serial console * I2C_DESIGNWARE_CORE=y, I2C_DESIGNWARE_PLATFORM=y: BMC (board management controller) and RTC (Real Time Clock) are connected via I2C. * GPIO_DWAPB=y: device (PCIe, PHY, etc) reset/configuration * RTC_DRV_PCF2127=y: RTC compiled in so the kernel automatically sets the system time from the hardware clock * TP_BMC=y: amongst other things handles the power button * DRM_BAIKAL_VDU=m, DRM_BAIKAL_HDMI=m: video unit and HDMI transmitter * CMA_SIZE_MBYTES=256: video display unit and GPU use system RAM, hence CMA should reserve enough (contiguous) memory. Note: CMA reserves memory during very early init, hence the size has to be hard-coded into CONFIG * MALI_MIDGARD=m: GPU driver, kernel side of proprietary mali blob. Note: kernel mode code is GPLv2, so it's fine to distribute it. * SENSORS_BT1_PVT=m: hardware temperature/voltage sensors * PCI_BAIKAL=m: PCIe root complex. Compiled as a module since takes ages (60 seconds or so) to probe the hardware. If compiled in substantially increases the boot time, and machine is completely unresponsive during probing PCIe. When built as a module probing executes concurrently with other boot activities (unless booting from a PCIe device) * STMMAC_ETH=m, STMMAC_PLATFORM=m, DWMAC_BAIKAL=m: Ethernet driver
548 lines
18 KiB
Diff
548 lines
18 KiB
Diff
From d38a793e0efeb27e49b1ac0bad855f49f840684b Mon Sep 17 00:00:00 2001
|
|
From: Alexey Sheplyakov <asheplyakov@altlinux.org>
|
|
Date: Tue, 16 Mar 2021 12:45:43 +0400
|
|
Subject: [PATCH 625/625] baikal_vdu_drm: (LVDS) panel support
|
|
|
|
---
|
|
drivers/gpu/drm/baikal/Makefile | 2 -
|
|
drivers/gpu/drm/baikal/baikal_vdu_connector.c | 54 ++++++++++++------
|
|
drivers/gpu/drm/baikal/baikal_vdu_crtc.c | 55 ++++++++++++++-----
|
|
drivers/gpu/drm/baikal/baikal_vdu_drm.h | 32 +++--------
|
|
drivers/gpu/drm/baikal/baikal_vdu_drv.c | 42 ++++++++------
|
|
drivers/gpu/drm/baikal/baikal_vdu_encoder.c | 51 -----------------
|
|
drivers/gpu/drm/baikal/baikal_vdu_gem.c | 37 -------------
|
|
drivers/gpu/drm/baikal/baikal_vdu_regs.h | 13 +----
|
|
8 files changed, 113 insertions(+), 173 deletions(-)
|
|
delete mode 100644 drivers/gpu/drm/baikal/baikal_vdu_encoder.c
|
|
delete mode 100644 drivers/gpu/drm/baikal/baikal_vdu_gem.c
|
|
|
|
diff --git a/drivers/gpu/drm/baikal/Makefile b/drivers/gpu/drm/baikal/Makefile
|
|
index 4c3e9e67befb..eb029494e823 100644
|
|
--- a/drivers/gpu/drm/baikal/Makefile
|
|
+++ b/drivers/gpu/drm/baikal/Makefile
|
|
@@ -2,8 +2,6 @@
|
|
baikal_vdu_drm-y += baikal_vdu_connector.o \
|
|
baikal_vdu_crtc.o \
|
|
baikal_vdu_drv.o \
|
|
- baikal_vdu_encoder.o \
|
|
- baikal_vdu_gem.o \
|
|
baikal_vdu_plane.o
|
|
|
|
baikal_vdu_drm-$(CONFIG_DEBUG_FS) += baikal_vdu_debugfs.o
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_connector.c b/drivers/gpu/drm/baikal/baikal_vdu_connector.c
|
|
index ca48e230f174..2f20cf3da627 100644
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_connector.c
|
|
+++ b/drivers/gpu/drm/baikal/baikal_vdu_connector.c
|
|
@@ -34,6 +34,9 @@
|
|
#include "baikal_vdu_drm.h"
|
|
#include "baikal_vdu_regs.h"
|
|
|
|
+#define to_baikal_vdu_private(x) \
|
|
+ container_of(x, struct baikal_vdu_private, connector)
|
|
+
|
|
static void baikal_vdu_drm_connector_destroy(struct drm_connector *connector)
|
|
{
|
|
drm_connector_unregister(connector);
|
|
@@ -43,10 +46,9 @@ static void baikal_vdu_drm_connector_destroy(struct drm_connector *connector)
|
|
static enum drm_connector_status baikal_vdu_drm_connector_detect(
|
|
struct drm_connector *connector, bool force)
|
|
{
|
|
- struct baikal_vdu_drm_connector *vdu_connector =
|
|
- to_baikal_vdu_drm_connector(connector);
|
|
+ struct baikal_vdu_private *priv = to_baikal_vdu_private(connector);
|
|
|
|
- return (vdu_connector->panel ?
|
|
+ return (priv->panel ?
|
|
connector_status_connected :
|
|
connector_status_disconnected);
|
|
}
|
|
@@ -54,24 +56,18 @@ static enum drm_connector_status baikal_vdu_drm_connector_detect(
|
|
static int baikal_vdu_drm_connector_helper_get_modes(
|
|
struct drm_connector *connector)
|
|
{
|
|
- struct baikal_vdu_drm_connector *vdu_connector =
|
|
- to_baikal_vdu_drm_connector(connector);
|
|
+ struct baikal_vdu_private *priv = to_baikal_vdu_private(connector);
|
|
|
|
- if (!vdu_connector) {
|
|
- pr_err("%s: vdu_connector == NULL\n", __func__);
|
|
- return 0;
|
|
- }
|
|
- if (!vdu_connector->panel)
|
|
+ if (!priv->panel)
|
|
return 0;
|
|
|
|
- return drm_panel_get_modes(vdu_connector->panel, connector);
|
|
+ return drm_panel_get_modes(priv->panel, connector);
|
|
}
|
|
|
|
const struct drm_connector_funcs connector_funcs = {
|
|
.fill_modes = drm_helper_probe_single_connector_modes,
|
|
.destroy = baikal_vdu_drm_connector_destroy,
|
|
.detect = baikal_vdu_drm_connector_detect,
|
|
- //.dpms = drm_atomic_helper_connector_dpms, // TODO enable it?
|
|
.reset = drm_atomic_helper_connector_reset,
|
|
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
|
|
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
|
@@ -85,14 +81,38 @@ static const struct drm_encoder_funcs encoder_funcs = {
|
|
.destroy = drm_encoder_cleanup,
|
|
};
|
|
|
|
-int baikal_vdu_connector_create(struct drm_device *dev)
|
|
+int baikal_vdu_lvds_connector_create(struct drm_device *dev)
|
|
{
|
|
struct baikal_vdu_private *priv = dev->dev_private;
|
|
- struct baikal_vdu_drm_connector *vdu_connector = &priv->connector;
|
|
- struct drm_connector *connector = &vdu_connector->connector;
|
|
+ struct drm_connector *connector = &priv->connector;
|
|
+ struct drm_encoder *encoder = &priv->encoder;
|
|
+ int ret = 0;
|
|
|
|
- drm_connector_init(dev, connector, &connector_funcs,
|
|
+ ret = drm_connector_init(dev, connector, &connector_funcs,
|
|
DRM_MODE_CONNECTOR_LVDS);
|
|
+ if (ret) {
|
|
+ dev_err(dev->dev, "drm_connector_init failed: %d\n", ret);
|
|
+ goto out;
|
|
+ }
|
|
drm_connector_helper_add(connector, &connector_helper_funcs);
|
|
- return 0;
|
|
+ ret = drm_encoder_init(dev, encoder, &encoder_funcs,
|
|
+ DRM_MODE_ENCODER_LVDS, NULL);
|
|
+ if (ret) {
|
|
+ dev_err(dev->dev, "drm_encoder_init failed: %d\n", ret);
|
|
+ goto out;
|
|
+ }
|
|
+ encoder->crtc = &priv->crtc;
|
|
+ encoder->possible_crtcs = drm_crtc_mask(encoder->crtc);
|
|
+ ret = drm_connector_attach_encoder(connector, encoder);
|
|
+ if (ret) {
|
|
+ dev_err(dev->dev, "drm_connector_attach_encoder failed: %d\n", ret);
|
|
+ goto out;
|
|
+ }
|
|
+ ret = drm_connector_register(connector);
|
|
+ if (ret) {
|
|
+ dev_err(dev->dev, "drm_connector_register failed: %d\n", ret);
|
|
+ goto out;
|
|
+ }
|
|
+out:
|
|
+ return ret;
|
|
}
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_crtc.c b/drivers/gpu/drm/baikal/baikal_vdu_crtc.c
|
|
index 6ef61791e299..d8bc1182bb77 100644
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_crtc.c
|
|
+++ b/drivers/gpu/drm/baikal/baikal_vdu_crtc.c
|
|
@@ -134,8 +134,13 @@ static void baikal_vdu_crtc_helper_mode_set_nofb(struct drm_crtc *crtc)
|
|
drm_mode_debug_printmodeline(mode);
|
|
|
|
ppl = mode->hdisplay / 16;
|
|
- hsw = mode->hsync_end - mode->hsync_start - 1;
|
|
- hfp = mode->hsync_start - mode->hdisplay;
|
|
+ if (priv->panel) {
|
|
+ hsw = mode->hsync_end - mode->hsync_start;
|
|
+ hfp = mode->hsync_start - mode->hdisplay - 1;
|
|
+ } else {
|
|
+ hsw = mode->hsync_end - mode->hsync_start - 1;
|
|
+ hfp = mode->hsync_start - mode->hdisplay;
|
|
+ }
|
|
hbp = mode->htotal - mode->hsync_end;
|
|
|
|
lpp = mode->vdisplay;
|
|
@@ -188,12 +193,15 @@ static void baikal_vdu_crtc_helper_enable(struct drm_crtc *crtc,
|
|
struct drm_crtc_state *old_state)
|
|
{
|
|
struct baikal_vdu_private *priv = crtc->dev->dev_private;
|
|
- u32 cntl;
|
|
+ struct drm_panel *panel = priv->panel;
|
|
+ struct device_node *panel_node;
|
|
+ const char *data_mapping;
|
|
+ u32 cntl, gpio;
|
|
|
|
DRM_DEV_DEBUG_DRIVER(crtc->dev->dev, "enabling pixel clock\n");
|
|
clk_prepare_enable(priv->clk);
|
|
|
|
- drm_panel_prepare(priv->connector.panel);
|
|
+ drm_panel_prepare(panel);
|
|
|
|
writel(ISCR_VSC_VFP, priv->regs + ISCR);
|
|
|
|
@@ -202,13 +210,37 @@ static void baikal_vdu_crtc_helper_enable(struct drm_crtc *crtc,
|
|
cntl |= PCTR_PCR + PCTR_PCI;
|
|
writel(cntl, priv->regs + PCTR);
|
|
|
|
- /* Set 16-word input FIFO watermark and 24-bit LCD interface mode */
|
|
+ /* Set 16-word input FIFO watermark */
|
|
/* Enable and Power Up */
|
|
cntl = readl(priv->regs + CR1);
|
|
- cntl |= CR1_LCE + CR1_FDW_16_WORDS + CR1_OPS_LCD24;
|
|
+ cntl &= ~CR1_FDW_MASK;
|
|
+ cntl |= CR1_LCE + CR1_FDW_16_WORDS;
|
|
+
|
|
+ if (priv->type == VDU_TYPE_LVDS) {
|
|
+ panel_node = panel->dev->of_node;
|
|
+ if (of_property_read_string(panel_node, "data-mapping", &data_mapping)) {
|
|
+ cntl |= CR1_OPS_LCD18;
|
|
+ } else if (strncmp(data_mapping, "vesa-24", 7))
|
|
+ cntl |= CR1_OPS_LCD24;
|
|
+ else if (strncmp(data_mapping, "jeida-18", 8))
|
|
+ cntl |= CR1_OPS_LCD18;
|
|
+ else {
|
|
+ dev_warn(crtc->dev->dev, "%s data mapping is not supported, vesa-24 is set\n", data_mapping);
|
|
+ cntl |= CR1_OPS_LCD24;
|
|
+ }
|
|
+ gpio = GPIOR_UHD_ENB;
|
|
+ if (priv->ep_count == 4)
|
|
+ gpio |= GPIOR_UHD_QUAD_PORT;
|
|
+ else if (priv->ep_count == 2)
|
|
+ gpio |= GPIOR_UHD_DUAL_PORT;
|
|
+ else
|
|
+ gpio |= GPIOR_UHD_SNGL_PORT;
|
|
+ writel(gpio, priv->regs + GPIOR);
|
|
+ } else
|
|
+ cntl |= CR1_OPS_LCD24;
|
|
writel(cntl, priv->regs + CR1);
|
|
|
|
- drm_panel_enable(priv->connector.panel);
|
|
+ drm_panel_enable(priv->panel);
|
|
drm_crtc_vblank_on(crtc);
|
|
}
|
|
|
|
@@ -217,12 +249,9 @@ void baikal_vdu_crtc_helper_disable(struct drm_crtc *crtc)
|
|
struct baikal_vdu_private *priv = crtc->dev->dev_private;
|
|
|
|
drm_crtc_vblank_off(crtc);
|
|
- drm_panel_disable(priv->connector.panel);
|
|
+ drm_panel_disable(priv->panel);
|
|
|
|
- /* Disable and Power Down */
|
|
- //writel(0, priv->regs + CR1);
|
|
-
|
|
- drm_panel_unprepare(priv->connector.panel);
|
|
+ drm_panel_unprepare(priv->panel);
|
|
|
|
/* Disable clock */
|
|
DRM_DEV_DEBUG_DRIVER(crtc->dev->dev, "disabling pixel clock\n");
|
|
@@ -250,8 +279,6 @@ static int baikal_vdu_enable_vblank(struct drm_crtc *crtc)
|
|
{
|
|
struct baikal_vdu_private *priv = crtc->dev->dev_private;
|
|
|
|
- //clk_prepare_enable(priv->clk);
|
|
-
|
|
/* clear interrupt status */
|
|
writel(0x3ffff, priv->regs + ISR);
|
|
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_drm.h b/drivers/gpu/drm/baikal/baikal_vdu_drm.h
|
|
index 2db3fb73c9e7..9ab6303a4195 100644
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_drm.h
|
|
+++ b/drivers/gpu/drm/baikal/baikal_vdu_drm.h
|
|
@@ -23,22 +23,16 @@
|
|
#include <drm/drm_gem.h>
|
|
#include <drm/drm_simple_kms_helper.h>
|
|
|
|
-struct clk;
|
|
-struct drm_device;
|
|
-struct drm_fbdev_cma;
|
|
-struct drm_panel;
|
|
-
|
|
-struct baikal_vdu_drm_connector {
|
|
- struct drm_connector connector;
|
|
- struct drm_panel *panel;
|
|
-};
|
|
+#define VDU_TYPE_HDMI 0
|
|
+#define VDU_TYPE_LVDS 1
|
|
|
|
struct baikal_vdu_private {
|
|
struct drm_device *drm;
|
|
|
|
- struct baikal_vdu_drm_connector connector;
|
|
+ struct drm_connector connector;
|
|
struct drm_crtc crtc;
|
|
struct drm_encoder encoder;
|
|
+ struct drm_panel *panel;
|
|
struct drm_bridge *bridge;
|
|
struct drm_plane primary;
|
|
|
|
@@ -47,16 +41,12 @@ struct baikal_vdu_private {
|
|
spinlock_t lock;
|
|
u32 counters[20];
|
|
int mode_fixup;
|
|
-
|
|
+ int type;
|
|
+ u32 ep_count;
|
|
u32 fb_addr;
|
|
u32 fb_end;
|
|
};
|
|
|
|
-#define to_baikal_vdu_drm_connector(x) \
|
|
- container_of(x, struct baikal_vdu_drm_connector, connector)
|
|
-
|
|
-extern const struct drm_encoder_funcs baikal_vdu_encoder_funcs;
|
|
-
|
|
/* CRTC Functions */
|
|
int baikal_vdu_crtc_create(struct drm_device *dev);
|
|
irqreturn_t baikal_vdu_irq(int irq, void *data);
|
|
@@ -64,15 +54,7 @@ irqreturn_t baikal_vdu_irq(int irq, void *data);
|
|
int baikal_vdu_primary_plane_init(struct drm_device *dev);
|
|
|
|
/* Connector Functions */
|
|
-int baikal_vdu_connector_create(struct drm_device *dev);
|
|
-
|
|
-/* Encoder Functions */
|
|
-int baikal_vdu_encoder_init(struct drm_device *dev);
|
|
-
|
|
-/* GEM Functions */
|
|
-int baikal_vdu_dumb_create(struct drm_file *file_priv,
|
|
- struct drm_device *dev,
|
|
- struct drm_mode_create_dumb *args);
|
|
+int baikal_vdu_lvds_connector_create(struct drm_device *dev);
|
|
|
|
void baikal_vdu_debugfs_init(struct drm_minor *minor);
|
|
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_drv.c b/drivers/gpu/drm/baikal/baikal_vdu_drv.c
|
|
index 5deab510ea57..8eb9dda7fa01 100644
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_drv.c
|
|
+++ b/drivers/gpu/drm/baikal/baikal_vdu_drv.c
|
|
@@ -23,7 +23,6 @@
|
|
#include <linux/arm-smccc.h>
|
|
#include <linux/irq.h>
|
|
#include <linux/clk.h>
|
|
-#include <linux/version.h>
|
|
#include <linux/shmem_fs.h>
|
|
#include <linux/dma-buf.h>
|
|
#include <linux/module.h>
|
|
@@ -63,6 +62,10 @@ static struct drm_mode_config_funcs mode_config_funcs = {
|
|
.atomic_commit = drm_atomic_helper_commit,
|
|
};
|
|
|
|
+static const struct drm_encoder_funcs baikal_vdu_encoder_funcs = {
|
|
+ .destroy = drm_encoder_cleanup,
|
|
+};
|
|
+
|
|
static int vdu_modeset_init(struct drm_device *dev)
|
|
{
|
|
struct drm_mode_config *mode_config;
|
|
@@ -94,38 +97,35 @@ static int vdu_modeset_init(struct drm_device *dev)
|
|
}
|
|
|
|
ret = drm_of_find_panel_or_bridge(dev->dev->of_node, -1, -1,
|
|
- &priv->connector.panel,
|
|
+ &priv->panel,
|
|
&priv->bridge);
|
|
if (ret == -EPROBE_DEFER) {
|
|
dev_info(dev->dev, "Bridge probe deferred\n");
|
|
goto out_config;
|
|
}
|
|
|
|
- ret = baikal_vdu_encoder_init(dev);
|
|
- if (ret) {
|
|
- dev_err(dev->dev, "Failed to create DRM encoder\n");
|
|
- goto out_config;
|
|
- }
|
|
-
|
|
if (priv->bridge) {
|
|
+ struct drm_encoder *encoder = &priv->encoder;
|
|
+ ret = drm_encoder_init(dev, encoder, &baikal_vdu_encoder_funcs,
|
|
+ DRM_MODE_ENCODER_NONE, NULL);
|
|
+ if (ret) {
|
|
+ dev_err(dev->dev, "failed to create DRM encoder\n");
|
|
+ goto out_config;
|
|
+ }
|
|
+ encoder->crtc = &priv->crtc;
|
|
+ encoder->possible_crtcs = drm_crtc_mask(encoder->crtc);
|
|
priv->bridge->encoder = &priv->encoder;
|
|
ret = drm_bridge_attach(&priv->encoder, priv->bridge, NULL, 0);
|
|
if (ret) {
|
|
dev_err(dev->dev, "Failed to attach DRM bridge %d\n", ret);
|
|
goto out_config;
|
|
}
|
|
- } else if (priv->connector.panel) {
|
|
- ret = baikal_vdu_connector_create(dev);
|
|
+ } else if (priv->panel) {
|
|
+ ret = baikal_vdu_lvds_connector_create(dev);
|
|
if (ret) {
|
|
dev_err(dev->dev, "Failed to create DRM connector\n");
|
|
goto out_config;
|
|
}
|
|
- ret = drm_connector_attach_encoder(&priv->connector.connector,
|
|
- &priv->encoder);
|
|
- if (ret != 0) {
|
|
- dev_err(dev->dev, "Failed to attach encoder\n");
|
|
- goto out_config;
|
|
- }
|
|
} else
|
|
ret = -EINVAL;
|
|
|
|
@@ -194,7 +194,7 @@ static struct drm_driver vdu_drm_driver = {
|
|
.major = 1,
|
|
.minor = 0,
|
|
.patchlevel = 0,
|
|
- .dumb_create = baikal_vdu_dumb_create,
|
|
+ .dumb_create = drm_gem_cma_dumb_create,
|
|
.gem_create_object = drm_gem_cma_create_object_default_funcs,
|
|
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
|
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
|
|
@@ -254,6 +254,14 @@ static int baikal_vdu_drm_probe(struct platform_device *pdev)
|
|
return ret;
|
|
}
|
|
|
|
+ if (pdev->dev.of_node && of_property_read_bool(pdev->dev.of_node, "lvds-out")) {
|
|
+ priv->type = VDU_TYPE_LVDS;
|
|
+ if (of_property_read_u32(pdev->dev.of_node, "num-lanes", &priv->ep_count))
|
|
+ priv->ep_count = 1;
|
|
+ }
|
|
+ else
|
|
+ priv->type = VDU_TYPE_HDMI;
|
|
+
|
|
ret = vdu_modeset_init(drm);
|
|
if (ret != 0) {
|
|
dev_err(dev, "Failed to init modeset\n");
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_encoder.c b/drivers/gpu/drm/baikal/baikal_vdu_encoder.c
|
|
deleted file mode 100644
|
|
index 9081d196dac3..000000000000
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_encoder.c
|
|
+++ /dev/null
|
|
@@ -1,51 +0,0 @@
|
|
-/*
|
|
- * Copyright (C) 2019-2020 Baikal Electronics JSC
|
|
- *
|
|
- * Author: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>
|
|
- *
|
|
- * Parts of this file were based on sources as follows:
|
|
- *
|
|
- * Copyright (c) 2006-2008 Intel Corporation
|
|
- * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
|
|
- * Copyright (C) 2011 Texas Instruments
|
|
- * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
|
|
- *
|
|
- * This program is free software and is provided to you under the terms of the
|
|
- * GNU General Public License version 2 as published by the Free Software
|
|
- * Foundation, and any use by you of this program is subject to the terms of
|
|
- * such GNU licence.
|
|
- *
|
|
- */
|
|
-
|
|
-/**
|
|
- * baikal_vdu_encoder.c
|
|
- * Implementation of the encoder functions for Baikal Electronics BE-M1000 VDU driver
|
|
- */
|
|
-#include <linux/version.h>
|
|
-#include <linux/shmem_fs.h>
|
|
-#include <linux/dma-buf.h>
|
|
-
|
|
-#include <drm/drm_crtc_helper.h>
|
|
-
|
|
-#include "baikal_vdu_drm.h"
|
|
-
|
|
-const struct drm_encoder_funcs baikal_vdu_encoder_funcs = {
|
|
- .destroy = drm_encoder_cleanup,
|
|
-};
|
|
-
|
|
-int baikal_vdu_encoder_init(struct drm_device *dev)
|
|
-{
|
|
- struct baikal_vdu_private *priv = dev->dev_private;
|
|
- struct drm_encoder *encoder = &priv->encoder;
|
|
- int ret;
|
|
-
|
|
- ret = drm_encoder_init(dev, encoder, &baikal_vdu_encoder_funcs,
|
|
- DRM_MODE_ENCODER_NONE, NULL);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- encoder->crtc = &priv->crtc;
|
|
- encoder->possible_crtcs = BIT(drm_crtc_index(encoder->crtc));
|
|
-
|
|
- return 0;
|
|
-}
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_gem.c b/drivers/gpu/drm/baikal/baikal_vdu_gem.c
|
|
deleted file mode 100644
|
|
index b07566caf12c..000000000000
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_gem.c
|
|
+++ /dev/null
|
|
@@ -1,37 +0,0 @@
|
|
-/*
|
|
- * Copyright (C) 2019-2020 Baikal Electronics JSC
|
|
- *
|
|
- * Author: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>
|
|
- *
|
|
- * Parts of this file were based on sources as follows:
|
|
- *
|
|
- * Copyright (c) 2006-2008 Intel Corporation
|
|
- * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
|
|
- * Copyright (C) 2011 Texas Instruments
|
|
- * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
|
|
- *
|
|
- * This program is free software and is provided to you under the terms of the
|
|
- * GNU General Public License version 2 as published by the Free Software
|
|
- * Foundation, and any use by you of this program is subject to the terms of
|
|
- * such GNU licence.
|
|
- *
|
|
- */
|
|
-
|
|
-/**
|
|
- * baikal_vdu_gem.c
|
|
- * Implementation of the GEM functions for Baikal Electronics BE-M1000 VDU driver
|
|
- */
|
|
-#include <linux/version.h>
|
|
-#include <linux/shmem_fs.h>
|
|
-#include <linux/dma-buf.h>
|
|
-#include <drm/drm_crtc_helper.h>
|
|
-#include <drm/drm_gem_cma_helper.h>
|
|
-#include "baikal_vdu_drm.h"
|
|
-
|
|
-int baikal_vdu_dumb_create(struct drm_file *file_priv,
|
|
- struct drm_device *dev, struct drm_mode_create_dumb *args)
|
|
-{
|
|
- args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
|
|
-
|
|
- return drm_gem_cma_dumb_create_internal(file_priv, dev, args);
|
|
-}
|
|
diff --git a/drivers/gpu/drm/baikal/baikal_vdu_regs.h b/drivers/gpu/drm/baikal/baikal_vdu_regs.h
|
|
index a0d8e69eb5e6..5553fcac5fec 100644
|
|
--- a/drivers/gpu/drm/baikal/baikal_vdu_regs.h
|
|
+++ b/drivers/gpu/drm/baikal/baikal_vdu_regs.h
|
|
@@ -1,5 +1,6 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
- * Copyright (C) 2019-2020 Baikal Electronics JSC
|
|
+ * Copyright (C) 2019-2021 Baikal Electronics JSC
|
|
*
|
|
* Author: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>
|
|
*
|
|
@@ -7,10 +8,6 @@
|
|
*
|
|
* David A Rusling
|
|
* Copyright (C) 2001 ARM Limited
|
|
- *
|
|
- * This file is subject to the terms and conditions of the GNU General Public
|
|
- * License. See the file COPYING in the main directory of this archive
|
|
- * for more details.
|
|
*/
|
|
|
|
#ifndef __BAIKAL_VDU_REGS_H__
|
|
@@ -50,6 +47,7 @@
|
|
#define INTR_FER BIT(4)
|
|
|
|
#define CR1_FBP BIT(19)
|
|
+#define CR1_FDW_MASK GENMASK(17, 16)
|
|
#define CR1_FDW_4_WORDS (0 << 16)
|
|
#define CR1_FDW_8_WORDS (1 << 16)
|
|
#define CR1_FDW_16_WORDS (2 << 16)
|
|
@@ -129,15 +127,10 @@
|
|
#define HPPLOR_HPPLO(x) ((x) << 0)
|
|
|
|
#define GPIOR_UHD_MASK GENMASK(23, 16)
|
|
-#define GPIOR_UHD_FMT_LDI (0 << 20)
|
|
-#define GPIOR_UHD_FMT_VESA (1 << 20)
|
|
-#define GPIOR_UHD_FMT_JEIDA (2 << 20)
|
|
#define GPIOR_UHD_SNGL_PORT (0 << 18)
|
|
#define GPIOR_UHD_DUAL_PORT (1 << 18)
|
|
#define GPIOR_UHD_QUAD_PORT (2 << 18)
|
|
#define GPIOR_UHD_ENB BIT(17)
|
|
-#define GPIOR_UHD_PIX_INTLV (0 << 16)
|
|
-#define GPIOR_UHD_PIX_SQNTL (1 << 16)
|
|
|
|
#define MRR_DEAR_MRR_MASK GENMASK(31, 3)
|
|
#define MRR_OUTSTND_RQ_MASK GENMASK(2, 0)
|
|
--
|
|
2.31.1
|
|
|