From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D8112CD4851 for ; Wed, 13 May 2026 16:30:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 669A510EF4C; Wed, 13 May 2026 16:30:55 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="rrqLDStX"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id D24AD10EF70 for ; Wed, 13 May 2026 16:30:53 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-488ff90d6c7so62595855e9.2 for ; Wed, 13 May 2026 09:30:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778689852; x=1779294652; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xJu6SMu1v5icLTZuoKFGCejvwnBt1QXyQY4jbQr6tKI=; b=rrqLDStXNikRXHoiFOeGssA0PyjXO/JY3ikdKVvrlFmN5YwbBywIYbEGta3vgsVDAC iaPOFm0ATkvuKA2RJUZSVwlKWV6DLqPQP6y3bSFz8qD70AgsQ9hvizwBix540a14oO9u vc6y7ZlmstlhqbP06b6grD3vWDCrHYSmEfv02Fx8MgWIpWfv9OCFnumCd14BjW3oPvs3 XUW89Y0LKUbMAuAnmnHqeLHRBoNJeiORrKTtV0czExmsboHjkqA1elINO/865DsInvQ8 IPTjBJvyYM54XdqmxS75q603Hcaf7LDjG2L238A+xX1sdLvYthejqaqBBMDKBJ4G9vVy Ornw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778689852; x=1779294652; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=xJu6SMu1v5icLTZuoKFGCejvwnBt1QXyQY4jbQr6tKI=; b=iqPS6EjVPEtoaw/so+sxmsD3iWc3DLiHne2iFE8H0ApgOV67xcn12k5QfV1l4outYQ LpTfXjJ4ZopOMlIyFlFCtEaXIK0bk+AH3KIECQxwBNjqRtxODGK2lIAPwLiFSLOU9wux USSB8NRNe0bbulEhuzg94Wja1q3N5gVF2byzj2UYZpaQHRtwc4k/zHITBmsElPOLIkQn 4GgN+/SkBJWInaS407lfltQf/r3YGiC0dd55jvoRSBJ8xYotWDl/0mdYlWYABsU11/kl K/bV8zJq3ZXSmjE4CQCPJQsbS5/mACk+63/pKHuYbtFq1JS3vRZmpjK99YW/K4DqlrOd XUGA== X-Gm-Message-State: AOJu0YzO42VuAfOh89v1GVXG+TkmIXGwT6ITHl18EpqDUKhVjC78aYz/ 7XItY3nHBgnMcopc8K13AXkhnAXzKEIwW4HD+/GMZz1ywJIpfKQvRzgN2XmQ5Q== X-Gm-Gg: Acq92OEfA9B/8fdfaQUsyedI8aE/+ksiGjKzzaLoZSf8O7QepxwkmOYSRhwrM7LfxWU ZATYYoTLZ6RFUzHIJm8el7/gVJk5R16/2UL9Vxjk/JxOzwGzo0t5tNfcGvcPlI4cI9zLPh+bNrB JanuNVEH+dB0yNA7JAMUdW4Hl4EhE38fT2STWLsPOWB++vmEE47/0jsL/Jv7ehuUZNWVVIPXeRP rF1JU+lWEi/hzPNjVCoyIxfKccXGFTGi/A/h45NfauwUS9IxFI+tuIYxI5xC/BFDq2fXMzXWFEc 6tDBit+ncZfTDiB0MmoeVmYKlry3+fvPCJv0qJcpGsxDK8Mb5wrGEl9C67H86iIS8BR4PgpIHFm zF57KISyRGbJq7GlobQtJX0E1C7f//vtM3cQMrqwuNqclTO0KtliZ9eVL6pKuIiAVuxYROGgaxe +crcli51HfZFWoPfSzRiAeDy8j6YY5JEwgkfMuGzQ388ITNUeHH9dQFd/qxqsSxtgWK1FT X-Received: by 2002:a05:600c:4509:b0:48a:5821:5ffc with SMTP id 5b1f17b1804b1-48fce9b5ac4mr54741715e9.2.1778689852216; Wed, 13 May 2026 09:30:52 -0700 (PDT) Received: from Timur-Hyperion (540017BE.dsl.pool.telekom.hu. [84.0.23.190]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fd64b5271sm1846385e9.14.2026.05.13.09.30.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 09:30:51 -0700 (PDT) From: =?UTF-8?q?Timur=20Krist=C3=B3f?= To: amd-gfx@lists.freedesktop.org, Alex Deucher , christian.koenig@amd.com, =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= , Natalie Vock , Melissa Wen Cc: =?UTF-8?q?Timur=20Krist=C3=B3f?= Subject: [PATCH 6/6] drm/amdgpu: Enable retry CAM on Navi 3 dGPUs Date: Wed, 13 May 2026 18:30:43 +0200 Message-ID: <20260513163043.8725-7-timur.kristof@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260513163043.8725-1-timur.kristof@gmail.com> References: <20260513163043.8725-1-timur.kristof@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" The retry CAM can filter interrupts which occur repeatedly, such as page fault interrupts when retry faults are enabled. This makes processing those interrupts much more efficient, because the CPU won't have to deal with processing the same interrupt repeatedly. Signed-off-by: Timur Kristóf --- drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 5 ++++- drivers/gpu/drm/amd/amdgpu/ih_v6_0.c | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c index 16388e3caea3..2a226b4c9e09 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c @@ -108,13 +108,16 @@ static int gmc_v11_0_process_interrupt(struct amdgpu_device *adev, bool write_fault = !!(entry->src_data[1] & AMDGPU_GMC9_FAULT_SOURCE_DATA_WRITE); uint32_t status = 0; + uint32_t cam_index; u64 addr; addr = (u64)entry->src_data[0] << 12; addr |= ((u64)entry->src_data[1] & 0xf) << 44; if (retry_fault) { - int ret = amdgpu_gmc_handle_retry_fault(adev, entry, addr, 0, 0, + cam_index = entry->src_data[2] & 0x3ff; + + int ret = amdgpu_gmc_handle_retry_fault(adev, entry, addr, cam_index, 0, write_fault); /* Returning 1 here also prevents sending the IV to the KFD */ if (ret == 1) diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c index 333e9c30c091..0a87c3126d1e 100644 --- a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c @@ -307,6 +307,11 @@ static int ih_v6_0_enable_ring(struct amdgpu_device *adev, return 0; } +static void ih_v6_0_retry_cam_ack(struct amdgpu_device *adev, u32 cam_index) +{ + WREG32_SOC15(OSSSYS, 0, regIH_RETRY_CAM_ACK, cam_index); +} + /** * ih_v6_0_irq_init - init and enable the interrupt ring * @@ -392,6 +397,16 @@ static int ih_v6_0_irq_init(struct amdgpu_device *adev) pci_set_master(adev->pdev); + if (!(adev->flags & AMD_IS_APU)) { + /* Enable IH Retry CAM */ + tmp = RREG32_SOC15(OSSSYS, 0, regIH_RETRY_INT_CAM_CNTL); + tmp = REG_SET_FIELD(tmp, IH_RETRY_INT_CAM_CNTL, ENABLE, 1); + tmp = REG_SET_FIELD(tmp, IH_RETRY_INT_CAM_CNTL, CAM_SIZE, 0xF); + WREG32_SOC15(OSSSYS, 0, regIH_RETRY_INT_CAM_CNTL, tmp); + + adev->irq.retry_cam_enabled = true; + } + /* enable interrupts */ ret = ih_v6_0_toggle_interrupts(adev, true); if (ret) @@ -800,7 +815,8 @@ static const struct amdgpu_ih_funcs ih_v6_0_funcs = { .get_wptr = ih_v6_0_get_wptr, .decode_iv = amdgpu_ih_decode_iv_helper, .decode_iv_ts = amdgpu_ih_decode_iv_ts_helper, - .set_rptr = ih_v6_0_set_rptr + .set_rptr = ih_v6_0_set_rptr, + .retry_cam_ack = ih_v6_0_retry_cam_ack, }; static void ih_v6_0_set_interrupt_funcs(struct amdgpu_device *adev) -- 2.54.0