From patchwork Tue Aug 9 10:29:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 9270813 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id F37E960871 for ; Tue, 9 Aug 2016 10:31:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E2F5527F80 for ; Tue, 9 Aug 2016 10:31:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7AED27F9C; Tue, 9 Aug 2016 10:31:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 927BE27F8D for ; Tue, 9 Aug 2016 10:31:42 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bX4Jq-00078G-7A; Tue, 09 Aug 2016 10:31:34 +0000 Received: from mail-wm0-x235.google.com ([2a00:1450:400c:c09::235]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bX4IL-0004yi-7Y for linux-amlogic@lists.infradead.org; Tue, 09 Aug 2016 10:30:05 +0000 Received: by mail-wm0-x235.google.com with SMTP id f65so24071198wmi.0 for ; Tue, 09 Aug 2016 03:29:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CNk9nsqiQbXVHkSFoLvULrn73FPvKlMiVyvFbsfZIIM=; b=0tCKIWH0xtBImdvDwglzrNNM86YOFXyf0zh06xiATu9yUej6txBmtBifMD09w1DeKe 4cmAGU5JA3wKmYezYMRUpq8dYq+tPyZvNa8QhfYh7kj+opyTLGDehAdCtaMFxhFTCo0X VfghqAQMWBUKaINeO5yAZzC8B9Q5dAhqq0QEi9JJzYn7sggTYGRTwH7o0hqY5R1OTOy7 lzifpSvWkiUsW9q0d4xAY2ZAiV5oLfnbnMHKLrazTDx0iDvgAidmLZ5jLCpHWvfX+sJo xiPxACv6EeHPWVNkfWWHoiT8sy5uV/c3xKWPluvcXxiFf6XSdaJCAvnt+dFzlMIOLLbj WynQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CNk9nsqiQbXVHkSFoLvULrn73FPvKlMiVyvFbsfZIIM=; b=DlCgb8iFmYRg73XfqvJky1pso/esdJj18ZhztKseluuMlRdvSQSt0hP5/pvrvOHuP5 5FckQPBth/dhX2JCo8+HSISs3u0AbgnBtr3aSptTSsZonZUfwGLMu5HDbOkCUw8m233b 9fy2aO1DEbSiPq4jcsEoOJaJJy69RK67AWXabBwgJoXiGphouYuyddKNJxnpF8OGBw7+ 2Lnh65YGdhFths0owp2KCRjpPCWAGGg+J1S+OmTB/7tVSbB/DrrStw4qe0IPcHqeBE8T oF+dgusE12nN4zhxOsbp3vOaIgI23GbWrVsVX4ZHRDPAzdgeJNTUkZ9kW8OC17PjLfTK 2xDQ== X-Gm-Message-State: AEkoous7c+/uhjaweGN9hFIUTOETr2sDyspEsi9QFgN8eRPFDmaZqXR0+R1lce8ncD8YXyM+ X-Received: by 10.28.171.214 with SMTP id u205mr19745352wme.97.1470738579467; Tue, 09 Aug 2016 03:29:39 -0700 (PDT) Received: from zoidberg.home (LFbn-1-1885-126.w90-73.abo.wanadoo.fr. [90.73.182.126]) by smtp.gmail.com with ESMTPSA id c139sm2624994wme.4.2016.08.09.03.29.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 09 Aug 2016 03:29:38 -0700 (PDT) From: Neil Armstrong To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, sudeep.holla@arm.com Subject: [RFC PATCH v3 4/8] firmware: arm_scpi: Enable vendor_send_message as ext commands Date: Tue, 9 Aug 2016 12:29:18 +0200 Message-Id: <1470738562-20026-5-git-send-email-narmstrong@baylibre.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1470738562-20026-1-git-send-email-narmstrong@baylibre.com> References: <1470738562-20026-1-git-send-email-narmstrong@baylibre.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160809_033001_740739_59876263 X-CRM114-Status: GOOD ( 10.46 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: heiko@sntech.de, Neil Armstrong , frank.wang@rock-chips.com, khilman@baylibre.com, linux-amlogic@lists.infradead.org, wxt@rock-chips.com MIME-Version: 1.0 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+patchwork-linux-amlogic=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Implement official SCPI external commands with the newly introduced vendor_send_message in ops. Signed-off-by: Neil Armstrong --- drivers/firmware/arm_scpi.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c index c6d6528..7290182 100644 --- a/drivers/firmware/arm_scpi.c +++ b/drivers/firmware/arm_scpi.c @@ -46,6 +46,8 @@ #define CMD_ID_SHIFT 0 #define CMD_ID_MASK 0x7f +#define CMD_SET_SHIFT 7 +#define CMD_SET_MASK 0x1 #define CMD_TOKEN_ID_SHIFT 8 #define CMD_TOKEN_ID_MASK 0xff #define CMD_DATA_SIZE_SHIFT 16 @@ -53,6 +55,10 @@ #define PACK_SCPI_CMD(cmd_id, tx_sz) \ ((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) | \ (((tx_sz) & CMD_DATA_SIZE_MASK) << CMD_DATA_SIZE_SHIFT)) +#define PACK_EXT_SCPI_CMD(cmd_id, tx_sz) \ + ((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) | \ + (CMD_SET_MASK << CMD_SET_SHIFT) | \ + (((tx_sz) & CMD_DATA_SIZE_MASK) << CMD_DATA_SIZE_SHIFT)) #define ADD_SCPI_TOKEN(cmd, token) \ ((cmd) |= (((token) & CMD_TOKEN_ID_MASK) << CMD_TOKEN_ID_SHIFT)) @@ -343,8 +349,8 @@ static void put_scpi_xfer(struct scpi_xfer *t, struct scpi_chan *ch) mutex_unlock(&ch->xfers_lock); } -static int scpi_send_message(u8 cmd, void *tx_buf, unsigned int tx_len, - void *rx_buf, unsigned int rx_len) +static int __scpi_send_message(u8 cmd, void *tx_buf, unsigned int tx_len, + void *rx_buf, unsigned int rx_len, bool extn) { int ret; u8 chan; @@ -359,7 +365,8 @@ static int scpi_send_message(u8 cmd, void *tx_buf, unsigned int tx_len, return -ENOMEM; msg->slot = BIT(SCPI_SLOT); - msg->cmd = PACK_SCPI_CMD(cmd, tx_len); + msg->cmd = extn ? PACK_EXT_SCPI_CMD(cmd, tx_len) : + PACK_SCPI_CMD(cmd, tx_len); msg->tx_buf = tx_buf; msg->tx_len = tx_len; msg->rx_buf = rx_buf; @@ -384,6 +391,20 @@ out: return ret > 0 ? scpi_to_linux_errno(ret) : ret; } +static int scpi_send_message(u8 cmd, void *tx_buf, unsigned int tx_len, + void *rx_buf, unsigned int rx_len) +{ + return __scpi_send_message(cmd, tx_buf, tx_len, rx_buf, rx_len, false); +} + +static int scpi_ext_send_message(u8 cmd, unsigned long arg, + void *tx_buf, unsigned int tx_len, + void *rx_buf, unsigned int rx_len) +{ + return __scpi_send_message(cmd, tx_buf, tx_len, rx_buf, rx_len, true); +} + + static u32 scpi_get_version(void) { return scpi_info->protocol_version; @@ -577,6 +598,7 @@ static struct scpi_ops scpi_ops = { .sensor_get_value = scpi_sensor_get_value, .device_get_power_state = scpi_device_get_power_state, .device_set_power_state = scpi_device_set_power_state, + .vendor_send_message = scpi_ext_send_message, }; static int scpi_init_versions(struct scpi_drvinfo *info)