From patchwork Sat Apr 13 10:32:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 162164 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp637897jan; Sat, 13 Apr 2019 03:34:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqzffeiLuGaALRux0Lk3I/Q7pAG2DjGpMrbq1Waanfv6jPljVrd/G/3uP1qn6xOVi5YIxB0E X-Received: by 2002:aa7:81d0:: with SMTP id c16mr63398837pfn.132.1555151639950; Sat, 13 Apr 2019 03:33:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555151639; cv=none; d=google.com; s=arc-20160816; b=G3jDjnQiyU06DzbaPZTSG6TlGpnjQIwGvT/Tgye6eI1N515AR8eB6voT6QpxQMypTV b54q3jItSiwooxFWZjj8WNMmneettu5kM7Xnkx5NbiWH46Y3B9BR9BsQnsP5eOY3aFJn S0EJ1jfMjZie9MtlEkoSN+2suugShpAegv2l9dOUA9IU24oihIHM6doRBV79psGn9ajA gjowPqpsuqW6Q6CT7XB3Mw+85Fapilzcyq/blUAy2nk77sYPiGD4FWQ49P9Z3r55JOiJ bsQPmvHhWnPE1rrQANdyYrTDrD2d18XIGsQGGg5JiZoMHFW+ubnIHBISO77asy6yNvap TtYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ha/EwT9JIQJ8acUTtqE5mB27okMdtBeOqTiWB8z6ahU=; b=frNMSbVOgJZG5Fmy2hFq03IYWf1nsh9kjpYKTozzphcwtHj0ex/lnMwrf7hopdZlNK ykAHddp4XQr6PnZIbnRWg6H2PRFJNRdLHl3wsslR5euZmQavu6rkUGaTPBneQogZdE8Y hEtp/4ZF2KBot+JgKCuzEJ0iX7OssOnJWKEm1AKSuHNMG5gFprO1I40OvfA3deU1Abov GVZGg0WcdqdP8FDq9Tib+GU/zBYwlJ2tjEi/pvitN3gceIbnriJb2ppHT6inWQF0ERCk RoV3qd48Dmq5UqhfO0tKUfq8eRgEqY0pTvGs3WVFgBiGXAz76rHURI6owHKpBD3SLso+ QxwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kdl1SMFY; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3si17186596ple.382.2019.04.13.03.33.59; Sat, 13 Apr 2019 03:33:59 -0700 (PDT) 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=pass header.i=@linaro.org header.s=google header.b=kdl1SMFY; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727263AbfDMKdX (ORCPT + 30 others); Sat, 13 Apr 2019 06:33:23 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:39224 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727113AbfDMKdN (ORCPT ); Sat, 13 Apr 2019 06:33:13 -0400 Received: by mail-wr1-f67.google.com with SMTP id j9so15130702wrn.6 for ; Sat, 13 Apr 2019 03:33:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ha/EwT9JIQJ8acUTtqE5mB27okMdtBeOqTiWB8z6ahU=; b=kdl1SMFYKVzRFDhoZyx9G2BqRlRt6ezTS1kO5zgFoNRukLeaRNX6x2E6w+fW9GLJnc WCDrg0aPR3zqo89okobQc1HijhB69sVPiZ8PDIBWshPgjL2HJzPG835Tg2I9V4PXL+yZ fov5VtjY2ScWC37vkzVdbipsiKDCDO5n2MQfSevlNHt8YAG4jqWbJ5dZqbIzIl1uzYMU wUE4kMUWfZScuJFU//EaWx7HcXYl5fqevJGJcVbbUgObhKaFE+qal3M2s1d4zjO0Bm5C rEFqNsH92MkYzK5O7Y4TwbktZ2zwoTJew2EzhdJppS5w1RVgjcyN9MHGvVE3FoKgV/0b 1Ubw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ha/EwT9JIQJ8acUTtqE5mB27okMdtBeOqTiWB8z6ahU=; b=mFzTaF1JdGu4n65GhmBQaLSizo0xcK+v5gseVp3gGLdQOy793X0W44ebDJSxUoJtHN 4V5iXp154cDjNTTiGc2SRejPQLGLew3YooTJAYsFTI5UkEgGkIKmbiPwSii4G6pfnjGC gNcNcT1wyrJ25OGY6MoznIrmHNhIyF5YDr2P9Viy7DvOkKPkqtsOvH06jcFXXBDEM9PR FrLixqeKXam7In+LnFyy9TfkMKOgbBLB0prlI+x8WtxdrSa7KJD2xi+8hV4S/kL6jkSK fdoR3P+QmJrDYVMg7qUE+bP2P5YSySxXIIDEsF61jOfcv6ughABMSXzB5Pre3Qso6Nwe hX3Q== X-Gm-Message-State: APjAAAXkfuANRMbdJhIKh6X5pFPk0y7CK8RdUUQdOUjvwuobV78DO8fX OY60qrjFJsP9+DW3sKvQJ62jtQ== X-Received: by 2002:adf:ef91:: with SMTP id d17mr38390472wro.78.1555151591792; Sat, 13 Apr 2019 03:33:11 -0700 (PDT) Received: from srini-hackbox.lan (cpc89974-aztw32-2-0-cust43.18-1.cable.virginm.net. [86.30.250.44]) by smtp.gmail.com with ESMTPSA id u17sm19547303wmu.36.2019.04.13.03.33.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 13 Apr 2019 03:33:11 -0700 (PDT) From: Srinivas Kandagatla To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, srinivas.kandagatla@linaro.org Subject: [RESEND PATCH 05/20] nvmem: sunxi_sid: Optimize register read-out method Date: Sat, 13 Apr 2019 11:32:50 +0100 Message-Id: <20190413103305.9576-6-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190413103305.9576-1-srinivas.kandagatla@linaro.org> References: <20190413103305.9576-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chen-Yu Tsai SID cells are 32-bit aligned, and a multiple of 32 bits in length. The only outlier is the thermal sensor calibration data, which is 16 bits per sensor. However a whole 64 bits is allocated for this purpose, so we could consider it conforming to the rule above. Also, the register read-out method assumes native endian, unlike the direct MMIO method, which assumes big endian. Thus no endian conversion is involved. Under these assumptions, the register read-out method can be slightly optimized. Instead of reading one word then discarding 3 bytes, read the whole word directly into the buffer. However, for reads under 4 bytes or trailing bytes, we still use a scratch buffer to extract the requested bytes. We could go one step further if .word_size was 4, but changing that would affect the sysfs interface's behavior. Signed-off-by: Chen-Yu Tsai Acked-by: Maxime Ripard Signed-off-by: Srinivas Kandagatla --- drivers/nvmem/sunxi_sid.c | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) -- 2.21.0 diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c index 704c35edf796..15fbfab62595 100644 --- a/drivers/nvmem/sunxi_sid.c +++ b/drivers/nvmem/sunxi_sid.c @@ -115,36 +115,34 @@ static int sun8i_sid_register_readout(const struct sunxi_sid *sid, * to be not reliable at all. * Read by the registers instead. */ -static int sun8i_sid_read_byte_by_reg(const struct sunxi_sid *sid, - const unsigned int offset, - u8 *out) -{ - u32 word; - int ret; - - ret = sun8i_sid_register_readout(sid, offset & ~0x03, &word); - - if (ret) - return ret; - - *out = (word >> ((offset & 0x3) * 8)) & 0xff; - - return 0; -} - static int sun8i_sid_read_by_reg(void *context, unsigned int offset, void *val, size_t bytes) { struct sunxi_sid *sid = context; - u8 *buf = val; + u32 word; int ret; - while (bytes--) { - ret = sun8i_sid_read_byte_by_reg(sid, offset++, buf++); + /* .stride = 4 so offset is guaranteed to be aligned */ + while (bytes >= 4) { + ret = sun8i_sid_register_readout(sid, offset, val); if (ret) return ret; + + val += 4; + offset += 4; + bytes -= 4; } + if (!bytes) + return 0; + + /* Handle any trailing bytes */ + ret = sun8i_sid_register_readout(sid, offset, &word); + if (ret) + return ret; + + memcpy(val, &word, bytes); + return 0; }