linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Paul Menzel <pmenzel@molgen.mpg.de>, Tj <ml.linux@elloe.vision>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Alexander Monakov <amonakov@ispras.ru>,
	David Coe <david.coe@live.co.uk>,
	Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
	Joerg Roedel <jroedel@suse.de>, Sasha Levin <sashal@kernel.org>,
	iommu@lists.linux-foundation.org
Subject: [PATCH AUTOSEL 5.10 50/85] Revert "iommu/amd: Fix performance counter initialization"
Date: Wed,  5 May 2021 12:36:13 -0400	[thread overview]
Message-ID: <20210505163648.3462507-50-sashal@kernel.org> (raw)
In-Reply-To: <20210505163648.3462507-1-sashal@kernel.org>

From: Paul Menzel <pmenzel@molgen.mpg.de>

[ Upstream commit 715601e4e36903a653cd4294dfd3ed0019101991 ]

This reverts commit 6778ff5b21bd8e78c8bd547fd66437cf2657fd9b.

The original commit tries to address an issue, where PMC power-gating
causing the IOMMU PMC pre-init test to fail on certain desktop/mobile
platforms where the power-gating is normally enabled.

There have been several reports that the workaround still does not
guarantee to work, and can add up to 100 ms (on the worst case)
to the boot process on certain platforms such as the MSI B350M MORTAR
with AMD Ryzen 3 2200G.

Therefore, revert this commit as a prelude to removing the pre-init
test.

Link: https://lore.kernel.org/linux-iommu/alpine.LNX.3.20.13.2006030935570.3181@monopod.intra.ispras.ru/
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201753
Cc: Tj (Elloe Linux) <ml.linux@elloe.vision>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Alexander Monakov <amonakov@ispras.ru>
Cc: David Coe <david.coe@live.co.uk>
Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Link: https://lore.kernel.org/r/20210409085848.3908-2-suravee.suthikulpanit@amd.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/iommu/amd/init.c | 45 ++++++++++------------------------------
 1 file changed, 11 insertions(+), 34 deletions(-)

diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
index 3c215f0a6052..c842545368fd 100644
--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -12,7 +12,6 @@
 #include <linux/acpi.h>
 #include <linux/list.h>
 #include <linux/bitmap.h>
-#include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/syscore_ops.h>
 #include <linux/interrupt.h>
@@ -255,8 +254,6 @@ static enum iommu_init_state init_state = IOMMU_START_STATE;
 static int amd_iommu_enable_interrupts(void);
 static int __init iommu_go_to_state(enum iommu_init_state state);
 static void init_device_table_dma(void);
-static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr,
-				u8 fxn, u64 *value, bool is_write);
 
 static bool amd_iommu_pre_enabled = true;
 
@@ -1720,11 +1717,13 @@ static int __init init_iommu_all(struct acpi_table_header *table)
 	return 0;
 }
 
-static void __init init_iommu_perf_ctr(struct amd_iommu *iommu)
+static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr,
+				u8 fxn, u64 *value, bool is_write);
+
+static void init_iommu_perf_ctr(struct amd_iommu *iommu)
 {
-	int retry;
 	struct pci_dev *pdev = iommu->dev;
-	u64 val = 0xabcd, val2 = 0, save_reg, save_src;
+	u64 val = 0xabcd, val2 = 0, save_reg = 0;
 
 	if (!iommu_feature(iommu, FEATURE_PC))
 		return;
@@ -1732,39 +1731,17 @@ static void __init init_iommu_perf_ctr(struct amd_iommu *iommu)
 	amd_iommu_pc_present = true;
 
 	/* save the value to restore, if writable */
-	if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false) ||
-	    iommu_pc_get_set_reg(iommu, 0, 0, 8, &save_src, false))
-		goto pc_false;
-
-	/*
-	 * Disable power gating by programing the performance counter
-	 * source to 20 (i.e. counts the reads and writes from/to IOMMU
-	 * Reserved Register [MMIO Offset 1FF8h] that are ignored.),
-	 * which never get incremented during this init phase.
-	 * (Note: The event is also deprecated.)
-	 */
-	val = 20;
-	if (iommu_pc_get_set_reg(iommu, 0, 0, 8, &val, true))
+	if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false))
 		goto pc_false;
 
 	/* Check if the performance counters can be written to */
