Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp870086ybl; Sat, 18 Jan 2020 13:01:32 -0800 (PST) X-Google-Smtp-Source: APXvYqzcc2QkiWHRzhXiujfqXPqYUCQqvSy/Ay4KvxNUB2Wqb6pC0eLDFxrsIgTAlOehv9RvzMaT X-Received: by 2002:a9d:10e:: with SMTP id 14mr10712137otu.59.1579381292009; Sat, 18 Jan 2020 13:01:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579381292; cv=none; d=google.com; s=arc-20160816; b=00tYEfPi6tFRcUYXbTGJgmlSJ7biY4SjZ06HP8H98rSzuYmXRk/iNczxUKjecq7uNU SIkaR4mL/Lzyvn92wgbhHY4ZMC6ceXHV+MLpSi8bPxqgh+pjnIu7v0DgbSfhA1+Viy9E TThhettGK5l5rf2nG7xHHc5boFD1yiVkX+HVSTzFyfYRfePjW4RQKLsshkvdJQBy7ut8 SngLd1e1IekyQJ1K4LNNsudtT33OGXjAYJHJOIx4/KVvUve96uzGLHxkZb1HuVrlBD5X cqjcZEvswbXufMjDG3ZoFw2foepWIsMsDEDffs6bRxZa4keyjpcjHZjX2beIo+ApyyjQ np3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=76oGiDrq8kVI9ofJf4Cj0FF8xLQAXivYPqr31KwJvbA=; b=HFRFpDYuntcas065Ywitt+RCwijdlHAbfJbi+UXtViy9PO+MGI4TY6cNHR4m0U+STe c6nDPaE38OY1C4FR6QRDI/EDOR1Lj8ZTfqMVQkd0wannZqwZOAfmTEShGu3SJKkahTBw CYCrEMdWJM0PH04GhLmVYbfBujX7dyUZqdakFSjG7c7Pt0AiVc5Wyae09cgMzS1E/H84 rXNrlvpzp9vlXf7wxRRvLhde9veZlhduB63XdvPhRRfqWCkXBq8FsHtJZoJRuIBbrUB+ P7dWBdcCyRGVTnUz5bJguCz/Q/kUY8Gvb85LdnqqK96oLekmwtX0czQqV/0bse0B4tng lYBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=B519eFUo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y140si16000965oia.49.2020.01.18.13.01.19; Sat, 18 Jan 2020 13:01:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=B519eFUo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727111AbgARU4k (ORCPT + 99 others); Sat, 18 Jan 2020 15:56:40 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:35540 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727041AbgARU4k (ORCPT ); Sat, 18 Jan 2020 15:56:40 -0500 Received: by mail-wr1-f67.google.com with SMTP id g17so25824684wro.2 for ; Sat, 18 Jan 2020 12:56:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=76oGiDrq8kVI9ofJf4Cj0FF8xLQAXivYPqr31KwJvbA=; b=B519eFUoq9aYU2Hroc3ku2dSbFfpLhYrLX3/lPqZr8RJ1/mfhkb2sxrtrVX0Qp+3sv 2ZMeARit+ZIGpFwcTp/galJOipbpqXxxYYX4EkVEmDW8JpNY0iCIYwZEg8/vO2rMPgBn Ka4VbX4Fa8cw07BUx4Lgv7dGn4GTiZsbWqQVb0kafRWC6LkaLzRoWXtD70hADSLNp5P3 QDjDkLFysmbZshIu6c1Xw/HmipoF39d0sv8QHyt3kBfMpgcOhnqb5muoFdpyCNMVeuun jFWawypvpJTdhwNPYtFwIdB3quug/IZFP8MilSbk318frQdrMyS67lLZmstfatgIHZup Lo2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=76oGiDrq8kVI9ofJf4Cj0FF8xLQAXivYPqr31KwJvbA=; b=rXQiYdfu73zbqWLiqSX6PArqrbe0Ogdqo/lDpjak7SiU3lh26x5eC2FVMsqAFVS4mx Y7XiioBDtfSrPwfW8E4D/780UAaUrQ/sRmPUSvEvJZasBaahZQ2vBRq3qa4AB/Zmg+re ruVZAwZu3bKKOIH4DUSKwCW7akcowhRk03MJXgNcpFnrknR0NZHBY85+oZD1aijcy+AN AYlOwfYahOE31Fb9eMYaLjk5PzGNnpQlR6c2vuQetMLbMF0gGyQlR8wT15rXfGRdDGnX nQf73cXy7fx3Xa/mE1IDNhndqstZZAu6EqjdgnJ5Qia3tYvegt5LhOaVpTZsgHVZXc0x Hxnw== X-Gm-Message-State: APjAAAW+U2TnkJsppsJkmdVtAy8vPyDSiDJ6xqp5JNBN0jbx5iOV2pDB oib0hCWqyGUaUlqyQ8IV9M3HrJdeaUyrKw== X-Received: by 2002:a5d:494f:: with SMTP id r15mr10264690wrs.143.1579380998222; Sat, 18 Jan 2020 12:56:38 -0800 (PST) Received: from Lappy.lan (cpc157701-rdng30-2-0-cust857.15-3.cable.virginm.net. [86.18.131.90]) by smtp.gmail.com with ESMTPSA id t125sm16244042wmf.17.2020.01.18.12.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jan 2020 12:56:37 -0800 (PST) From: Ben Whitten To: linux-kernel@vger.kernel.org Cc: afaerber@suse.de, Ben Whitten , Mark Brown , Greg Kroah-Hartman , "Rafael J. Wysocki" Subject: [PATCH v2 2/2] regmap: stop splitting writes to non incrementing registers Date: Sat, 18 Jan 2020 20:56:25 +0000 Message-Id: <20200118205625.14532-2-ben.whitten@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200118205625.14532-1-ben.whitten@gmail.com> References: <20200118205625.14532-1-ben.whitten@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When writing to non incrementing registers we should not split the writes in any way, writing in one transaction. Signed-off-by: Ben Whitten --- drivers/base/regmap/regmap.c | 38 +++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 59f911e57719..d0dbf0ffd70f 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1528,24 +1528,30 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, int win_offset = (reg - range->range_min) % range->window_len; int win_residue = range->window_len - win_offset; - /* If the write goes beyond the end of the window split it */ - while (val_num > win_residue) { - dev_dbg(map->dev, "Writing window %d/%zu\n", - win_residue, val_len / map->format.val_bytes); - ret = _regmap_raw_write_impl(map, reg, val, - win_residue * - map->format.val_bytes); - if (ret != 0) - return ret; + if (!regmap_writeable_noinc(map, reg)) { + /* If the write goes beyond the end of the window + * split it */ + while (val_num > win_residue) { + dev_dbg(map->dev, "Writing window %d/%zu\n", + win_residue, + val_len / map->format.val_bytes); + ret = _regmap_raw_write_impl(map, reg, val, + win_residue * + map->format.val_bytes); + if (ret != 0) + return ret; - reg += win_residue; - val_num -= win_residue; - val += win_residue * map->format.val_bytes; - val_len -= win_residue * map->format.val_bytes; + reg += win_residue; + val_num -= win_residue; + val += win_residue * map->format.val_bytes; + val_len -= win_residue * map->format.val_bytes; - win_offset = (reg - range->range_min) % - range->window_len; - win_residue = range->window_len - win_offset; + win_offset = (reg - range->range_min) % + range->window_len; + win_residue = range->window_len - win_offset; + } + } else { + val_num = 1; } ret = _regmap_select_page(map, ®, range, val_num); -- 2.17.1