Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c59224d1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
 "Not a huge amount happening, some MAINTAINERS updates, radeon, vmwgfx
  and tegra fixes"

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/vmwgfx: avoid null pointer dereference at failure paths
  drm/vmwgfx: Make sure backing mobs are cleared when allocated. Update driver date.
  drm/vmwgfx: Remove some unused surface formats
  drm/radeon: enable speaker allocation setup on dce3.2
  drm/radeon: change audio enable logic
  drm/radeon: fix audio disable on dce6+
  drm/radeon: free uvd ring on unload
  drm/radeon: disable pll sharing for DP on DCE4.1
  drm/radeon: fix missing bo reservation
  drm/radeon: print the supported atpx function mask
  MAINTAINERS: update drm git tree entry
  MAINTAINERS: add entry for drm radeon driver
  drm/tegra: Add guard to avoid double disable/enable of RGB outputs
  gpu: host1x: do not check previously handled gathers
  drm/tegra: fix typo 'CONFIG_TEGRA_DRM_FBDEV'
parents a53c8ceb d668ca1c
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -2848,12 +2848,22 @@ F: lib/kobj*
DRM DRIVERS
DRM DRIVERS
M:	David Airlie <airlied@linux.ie>
M:	David Airlie <airlied@linux.ie>
L:	dri-devel@lists.freedesktop.org
L:	dri-devel@lists.freedesktop.org
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
T:	git git://people.freedesktop.org/~airlied/linux
S:	Maintained
S:	Maintained
F:	drivers/gpu/drm/
F:	drivers/gpu/drm/
F:	include/drm/
F:	include/drm/
F:	include/uapi/drm/
F:	include/uapi/drm/


RADEON DRM DRIVERS
M:	Alex Deucher <alexander.deucher@amd.com>
M:	Christian König <christian.koenig@amd.com>
L:	dri-devel@lists.freedesktop.org
T:	git git://people.freedesktop.org/~agd5f/linux
S:	Supported
F:	drivers/gpu/drm/radeon/
F:	include/drm/radeon*
F:	include/uapi/drm/radeon*

INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
M:	Daniel Vetter <daniel.vetter@ffwll.ch>
M:	Daniel Vetter <daniel.vetter@ffwll.ch>
M:	Jani Nikula <jani.nikula@linux.intel.com>
M:	Jani Nikula <jani.nikula@linux.intel.com>
+15 −1
Original line number Original line Diff line number Diff line
@@ -1774,6 +1774,20 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
			return ATOM_PPLL1;
			return ATOM_PPLL1;
		DRM_ERROR("unable to allocate a PPLL\n");
		DRM_ERROR("unable to allocate a PPLL\n");
		return ATOM_PPLL_INVALID;
		return ATOM_PPLL_INVALID;
	} else if (ASIC_IS_DCE41(rdev)) {
		/* Don't share PLLs on DCE4.1 chips */
		if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(radeon_crtc->encoder))) {
			if (rdev->clock.dp_extclk)
				/* skip PPLL programming if using ext clock */
				return ATOM_PPLL_INVALID;
		}
		pll_in_use = radeon_get_pll_use_mask(crtc);
		if (!(pll_in_use & (1 << ATOM_PPLL1)))
			return ATOM_PPLL1;
		if (!(pll_in_use & (1 << ATOM_PPLL2)))
			return ATOM_PPLL2;
		DRM_ERROR("unable to allocate a PPLL\n");
		return ATOM_PPLL_INVALID;
	} else if (ASIC_IS_DCE4(rdev)) {
	} else if (ASIC_IS_DCE4(rdev)) {
		/* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock,
		/* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock,
		 * depending on the asic:
		 * depending on the asic:
@@ -1801,7 +1815,7 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
				if (pll != ATOM_PPLL_INVALID)
				if (pll != ATOM_PPLL_INVALID)
					return pll;
					return pll;
			}
			}
		} else if (!ASIC_IS_DCE41(rdev)) { /* Don't share PLLs on DCE4.1 chips */
		} else {
			/* use the same PPLL for all monitors with the same clock */
			/* use the same PPLL for all monitors with the same clock */
			pll = radeon_get_shared_nondp_ppll(crtc);
			pll = radeon_get_shared_nondp_ppll(crtc);
			if (pll != ATOM_PPLL_INVALID)
			if (pll != ATOM_PPLL_INVALID)
+9 −6
Original line number Original line Diff line number Diff line
@@ -278,13 +278,15 @@ static int dce6_audio_chipset_supported(struct radeon_device *rdev)
	return !ASIC_IS_NODCE(rdev);
	return !ASIC_IS_NODCE(rdev);
}
}


