drm/vc4: txp: Add support for BCM2712 MOP

The BCM2712 has an evolution of what used to be called TXP in the
earlier SoCs, but is now called MOP.

There's a few differences still, so we can add a new compatible to deal
with them easily.

Signed-off-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20241025-drm-vc4-2712-support-v2-20-35efa83c8fc0@raspberrypi.com
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This commit is contained in:
Maxime Ripard 2024-10-25 18:15:51 +01:00 committed by Dave Stevenson
parent 7dc41ea6c0
commit 5aab428cfe

View File

@ -386,6 +386,7 @@ static const struct drm_connector_funcs vc4_txp_connector_funcs = {
static void vc4_txp_encoder_disable(struct drm_encoder *encoder)
{
struct drm_device *drm = encoder->dev;
struct vc4_dev *vc4 = to_vc4_dev(drm);
struct vc4_txp *txp = encoder_to_vc4_txp(encoder);
int idx;
@ -404,7 +405,8 @@ static void vc4_txp_encoder_disable(struct drm_encoder *encoder)
WARN_ON(TXP_READ(TXP_DST_CTRL) & TXP_BUSY);
}
TXP_WRITE(TXP_DST_CTRL, TXP_POWERDOWN);
if (vc4->gen < VC4_GEN_6_C)
TXP_WRITE(TXP_DST_CTRL, TXP_POWERDOWN);
drm_dev_exit(idx);
}
@ -508,6 +510,20 @@ static irqreturn_t vc4_txp_interrupt(int irq, void *data)
return IRQ_HANDLED;
}
static const struct vc4_txp_data bcm2712_mop_data = {
.base = {
.name = "mop",
.debugfs_name = "mop_regs",
.hvs_available_channels = BIT(2),
.hvs_output = 2,
},
.encoder_type = VC4_ENCODER_TYPE_TXP0,
.high_addr_ptr_reg = TXP_DST_PTR_HIGH_MOP,
.has_byte_enable = true,
.size_minus_one = true,
.supports_40bit_addresses = true,
};
const struct vc4_txp_data bcm2835_txp_data = {
.base = {
.name = "txp",
@ -613,6 +629,7 @@ static void vc4_txp_remove(struct platform_device *pdev)
}
static const struct of_device_id vc4_txp_dt_match[] = {
{ .compatible = "brcm,bcm2712-mop", .data = &bcm2712_mop_data },
{ .compatible = "brcm,bcm2835-txp", .data = &bcm2835_txp_data },
{ /* sentinel */ },
};