From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9A894C77B7D for ; Wed, 17 May 2023 15:25:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232274AbjEQPZJ (ORCPT ); Wed, 17 May 2023 11:25:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232151AbjEQPZC (ORCPT ); Wed, 17 May 2023 11:25:02 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3BF7F212B for ; Wed, 17 May 2023 08:25:01 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-561c11762b7so12678777b3.3 for ; Wed, 17 May 2023 08:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684337100; x=1686929100; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=9ggg47owN/Xa0YfR4lvdlUbhDdcBcrmCX/I8JB/8yL0=; b=iUZSQG6ScPLcLq5ulkvVrIeqQDnsoRuyidNQGdtRFKt7tpBxxL6slfGHKU3gnCz2I2 b1XoGHuOGD4cmSOGjLq7TarDVgMZf9GLQwDDWDAcMiSXI2l0NDxy3d2mItAwcYNvgiUH wr5m0OBOmqARgvMuwXUy97Mt3W7avGpXRPmDpiNeHQ8LVukmA/j2m2az/5RKHGQ0LqAy vfUexmRIkwBvMs13J606b8qF4j0fQzdDo+pvNAAJ6SZbGHH62HjCco/IQmzTQ9Yn5XCK fDxbG03ur49Z4FDV4YHnK9w7KM9JmDJnSHMgOR7eHROfHIPmONZSQd3ptYzJW+UPuTY2 o+ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684337100; x=1686929100; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9ggg47owN/Xa0YfR4lvdlUbhDdcBcrmCX/I8JB/8yL0=; b=M60XrRRWCCEZeNITzprpYjGrrE1Evm47MAgw/PJvpMYe6Pp8FYIR4Cz65sR/WXqMqy SLHffp9ev8yXx9uUkerI82XR0O542rAwn82n8AaAWsfOdKn9sAnwdaqCd3t3Jm0yujhQ G1VJMn1CLJVM9B3siBNmCHZZPNM5gqdCB03IKKRBjfICNlsVWh2Yec7P0JHndfmbcUOy LuPg7Kadrou5GqbOYB4gc1l3ztrm/6tGdPO0HCG686LZgu9yvW00RxH0K+Emu5wmIE6h vuyhq3qWyEYy1j51jMKoQ/bg3fevsKKvnM5mg/9NgsU1lvW7mmqDbUlfrm8cfDqNlKyu YWLQ== X-Gm-Message-State: AC+VfDytyenVCUWPF4nY2S5QL29rjgM+JotwGyZxtIQvjiXzhM8x+0KO CKiYgoWLou7/NupaPhEXp4zaYmV+yTDP X-Google-Smtp-Source: ACHHUZ4PQdUXCCSLAtIZYL+7QWe9+mOuCPbxsm7ZroHCGZyIkmyybZwdcP1YWAVjFJjhuga1Q1j8HHkO7ivC X-Received: from tetrad.chi.corp.google.com ([2620:15c:2:a:3c32:ed06:dc65:d66f]) (user=jwylder job=sendgmr) by 2002:a81:b70b:0:b0:561:8fc0:24af with SMTP id v11-20020a81b70b000000b005618fc024afmr3497273ywh.9.1684337100529; Wed, 17 May 2023 08:25:00 -0700 (PDT) Date: Wed, 17 May 2023 10:20:11 -0500 In-Reply-To: <20230517152444.3690870-1-jwylder@google.com> Mime-Version: 1.0 References: <20230517152444.3690870-1-jwylder@google.com> X-Mailer: git-send-email 2.40.1.606.ga4b1b128d6-goog Message-ID: <20230517152444.3690870-2-jwylder@google.com> Subject: [PATCH] regmap: Account for register length when chunking From: Jim Wylder To: Mark Brown Cc: Greg Kroah-Hartman , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, Jim Wylder Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, when regmap_raw_write() splits the data, it uses the max_raw_write value defined for the bus. For any bus that includes the target register address in the max_raw_write value, the chunked transmission will always exceed the maximum transmission length. To avoid this problem, subtract the length of the register and the padding from the maximum transmission. Signed-off-by: Jim Wylder --- drivers/base/regmap/regmap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index db7851f0e3b8c..fa2d3fba6ac9d 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -2082,6 +2082,8 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, size_t val_count = val_len / val_bytes; size_t chunk_count, chunk_bytes; size_t chunk_regs = val_count; + size_t max_data = map->max_raw_write - map->format.reg_bytes - + map->format.pad_bytes; int ret, i; if (!val_count) @@ -2089,8 +2091,8 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, if (map->use_single_write) chunk_regs = 1; - else if (map->max_raw_write && val_len > map->max_raw_write) - chunk_regs = map->max_raw_write / val_bytes; + else if (map->max_raw_write && val_len > max_data) + chunk_regs = max_data / val_bytes; chunk_count = val_count / chunk_regs; chunk_bytes = chunk_regs * val_bytes; base-commit: ad2fd53a7870a395b8564697bef6c329d017c6c9 -- 2.40.1.606.ga4b1b128d6-goog