-	val = 0xabcd;
-	for (retry = 5; retry; retry--) {
-		if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true) ||
-		    iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false) ||
-		    val2)
-			break;
-
-		/* Wait about 20 msec for power gating to disable and retry. */
-		msleep(20);
-	}
-
-	/* restore */
-	if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, true) ||
-	    iommu_pc_get_set_reg(iommu, 0, 0, 8, &save_src, true))
+	if ((iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true)) ||
+	    (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false)) ||
+	    (val != val2))
 		goto pc_false;
 
-	if (val != val2)
+	/* restore */
+	if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, true))
 		goto pc_false;
 
 	pci_info(pdev, "IOMMU performance counters supported\n");
-- 
2.30.2


  parent reply	other threads:[~2021-05-05 17:01 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-05 16:35 [PATCH AUTOSEL 5.10 01/85] ath11k: fix thermal temperature read Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 02/85] fs: dlm: fix debugfs dump Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 03/85] fs: dlm: add errno handling to check callback Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 04/85] fs: dlm: check on minimum msglen size Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 05/85] fs: dlm: flush swork on shutdown Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 06/85] tipc: convert dest node's address to network order Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 07/85] ASoC: Intel: bytcr_rt5640: Enable jack-detect support on Asus T100TAF Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 08/85] net/mlx5e: Use net_prefetchw instead of prefetchw in MPWQE TX datapath Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 09/85] net: stmmac: Set FIFO sizes for ipq806x Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 10/85] ASoC: rsnd: core: Check convert rate in rsnd_hw_params Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 11/85] Documentation: networking: switchdev: fix command for static FDB entries Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 12/85] Bluetooth: Fix incorrect status handling in LE PHY UPDATE event Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 13/85] i2c: bail out early when RDWR parameters are wrong Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 14/85] ALSA: hdsp: don't disable if not enabled Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 15/85] ALSA: hdspm: " Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 16/85] ALSA: rme9652: " Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 17/85] ALSA: bebob: enable to deliver MIDI messages for multiple ports Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 18/85] Bluetooth: Set CONF_NOT_COMPLETE as l2cap_chan default Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 19/85] Bluetooth: verify AMP hci_chan before amp_destroy Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 20/85] Bluetooth: initialize skb_queue_head at l2cap_chan_create() Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 21/85] net/sched: cls_flower: use ntohs for struct flow_dissector_key_ports Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 22/85] net: bridge: when suppression is enabled exclude RARP packets Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 23/85] Bluetooth: check for zapped sk before connecting Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 24/85] selftests/powerpc: Fix L1D flushing tests for Power10 Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 25/85] powerpc/32: Statically initialise first emergency context Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 26/85] net: hns3: remediate a potential overflow risk of bd_num_list Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 27/85] net: hns3: add handling for xmit skb with recursive fraglist Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 28/85] ip6_vti: proper dev_{hold|put} in ndo_[un]init methods Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 29/85] ASoC: Intel: bytcr_rt5640: Add quirk for the Chuwi Hi8 tablet Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 30/85] ice: handle increasing Tx or Rx ring sizes Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 31/85] net: usb: ax88179_178a: initialize local variables before use Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 32/85] Bluetooth: btusb: Enable quirk boolean flag for Mediatek Chip Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 33/85] ASoC: rt5670: Add a quirk for the Dell Venue 10 Pro 5055 Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 34/85] i2c: Add I2C_AQ_NO_REP_START adapter quirk Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 35/85] MIPS: Loongson64: Use _CACHE_UNCACHED instead of _CACHE_UNCACHED_ACCELERATED Sasha Levin
