Commit 526da243 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-next-6.15-2025-03-27' of...

Merge tag 'amd-drm-next-6.15-2025-03-27' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-next

amd-drm-next-6.15-2025-03-27:

amdgpu:
- Guard against potential division by 0 in fan code
- Zero RPM support for SMU 14.0.2
- Properly handle SI and CIK support being disabled
- PSR fixes
- DML2 fixes
- DP Link training fix
- Vblank fixes
- RAS fixes
- Partitioning fix
- SDMA fix
- SMU 13.0.x fixes
- Rom fetching fix
- MES fixes
- Queue reset fix

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

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://lore.kernel.org/r/20250328004749.3392457-1-alexander.deucher@amd.com
parents 227bcf2c dce8bd91
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -195,6 +195,10 @@ static bool aca_bank_is_valid(struct aca_handle *handle, struct aca_bank *bank,
{
	const struct aca_bank_ops *bank_ops = handle->bank_ops;

	/* Parse all deferred errors with UMC aca handle */
	if (ACA_BANK_ERR_IS_DEFFERED(bank))
		return handle->hwip == ACA_HWIP_TYPE_UMC;

	if (!aca_bank_hwip_is_matched(bank, handle->hwip))
		return false;

+0 −8
Original line number Diff line number Diff line
@@ -80,14 +80,6 @@ struct ras_query_context;
	(ACA_REG__STATUS__POISON((bank)->regs[ACA_REG_IDX_STATUS]) || \
	 ACA_REG__STATUS__DEFERRED((bank)->regs[ACA_REG_IDX_STATUS]))

#define ACA_BANK_ERR_CE_DE_DECODE(bank)                             \
	(ACA_BANK_ERR_IS_DEFFERED(bank) ? ACA_ERROR_TYPE_DEFERRED : \
					  ACA_ERROR_TYPE_CE)

#define ACA_BANK_ERR_UE_DE_DECODE(bank)                             \
	(ACA_BANK_ERR_IS_DEFFERED(bank) ? ACA_ERROR_TYPE_DEFERRED : \
					  ACA_ERROR_TYPE_UE)

enum aca_reg_idx {
	ACA_REG_IDX_CTL			= 0,
	ACA_REG_IDX_STATUS		= 1,
+27 −7
Original line number Diff line number Diff line
@@ -447,6 +447,13 @@ static bool amdgpu_get_bios_apu(struct amdgpu_device *adev)
	return true;
}

static bool amdgpu_prefer_rom_resource(struct amdgpu_device *adev)
{
	struct resource *res = &adev->pdev->resource[PCI_ROM_RESOURCE];

	return (res->flags & IORESOURCE_ROM_SHADOW);
}

static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
{
	if (amdgpu_atrm_get_bios(adev)) {
@@ -465,6 +472,18 @@ static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
		goto success;
	}

	if (amdgpu_prefer_rom_resource(adev)) {
		if (amdgpu_read_bios(adev)) {
			dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n");
			goto success;
		}

		if (amdgpu_read_platform_bios(adev)) {
			dev_info(adev->dev, "Fetched VBIOS from platform\n");
			goto success;
		}

	} else {
		if (amdgpu_read_platform_bios(adev)) {
			dev_info(adev->dev, "Fetched VBIOS from platform\n");
			goto success;
@@ -474,6 +493,7 @@ static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
			dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n");
			goto success;
		}
	}

	if (amdgpu_read_bios_from_rom(adev)) {
		dev_info(adev->dev, "Fetched VBIOS from ROM\n");
+24 −20
Original line number Diff line number Diff line
@@ -1809,7 +1809,6 @@ static const u16 amdgpu_unsupported_pciidlist[] = {
};

static const struct pci_device_id pciidlist[] = {
#ifdef CONFIG_DRM_AMDGPU_SI
	{0x1002, 0x6780, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI},
	{0x1002, 0x6784, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI},
	{0x1002, 0x6788, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI},
@@ -1882,8 +1881,6 @@ static const struct pci_device_id pciidlist[] = {
	{0x1002, 0x6665, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|AMD_IS_MOBILITY},
	{0x1002, 0x6667, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|AMD_IS_MOBILITY},
	{0x1002, 0x666F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|AMD_IS_MOBILITY},
#endif
#ifdef CONFIG_DRM_AMDGPU_CIK
	/* Kaveri */
	{0x1002, 0x1304, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_KAVERI|AMD_IS_MOBILITY|AMD_IS_APU},
	{0x1002, 0x1305, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_KAVERI|AMD_IS_APU},
@@ -1966,7 +1963,6 @@ static const struct pci_device_id pciidlist[] = {
	{0x1002, 0x985D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|AMD_IS_MOBILITY|AMD_IS_APU},
	{0x1002, 0x985E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|AMD_IS_MOBILITY|AMD_IS_APU},
	{0x1002, 0x985F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|AMD_IS_MOBILITY|AMD_IS_APU},
#endif
	/* topaz */
	{0x1002, 0x6900, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TOPAZ},
	{0x1002, 0x6901, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TOPAZ},
@@ -2313,14 +2309,14 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
		return -ENOTSUPP;
	}

#ifdef CONFIG_DRM_AMDGPU_SI
	if (!amdgpu_si_support) {
	switch (flags & AMD_ASIC_MASK) {
	case CHIP_TAHITI:
	case CHIP_PITCAIRN:
	case CHIP_VERDE:
	case CHIP_OLAND:
	case CHIP_HAINAN:
#ifdef CONFIG_DRM_AMDGPU_SI
		if (!amdgpu_si_support) {
			dev_info(&pdev->dev,
				 "SI support provided by radeon.\n");
			dev_info(&pdev->dev,
@@ -2328,16 +2324,18 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
				);
			return -ENODEV;
		}
	}
		break;
#else
		dev_info(&pdev->dev, "amdgpu is built without SI support.\n");
		return -ENODEV;
#endif
#ifdef CONFIG_DRM_AMDGPU_CIK
	if (!amdgpu_cik_support) {
		switch (flags & AMD_ASIC_MASK) {
	case CHIP_KAVERI:
	case CHIP_BONAIRE:
	case CHIP_HAWAII:
	case CHIP_KABINI:
	case CHIP_MULLINS:
#ifdef CONFIG_DRM_AMDGPU_CIK
		if (!amdgpu_cik_support) {
			dev_info(&pdev->dev,
				 "CIK support provided by radeon.\n");
			dev_info(&pdev->dev,
@@ -2345,8 +2343,14 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
				);
			return -ENODEV;
		}
	}
		break;
#else
		dev_info(&pdev->dev, "amdgpu is built without CIK support.\n");
		return -ENODEV;
#endif
	default:
		break;
	}

	adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
	if (IS_ERR(adev))
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ const char *ras_block_string[] = {
	"jpeg",
	"ih",
	"mpio",
	"mmsch",
};

const char *ras_mca_block_string[] = {
Loading