From patchwork Tue Apr 8 11:57:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 879307 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 424CC267F67 for ; Tue, 8 Apr 2025 11:59:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113587; cv=none; b=Wn+eHJNSyZG4D+LLtYJbPbW/UNCCuLOlJwg0589q4du+bLZPNJsZJOLvDH40ffHnRFmwB5KB0EKm1b3MMLRw0lT7OC5DFfAmVQZ+p7qFtR2NB27Md/zcfZ/mZH8HKZJQUwp8ACiKR+N+EW+78oQiJqD8G7hbMAVAAPUOuz9wS+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113587; c=relaxed/simple; bh=lUN3tSnDDA0VVndcko/E0ki/sm2/4RMztD5pnZ/Chs0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l0ihTlWSFHdPJTcuu1oW8vBZmKy3yHT8YPQ/52E0B3wYGm/0XCWA+uGZ+fI0M0nFBx5swYEb3+Dn+1tsYH26m/Pi2da+1u90y5Q3i+XNBcAO5AdyVkaqbt+TSnG3TXnOMN6gAsH0iVhrauxPef1r6n1Q+T/sfv+7G1cBd7K0dig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XDTDcqOG; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XDTDcqOG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113586; x=1775649586; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lUN3tSnDDA0VVndcko/E0ki/sm2/4RMztD5pnZ/Chs0=; b=XDTDcqOGywGhWaQJLxiFesIPkPOCr6js7kB5G7V3QeB501whE2/f4EY3 MpLYnMGXf8pKbGLfIEz8Im06t56exoV4f9jVwMuximzlqsf+bLJQbHXwY HszJXBDSMY15Ageefd8EbT+VHx1s4wXzXqfCSBNvc4DS1q1oNKCaCNZZs e5HNYKOAMpfZRlDPe4bzJ9P3LXiFzgxOyhTIFhO7jmRJGagWVeT8BAhqW YAc7rEhiLn0LbrFkRNfOdheXFZVpIY58bZeTo2ftFU8DntKUgziHyLGeO Cvxs3YqnXLh8Is/peZAJF/rhUGdq7+k+6ouuS5K0DvOQLRnAHhkAm9DlP g==; X-CSE-ConnectionGUID: 5PwysLYxRzCO9RVTwmk+PA== X-CSE-MsgGUID: tAIMCHrgQy6IA7GFqoJxzQ== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676457" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676457" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:45 -0700 X-CSE-ConnectionGUID: nqNyP6p6SSq4/GGxiZyYyA== X-CSE-MsgGUID: Bj1m2zgPQKGiAuAeD8lQpw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428036" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:44 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 0CC87398; Tue, 08 Apr 2025 14:59:42 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 1/9] usb: xhci: set requested IMODI to the closest supported value Date: Tue, 8 Apr 2025 14:57:44 +0300 Message-ID: <20250408115752.1344901-2-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The function configures the Interrupt Moderation Interval (IMODI) via bits 15:0 in the Interrupt Moderation Register. The IMODI value is specified in increments of 250 nanoseconds. For instance, an IMODI register value of 16 corresponds to 4000 nanoseconds, resulting in an interrupt every ~1ms. Currently, the function fails when a requested IMODI value is too large, only logging a warning message for secondary interrupters. Prevent this by automatically adjusting the IMODI value to the nearest supported value. Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci-mem.c | 5 +---- drivers/usb/host/xhci.c | 7 +++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index d698095fc88d..ebbf5f039902 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -2359,10 +2359,7 @@ xhci_create_secondary_interrupter(struct usb_hcd *hcd, unsigned int segs, return NULL; } - err = xhci_set_interrupter_moderation(ir, imod_interval); - if (err) - xhci_warn(xhci, "Failed to set interrupter %d moderation to %uns\n", - i, imod_interval); + xhci_set_interrupter_moderation(ir, imod_interval); xhci_dbg(xhci, "Add secondary interrupter %d, max interrupters %d\n", i, xhci->max_interrupters); diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 0452b8d65832..7a8c545b78b7 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -354,12 +354,15 @@ int xhci_set_interrupter_moderation(struct xhci_interrupter *ir, { u32 imod; - if (!ir || !ir->ir_set || imod_interval > U16_MAX * 250) + if (!ir || !ir->ir_set) return -EINVAL; + /* IMODI value in IMOD register is in 250ns increments */ + imod_interval = umin(imod_interval / 250, ER_IRQ_INTERVAL_MASK); + imod = readl(&ir->ir_set->irq_control); imod &= ~ER_IRQ_INTERVAL_MASK; - imod |= (imod_interval / 250) & ER_IRQ_INTERVAL_MASK; + imod |= imod_interval; writel(imod, &ir->ir_set->irq_control); return 0; From patchwork Tue Apr 8 11:57:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 879306 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 19E2826A0CF for ; Tue, 8 Apr 2025 11:59:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113589; cv=none; b=LMKbBfL/n/wkY+jB+9Ew0uWO4iXqPQDN7VlueG1spn3oEWzeUPz8001Rjk+yoEc9OxX0ovKWEaRb5xVHGKX6aqHmej6rFCrQTitj/lg0G6vAdUaxBm5K4Vr/IiwiqMsIGd+683keWdY2ivkA85D8C87qXTqYL8tirlsirbFDmwI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113589; c=relaxed/simple; bh=gARHaLdBsnhmLwM62XcgKp002R4voMzzcIMrmePGlOs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=doSGDqAuG9j+xY3mKSyZXCchVFzILFMP9ISAWS6y0An9ELksAP7UcWgvCUWSh6Oz0M57x01oYlGlJB7oztvnGVPE8Z3CL3mLz1tKgtMsjra8TQHTqkrWk7fjKe/VwoEexF1U6fTiAuw8WDlw99AqKFuKoZ9PG8xbaspz1VYAWnk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=dgxy3KKs; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="dgxy3KKs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113588; x=1775649588; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gARHaLdBsnhmLwM62XcgKp002R4voMzzcIMrmePGlOs=; b=dgxy3KKswJy/geS8sWPKv6K9oJvNmF+M1MV3wOib6EjAvwL/A3TwWAqw wtDDEmY0pSCIFNK8oN79h5Cm0WCucVPF7aeJUen2JNrHopQ2Zk1SNW0+Q nrRMIZjFzjyyaY/7KHyTtYy5zItef5qWpPvJn2NyGrtJrS4M+jQi2o779 fP7EDt2tC96xMuJb0hjY9/v+kw/vhkJEWciUVBeF10RKPMn6gGWTAGrjP j5+2X7l20lW+Zn7sbIdcuZPfqY/QTQo+VJtJyZO98Jz5uH1OTjzyLtlyT 8am8vF7CH9VkVDEyPek/V+zhagkdHJLQ1XR19LDfeNz9A2ZK8S4gZ7plR g==; X-CSE-ConnectionGUID: PMOC2rahRMOo1NnWRsR87g== X-CSE-MsgGUID: /DYDGrHLRW2o+V8NYTMNig== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676459" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676459" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:46 -0700 X-CSE-ConnectionGUID: N6+QI5JKT82+IbAyn+zfwA== X-CSE-MsgGUID: h93noSdTS3ygoAacNgMwwg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428038" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:45 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 264BC484; Tue, 08 Apr 2025 14:59:44 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 2/9] usb: xhci: improve Interrupt Management register macros Date: Tue, 8 Apr 2025 14:57:45 +0300 Message-ID: <20250408115752.1344901-3-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The Interrupt Management register (IMAN), contains three fields: - Bit 0: Interrupt Pending (IP) - Bit 1: Interrupt Enable (IE) - Bits 31:2: RsvdP (Reserved and Preserved) Currently, there are multiple macros for both the IP and IE fields. Consolidates them into single mask macros for better clarity and maintainability. Comment "THIS IS BUGGY - FIXME - IP IS WRITE 1 TO CLEAR" refers to the fact that both macros 'ER_IRQ_ENABLE' and 'ER_IRQ_DISABLE' clear the IP bit by writing '0' before modifying the IE bit. However, the IP bit is actually cleared by writing '1'. To prevent any regression, this behavior has not been altered. Instead, when the IE bit is modified, the IP macro is used explicitly to highlight this "quirk". Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci.c | 8 ++++++-- drivers/usb/host/xhci.h | 14 ++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 7a8c545b78b7..5cf9908188cf 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -330,7 +330,9 @@ static int xhci_enable_interrupter(struct xhci_interrupter *ir) return -EINVAL; iman = readl(&ir->ir_set->irq_pending); - writel(ER_IRQ_ENABLE(iman), &ir->ir_set->irq_pending); + iman &= ~IMAN_IP; + iman |= IMAN_IE; + writel(iman, &ir->ir_set->irq_pending); return 0; } @@ -343,7 +345,9 @@ static int xhci_disable_interrupter(struct xhci_interrupter *ir) return -EINVAL; iman = readl(&ir->ir_set->irq_pending); - writel(ER_IRQ_DISABLE(iman), &ir->ir_set->irq_pending); + iman &= ~IMAN_IP; + iman &= ~IMAN_IE; + writel(iman, &ir->ir_set->irq_pending); return 0; } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 37860f1e3aba..20e5b6ebbab1 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -152,10 +152,6 @@ struct xhci_op_regs { #define XHCI_RESET_LONG_USEC (10 * 1000 * 1000) #define XHCI_RESET_SHORT_USEC (250 * 1000) -/* IMAN - Interrupt Management Register */ -#define IMAN_IE (1 << 1) -#define IMAN_IP (1 << 0) - /* USBSTS - USB status - status bitmasks */ /* HC not running - set to 1 when run/stop bit is cleared. */ #define STS_HALT XHCI_STS_HALT @@ -241,12 +237,10 @@ struct xhci_intr_reg { }; /* irq_pending bitmasks */ -#define ER_IRQ_PENDING(p) ((p) & 0x1) -/* bits 2:31 need to be preserved */ -/* THIS IS BUGGY - FIXME - IP IS WRITE 1 TO CLEAR */ -#define ER_IRQ_CLEAR(p) ((p) & 0xfffffffe) -#define ER_IRQ_ENABLE(p) ((ER_IRQ_CLEAR(p)) | 0x2) -#define ER_IRQ_DISABLE(p) ((ER_IRQ_CLEAR(p)) & ~(0x2)) +/* bit 0 - Interrupt Pending (IP), whether there is an interrupt pending. Write-1-to-clear. */ +#define IMAN_IP (1 << 0) +/* bit 1 - Interrupt Enable (IE), whether the interrupter is capable of generating an interrupt */ +#define IMAN_IE (1 << 1) /* irq_control bitmasks */ /* Minimum interval between interrupts (in 250ns intervals). The interval From patchwork Tue Apr 8 11:57:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 880572 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF93C26A0D9 for ; Tue, 8 Apr 2025 11:59:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113589; cv=none; b=CE4bSv1b9OJbKeeaXCEJ4NH+tysa24IlFX+TDlsZ3Ts8jxojQehhS1HfzvVspVU0MLz4bFmEP50vP3eDxnf2wi+1pExQ1U5mt+GdBTuBLEx0H+LJYMRs+RLEBJ/VPl+I+Ztm67OFPGeJhXR46Kfo3Lg2V70esA8loSZW2lh/5S8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113589; c=relaxed/simple; bh=h7B5yL+lCB4y9maC5JNARcEPThbC1anABN0yN0Gldlo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SdMxc+4uHmQYNYer+/BBy9UyuPPJQ8joD+TMdqGZ8UxjoTAHw52R95xgR4t9EKv2y/gBUfcwdLXUETwY9SWSOgYbqVTkRrPTxvhMbNF28aikmNOz8HpaNeSxNF2yhdnNihtqQFXZolNi+gkLLEg/GzxC7C67zAC9kFyQopM+GKs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=VV26DeNB; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="VV26DeNB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113588; x=1775649588; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h7B5yL+lCB4y9maC5JNARcEPThbC1anABN0yN0Gldlo=; b=VV26DeNBTApZydce2rOwzuF+Tr7yY/TgKieWrK+qsTt1WohFkogAKG+r CL3nSHlJaUmHK0pd3vVM36EUDhrX2v0lIxTXREfraUOffCVB93zTVW/3t HxZFwX70GoeCiz6e75ppLcjWQOzqNx8Z4pFes05B8amSt+fcOo+JntSIL +MIRRAVK5EYZeGM8uiK3GMJSoUpTG6JF3A5mQ4eTGgjjNiI93RYcyaFAw jhzS6MWvUFUmWlgL6ncMWaW0RnvYy+SyIVm44t2EwtX8lUT7Qa03vtaZN IwvEEJjC84l68o17JNhE5T/crSttKo/kGInRnuQvJ0UVQxh7y2LWI3kB5 w==; X-CSE-ConnectionGUID: eeWSMQcYQjelKST71VQftw== X-CSE-MsgGUID: wcJPx1j0QJeafSoqkRDuBQ== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676460" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676460" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:47 -0700 X-CSE-ConnectionGUID: 8tWfcPzvSeWPSfqrdW8ACQ== X-CSE-MsgGUID: 06UUmcX/SGqUJP6/gwXQxQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428042" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:46 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 4E4E0398; Tue, 08 Apr 2025 14:59:45 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 3/9] usb: xhci: guarantee that IMAN register is flushed Date: Tue, 8 Apr 2025 14:57:46 +0300 Message-ID: <20250408115752.1344901-4-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add read call to guarantee that the write to the IMAN register has been flushed. xHCI specification 1.2, section 5.5.2.1, Note: "Most systems have write buffers that minimize overhead, but this may require a read operation to guarantee that the write has been flushed from the posted buffer." Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci-ring.c | 3 +++ drivers/usb/host/xhci.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 5d64c297721c..412eb90c29fb 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -3092,6 +3092,9 @@ static void xhci_clear_interrupt_pending(struct xhci_interrupter *ir) irq_pending = readl(&ir->ir_set->irq_pending); irq_pending |= IMAN_IP; writel(irq_pending, &ir->ir_set->irq_pending); + + /* Read operation to guarantee the write has been flushed from posted buffers */ + readl(&ir->ir_set->irq_pending); } } diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 5cf9908188cf..93daaac102f7 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -334,6 +334,8 @@ static int xhci_enable_interrupter(struct xhci_interrupter *ir) iman |= IMAN_IE; writel(iman, &ir->ir_set->irq_pending); + /* Read operation to guarantee the write has been flushed from posted buffers */ + readl(&ir->ir_set->irq_pending); return 0; } @@ -349,6 +351,7 @@ static int xhci_disable_interrupter(struct xhci_interrupter *ir) iman &= ~IMAN_IE; writel(iman, &ir->ir_set->irq_pending); + readl(&ir->ir_set->irq_pending); return 0; } From patchwork Tue Apr 8 11:57:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 880571 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0F4826A1AA for ; Tue, 8 Apr 2025 11:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113593; cv=none; b=WfQZsfhbDI/GVCEqEqWvJfmKhzBChHjTXMVjTuwuKodVGoBoGCuDAvjmNf5o4+AbWQmwG5/33R5F52xBFw04D9OgyKs3naLDb3fUjAzBVUHE5d5LGaUqP5kK5WDrVTMVZP0qDvRgcQN0hMk9zYXJmvGitIl46kVY9k4x8Jy6gj4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113593; c=relaxed/simple; bh=/fFCq7nnsecdTAtuMCaemaquPThROFf3JLlI0F7AQ8A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iRlR5o5IQ0ZPmhdw8HxabvnZdIvgyRmXeGHKQQHzdpjNkqbsNBVUGCqHs7r/CfYUy40V5vJclWPN4ryb30Ti0vYYjtnXjBfiL9QEck+raUiNfENbM6euQVO1bjf9KSsJqkK7DO2Un+NpgQSqiwgoXzIDZcy+aA6G0cimXCgPtlI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=gQ44BODq; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="gQ44BODq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113592; x=1775649592; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/fFCq7nnsecdTAtuMCaemaquPThROFf3JLlI0F7AQ8A=; b=gQ44BODqCmm3e79AXI4HN67HQjfhT9tlZkkKn9aHecSGErHdom/lwpDw tUWDZQxuRJK1lwFmMyO+2HncADtU+EicWOuTiArMU68jNo61c9QNfMT+b V23quaAR8vZ8Sxh2J7GVQffmMqhE2kL1noku531q32LvTyB1Svyh2tjKt TxZ34PkgWkftnTzxOi74DeHuYvFi8sawfppemp9+vFWAzGkrfn/l5FQs+ 4jIsge/lZtrqC40y4zhP4XOBlTtfC9K8ClFffuKndXoRjoaaIt4iegnwW u60Z6PEqoSyE/ejW0RTDXic2p4BWB8iSengXWxewDZtcWigvxamkrKfXJ w==; X-CSE-ConnectionGUID: nxT4bfGsRoaj3oVejA/Itg== X-CSE-MsgGUID: e9deomGwR4ew/tb+cP+2kA== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676468" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676468" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:51 -0700 X-CSE-ConnectionGUID: BOvGLa4aQYCAJC2Hiepkag== X-CSE-MsgGUID: jlc47zUTQY2rNnEm8ejTlA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428053" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:50 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 77C8B398; Tue, 08 Apr 2025 14:59:49 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 4/9] usb: xhci: remove '0' write to write-1-to-clear register Date: Tue, 8 Apr 2025 14:57:47 +0300 Message-ID: <20250408115752.1344901-5-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 xHCI specification 1.2, section 5.5.2.1. Interrupt Pending bit is RW1C (Write-1-to-clear), which means that writing '0' to is has no effect and is removed. The Interrupt Pending (IP) bit is cleared at the start of interrupt handling; xhci_clear_interrupt_pending(). This could theoretically cause a new interrupt to be issued before the xhci driver reaches the interrupter disable functions. To address this, the IP bit is read after Interrupt Enable is disabled, and a debug message is issued if the IP bit is still set. Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 93daaac102f7..a41337360535 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -330,7 +330,6 @@ static int xhci_enable_interrupter(struct xhci_interrupter *ir) return -EINVAL; iman = readl(&ir->ir_set->irq_pending); - iman &= ~IMAN_IP; iman |= IMAN_IE; writel(iman, &ir->ir_set->irq_pending); @@ -339,7 +338,7 @@ static int xhci_enable_interrupter(struct xhci_interrupter *ir) return 0; } -static int xhci_disable_interrupter(struct xhci_interrupter *ir) +static int xhci_disable_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir) { u32 iman; @@ -347,11 +346,13 @@ static int xhci_disable_interrupter(struct xhci_interrupter *ir) return -EINVAL; iman = readl(&ir->ir_set->irq_pending); - iman &= ~IMAN_IP; iman &= ~IMAN_IE; writel(iman, &ir->ir_set->irq_pending); - readl(&ir->ir_set->irq_pending); + iman = readl(&ir->ir_set->irq_pending); + if (iman & IMAN_IP) + xhci_dbg(xhci, "%s: Interrupt pending\n", __func__); + return 0; } @@ -650,7 +651,7 @@ void xhci_stop(struct usb_hcd *hcd) "// Disabling event ring interrupts"); temp = readl(&xhci->op_regs->status); writel((temp & ~0x1fff) | STS_EINT, &xhci->op_regs->status); - xhci_disable_interrupter(ir); + xhci_disable_interrupter(xhci, ir); xhci_dbg_trace(xhci, trace_xhci_dbg_init, "cleaning up memory"); xhci_mem_cleanup(xhci); @@ -1102,7 +1103,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool power_lost, bool is_auto_resume) xhci_dbg(xhci, "// Disabling event ring interrupts\n"); temp = readl(&xhci->op_regs->status); writel((temp & ~0x1fff) | STS_EINT, &xhci->op_regs->status); - xhci_disable_interrupter(xhci->interrupters[0]); + xhci_disable_interrupter(xhci, xhci->interrupters[0]); xhci_dbg(xhci, "cleaning up memory\n"); xhci_mem_cleanup(xhci); From patchwork Tue Apr 8 11:57:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 879305 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7F9D26A1BD for ; Tue, 8 Apr 2025 11:59:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113595; cv=none; b=NoCIprh9N06IJaUnfbVuDM8X3g9PXowmOW7+KzO0nZLfDogPBZp6/IN5hnFR1DMpMTJYWGxSgx7EpExG8m/S9xiNqQ7xTIVxwr30hfRsdPV+gTTvjAlDoFKYZOeyhDZoftxs7cmHetckTWthqETESlUoLVV/BSOTC0AXSDOpWEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113595; c=relaxed/simple; bh=xGt0mxrN7AiVppxGA1MpDekMAPzUwM4oMwXZAoKWQf8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V0ojuWp8ycOcm5MNw8374dxwdhhB/K1lptEWzrXuR0iafOE+8d7+TulsnFWSKkxtJOhARiuYJAWQRduMWFSvWWhzfb7RxvqvFw+RD7/qLrLqKFeNmi96TmRGt0N4lPFricSFgtbpgmXqFW4px1vHDfQFVNHKRsUNhZxFWjX2VBA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=UJNO4WUI; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="UJNO4WUI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113594; x=1775649594; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xGt0mxrN7AiVppxGA1MpDekMAPzUwM4oMwXZAoKWQf8=; b=UJNO4WUIXdjjVdCP1hQhBOcwiQxerE1VpSoV6V5TSvmrjJf4kC84+/aP Ry+w8lLDRraHRwSPNbkTNIJJSiR1k9V3sJSWPtNUSxeV8Pf8CwIMUPl1s pX519eLaQyH8N9BYM6ZofdbG6014GTr+8QrAfbNQk6q3QImUW7RBQUlU6 AOwsWm+zR9Smv8CMHrp2Stz+t3HWLms6jtsi4suRXy6VHN0Xxm2rKfdsq zATW5dVm9vHAVBfLOZq7r7CnvnNrcw8RKy0rd2e3iYGqtfA9iUSMGa+hC e21zoutLoS/dHJ48vNuGGetftBa1koLSkkxiIv8DSoVJqpaI/1FEZhkrC A==; X-CSE-ConnectionGUID: qs8COjrUR+iGJJg8W+9eCg== X-CSE-MsgGUID: QOlJmp7zQVycaAvxHpCSbQ== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676469" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676469" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:52 -0700 X-CSE-ConnectionGUID: IFlesGr5SvSiWHBmM7yWHA== X-CSE-MsgGUID: vwlHScdASI+jWRVTFcTQAw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428056" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:51 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 4879C484; Tue, 08 Apr 2025 14:59:50 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 5/9] usb: xhci: rework Event Ring Segment Table Size mask Date: Tue, 8 Apr 2025 14:57:48 +0300 Message-ID: <20250408115752.1344901-6-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Event Ring Segment Table Size Register contain two fields: - Bits 15:0: Event Ring Segment Table Size - Bits 31:16: RsvdZ (Reserved and Zero) The current mask 'ERST_SIZE_MASK' refers to the RsvdZ bits (31:16). Change the mask to refer to bits 15:0, which are the Event Ring Segment Table Size bits. Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci-mem.c | 4 ++-- drivers/usb/host/xhci.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index ebbf5f039902..b6a2b0c01eb2 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -1802,7 +1802,7 @@ xhci_remove_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir) */ if (ir->ir_set) { tmp = readl(&ir->ir_set->erst_size); - tmp &= ERST_SIZE_MASK; + tmp &= ~ERST_SIZE_MASK; writel(tmp, &ir->ir_set->erst_size); xhci_write_64(xhci, ERST_EHB, &ir->ir_set->erst_dequeue); @@ -2306,7 +2306,7 @@ xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir, /* set ERST count with the number of entries in the segment table */ erst_size = readl(&ir->ir_set->erst_size); - erst_size &= ERST_SIZE_MASK; + erst_size &= ~ERST_SIZE_MASK; erst_size |= ir->event_ring->num_segs; writel(erst_size, &ir->ir_set->erst_size); diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 20e5b6ebbab1..5e5b71958745 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -252,8 +252,8 @@ struct xhci_intr_reg { #define ER_IRQ_COUNTER_MASK (0xffff << 16) /* erst_size bitmasks */ -/* Preserve bits 16:31 of erst_size */ -#define ERST_SIZE_MASK (0xffff << 16) +/* bits 15:0 - Event Ring Segment Table Size, number of ERST entries */ +#define ERST_SIZE_MASK (0xffff) /* erst_base bitmasks */ #define ERST_BASE_RSVDP (GENMASK_ULL(5, 0)) From patchwork Tue Apr 8 11:57:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 880570 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 031EE26A1C2 for ; Tue, 8 Apr 2025 11:59:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113595; cv=none; b=cE9AA3YJhVl+O09s9oe3m1y8FX0c2v4xL2+oqhQxlxEcHdFhfoZqZSo4arG4vg/AZV83ix38MKklkoU/UXW8svOc94SMciz91yCcOfDinxKAFcn421Zr/1BoiGZgwht4H/LpU9F+jcu5wEfO8icrRKuYtCm31AHEn29wjRfvy1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113595; c=relaxed/simple; bh=gMJBYkaDozAuibLCBZKRcOn0bJzdUbP6HB3Kg2WgUaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WFvzYiYy9dHx5fM3YCjuO4ziytN36WNnLk7AzI5qPEE1F+vBUEJhIxBc7BmXXoZQhYAv5/dWvsOlG2uWAd7f2de+Q15bwSPMHKX6GzE3Ac335ORZ1SxfQs3Zu4WtucqA1tniKk+Xy9ngT3hJedU2n6AlHrkN7Ye7zHm3oOLSEV0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=DnaqJ4vl; arc=none smtp.client-ip=192.198.163.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="DnaqJ4vl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113594; x=1775649594; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gMJBYkaDozAuibLCBZKRcOn0bJzdUbP6HB3Kg2WgUaY=; b=DnaqJ4vlowiVI6epPEWUCBEg/MoD3qb8TNKy1/BUzXrGtESLH/Fjjn5G rF++MCI2bTQ6OpbVZtu6p4OW0zZ4suOvOlluBtKlVN8DqFrb3ySdbior9 A87dnzP0Eqbn4z9EnObOIQPyFuJEngD7U1rGJSkGu0bOsMLcg32NCjA4b 5o5pQjE1y4DeFaCrtnJc/3Ri1WqsbY6+gjBCP5c1KyWJ7GQXqWNtmiI+p C9/wSA/Zuw1HyPZQf/R2tBNgaPSkjjESPah/Fsuy1/2A6MzXrKv6bA8MQ rTg7iKXE0By9J79E1T1q3zIuLll1Rzm0XmXyWyp3byClDUOMieDyewLhj A==; X-CSE-ConnectionGUID: 5goVQqX+S3CqnF3sHe2wKw== X-CSE-MsgGUID: IGgO6yo/Rf2TY/DWDav3SQ== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="44681732" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="44681732" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:53 -0700 X-CSE-ConnectionGUID: /dkCZFypSF+oo8Vu1BtvCQ== X-CSE-MsgGUID: Y+FAyOUPRbiiw8XOvcn3DA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="128114715" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa006.fm.intel.com with ESMTP; 08 Apr 2025 04:59:52 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 214D14A3; Tue, 08 Apr 2025 14:59:51 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 6/9] usb: xhci: rework Event Ring Segment Table Address mask Date: Tue, 8 Apr 2025 14:57:49 +0300 Message-ID: <20250408115752.1344901-7-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Event Ring Segment Table Base Address Register contain two fields: - Bits 5:0: RsvdP (Reserved and Preserved) - Bits 63:6: Event Ring Segment Table Base Address Currently, an inverted RsvdP mask (ERST_BASE_RSVDP) is used to extract bits 63:6. Replaces the inverted mask with a non-inverted mask, 'ERST_BASE_ADDRESS_MASK', which makes the code easier to read. Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci-mem.c | 4 ++-- drivers/usb/host/xhci.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index b6a2b0c01eb2..5ef38f97f7ea 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -2311,8 +2311,8 @@ xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir, writel(erst_size, &ir->ir_set->erst_size); erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base); - erst_base &= ERST_BASE_RSVDP; - erst_base |= ir->erst.erst_dma_addr & ~ERST_BASE_RSVDP; + erst_base &= ~ERST_BASE_ADDRESS_MASK; + erst_base |= ir->erst.erst_dma_addr & ERST_BASE_ADDRESS_MASK; if (xhci->quirks & XHCI_WRITE_64_HI_LO) hi_lo_writeq(erst_base, &ir->ir_set->erst_base); else diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 5e5b71958745..2a4beb6a6695 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -256,7 +256,8 @@ struct xhci_intr_reg { #define ERST_SIZE_MASK (0xffff) /* erst_base bitmasks */ -#define ERST_BASE_RSVDP (GENMASK_ULL(5, 0)) +/* bits 63:6 - Event Ring Segment Table Base Address Register */ +#define ERST_BASE_ADDRESS_MASK GENMASK_ULL(63, 6) /* erst_dequeue bitmasks */ /* Dequeue ERST Segment Index (DESI) - Segment number (or alias) From patchwork Tue Apr 8 11:57:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 879304 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8295226AA82 for ; Tue, 8 Apr 2025 11:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113597; cv=none; b=FAsgJKbG/NlcfpIKNms3NAUt6bvteTf5OugLopaspp/+vNphzGyX6g+SEzE7/9onUGT777M93o+dtpGyBAcq/B82vWse/ty0ORMB42WYp1d6UWkbG/gn5IP5Lmkdb+KvaIqpf47/w1a4diSOrB+vpJWCq9tNIwLdQBWfBZ/zfNc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113597; c=relaxed/simple; bh=ju+24sM5izmCx9YopZ91b5iDG5thenrTBwdZmNSFnQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UZKnnda3YSqJcILmkQOHzPsEMqozGpocgmVMSyYZNieWxyZWa+ua1NRJn3oUYzvwvw3PXHIi4hMZlKUdvS/25F4f+xsNFmkUUEy9+Walx8RtAHeEosD4C6lZBuUhLzHLHFXtKITRMlh6PFQOfqvUzmCO64hwpuauU8uPV9OSfHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=bUFxD6ES; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="bUFxD6ES" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113595; x=1775649595; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ju+24sM5izmCx9YopZ91b5iDG5thenrTBwdZmNSFnQI=; b=bUFxD6ES4UpKrs3kqHSxuwGoElR6GRlrqfJ0b1lOlzeixgKHUGXKSYhU FyWAnJGck7g81PetaQLb+dFvmFObHmW1lmG6PFqHY6+UFdGz3y2fWKoLv qOCSwu66OHd/4SQZeCIDiUzhCfRZ+9Sq1ljF+eFj7GrwiUFNjmWXPwm96 oep35wVQSZRxKWF/M/ObZkDR0Gl7NPbHDSpD/1zsNkAkm4V1bec5oa5Kg A6/LoO6MKn3+6HCOQoIf85IrKP4uNyg0gaQdJbApllWZWC8i9zANo9E7R butqM/rf5JwfiNVhDvoFyeJG/ZIRQVXvt1V2MPpI3UrLxM2j045FkvwoH A==; X-CSE-ConnectionGUID: iLXq4LIdSTKVOf6Eq1YBSw== X-CSE-MsgGUID: KveJW26qRWGM3szk6/vvyg== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676471" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676471" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:54 -0700 X-CSE-ConnectionGUID: tT44rNeBQC2OHXqcyiFWnA== X-CSE-MsgGUID: wdZ9VxX9TfqQ3bMnjlzHKA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428057" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:52 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id EA591398; Tue, 08 Apr 2025 14:59:51 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 7/9] usb: xhci: cleanup IMOD register comments Date: Tue, 8 Apr 2025 14:57:50 +0300 Message-ID: <20250408115752.1344901-8-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Patch does not contain any functional changes. Add missing macro descriptions with specific bit definitions for each data field and reordered them accordingly. Remove "HW use only" from Interrupt Moderation Counter. xHCI Specification 1.2, section 5.5.2.2, states "This counter may be directly written by software at any time to alter the interrupt rate." Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci.h | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 2a4beb6a6695..715b860995f3 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -211,14 +211,13 @@ struct xhci_op_regs { #define XHCI_PAGE_SIZE_MASK 0xffff /** - * struct xhci_intr_reg - Interrupt Register Set - * @irq_pending: IMAN - Interrupt Management Register. Used to enable + * struct xhci_intr_reg - Interrupt Register Set, v1.2 section 5.5.2. + * @irq_pending: IMAN - Interrupt Management Register. Used to enable * interrupts and check for pending interrupts. - * @irq_control: IMOD - Interrupt Moderation Register. - * Used to throttle interrupts. - * @erst_size: Number of segments in the Event Ring Segment Table (ERST). - * @erst_base: ERST base address. - * @erst_dequeue: Event ring dequeue pointer. + * @irq_control: IMOD - Interrupt Moderation Register. Used to throttle interrupts. + * @erst_size: ERSTSZ - Number of segments in the Event Ring Segment Table (ERST). + * @erst_base: ERSTBA - Event ring segment table base address. + * @erst_dequeue: ERDP - Event ring dequeue pointer. * * Each interrupter (defined by a MSI-X vector) has an event ring and an Event * Ring Segment Table (ERST) associated with it. The event ring is comprised of @@ -243,12 +242,13 @@ struct xhci_intr_reg { #define IMAN_IE (1 << 1) /* irq_control bitmasks */ -/* Minimum interval between interrupts (in 250ns intervals). The interval - * between interrupts will be longer if there are no events on the event ring. - * Default is 4000 (1 ms). +/* + * bits 15:0 - Interrupt Moderation Interval, the minimum interval between interrupts + * (in 250ns intervals). The interval between interrupts will be longer if there are no + * events on the event ring. Default is 4000 (1 ms). */ #define ER_IRQ_INTERVAL_MASK (0xffff) -/* Counter used to count down the time to the next interrupt - HW use only */ +/* bits 31:16 - Interrupt Moderation Counter, used to count down the time to the next interrupt */ #define ER_IRQ_COUNTER_MASK (0xffff << 16) /* erst_size bitmasks */ @@ -260,15 +260,18 @@ struct xhci_intr_reg { #define ERST_BASE_ADDRESS_MASK GENMASK_ULL(63, 6) /* erst_dequeue bitmasks */ -/* Dequeue ERST Segment Index (DESI) - Segment number (or alias) - * where the current dequeue pointer lies. This is an optional HW hint. +/* + * bits 2:0 - Dequeue ERST Segment Index (DESI), is the segment number (or alias) where the + * current dequeue pointer lies. This is an optional HW hint. */ #define ERST_DESI_MASK (0x7) -/* Event Handler Busy (EHB) - is the event ring scheduled to be serviced by +/* + * bit 3 - Event Handler Busy (EHB), whether the event ring is scheduled to be serviced by * a work queue (or delayed service routine)? */ #define ERST_EHB (1 << 3) -#define ERST_PTR_MASK (GENMASK_ULL(63, 4)) +/* bits 63:4 - Event Ring Dequeue Pointer */ +#define ERST_PTR_MASK GENMASK_ULL(63, 4) /** * struct xhci_run_regs From patchwork Tue Apr 8 11:57:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 879303 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4522226AAA1 for ; Tue, 8 Apr 2025 11:59:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113599; cv=none; b=o9hE3MeV1iu5p6FcCo/dxk8C788q3d0TKmtIXcq1zoMeomEgXMRP2Z3JYSuSkoqFRzqqmqBu6/m9OzTiACqDKIr0w/MoMQEg0fO+J8WeiJbui2BryAqdySZRjB0waYCr6HAUOAJ8aao2CQBn+W0BHR/SW7SqdxLMrlV+EJvYKvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113599; c=relaxed/simple; bh=caYpHf7zFLI92uKJs2tHRJa0e7brab0b4dDy95e5Wbw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VGyY8F90A+A/EOAikvvu/bHdukCptA9Qa4PCSGLy6lUlkgug9zaX1gZqjgt59EdVw39XC3pjJO7zcj7vmSjDyV1lx2BSC/7gD2Jr+LK8md3PlWLPtwMj2JmZi88AdfbsUOPMf5+pBYFkMI1vbpZbMqhft1r124KEgbS0caffIy0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=OPJjakN+; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="OPJjakN+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113597; x=1775649597; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=caYpHf7zFLI92uKJs2tHRJa0e7brab0b4dDy95e5Wbw=; b=OPJjakN+FxefYgxiZP+s++Qe77oRMNyyhEXnhB0/nhItqFuo8s2AHb/k mrH+qrUt9xNMF+y72m0X/S1Ev1w6K4x0jx+hnx7/s+hx/JxSL17VE5gzy R61YdiRRyQnC1A7CAs0Dyq+KDqacIeqtUZS655TiRcMDg4b/whR8mNesH /jQOglM2MfqEHk066S6D1M5NsrJXVQ06Wc1vffeAFAsvIJmqCxKVzM4rc 1kLKRLOEppNmEoB4RH48OE3hC6hE/8zSzEQrYknMi5qlObFw/+0pQeajb FWn10OlAO8d1nH+eQxp9z2dfR97f+Zk4mYn6X2UkErw1FSTELHaPGkZ3L w==; X-CSE-ConnectionGUID: B+X1Uo4rR2uoPlJeM3QhKQ== X-CSE-MsgGUID: 2JmaWg7pTxy4CAWpsWDPxg== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="45676477" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="45676477" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:56 -0700 X-CSE-ConnectionGUID: OH5ErdHcSiOJIdF0U3QWPA== X-CSE-MsgGUID: k1QJBtmyQZWWF0MjD7/J4g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="151428062" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 08 Apr 2025 04:59:55 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id 27799398; Tue, 08 Apr 2025 14:59:54 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 8/9] usb: xhci: rename 'irq_pending' to 'iman' Date: Tue, 8 Apr 2025 14:57:51 +0300 Message-ID: <20250408115752.1344901-9-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The Interrupt Register Set contains Interrupt Management register (IMAN). The IMAN register contains the following fields: - Bit 0: Interrupt Pending (IP) - Bit 1: Interrupt Enable (IE) - Bits 31:2: RsvdP (Reserved and Preserved) Tn the xhci driver, the pointer currently named 'irq_pending' refers to the IMAN register. However, the name "irq_pending" only describes one of the fields within the IMAN register, rather than the entire register itself. To improve clarity and better align with the xHCI specification, the pointer is renamed to 'iman'. Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci-ring.c | 10 +++++----- drivers/usb/host/xhci.c | 16 ++++++++-------- drivers/usb/host/xhci.h | 8 ++++---- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 412eb90c29fb..aa04a910c855 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -3087,14 +3087,14 @@ static void xhci_update_erst_dequeue(struct xhci_hcd *xhci, static void xhci_clear_interrupt_pending(struct xhci_interrupter *ir) { if (!ir->ip_autoclear) { - u32 irq_pending; + u32 iman; - irq_pending = readl(&ir->ir_set->irq_pending); - irq_pending |= IMAN_IP; - writel(irq_pending, &ir->ir_set->irq_pending); + iman = readl(&ir->ir_set->iman); + iman |= IMAN_IP; + writel(iman, &ir->ir_set->iman); /* Read operation to guarantee the write has been flushed from posted buffers */ - readl(&ir->ir_set->irq_pending); + readl(&ir->ir_set->iman); } } diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index a41337360535..2b4dd527c64d 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -329,12 +329,12 @@ static int xhci_enable_interrupter(struct xhci_interrupter *ir) if (!ir || !ir->ir_set) return -EINVAL; - iman = readl(&ir->ir_set->irq_pending); + iman = readl(&ir->ir_set->iman); iman |= IMAN_IE; - writel(iman, &ir->ir_set->irq_pending); + writel(iman, &ir->ir_set->iman); /* Read operation to guarantee the write has been flushed from posted buffers */ - readl(&ir->ir_set->irq_pending); + readl(&ir->ir_set->iman); return 0; } @@ -345,11 +345,11 @@ static int xhci_disable_interrupter(struct xhci_hcd *xhci, struct xhci_interrupt if (!ir || !ir->ir_set) return -EINVAL; - iman = readl(&ir->ir_set->irq_pending); + iman = readl(&ir->ir_set->iman); iman &= ~IMAN_IE; - writel(iman, &ir->ir_set->irq_pending); + writel(iman, &ir->ir_set->iman); - iman = readl(&ir->ir_set->irq_pending); + iman = readl(&ir->ir_set->iman); if (iman & IMAN_IP) xhci_dbg(xhci, "%s: Interrupt pending\n", __func__); @@ -730,7 +730,7 @@ static void xhci_save_registers(struct xhci_hcd *xhci) ir->s3_erst_size = readl(&ir->ir_set->erst_size); ir->s3_erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base); ir->s3_erst_dequeue = xhci_read_64(xhci, &ir->ir_set->erst_dequeue); - ir->s3_irq_pending = readl(&ir->ir_set->irq_pending); + ir->s3_iman = readl(&ir->ir_set->iman); ir->s3_irq_control = readl(&ir->ir_set->irq_control); } } @@ -754,7 +754,7 @@ static void xhci_restore_registers(struct xhci_hcd *xhci) writel(ir->s3_erst_size, &ir->ir_set->erst_size); xhci_write_64(xhci, ir->s3_erst_base, &ir->ir_set->erst_base); xhci_write_64(xhci, ir->s3_erst_dequeue, &ir->ir_set->erst_dequeue); - writel(ir->s3_irq_pending, &ir->ir_set->irq_pending); + writel(ir->s3_iman, &ir->ir_set->iman); writel(ir->s3_irq_control, &ir->ir_set->irq_control); } } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 715b860995f3..05e35f1303c3 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -212,7 +212,7 @@ struct xhci_op_regs { /** * struct xhci_intr_reg - Interrupt Register Set, v1.2 section 5.5.2. - * @irq_pending: IMAN - Interrupt Management Register. Used to enable + * @iman: IMAN - Interrupt Management Register. Used to enable * interrupts and check for pending interrupts. * @irq_control: IMOD - Interrupt Moderation Register. Used to throttle interrupts. * @erst_size: ERSTSZ - Number of segments in the Event Ring Segment Table (ERST). @@ -227,7 +227,7 @@ struct xhci_op_regs { * updates the dequeue pointer. */ struct xhci_intr_reg { - __le32 irq_pending; + __le32 iman; __le32 irq_control; __le32 erst_size; __le32 rsvd; @@ -235,7 +235,7 @@ struct xhci_intr_reg { __le64 erst_dequeue; }; -/* irq_pending bitmasks */ +/* iman bitmasks */ /* bit 0 - Interrupt Pending (IP), whether there is an interrupt pending. Write-1-to-clear. */ #define IMAN_IP (1 << 0) /* bit 1 - Interrupt Enable (IE), whether the interrupter is capable of generating an interrupt */ @@ -1446,7 +1446,7 @@ struct xhci_interrupter { bool ip_autoclear; u32 isoc_bei_interval; /* For interrupter registers save and restore over suspend/resume */ - u32 s3_irq_pending; + u32 s3_iman; u32 s3_irq_control; u32 s3_erst_size; u64 s3_erst_base; From patchwork Tue Apr 8 11:57:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Neronin X-Patchwork-Id: 880569 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1675726A0D9 for ; Tue, 8 Apr 2025 11:59:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113598; cv=none; b=GTDnlA4E9IgJ7r6veQP37VNa1yffoPpy4mypm/KQLmV5hU6fPOnM8PLcQeUnTO0VkGIVqf0oH9e1iP9gSHt5eP/5vioZWy8WywYyHh0QHD3yMwdvyeeg7wumYIXID41JoHBlZU2F0lzbiz9iuP3t7q+sPKAtW4FTcJEAhnpnHjc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744113598; c=relaxed/simple; bh=6TVVH8Q4IN4rDP4/apskBATgOniCGvrAdnAQPmWIuKk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CUr/01CW/avzJRvQTqaMnqotvBKj9KTN/QwBIb0xdQr9Fe7toMx5zHnepJIptXk98XnEr2asKPnDjAgQqNbeStOUhXtb3tvVvjIlZlzcmZIZ+zKdInQ2dY1rUPbHulDidiTFsLMJ6jFejsH6NWU6uYyIXACc3RzjGnRBc/m3+YE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XqO4s/Pq; arc=none smtp.client-ip=192.198.163.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XqO4s/Pq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744113597; x=1775649597; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6TVVH8Q4IN4rDP4/apskBATgOniCGvrAdnAQPmWIuKk=; b=XqO4s/PqTYzd1yqV211e8a5kUPZHxnt2rmUhS9AJYULtV6VoZddIOTYN k7Wf1z9LSc0TRGkDU0vgLhyXaGPKoAgbNSeujYr1FejbAQ3pbuK38edqA MEIlMnwUc3eaLBPVR96y1438+UOBVOXtBINHxrSkF6iJHti+TbFmSpa/U Uc08P3PI0xSubWlS8FzvnOKOqBCY6GGQT3Zpu1yncuf9qRzFKXr6i1F3U 4USJY36Ak0wDvf/UKqmee1Ssn0/0tt9B7fI8GfPsi9YmRRxE7iHilhy2q jBOPkgOKc2Im4NvbKArd4jRPyg/dlOBWusv991ZIDEBW04XheiUrhM4Ia g==; X-CSE-ConnectionGUID: TDN41OInQpWBJB6C3TS1Zw== X-CSE-MsgGUID: 9yqJwoirRAa+abw23F3U7w== X-IronPort-AV: E=McAfee;i="6700,10204,11397"; a="44681736" X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="44681736" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2025 04:59:57 -0700 X-CSE-ConnectionGUID: m9wOa7OTSpGeClS4KIx4xQ== X-CSE-MsgGUID: 63m/RrNbQLuRj1UkkvjIAQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,198,1739865600"; d="scan'208";a="128114724" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa006.fm.intel.com with ESMTP; 08 Apr 2025 04:59:56 -0700 Received: by black.fi.intel.com (Postfix, from userid 1058) id E74A3484; Tue, 08 Apr 2025 14:59:54 +0300 (EEST) From: Niklas Neronin To: mathias.nyman@linux.intel.com Cc: linux-usb@vger.kernel.org, Niklas Neronin Subject: [PATCH 9/9] usb: xhci: rename 'irq_control' to 'imod' Date: Tue, 8 Apr 2025 14:57:52 +0300 Message-ID: <20250408115752.1344901-10-niklas.neronin@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> References: <20250408115752.1344901-1-niklas.neronin@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The Interrupt Register Set contains Interrupt Moderation register (IMOD). The IMOD register contains the following fields: - Bits 15:0: Interrupt Moderation Interval (IMODI) - Bits 31:16: Interrupt Moderation Counter (IMODC) In the xHCI driver, the pointer currently named 'irq_control' refers to the IMOD register. However, the name 'irq_control' does not accurately describe the register or its contents, and the xHCI specification does not use the term "irq control" or "interrupt control" for this register. To improve clarity and better align with the xHCI specification, the pointer is renamed to 'imod'. Additionally, the IMOD register fields IMODI & IMODC have their own masks, which are also renamed for consistency: * 'ER_IRQ_INTERVAL_MASK' -> 'IMODI_MASK' * 'ER_IRQ_COUNTER_MASK' -> 'IMODC_MASK' Signed-off-by: Niklas Neronin --- drivers/usb/host/xhci.c | 12 ++++++------ drivers/usb/host/xhci.h | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 2b4dd527c64d..ec88d2cacb13 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -366,12 +366,12 @@ int xhci_set_interrupter_moderation(struct xhci_interrupter *ir, return -EINVAL; /* IMODI value in IMOD register is in 250ns increments */ - imod_interval = umin(imod_interval / 250, ER_IRQ_INTERVAL_MASK); + imod_interval = umin(imod_interval / 250, IMODI_MASK); - imod = readl(&ir->ir_set->irq_control); - imod &= ~ER_IRQ_INTERVAL_MASK; + imod = readl(&ir->ir_set->imod); + imod &= ~IMODI_MASK; imod |= imod_interval; - writel(imod, &ir->ir_set->irq_control); + writel(imod, &ir->ir_set->imod); return 0; } @@ -731,7 +731,7 @@ static void xhci_save_registers(struct xhci_hcd *xhci) ir->s3_erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base); ir->s3_erst_dequeue = xhci_read_64(xhci, &ir->ir_set->erst_dequeue); ir->s3_iman = readl(&ir->ir_set->iman); - ir->s3_irq_control = readl(&ir->ir_set->irq_control); + ir->s3_imod = readl(&ir->ir_set->imod); } } @@ -755,7 +755,7 @@ static void xhci_restore_registers(struct xhci_hcd *xhci) xhci_write_64(xhci, ir->s3_erst_base, &ir->ir_set->erst_base); xhci_write_64(xhci, ir->s3_erst_dequeue, &ir->ir_set->erst_dequeue); writel(ir->s3_iman, &ir->ir_set->iman); - writel(ir->s3_irq_control, &ir->ir_set->irq_control); + writel(ir->s3_imod, &ir->ir_set->imod); } } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 05e35f1303c3..5eb01d1a3e7e 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -214,7 +214,7 @@ struct xhci_op_regs { * struct xhci_intr_reg - Interrupt Register Set, v1.2 section 5.5.2. * @iman: IMAN - Interrupt Management Register. Used to enable * interrupts and check for pending interrupts. - * @irq_control: IMOD - Interrupt Moderation Register. Used to throttle interrupts. + * @imod: IMOD - Interrupt Moderation Register. Used to throttle interrupts. * @erst_size: ERSTSZ - Number of segments in the Event Ring Segment Table (ERST). * @erst_base: ERSTBA - Event ring segment table base address. * @erst_dequeue: ERDP - Event ring dequeue pointer. @@ -228,7 +228,7 @@ struct xhci_op_regs { */ struct xhci_intr_reg { __le32 iman; - __le32 irq_control; + __le32 imod; __le32 erst_size; __le32 rsvd; __le64 erst_base; @@ -241,15 +241,15 @@ struct xhci_intr_reg { /* bit 1 - Interrupt Enable (IE), whether the interrupter is capable of generating an interrupt */ #define IMAN_IE (1 << 1) -/* irq_control bitmasks */ +/* imod bitmasks */ /* * bits 15:0 - Interrupt Moderation Interval, the minimum interval between interrupts * (in 250ns intervals). The interval between interrupts will be longer if there are no * events on the event ring. Default is 4000 (1 ms). */ -#define ER_IRQ_INTERVAL_MASK (0xffff) +#define IMODI_MASK (0xffff) /* bits 31:16 - Interrupt Moderation Counter, used to count down the time to the next interrupt */ -#define ER_IRQ_COUNTER_MASK (0xffff << 16) +#define IMODC_MASK (0xffff << 16) /* erst_size bitmasks */ /* bits 15:0 - Event Ring Segment Table Size, number of ERST entries */ @@ -1447,7 +1447,7 @@ struct xhci_interrupter { u32 isoc_bei_interval; /* For interrupter registers save and restore over suspend/resume */ u32 s3_iman; - u32 s3_irq_control; + u32 s3_imod; u32 s3_erst_size; u64 s3_erst_base; u64 s3_erst_dequeue;