From patchwork Fri Dec 2 16:18:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Fitzgerald X-Patchwork-Id: 28992 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp951351wrr; Fri, 2 Dec 2022 08:25:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf4xCd3B/H2mK1aV40GtAPduCzg4ND76p/P8TbWL1B6mML2WRR8Kn0hL3EzXQ9Agm4IHm5pP X-Received: by 2002:a17:90a:5918:b0:213:ff:1cda with SMTP id k24-20020a17090a591800b0021300ff1cdamr74454483pji.86.1669998349964; Fri, 02 Dec 2022 08:25:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669998349; cv=none; d=google.com; s=arc-20160816; b=FIYUAi1HbbCyDox/6xKZs7rLPQ84QI2wLfOuQq5zErwNMHVfBCgtc62Aw37iKIE1QJ H3vWX5OBUW0fQzmivQJUBatZG3hV+hFLb3IqqA6Kd7iRYWssWdoxvoSWprFKafSLk96J UXw/zNYw5SYSTfXxDh0vQU3r2nHQsOA3fZg1+43qYmTIzIVGoyebEjv5hT5nNZ93qoMB Hvtgcht1adM6ixC2JRT2D1FRZbWEftazpns5UEQTMqrvSVl7a3dW0IcBXgsApiTEeW67 9CIfUf5DRw27kWWC7huaHZmKlF2QIunEPuYblf99dFvpOTUzlCcnUjTKGGtW52cJ7bmW wu2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fnOUlVD1+EfyAjC/Rot3TtuSZIDDO+MesIulzw8RRDQ=; b=Oxz/miT+x5TA+OBlYnCNJqPfBsKTqFGjLXLxzEQ8AwBWWb4jAiW1CgsiUDgRkvX7wu kmfl91xTxt+vlal3gaWsjAjfKjdwUh9X3QrTLIac3tMTgnCLeJ3LCQYCnenOJj3DPsuh NOR79nV37xzuo67LkBiAAVjiD+QT2JOIvTm72pgakY9t0xctaSMfstX63VhxmY789BG8 ln5Bn+vChUSwkOmgKUDxpp0QhwyXaYb1Az4Geef/Qt40QGgLvSPx/WVaeDgM0EMy8LT0 AfHXgIfAlMF0PKrrb/RDTB2+zlDLpIqAnee3JP71GSZXMUGviqeKmoiTAocYhfSYewho iw7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cirrus.com header.s=PODMain02222019 header.b=jHfhA1Oj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cirrus.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e23-20020a656897000000b0047764bac806si7898562pgt.749.2022.12.02.08.25.35; Fri, 02 Dec 2022 08:25:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cirrus.com header.s=PODMain02222019 header.b=jHfhA1Oj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cirrus.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234025AbiLBQXC (ORCPT + 99 others); Fri, 2 Dec 2022 11:23:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234028AbiLBQWc (ORCPT ); Fri, 2 Dec 2022 11:22:32 -0500 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F042ABF90E for ; Fri, 2 Dec 2022 08:19:22 -0800 (PST) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2B25sRqo018164; Fri, 2 Dec 2022 10:18:15 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=fnOUlVD1+EfyAjC/Rot3TtuSZIDDO+MesIulzw8RRDQ=; b=jHfhA1OjEIaECty7TP/89pujFIqgTTgH6+c9iZd6lJrGr3xBOGURNWkatOd8iy6cDlwC eQ2IDl0RyPiV6e6C8pu7xbziLneKTFXlGJiq7wTkLK25yeGSbFdJd3XBfrEYip7/NqUV CDj8L9nTNfWkwzzRJpuMNeyBaMpwEOzLVOU9zQ+AT0mwVr2NRwr+zgS797/kItnG1eJg cy3iW1rgCinZYzmCSfEWaajSl0aryp76SHZw8ttpPBdgFP94C+ikMWld7GW7MTnIdM3M f0C1+Ffprab4pZIMb+9pdMHAaSmw5p2U48vLvyxHnO9FPbb3YuL0wBkHFM6JFNPegsok gA== Received: from ediex02.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3m6k2vt0n5-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 02 Dec 2022 10:18:14 -0600 Received: from ediex02.ad.cirrus.com (198.61.84.81) by ediex02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20; Fri, 2 Dec 2022 10:18:12 -0600 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by anon-ediex02.ad.cirrus.com (198.61.84.81) with Microsoft SMTP Server id 15.2.1118.20 via Frontend Transport; Fri, 2 Dec 2022 10:18:12 -0600 Received: from edi-sw-dsktp-006.ad.cirrus.com (edi-sw-dsktp-006.ad.cirrus.com [198.90.251.111]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 8B719B38; Fri, 2 Dec 2022 16:18:12 +0000 (UTC) From: Richard Fitzgerald To: , CC: , , , , , Richard Fitzgerald Subject: [PATCH v2 2/3] soundwire: cadence: Remove wasted space in response_buf Date: Fri, 2 Dec 2022 16:18:11 +0000 Message-ID: <20221202161812.4186897-3-rf@opensource.cirrus.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221202161812.4186897-1-rf@opensource.cirrus.com> References: <20221202161812.4186897-1-rf@opensource.cirrus.com> MIME-Version: 1.0 X-Proofpoint-GUID: xtqEQNcKQUURuLF1eA2wera7p7oe0Y3I X-Proofpoint-ORIG-GUID: xtqEQNcKQUURuLF1eA2wera7p7oe0Y3I X-Proofpoint-Spam-Reason: safe X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751120189914009866?= X-GMAIL-MSGID: =?utf-8?q?1751120189914009866?= The response_buf was declared much larger (128 entries) than the number of responses that could ever be written into it. The Cadence IP is configurable up to a maximum of 32 entries, and the datasheet says that RX_FIFO_AVAIL can be 2 larger than this. So allow up to 34 responses. Also add checking in cdns_read_response() to prevent overflowing reponse_buf if RX_FIFO_AVAIL contains an unexpectedly large number. Signed-off-by: Richard Fitzgerald --- Changes since v1: - Make response_buf large enough for the maximum IP config of 32 plus the mysterious extra 2. - If RX_FIFO_AVAIL is too big trim it to the size of response_buf instead of CDNS_MCP_CMD_LEN. --- drivers/soundwire/cadence_master.c | 7 +++++++ drivers/soundwire/cadence_master.h | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c index 27699f341f2c..a6635f7f350e 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -774,8 +774,15 @@ static void cdns_read_response(struct sdw_cdns *cdns) u32 num_resp, cmd_base; int i; + /* RX_FIFO_AVAIL can be 2 entries more than the FIFO size */ + BUILD_BUG_ON(ARRAY_SIZE(cdns->response_buf) < CDNS_MCP_CMD_LEN + 2); + num_resp = cdns_readl(cdns, CDNS_MCP_FIFOSTAT); num_resp &= CDNS_MCP_RX_FIFO_AVAIL; + if (num_resp > ARRAY_SIZE(cdns->response_buf)) { + dev_warn(cdns->dev, "RX AVAIL %d too long\n", num_resp); + num_resp = ARRAY_SIZE(cdns->response_buf); + } cmd_base = CDNS_MCP_CMD_BASE; diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence_master.h index 0434d70d4b1f..e0a64b28c6b9 100644 --- a/drivers/soundwire/cadence_master.h +++ b/drivers/soundwire/cadence_master.h @@ -8,6 +8,12 @@ #define SDW_CADENCE_GSYNC_KHZ 4 /* 4 kHz */ #define SDW_CADENCE_GSYNC_HZ (SDW_CADENCE_GSYNC_KHZ * 1000) +/* + * The Cadence IP supports up to 32 entries in the FIFO, though implementations + * can configure the IP to have a smaller FIFO. + */ +#define CDNS_MCP_IP_MAX_CMD_LEN 32 + /** * struct sdw_cdns_pdi: PDI (Physical Data Interface) instance * @@ -117,7 +123,12 @@ struct sdw_cdns { struct sdw_bus bus; unsigned int instance; - u32 response_buf[0x80]; + /* + * The datasheet says the RX FIFO AVAIL can be 2 entries more + * than the FIFO capacity, so allow for this. + */ + u32 response_buf[CDNS_MCP_IP_MAX_CMD_LEN + 2]; + struct completion tx_complete; struct sdw_defer *defer;