Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp797048pxb; Tue, 3 Nov 2020 12:48:18 -0800 (PST) X-Google-Smtp-Source: ABdhPJwggRKX0xDWFrfcKcWbpmkg0MdKYe9v8Ce3I9n5t0qZMFdX/I6NSPWCbrUbfsDgH7IwIHcK X-Received: by 2002:a17:906:3282:: with SMTP id 2mr12964747ejw.52.1604436498455; Tue, 03 Nov 2020 12:48:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604436498; cv=none; d=google.com; s=arc-20160816; b=WV6kcddyHzlnVC0KgyHJgfME33moNsJ6bdln5WJAGFONYGIGzgL3B15MEacIXMa04r UF2+J1wal/PN+97xLe1c+Z8GBhMdr2iJyCPV7Py3ZN6glA+qLBsvqXPg5Ik2gMf9CBE1 ax28li5Ij/3HOj52rEVa9I6M7fJaFf1sawLwZ3fz91RQ9GSPy6k6nuMrTBiZsZhbddfb GB7jIDLd3095oQrzv6ZmRWMB2ranEHxeoHMA15YjaG221X7luf7wfjiZAng3nB104/Or Sm4WosWnj7lr13+Q3pBpDKJ/MqbaN8L0bvTJMfAtbLseXJ9eF/+OpWxBI70Fjqgr0KoK inmA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0eQg6sZnqnsPfgBANIIO+cTqrp4nk0bKceSeDfZ2Rs0=; b=ZyPTYp32Fv0nMIhDTZvlk+Pyq73mY4OqFuvrMHKROnyu5QGjvNv8ixwqnoC0kXliwg JJc1Pk1l5NnSKcCLnciXWME+rs/z28hCCgPb+KMi+biF4zj0P5FtLyoxvYHGSxWQTwAo CG1V8Cn63RXrJ2jv0RmVJjhtM9a7HKLrStLDAHXpvl0VdKmVAdk0wBapyzTmXU0OfTdH deMboZJO10uMvLPptO0NcELx1Mdjk20/KI3U0nhQjv+/bEv2aBrExnzSAymocsjuY9ya zjSIWewzM45BTmyjp0BKvAzf0f6HtF4A1yEiUUNrtyFK/k3/HkHujgrWLOCdi3UlqoYy TlGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="mfH2U/Z3"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lr26si8906009ejb.747.2020.11.03.12.47.55; Tue, 03 Nov 2020 12:48:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="mfH2U/Z3"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730419AbgKCUpQ (ORCPT + 99 others); Tue, 3 Nov 2020 15:45:16 -0500 Received: from mail.kernel.org ([198.145.29.99]:33144 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730119AbgKCUpN (ORCPT ); Tue, 3 Nov 2020 15:45:13 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E6B39223EA; Tue, 3 Nov 2020 20:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436312; bh=kqDcOyj+tcuk7A4b5KrS9aWFMKow0aK5eT0UyvdUGco=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mfH2U/Z3ZMXkKCN0d6Ryu003CJHY81R9iTZhtx3w3b+rcfPOwgv7TP/Rsoy7y1YdO Wa1H98jCP/hLyXSriCizP0j0yUwEStfWGc8LeS5AwtlQNevoq/a8OLEtOXxBH6LxJF OBdTW5toJkxOXHWoShLVaIdrHki+2EclCTqETLnA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chuanhong Guo , Mark Brown Subject: [PATCH 5.9 196/391] spi: spi-mtk-nor: fix timeout calculation overflow Date: Tue, 3 Nov 2020 21:34:07 +0100 Message-Id: <20201103203400.118825819@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chuanhong Guo commit 4cafaddedb5fbef9531202ee547784409fd0de33 upstream. CLK_TO_US macro is used to calculate potential transfer time for various timeout handling. However it overflows on transfer bigger than 512 bytes because it first did (len * 8 * 1000000). This controller typically operates at 45MHz. This patch did 2 things: 1. calculate clock / 1000000 first 2. add a 4M transfer size cap so that the final timeout in DMA reading doesn't overflow Fixes: 881d1ee9fe81f ("spi: add support for mediatek spi-nor controller") Cc: Signed-off-by: Chuanhong Guo Link: https://lore.kernel.org/r/20200922114905.2942859-1-gch981213@gmail.com Signed-off-by: Mark Brown Signed-off-by: Greg Kroah-Hartman --- drivers/spi/spi-mtk-nor.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/drivers/spi/spi-mtk-nor.c +++ b/drivers/spi/spi-mtk-nor.c @@ -89,7 +89,7 @@ // Buffered page program can do one 128-byte transfer #define MTK_NOR_PP_SIZE 128 -#define CLK_TO_US(sp, clkcnt) ((clkcnt) * 1000000 / sp->spi_freq) +#define CLK_TO_US(sp, clkcnt) DIV_ROUND_UP(clkcnt, sp->spi_freq / 1000000) struct mtk_nor { struct spi_controller *ctlr; @@ -177,6 +177,10 @@ static int mtk_nor_adjust_op_size(struct if ((op->addr.nbytes == 3) || (op->addr.nbytes == 4)) { if ((op->data.dir == SPI_MEM_DATA_IN) && mtk_nor_match_read(op)) { + // limit size to prevent timeout calculation overflow + if (op->data.nbytes > 0x400000) + op->data.nbytes = 0x400000; + if ((op->addr.val & MTK_NOR_DMA_ALIGN_MASK) || (op->data.nbytes < MTK_NOR_DMA_ALIGN)) op->data.nbytes = 1;