2021-05-05 16:35 ` [PATCH AUTOSEL 5.10 36/85] coresight: Do not scan for graph if none is present Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 37/85] IB/hfi1: Correct oversized ring allocation Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 38/85] mac80211: clear the beacon's CRC after channel switch Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 39/85] pinctrl: samsung: use 'int' for register masks in Exynos Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 40/85] rtw88: 8822c: add LC calibration for RTL8822C Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 41/85] mt76: mt7615: support loading EEPROM for MT7613BE Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 42/85] mt76: mt76x0: disable GTK offloading Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 43/85] mt76: mt7915: fix txpower init for TSSI off chips Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 44/85] fuse: invalidate attrs when page writeback completes Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 45/85] virtiofs: fix userns Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 46/85] cuse: prevent clone Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 47/85] iwlwifi: pcie: make cfg vs. trans_cfg more robust Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 48/85] powerpc/mm: Add cond_resched() while removing hpte mappings Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 49/85] ASoC: rsnd: call rsnd_ssi_master_clk_start() from rsnd_ssi_init() Sasha Levin
2021-05-05 16:36 ` Sasha Levin [this message]
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 51/85] iommu/amd: Remove performance counter pre-initialization test Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 52/85] drm/amd/display: Force vsync flip when reconfiguring MPCC Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 53/85] selftests: Set CC to clang in lib.mk if LLVM is set Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 54/85] kconfig: nconf: stop endless search loops Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 55/85] ALSA: hda/realtek: Add quirk for Lenovo Ideapad S740 Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 56/85] ASoC: Intel: sof_sdw: add quirk for new ADL-P Rvp Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 57/85] ALSA: hda/hdmi: fix race in handling acomp ELD notification at resume Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 58/85] sctp: Fix out-of-bounds warning in sctp_process_asconf_param() Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 59/85] flow_dissector: Fix out-of-bounds warning in __skb_flow_bpf_to_target() Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 60/85] powerpc/smp: Set numa node before updating mask Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 61/85] ASoC: rt286: Generalize support for ALC3263 codec Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 62/85] ethtool: ioctl: Fix out-of-bounds warning in store_link_ksettings_for_user() Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 63/85] net: sched: tapr: prevent cycle_time == 0 in parse_taprio_schedule Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 64/85] samples/bpf: Fix broken tracex1 due to kprobe argument change Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 65/85] powerpc/pseries: Stop calling printk in rtas_stop_self() Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 66/85] drm/amd/display: fixed divide by zero kernel crash during dsc enablement Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 67/85] drm/amd/display: add handling for hdcp2 rx id list validation Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 68/85] drm/amdgpu: Add mem sync flag for IB allocated by SA Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 69/85] mt76: mt7615: fix entering driver-own state on mt7663 Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 70/85] crypto: ccp: Free SEV device if SEV init fails Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 71/85] wl3501_cs: Fix out-of-bounds warnings in wl3501_send_pkt Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 72/85] wl3501_cs: Fix out-of-bounds warnings in wl3501_mgmt_join Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 73/85] qtnfmac: Fix possible buffer overflow in qtnf_event_handle_external_auth Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 74/85] powerpc/iommu: Annotate nested lock for lockdep Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 75/85] iavf: remove duplicate free resources calls Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 76/85] net: ethernet: mtk_eth_soc: fix RX VLAN offload Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 77/85] selftests: mlxsw: Increase the tolerance of backlog buildup Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 78/85] selftests: mlxsw: Fix mausezahn invocation in ERSPAN scale test Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 79/85] kbuild: generate Module.symvers only when vmlinux exists Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 80/85] bnxt_en: Add PCI IDs for Hyper-V VF devices Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 81/85] ia64: module: fix symbolizer crash on fdescr Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 82/85] watchdog: rename __touch_watchdog() to a better descriptive name Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 83/85] watchdog: explicitly update timestamp when reporting softlockup Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 84/85] watchdog/softlockup: remove logic that tried to prevent repeated reports Sasha Levin
2021-05-05 16:36 ` [PATCH AUTOSEL 5.10 85/85] watchdog: fix barriers when printing backtraces from all CPUs Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210505163648.3462507-50-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=amonakov@ispras.ru \
    --cc=david.coe@live.co.uk \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jroedel@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ml.linux@elloe.vision \
    --cc=pmenzel@molgen.mpg.de \
    --cc=skhan@linuxfoundation.org \
    --cc=stable@vger.kernel.org \
    --cc=suravee.suthikulpanit@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).