Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp3374802rwb; Sat, 12 Nov 2022 04:44:57 -0800 (PST) X-Google-Smtp-Source: AA0mqf6sYPDfe6WtJ0ql0RTox5+Xt0m2kM20F1PzarPR6DSUZ5RfB3dcq42PrnshBy4iFhN8qmo4 X-Received: by 2002:a63:fb0e:0:b0:43b:f03d:b0fe with SMTP id o14-20020a63fb0e000000b0043bf03db0femr5265209pgh.338.1668257097538; Sat, 12 Nov 2022 04:44:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668257097; cv=none; d=google.com; s=arc-20160816; b=FETAOWi+IDnGilfoXTCXWOavWLo32xb0v/1/nGWCTNPXVGGgYYRUw/4zPeUt4LGf7l 4uP6V6PzDn+8uM9MGXBcq+pVQ+Ey14M5S0KTL5UFpcFQtA9rA3eVO4sUhhKptcBlut9y 1lX+3i08Ej3zEaXjCfnR2VQsykTXMnis1+KQdmp2JYJfKk7IjKlYRGpjEY4P81ZK3aTj c3zN3EPS5mh+G0e6Z6PpnOkBikuAazedIt0V+0a8/ve6+SSEaqX+uR2ezTNYEVajBE6C 2mDYxgybwh0PFXagebdtqsiv5AMQKEb8YRXQdA8i96J0PSfwCzEZPWG9JsoJhh7QgzaT eg+Q== 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 :message-id:date:subject:cc:to:from:feedback-id:dkim-signature :dkim-signature; bh=x9FizG+eL/8/EI7i81TIdmOdCun6VmkRyznqPByhDis=; b=lsKmDZHrudPpXHv3qdXfSeEJvsoyiXCdXGGbp+A72M/fTNmkdxpajy5ChLEttopdd9 dlCVrQwRKgYO00W/4J/tf1qS6/KyQSOBmYVGCtuUiu3WknBPc/jDEQaEcMdXCew7qI9a faTQomqpzrydEB5jzh6PCphHkTIQlo3OQxmHyHMVOfRj57vYzt1HKzP/6QQxb0jtFu6A OYalnd/Lw4wn/dmhK2SQjSYMxovN87rWD0PMPe0Dc+4Coxhx9dEkO4Lr4Hx+Lw60CMHg M4Yj2Wj9f5SbJGXMFWdb6PfTnfKHq2U9gYmA5gWbny7NVY9jPcTMfXHaaAWfF7V3hiV6 aAXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@svenpeter.dev header.s=fm1 header.b=XoJPG62A; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=C12n0toL; 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=NONE sp=NONE dis=NONE) header.from=svenpeter.dev Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t2-20020a635f02000000b0046ec2ad4a97si5584189pgb.163.2022.11.12.04.44.46; Sat, 12 Nov 2022 04:44:57 -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=@svenpeter.dev header.s=fm1 header.b=XoJPG62A; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=C12n0toL; 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=NONE sp=NONE dis=NONE) header.from=svenpeter.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234905AbiKLMEz (ORCPT + 90 others); Sat, 12 Nov 2022 07:04:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233962AbiKLMEx (ORCPT ); Sat, 12 Nov 2022 07:04:53 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23F1A17895 for ; Sat, 12 Nov 2022 04:04:53 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id B04E65C00D7; Sat, 12 Nov 2022 07:04:50 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Sat, 12 Nov 2022 07:04:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=svenpeter.dev; h=cc:cc:content-transfer-encoding:date:date:from:from :in-reply-to:message-id:mime-version:reply-to:sender:subject :subject:to:to; s=fm1; t=1668254690; x=1668341090; bh=x9FizG+eL/ 8/EI7i81TIdmOdCun6VmkRyznqPByhDis=; b=XoJPG62A97EKGbYvKLrn2BxEfc /e1ug9nk80w5t0KyhMnUyameiIsYSIrwpdLZkuDnQaEZgBDP6njcMR5SYjIh8HzT BcgCvKrgsv82CpZh+1WY5xaAR6VJEljFPIXVnCaiFEpvEe3xrbGEz4uDYNjMXjSF oUtmb/p2IUsaNAoAYSDUsitHMYvKfKiglDrJ2wXW9mptibPaPZt+gRM6E3HM0J8E TviFyiKShLo6eJ08gm6X2GYXtQ6dFqf6JBv+6SDxU3Pa4RPkZ3x1c8WlWxgeXkLX hoNFE5Nb2WwVGzTiUK1z9TA9cOTaOZ5y/3LJiFTfMecCXfQGJVYiZfpTxoaA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1668254690; x=1668341090; bh=x9FizG+eL/8/EI7i81TIdmOdCun6VmkRyzn qPByhDis=; b=C12n0toL5UY1BE0ooeeFIycg0oKY8VmiQyhHJ92+E+DZLWWKVB0 YfMPX30G4blpX0nQPB+Nz589wFlVM0ybC4K6DKTUEwcAnX+HxreUQqqN1bMXOfSz nl2Mb+cAgQFno+ySIbrEHsKCRTomb+sMxUPvldwLYJghzgqq0cmcgr3T/Oo/CKW1 D9pbYCMMOEm/ElFK0rBig/qUHg8iWEJ15qkfDNUGLWLjjozLZ9ep9aQBztCp5TBI Vj3H38w+1h2dKZdVcwMcCx8Cv8E/MraD93C8A+8yCQ1Ex9kIgP1hjP8PttTwGA+k ZlFOPjvOnMcLPyNAO1q2EQlUpA6JjgyifbA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvgedrfeekgdefjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvfevufffkffoggfgsedtkeertdertddtnecuhfhrohhmpefuvhgvnhcurfgv thgvrhcuoehsvhgvnhesshhvvghnphgvthgvrhdruggvvheqnecuggftrfgrthhtvghrnh epleduffeiheeuvedtffevtdeuleeljeduudfgtedtvefhfeffvdfghfejhefgleelnecu vehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepshhvvghnse hsvhgvnhhpvghtvghrrdguvghv X-ME-Proxy: Feedback-ID: i51094778:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 12 Nov 2022 07:04:49 -0500 (EST) From: Sven Peter To: Srinivas Kandagatla Cc: Sven Peter , linux-kernel@vger.kernel.org Subject: [PATCH 1/2] nvmem: Handle reading cells with bit offset > 8 Date: Sat, 12 Nov 2022 13:04:46 +0100 Message-Id: <20221112120447.36877-1-sven@svenpeter.dev> X-Mailer: git-send-email 2.30.1 (Apple Git-130) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, 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 Some nvmem controllers like Apple's eFuses or Nintendo's OTP have a cell size that's larger than one byte. Consumers may however still need access to a subset of bits that start after the first byte. Handle this inside nvmem_shift_read_buffer_in_place(). Signed-off-by: Sven Peter --- drivers/nvmem/core.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 321d7d63e068..a5b8d6989f8e 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1379,15 +1379,23 @@ EXPORT_SYMBOL_GPL(nvmem_cell_put); static void nvmem_shift_read_buffer_in_place(struct nvmem_cell_entry *cell, void *buf) { u8 *p, *b; - int i, extra, bit_offset = cell->bit_offset; + int i, padding, extra, bit_offset = cell->bit_offset; + int bytes = cell->bytes; p = b = buf; if (bit_offset) { + padding = bit_offset/8; + if (padding) { + memmove(buf, buf + padding, bytes - padding); + bit_offset -= BITS_PER_BYTE * padding; + bytes -= padding; + } + /* First shift */ *b++ >>= bit_offset; /* setup rest of the bytes if any */ - for (i = 1; i < cell->bytes; i++) { + for (i = 1; i < bytes; i++) { /* Get bits from next byte and shift them towards msb */ *p |= *b << (BITS_PER_BYTE - bit_offset); @@ -1400,7 +1408,7 @@ static void nvmem_shift_read_buffer_in_place(struct nvmem_cell_entry *cell, void } /* result fits in less bytes */ - extra = cell->bytes - DIV_ROUND_UP(cell->nbits, BITS_PER_BYTE); + extra = bytes - DIV_ROUND_UP(cell->nbits, BITS_PER_BYTE); while (--extra >= 0) *p-- = 0; -- 2.25.1