Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp4564515ybb; Tue, 7 Apr 2020 09:54:01 -0700 (PDT) X-Google-Smtp-Source: APiQypLG56dEG52WPMgAENcy9z5dMtHAmPdgCT7qsqAgWmJpirdjiNRteL1Slq1teSsWk/9tdd9x X-Received: by 2002:a05:6808:d9:: with SMTP id t25mr226881oic.22.1586278441052; Tue, 07 Apr 2020 09:54:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586278441; cv=none; d=google.com; s=arc-20160816; b=S0yvnvTESxB0zh1F02xJid03RY0wrc8a8LDV9Wjmon95YsKaNbvCfnimXnHyU5zfhY QKdCfCv1+rmwv0RkMPhPe3l5SL0cm6yZhBzNDiGUfN1aueIiWeeS2B+/5Hb/UPnQBGCm NtSPKlCdi3pQHyfZVBcZCzlVZfFLkWm/x1Pf7SKF8RjN0qWV2sFMhiUvepG4pT6sFshO 54kUZajEsow2Q5ESCy1v0aSBbNzWl1eV2InKEW3s9Na/O2Q46NRe8AT5wNv4bpRZgZyX d3ZrUnoaC3IysnL2NkIllJzRU3bQlzmgb3Ude+hFwayg5vqfr54Yjhs/uhYD/6SziPNH G5ow== 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:dmarc-filter:dkim-signature; bh=N9jGjR6mIzByliseVCzLASSX6t2iCefObnq9WHWfAKM=; b=PDllUzNlOINbz4Rmw3bHOFZl/c7aG4lPdpnFkiYpSw/HfZvJQR59UOmnuNLlLXH9j3 m+mroNxSIRNRZ4KJUTheZ+bNmYNvAClLbDdxiamBCYxymzALrjLZYWcfX3QzBzUHRHEH D8PyXfcchbOi04zZqJfjW9jQziMqNdV+UTfFPvJQ18P2KsNfqY547n7u9/djShltqtXp uOqtoo2yh4wI/DOfXOAijWEmSX3vomDz434c6jUO1u/3uFelwHzpHYGjkj11DMKO19Kl VuvG9p9O/j0kTme1Hlu1OxpFAfu7qyrDHmKLVhuPinop9/ugPKFTknbRSmiRiuBC2PE+ eovg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=nRd5eFu6; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q11si1426658otm.263.2020.04.07.09.53.46; Tue, 07 Apr 2020 09:54:01 -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=fail header.i=@mg.codeaurora.org header.s=smtp header.b=nRd5eFu6; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726830AbgDGQvl (ORCPT + 99 others); Tue, 7 Apr 2020 12:51:41 -0400 Received: from mail27.static.mailgun.info ([104.130.122.27]:36139 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726702AbgDGQvj (ORCPT ); Tue, 7 Apr 2020 12:51:39 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1586278298; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=N9jGjR6mIzByliseVCzLASSX6t2iCefObnq9WHWfAKM=; b=nRd5eFu6OaveXwKOtPIqA3caNRP+bzduuh9RSIpnYsqE36mSkgVJpgNUdMDZBYGGW3sj0ynl ulQDRQAMbMs3vrj8dwizvHFGdy1064A+8uZwrDiXPe5z+OZe7S2aP9LRGfw7wtAgyHKjJLqR XsK2X3qfpigVdApwuJAy/o1P4NI= X-Mailgun-Sending-Ip: 104.130.122.27 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5e8caf94.7fc195f549d0-smtp-out-n02; Tue, 07 Apr 2020 16:51:32 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 49527C44791; Tue, 7 Apr 2020 16:51:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.0 Received: from jhugo-perf-lnx.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: jhugo) by smtp.codeaurora.org (Postfix) with ESMTPSA id 8AF80C433BA; Tue, 7 Apr 2020 16:51:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8AF80C433BA Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=jhugo@codeaurora.org From: Jeffrey Hugo To: manivannan.sadhasivam@linaro.org, hemantk@codeaurora.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Jeffrey Hugo Subject: [PATCH v2 4/5] bus: mhi: core: Offload register accesses to the controller Date: Tue, 7 Apr 2020 10:50:29 -0600 Message-Id: <1586278230-29565-5-git-send-email-jhugo@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1586278230-29565-1-git-send-email-jhugo@codeaurora.org> References: <1586278230-29565-1-git-send-email-jhugo@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When reading or writing MHI registers, the core assumes that the physical link is a memory mapped PCI link. This assumption may not hold for all MHI devices. The controller knows what is the physical link (ie PCI, I2C, SPI, etc), and therefore knows the proper methods to access that link. The controller can also handle link specific error scenarios, such as reading -1 when the PCI link went down. Therefore, it is appropiate that the MHI core requests the controller to make register accesses on behalf of the core, which abstracts the core from link specifics, and end up removing an unnecessary assumption. Signed-off-by: Jeffrey Hugo --- drivers/bus/mhi/core/init.c | 3 ++- drivers/bus/mhi/core/internal.h | 3 --- drivers/bus/mhi/core/main.c | 12 ++---------- include/linux/mhi.h | 6 ++++++ 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c index 2af08d57..eb2ab05 100644 --- a/drivers/bus/mhi/core/init.c +++ b/drivers/bus/mhi/core/init.c @@ -813,7 +813,8 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl, return -EINVAL; if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put || - !mhi_cntrl->status_cb) + !mhi_cntrl->status_cb || !mhi_cntrl->read_reg || + !mhi_cntrl->write_reg) return -EINVAL; ret = parse_config(mhi_cntrl, config); diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h index 5deadfa..095d95b 100644 --- a/drivers/bus/mhi/core/internal.h +++ b/drivers/bus/mhi/core/internal.h @@ -11,9 +11,6 @@ extern struct bus_type mhi_bus_type; -/* MHI MMIO register mapping */ -#define PCI_INVALID_READ(val) (val == U32_MAX) - #define MHIREGLEN (0x0) #define MHIREGLEN_MHIREGLEN_MASK (0xFFFFFFFF) #define MHIREGLEN_MHIREGLEN_SHIFT (0) diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c index 473278b8..580d72b 100644 --- a/drivers/bus/mhi/core/main.c +++ b/drivers/bus/mhi/core/main.c @@ -18,15 +18,7 @@ int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl, void __iomem *base, u32 offset, u32 *out) { - u32 tmp = readl(base + offset); - - /* If the value is invalid, the link is down */ - if (PCI_INVALID_READ(tmp)) - return -EIO; - - *out = tmp; - - return 0; + return mhi_cntrl->read_reg(mhi_cntrl, base + offset, out); } int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl, @@ -48,7 +40,7 @@ int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl, void mhi_write_reg(struct mhi_controller *mhi_cntrl, void __iomem *base, u32 offset, u32 val) { - writel(val, base + offset); + mhi_cntrl->write_reg(mhi_cntrl, base + offset, val); } void mhi_write_reg_field(struct mhi_controller *mhi_cntrl, void __iomem *base, diff --git a/include/linux/mhi.h b/include/linux/mhi.h index be704a4..225a03a 100644 --- a/include/linux/mhi.h +++ b/include/linux/mhi.h @@ -342,6 +342,8 @@ struct mhi_controller_config { * @runtimet_put: CB function to decrement pm usage (required) * @map_single: CB function to create TRE buffer * @unmap_single: CB function to destroy TRE buffer + * @read_reg: Read a MHI register via the physical link (required) + * @write_reg: Write a MHI register via the physical link (required) * @buffer_len: Bounce buffer length * @bounce_buf: Use of bounce buffer * @fbc_download: MHI host needs to do complete image transfer (optional) @@ -425,6 +427,10 @@ struct mhi_controller { struct mhi_buf_info *buf); void (*unmap_single)(struct mhi_controller *mhi_cntrl, struct mhi_buf_info *buf); + int (*read_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr, + u32 *out); + void (*write_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr, + u32 val); size_t buffer_len; bool bounce_buf; -- Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.