mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 18:39:59 +00:00
Renesas DRM/KMS drivers:
- Group drivers in renesas subdirectory to prepare for new platform - Drop deprecated R-Car H3 ES1.x support -----BEGIN PGP SIGNATURE----- iJgEABYKAEAWIQTAnvhxs4J7QT+XHKnMPy2AAyfeZAUCZHTLBCIcbGF1cmVudC5w aW5jaGFydEBpZGVhc29uYm9hcmQuY29tAAoJEMw/LYADJ95kCXwA/38vhjJ86Yx9 dZy4Asay1gOIq/C43PSMqQxh1V7hTPvrAQCM0CN2AA/iqjBthYdzz20Usk31xeN+ BaAGl+J61H+jAg== =CC+6 -----END PGP SIGNATURE----- Merge tag 'drm-next-20230529' of git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux into drm-next Renesas DRM/KMS drivers: - Group drivers in renesas subdirectory to prepare for new platform - Drop deprecated R-Car H3 ES1.x support Signed-off-by: Dave Airlie <airlied@redhat.com> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230602111504.GA24855@pendragon.ideasonboard.com
This commit is contained in:
commit
c9b685df2d
48 changed files with 15 additions and 93 deletions
|
@ -6981,8 +6981,7 @@ F: Documentation/devicetree/bindings/display/bridge/renesas,dsi-csi2-tx.yaml
|
|||
F: Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.yaml
|
||||
F: Documentation/devicetree/bindings/display/bridge/renesas,lvds.yaml
|
||||
F: Documentation/devicetree/bindings/display/renesas,du.yaml
|
||||
F: drivers/gpu/drm/rcar-du/
|
||||
F: drivers/gpu/drm/shmobile/
|
||||
F: drivers/gpu/drm/renesas/
|
||||
F: include/linux/platform_data/shmob_drm.h
|
||||
|
||||
DRM DRIVERS FOR ROCKCHIP
|
||||
|
|
|
@ -289,9 +289,7 @@ source "drivers/gpu/drm/armada/Kconfig"
|
|||
|
||||
source "drivers/gpu/drm/atmel-hlcdc/Kconfig"
|
||||
|
||||
source "drivers/gpu/drm/rcar-du/Kconfig"
|
||||
|
||||
source "drivers/gpu/drm/shmobile/Kconfig"
|
||||
source "drivers/gpu/drm/renesas/Kconfig"
|
||||
|
||||
source "drivers/gpu/drm/sun4i/Kconfig"
|
||||
|
||||
|
|
|
@ -156,8 +156,7 @@ obj-$(CONFIG_DRM_UDL) += udl/
|
|||
obj-$(CONFIG_DRM_AST) += ast/
|
||||
obj-$(CONFIG_DRM_ARMADA) += armada/
|
||||
obj-$(CONFIG_DRM_ATMEL_HLCDC) += atmel-hlcdc/
|
||||
obj-y += rcar-du/
|
||||
obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/
|
||||
obj-y += renesas/
|
||||
obj-y += omapdrm/
|
||||
obj-$(CONFIG_DRM_SUN4I) += sun4i/
|
||||
obj-y += tilcdc/
|
||||
|
|
4
drivers/gpu/drm/renesas/Kconfig
Normal file
4
drivers/gpu/drm/renesas/Kconfig
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
source "drivers/gpu/drm/renesas/rcar-du/Kconfig"
|
||||
source "drivers/gpu/drm/renesas/shmobile/Kconfig"
|
4
drivers/gpu/drm/renesas/Makefile
Normal file
4
drivers/gpu/drm/renesas/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
obj-y += rcar-du/
|
||||
obj-$(CONFIG_DRM_SHMOBILE) += shmobile/
|
|
@ -223,20 +223,6 @@ static void rcar_du_crtc_set_display_timing(struct rcar_du_crtc *rcrtc)
|
|||
* DU channels that have a display PLL can't use the internal
|
||||
* system clock, and have no internal clock divider.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The H3 ES1.x exhibits dot clock duty cycle stability issues.
|
||||
* We can work around them by configuring the DPLL to twice the
|
||||
* desired frequency, coupled with a /2 post-divider. Restrict
|
||||
* the workaround to H3 ES1.x as ES2.0 and all other SoCs have
|
||||
* no post-divider when a display PLL is present (as shown by
|
||||
* the workaround breaking HDMI output on M3-W during testing).
|
||||
*/
|
||||
if (rcdu->info->quirks & RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY) {
|
||||
target *= 2;
|
||||
div = 1;
|
||||
}
|
||||
|
||||
extclk = clk_get_rate(rcrtc->extclock);
|
||||
rcar_du_dpll_divider(rcrtc, &dpll, extclk, target);
|
||||
|
||||
|
@ -245,30 +231,13 @@ static void rcar_du_crtc_set_display_timing(struct rcar_du_crtc *rcrtc)
|
|||
| DPLLCR_N(dpll.n) | DPLLCR_M(dpll.m)
|
||||
| DPLLCR_STBY;
|
||||
|
||||
if (rcrtc->index == 1) {
|
||||
if (rcrtc->index == 1)
|
||||
dpllcr |= DPLLCR_PLCS1
|
||||
| DPLLCR_INCS_DOTCLKIN1;
|
||||
} else {
|
||||
dpllcr |= DPLLCR_PLCS0_PLL
|
||||
else
|
||||
dpllcr |= DPLLCR_PLCS0
|
||||
| DPLLCR_INCS_DOTCLKIN0;
|
||||
|
||||
/*
|
||||
* On ES2.x we have a single mux controlled via bit 21,
|
||||
* which selects between DCLKIN source (bit 21 = 0) and
|
||||
* a PLL source (bit 21 = 1), where the PLL is always
|
||||
* PLL1.
|
||||
*
|
||||
* On ES1.x we have an additional mux, controlled
|
||||
* via bit 20, for choosing between PLL0 (bit 20 = 0)
|
||||
* and PLL1 (bit 20 = 1). We always want to use PLL1,
|
||||
* so on ES1.x, in addition to setting bit 21, we need
|
||||
* to set the bit 20.
|
||||
*/
|
||||
|
||||
if (rcdu->info->quirks & RCAR_DU_QUIRK_H3_ES1_PLL)
|
||||
dpllcr |= DPLLCR_PLCS0_H3ES1X_PLL1;
|
||||
}
|
||||
|
||||
rcar_du_group_write(rcrtc->group, DPLLCR, dpllcr);
|
||||
|
||||
escr = ESCR_DCLKSEL_DCLKIN | div;
|
|
@ -16,7 +16,6 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sys_soc.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
|
@ -387,43 +386,6 @@ static const struct rcar_du_device_info rcar_du_r8a7795_info = {
|
|||
.dpll_mask = BIT(2) | BIT(1),
|
||||
};
|
||||
|
||||
static const struct rcar_du_device_info rcar_du_r8a7795_es1_info = {
|
||||
.gen = 3,
|
||||
.features = RCAR_DU_FEATURE_CRTC_IRQ
|
||||
| RCAR_DU_FEATURE_CRTC_CLOCK
|
||||
| RCAR_DU_FEATURE_VSP1_SOURCE
|
||||
| RCAR_DU_FEATURE_INTERLACED
|
||||
| RCAR_DU_FEATURE_TVM_SYNC,
|
||||
.quirks = RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY
|
||||
| RCAR_DU_QUIRK_H3_ES1_PLL,
|
||||
.channels_mask = BIT(3) | BIT(2) | BIT(1) | BIT(0),
|
||||
.routes = {
|
||||
/*
|
||||
* R8A7795 has one RGB output, two HDMI outputs and one
|
||||
* LVDS output.
|
||||
*/
|
||||
[RCAR_DU_OUTPUT_DPAD0] = {
|
||||
.possible_crtcs = BIT(3),
|
||||
.port = 0,
|
||||
},
|
||||
[RCAR_DU_OUTPUT_HDMI0] = {
|
||||
.possible_crtcs = BIT(1),
|
||||
.port = 1,
|
||||
},
|
||||
[RCAR_DU_OUTPUT_HDMI1] = {
|
||||
.possible_crtcs = BIT(2),
|
||||
.port = 2,
|
||||
},
|
||||
[RCAR_DU_OUTPUT_LVDS0] = {
|
||||
.possible_crtcs = BIT(0),
|
||||
.port = 3,
|
||||
},
|
||||
},
|
||||
.num_lvds = 1,
|
||||
.num_rpf = 5,
|
||||
.dpll_mask = BIT(2) | BIT(1),
|
||||
};
|
||||
|
||||
static const struct rcar_du_device_info rcar_du_r8a7796_info = {
|
||||
.gen = 3,
|
||||
.features = RCAR_DU_FEATURE_CRTC_IRQ
|
||||
|
@ -614,11 +576,6 @@ static const struct of_device_id rcar_du_of_table[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE(of, rcar_du_of_table);
|
||||
|
||||
static const struct soc_device_attribute rcar_du_soc_table[] = {
|
||||
{ .soc_id = "r8a7795", .revision = "ES1.*", .data = &rcar_du_r8a7795_es1_info },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
const char *rcar_du_output_name(enum rcar_du_output output)
|
||||
{
|
||||
static const char * const names[] = {
|
||||
|
@ -707,7 +664,6 @@ static void rcar_du_shutdown(struct platform_device *pdev)
|
|||
|
||||
static int rcar_du_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct soc_device_attribute *soc_attr;
|
||||
struct rcar_du_device *rcdu;
|
||||
unsigned int mask;
|
||||
int ret;
|
||||
|
@ -725,10 +681,6 @@ static int rcar_du_probe(struct platform_device *pdev)
|
|||
|
||||
rcdu->info = of_device_get_match_data(rcdu->dev);
|
||||
|
||||
soc_attr = soc_device_match(rcar_du_soc_table);
|
||||
if (soc_attr)
|
||||
rcdu->info = soc_attr->data;
|
||||
|
||||
platform_set_drvdata(pdev, rcdu);
|
||||
|
||||
/* I/O resources */
|
|
@ -34,8 +34,6 @@ struct rcar_du_device;
|
|||
#define RCAR_DU_FEATURE_NO_BLENDING BIT(5) /* PnMR.SPIM does not have ALP nor EOR bits */
|
||||
|
||||
#define RCAR_DU_QUIRK_ALIGN_128B BIT(0) /* Align pitches to 128 bytes */
|
||||
#define RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY BIT(1) /* H3 ES1 has pclk stability issue */
|
||||
#define RCAR_DU_QUIRK_H3_ES1_PLL BIT(2) /* H3 ES1 PLL setup differs from non-ES1 */
|
||||
|
||||
enum rcar_du_output {
|
||||
RCAR_DU_OUTPUT_DPAD0,
|
|
@ -283,8 +283,7 @@
|
|||
#define DPLLCR 0x20044
|
||||
#define DPLLCR_CODE (0x95 << 24)
|
||||
#define DPLLCR_PLCS1 (1 << 23)
|
||||
#define DPLLCR_PLCS0_PLL (1 << 21)
|
||||
#define DPLLCR_PLCS0_H3ES1X_PLL1 (1 << 20)
|
||||
#define DPLLCR_PLCS0 (1 << 21)
|
||||
#define DPLLCR_CLKE (1 << 18)
|
||||
#define DPLLCR_FDPLL(n) ((n) << 12)
|
||||
#define DPLLCR_N(n) ((n) << 5)
|
Loading…
Reference in a new issue