Commit 49ff3e79 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2024-10-17' of...

Merge tag 'drm-misc-fixes-2024-10-17' of https://gitlab.freedesktop.org/drm/misc/kernel

 into drm-fixes

Short summary of fixes pull:

ast:
- Clear EDID on unplugged connectors

host1x:
- Fix boot on Tegra186
- Set DMA parameters

mgag200:
- Revert VBLANK support

panel:
- himax-hx83192: Adjust power and gamma

qaic:
- Sgtable loop fixes

vmwgfx:
- Limit display layout allocatino size
- Handle allocation errors in connector checks
- Clean up KMS code for 2d-only setup
- Report surface-check errors correctly
- Remove NULL test around kvfree()

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20241017115516.GA196624@linux.fritz.box
parents 7626b4e9 c09c4f2a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -496,7 +496,7 @@ static int encode_addr_size_pairs(struct dma_xfer *xfer, struct wrapper_list *wr
	nents = sgt->nents;
	nents_dma = nents;
	*size = QAIC_MANAGE_EXT_MSG_LENGTH - msg_hdr_len - sizeof(**out_trans);
	for_each_sgtable_sg(sgt, sg, i) {
	for_each_sgtable_dma_sg(sgt, sg, i) {
		*size -= sizeof(*asp);
		/* Save 1K for possible follow-up transactions. */
		if (*size < SZ_1K) {
+3 −3
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
	nents = 0;

	size = size ? size : PAGE_SIZE;
	for (sg = sgt_in->sgl; sg; sg = sg_next(sg)) {
	for_each_sgtable_dma_sg(sgt_in, sg, j) {
		len = sg_dma_len(sg);

		if (!len)
@@ -221,7 +221,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl

	/* copy relevant sg node and fix page and length */
	sgn = sgf;
	for_each_sgtable_sg(sgt, sg, j) {
	for_each_sgtable_dma_sg(sgt, sg, j) {
		memcpy(sg, sgn, sizeof(*sg));
		if (sgn == sgf) {
			sg_dma_address(sg) += offf;
@@ -301,7 +301,7 @@ static int encode_reqs(struct qaic_device *qdev, struct bo_slice *slice,
	 * fence.
	 */
	dev_addr = req->dev_addr;
	for_each_sgtable_sg(slice->sgt, sg, i) {
	for_each_sgtable_dma_sg(slice->sgt, sg, i) {
		slice->reqs[i].cmd = cmd;
		slice->reqs[i].src_addr = cpu_to_le64(slice->dir == DMA_TO_DEVICE ?
						      sg_dma_address(sg) : dev_addr);
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ static int ast_sil164_connector_helper_get_modes(struct drm_connector *connector
	if (ast_connector->physical_status == connector_status_connected) {
		count = drm_connector_helper_get_modes(connector);
	} else {
		drm_edid_connector_update(connector, NULL);

		/*
		 * There's no EDID data without a connected monitor. Set BMC-
		 * compatible modes in this case. The XGA default resolution
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ static int ast_vga_connector_helper_get_modes(struct drm_connector *connector)
	if (ast_connector->physical_status == connector_status_connected) {
		count = drm_connector_helper_get_modes(connector);
	} else {
		drm_edid_connector_update(connector, NULL);

		/*
		 * There's no EDID data without a connected monitor. Set BMC-
		 * compatible modes in this case. The XGA default resolution
+0 −38
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@
#include <drm/drm_managed.h>
#include <drm/drm_module.h>
#include <drm/drm_pciids.h>
#include <drm/drm_vblank.h>

#include "mgag200_drv.h"

@@ -85,34 +84,6 @@ resource_size_t mgag200_probe_vram(void __iomem *mem, resource_size_t size)
	return offset - 65536;
}

static irqreturn_t mgag200_irq_handler(int irq, void *arg)
{
	struct drm_device *dev = arg;
	struct mga_device *mdev = to_mga_device(dev);
	struct drm_crtc *crtc;
	u32 status, ien;

	status = RREG32(MGAREG_STATUS);

	if (status & MGAREG_STATUS_VLINEPEN) {
		ien = RREG32(MGAREG_IEN);
		if (!(ien & MGAREG_IEN_VLINEIEN))
			goto out;

		crtc = drm_crtc_from_index(dev, 0);
		if (WARN_ON_ONCE(!crtc))
			goto out;
		drm_crtc_handle_vblank(crtc);

		WREG32(MGAREG_ICLEAR, MGAREG_ICLEAR_VLINEICLR);

		return IRQ_HANDLED;
	}

out:
	return IRQ_NONE;
}

/*
 * DRM driver
 */
@@ -196,7 +167,6 @@ int mgag200_device_init(struct mga_device *mdev,
			const struct mgag200_device_funcs *funcs)
{
	struct drm_device *dev = &mdev->base;
	struct pci_dev *pdev = to_pci_dev(dev->dev);
	u8 crtcext3, misc;
	int ret;

@@ -223,14 +193,6 @@ int mgag200_device_init(struct mga_device *mdev,
	mutex_unlock(&mdev->rmmio_lock);

	WREG32(MGAREG_IEN, 0);
	WREG32(MGAREG_ICLEAR, MGAREG_ICLEAR_VLINEICLR);

	ret = devm_request_irq(&pdev->dev, pdev->irq, mgag200_irq_handler, IRQF_SHARED,
			       dev->driver->name, dev);
	if (ret) {
		drm_err(dev, "Failed to acquire interrupt, error %d\n", ret);
		return ret;
	}

	return 0;
}
Loading