From patchwork Sat Feb 17 00:09:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 202466 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp69719dyc; Fri, 16 Feb 2024 16:20:15 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVnBcUhB1el1gs1PS5fWvOQiM/nJVvF6t9f1rRIbtOdQ4hVP9U7b7OSKrx4lTi4nzQBwE9i609wO7WiutZcaZ5S7tTdsg== X-Google-Smtp-Source: AGHT+IFWjkl00h05cqr6kej3h+I0mOG4CgmXMJnTX9fD8bJBCc3OK6gDTQeOUgaYm2hdlj05P7ee X-Received: by 2002:a17:906:fb9a:b0:a3d:f468:74dc with SMTP id lr26-20020a170906fb9a00b00a3df46874dcmr1784051ejb.34.1708129215568; Fri, 16 Feb 2024 16:20:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708129215; cv=pass; d=google.com; s=arc-20160816; b=LvJUqdlpPTWFO/Xrcuk9hZH6DtHDq5/MfV3fZbIT6ZPNSFy2YylcHA9QMrjwLn8NOL 6Oxz8wNXcIoDkZFeHz0RzphBFxAjqQB8dzH5QVAilObDaa+fs1hXqYTnk4WbTF7Viyz7 pMlA/faxO+6HEXPsJKkJZn58hfI/KkfKWDsSSOW6/UBbfzZGMBAPwAmcAUkDjVQsz10p nucgoT3yR0Rs8omOD3VrCVhLVtfrKkmd0HQ4vWSTURrnsajqebQmWMe9pUHDJ5ud3HBV YIIGb2wTyk1cRQwc5hbFkhy4sNzXCsqSQbzb59XDdXEs1aYNhS20az/rDnOBH6vpKCI8 aAjA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=j6KhsNPJkKJnAiS4EW1wT5/zOfT1G3Xs5VOM7yP6NQg=; fh=Dz/sGw+9lzNFrkoqVn+ZLx/Xi4dC8owgH35eQDavKgI=; b=HEM02sbukoDuvq01YMg0JAztufcmShsR2LlOL2ZdkXzTh20P5AtLTh4oKL16uV+v+i Ks8+7Mjlj2IL8LMuc+wepMSOW9ddtXFIKbhAmVgTbwB4KdCY+kdkYfjdN6dAVGsbouWc 94RmZqDIZEd0QgCltgJNgdGTCzQwLEzjJb73m4JM0O/EMuSYjezlsT/epvxz26ICFsBj XAIBWCeu+YSV46L5zDDaGSGooTmUbzcvEFnQj37wZTl0RWZiHyfaS+qmK5yLNjtqcg3r zNq52MIeKtS3qvDdIueBRBKBO9E3XsUKc5+W1TWxJsq1BGA01tD/lw46VYnFrZf/PF8v nnqw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=KmMicD6S; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-69539-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-69539-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id i10-20020a17090671ca00b00a3d6c7a2560si368252ejk.13.2024.02.16.16.20.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Feb 2024 16:20:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-69539-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=KmMicD6S; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-69539-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-69539-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 089C01F21B6C for ; Sat, 17 Feb 2024 00:20:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3B18E692EE; Sat, 17 Feb 2024 00:11:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="KmMicD6S" Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 EB46F1C2A6; Sat, 17 Feb 2024 00:10:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708128656; cv=none; b=hRiCViIrSk3QvAEpii/+YcGuLcHTmRMv+iVJQLI883tl/q8ndQnel8N/q++OFzgkQodHqPCN6khPPOrENCD8fjSPDfSJofic/l0yCxL6P0GyaUd5YG7KlbmUl5gR6UhAV3e+x5of4XWT2VCouzB0JiPxemIumMYZxR9AoKtbUo4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708128656; c=relaxed/simple; bh=LMiS4knFWEfrRxeu7CJSVOD1I3/B5ywgJcou/bdcDIA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PqgKlXyhtkwtVEks+gv4NYElnluoOIf8fr5BRmAtFeBZYbToi6QU+DJYZT6ILPvdpS0Wpw8WfZhN3MOn4F57HkEeLm/GmKikCkwQ/ePUSyaL1L35nnnUS01rasdN5no2svkhvGioFxBaoUYSagAJqWwxJTd8KzRXHXiQvXxtBk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=KmMicD6S; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41GMI60b028052; Sat, 17 Feb 2024 00:10:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=qcppdkim1; bh=j6KhsNPJkKJnAiS4EW1w T5/zOfT1G3Xs5VOM7yP6NQg=; b=KmMicD6SvvC8TdRWwtp0pcgHQ0S0fYZJ3Emx +C12gNnS+Qdr/faoVXhJPUVtJPMgEHwUD/qOjIN0QLqfOLiOxPS7zoY3IdUhAQDv DtY5FMsSYsu3giElrBQLUdnuzv0wqgG4HJnmf6vpoC0e5ZQBacg4xzlaUIQhT2zW P+s/ePBRL/3x52hj+9rqm6547LzH1HevLYQ7OEHWX9uSD560qln+lpRSgi72R9pU i8uO3ZA7uZaMlfaj45L419lqXucCSoXWs4+OzQZcnCTL79jxy7c8D/Wt9JuLBsSH Gi0imlYITcqhqWJ2qI/1IVnQfaNUH94YIxasyrPS1mAUByl/eg== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wa6nk9e5m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 17 Feb 2024 00:10:32 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41H0AVjj012877 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 17 Feb 2024 00:10:31 GMT Received: from hu-wcheng-lv.qualcomm.com (10.49.16.6) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Fri, 16 Feb 2024 16:10:31 -0800 From: Wesley Cheng To: , , , , , , , , , , , , , , CC: , , , , , , , Mathias Nyman , Wesley Cheng Subject: [PATCH v17 05/51] xhci: update event ring dequeue pointer position to controller correctly Date: Fri, 16 Feb 2024 16:09:31 -0800 Message-ID: <20240217001017.29969-6-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240217001017.29969-1-quic_wcheng@quicinc.com> References: <20240217001017.29969-1-quic_wcheng@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nalasex01a.na.qualcomm.com (10.47.209.196) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: 071h6m0On4iwN-75tIxJqYbYiao25lqv X-Proofpoint-ORIG-GUID: 071h6m0On4iwN-75tIxJqYbYiao25lqv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-16_23,2024-02-16_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 priorityscore=1501 lowpriorityscore=0 spamscore=0 bulkscore=0 mlxscore=0 adultscore=0 clxscore=1015 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402160189 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791103300778355293 X-GMAIL-MSGID: 1791103300778355293 From: Mathias Nyman The event ring dequeue pointer field (ERDP) in xHC hardware is used to inform controller how far the driver has processed events on the event ring. In the case all events are handled and event ring is empty then the address of the TRB after the last processed one should be written. This TRB is both the enqueue and dequeue pointer. But in case we are writing the ERDP in the middle of processing several events then ERDP field should be written with the "up to and including" address of the last handled event TRB. Currenly each ERDP write by driver is done as if all events are handled and ring is empty. Fix this by adjusting the order when software dequeue "inc_deq()" is called and hardware dequeue "xhci_update_erst_dequeue()" is updated. Details in xhci 1.2 specification section 4.9.4: "System software shall write the Event Ring Dequeue Pointer (ERDP) register to inform the xHC that it has completed the processing of Event TRBs up to and including the Event TRB referenced by the ERDP. The detection of a Cycle bit mismatch in an Event TRB processed by software indicates the location of the xHC Event Ring Enqueue Pointer and that the Event Ring is empty. Software shall write the ERDP with the address of this TRB to indicate that it has processed all Events in the ring" This change depends on fixes made to relocate inc_deq() calls captured in the below commits: commit 3321f84bfae0 ("xhci: simplify event ring dequeue tracking for transfer events") commit d1830364e963 ("xhci: Simplify event ring dequeue pointer update for port change events") Fixes: dc0ffbea5729 ("usb: host: xhci: update event ring dequeue pointer on purpose") Signed-off-by: Mathias Nyman Signed-off-by: Wesley Cheng --- drivers/usb/host/xhci-ring.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 1136c6170b1a..62bde16f435e 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -3016,9 +3016,6 @@ static int xhci_handle_event(struct xhci_hcd *xhci, struct xhci_interrupter *ir) return 0; } - /* Update SW event ring dequeue pointer */ - inc_deq(xhci, ir->event_ring); - /* Are there more items on the event ring? Caller will call us again to * check. */ @@ -3141,15 +3138,21 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd) * that clears the EHB. */ while (xhci_handle_event(xhci, ir) > 0) { - if (event_loop++ < TRBS_PER_SEGMENT / 2) - continue; - xhci_update_erst_dequeue(xhci, ir, false); + /* + * If half a segment of events have been handled in one go then + * update ERDP, and force isoc trbs to interrupt more often + */ + if (event_loop++ > TRBS_PER_SEGMENT / 2) { + xhci_update_erst_dequeue(xhci, ir, false); + + if (ir->isoc_bei_interval > AVOID_BEI_INTERVAL_MIN) + ir->isoc_bei_interval = ir->isoc_bei_interval / 2; - /* ring is half-full, force isoc trbs to interrupt more often */ - if (ir->isoc_bei_interval > AVOID_BEI_INTERVAL_MIN) - ir->isoc_bei_interval = ir->isoc_bei_interval / 2; + event_loop = 0; + } - event_loop = 0; + /* Update SW event ring dequeue pointer */ + inc_deq(xhci, ir->event_ring); } xhci_update_erst_dequeue(xhci, ir, true);