static void dce6_audio_enable(struct radeon_device *rdev,
void dce6_audio_enable(struct radeon_device *rdev,
		       struct r600_audio_pin *pin,
		       struct r600_audio_pin *pin,
		       bool enable)
		       bool enable)
{
{
	if (!pin)
		return;

	WREG32_ENDPOINT(pin->offset, AZ_F0_CODEC_PIN_CONTROL_HOTPLUG_CONTROL,
	WREG32_ENDPOINT(pin->offset, AZ_F0_CODEC_PIN_CONTROL_HOTPLUG_CONTROL,
			AUDIO_ENABLED);
			enable ? AUDIO_ENABLED : 0);
	DRM_INFO("%s audio %d support\n", enable ? "Enabling" : "Disabling", pin->id);
}
}


static const u32 pin_offsets[7] =
static const u32 pin_offsets[7] =
@@ -323,7 +325,8 @@ int dce6_audio_init(struct radeon_device *rdev)
		rdev->audio.pin[i].connected = false;
		rdev->audio.pin[i].connected = false;
		rdev->audio.pin[i].offset = pin_offsets[i];
		rdev->audio.pin[i].offset = pin_offsets[i];
		rdev->audio.pin[i].id = i;
		rdev->audio.pin[i].id = i;
		dce6_audio_enable(rdev, &rdev->audio.pin[i], true);
		/* disable audio.  it will be set up later */
		dce6_audio_enable(rdev, &rdev->audio.pin[i], false);
	}
	}


	return 0;
	return 0;
+1 −1
Original line number Original line Diff line number Diff line
@@ -5475,9 +5475,9 @@ void evergreen_fini(struct radeon_device *rdev)
	radeon_wb_fini(rdev);
	radeon_wb_fini(rdev);
	radeon_ib_pool_fini(rdev);
	radeon_ib_pool_fini(rdev);
	radeon_irq_kms_fini(rdev);
	radeon_irq_kms_fini(rdev);
	evergreen_pcie_gart_fini(rdev);
	uvd_v1_0_fini(rdev);
	uvd_v1_0_fini(rdev);
	radeon_uvd_fini(rdev);
	radeon_uvd_fini(rdev);
	evergreen_pcie_gart_fini(rdev);
	r600_vram_scratch_fini(rdev);
	r600_vram_scratch_fini(rdev);
	radeon_gem_fini(rdev);
	radeon_gem_fini(rdev);
	radeon_fence_driver_fini(rdev);
	radeon_fence_driver_fini(rdev);
+15 −11
Original line number Original line Diff line number Diff line
@@ -306,6 +306,15 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode
		return;
		return;
	offset = dig->afmt->offset;
	offset = dig->afmt->offset;


	/* disable audio prior to setting up hw */
	if (ASIC_IS_DCE6(rdev)) {
		dig->afmt->pin = dce6_audio_get_pin(rdev);
		dce6_audio_enable(rdev, dig->afmt->pin, false);
	} else {
		dig->afmt->pin = r600_audio_get_pin(rdev);
		r600_audio_enable(rdev, dig->afmt->pin, false);
	}

	evergreen_audio_set_dto(encoder, mode->clock);
	evergreen_audio_set_dto(encoder, mode->clock);


	WREG32(HDMI_VBI_PACKET_CONTROL + offset,
	WREG32(HDMI_VBI_PACKET_CONTROL + offset,
@@ -409,12 +418,16 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode
	WREG32(AFMT_RAMP_CONTROL1 + offset, 0x007FFFFF);
	WREG32(AFMT_RAMP_CONTROL1 + offset, 0x007FFFFF);
	WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001);
	WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001);
	WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001);
	WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001);

	/* enable audio after to setting up hw */
	if (ASIC_IS_DCE6(rdev))
		dce6_audio_enable(rdev, dig->afmt->pin, true);
	else
		r600_audio_enable(rdev, dig->afmt->pin, true);
}
}


void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
{
{
	struct drm_device *dev = encoder->dev;
	struct radeon_device *rdev = dev->dev_private;
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
	struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
	struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;


@@ -427,15 +440,6 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
	if (!enable && !dig->afmt->enabled)
	if (!enable && !dig->afmt->enabled)
		return;
		return;


	if (enable) {
		if (ASIC_IS_DCE6(rdev))
			dig->afmt->pin = dce6_audio_get_pin(rdev);
		else
			dig->afmt->pin = r600_audio_get_pin(rdev);
	} else {
		dig->afmt->pin = NULL;
	}

	dig->afmt->enabled = enable;
	dig->afmt->enabled = enable;


	DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n",
	DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n",
Loading