From patchwork Mon Nov 12 15:18:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 996489 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tw+cI6Dq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42tvYP47hWz9s1x for ; Tue, 13 Nov 2018 02:19:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729823AbeKMBMo (ORCPT ); Mon, 12 Nov 2018 20:12:44 -0500 Received: from mail-ed1-f49.google.com ([209.85.208.49]:33740 "EHLO mail-ed1-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726385AbeKMBMo (ORCPT ); Mon, 12 Nov 2018 20:12:44 -0500 Received: by mail-ed1-f49.google.com with SMTP id r27so4719769eda.0; Mon, 12 Nov 2018 07:19:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/RPli5BOw9+z5QGH2wxe38AOela08ZMXHFWuTc7lj+k=; b=tw+cI6DqJ/wf7uDG57I+33+QaZsFKo/ffCNQYPPqOZnyQVTJKa+7ddYOFpbhnXdCk0 nsiahdChKmp8815xuqCpZmU3dFYeH994iHasU+/DgTJIMr4L7p7SrR60ex7rDFaNrIQi oNblULco4ig/CA/TOPMvy4N5quax2arT9mmBI/wwk9/HG5X7rhRLnkDsfjjRSczX1Nda CSrNbmL+IA6FT53RkEN42g5QeLAV/p06s9BVvijIjPRsrXXwVKEb+sJQxwCjdoEuB/wO H3bnPAMiDk1bXN/xc71LRRu0/p2WZCAKkFVT9IMT5JoeTOeiuaC6c0q4ID47TdD1UniP 7UWw== 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=/RPli5BOw9+z5QGH2wxe38AOela08ZMXHFWuTc7lj+k=; b=T8hW+ss5YYwaVVwdEVOq3dBUk4Z2Up8IsCFV6dHZ1URYG/e83JEDpPzBrl3nxqaUj2 8Bhq7ZVG7MMHoQIJVw1sxleAnX4xW4g596QXacEx5QNrmUsyCKCaiMgRV2Zslf5gwW2P 2AM6nXWUoAwKlefeILfidb96H5UuY3tWmDIhi85Ptz50P6mBD+TwO1rY4QdTfylapSP5 fgk3Vt931FpwatAlwO09FcPln+W0lBbVIA3QmWFlPmMzcB0rcqPTHxx9V7FFrvkXIFkK y9wgSIFpi9vZARcl/zY/r+/beyfFQo4zOjjNfZuWdJzOYIYhPJrztZeWGgodfVWBSAgl ClEg== X-Gm-Message-State: AGRZ1gJxVFxKCt7QXOkH8c4AK33ZwdpXLx8dTeau/Azt2ZWd9CmuA6ql QOs8h5BzUai9D94d6omSVSNkl5VV X-Google-Smtp-Source: AJdET5fNuDLUr+mtUkDpW/fzDkbRsarApIkgdppgbykOxgsR3gGoWZHeklojg7/PWCGVeIhWrtIlyg== X-Received: by 2002:a17:906:5a84:: with SMTP id l4-v6mr9801960ejq.229.1542035940426; Mon, 12 Nov 2018 07:19:00 -0800 (PST) Received: from localhost (pD9E511F8.dip0.t-ipconnect.de. [217.229.17.248]) by smtp.gmail.com with ESMTPSA id h51-v6sm4542879edh.91.2018.11.12.07.18.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 12 Nov 2018 07:18:59 -0800 (PST) From: Thierry Reding To: Thierry Reding , Jassi Brar , Greg Kroah-Hartman , Rob Herring Cc: Jiri Slaby , Mikko Perttunen , Jon Hunter , Timo Alho , Pekka Pessi , Mika Liljeberg , linux-tegra@vger.kernel.org, linux-serial@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 03/10] dt-bindings: tegra186-hsp: Add shared mailboxes Date: Mon, 12 Nov 2018 16:18:46 +0100 Message-Id: <20181112151853.29289-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181112151853.29289-1-thierry.reding@gmail.com> References: <20181112151853.29289-1-thierry.reding@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Mikko Perttunen Shared mailboxes are a mechanism to transport data from one processor in the system to another. They are bidirectional links with both a producer and a consumer. Interrupts are used to let the consumer know when data was written to the mailbox by the producer, and to let the producer know when the consumer has read the data from the mailbox. These interrupts are mapped to one or more "shared interrupts". Typically each processor in the system owns one of these shared interrupts. Add documentation to the device tree bindings about how clients can use mailbox specifiers to request a specific shared mailbox and select which direction they drive. Also document how to specify the shared interrupts in addition to the existing doorbell interrupt. Signed-off-by: Mikko Perttunen Acked-by: Jon Hunter Reviewed-by: Rob Herring Acked-by: Thierry Reding Signed-off-by: Thierry Reding --- Changes in v2: - describe in more detail how the mailbox specifiers are constructed - encode mailbox direction in the device tree mailbox specifier Rob, you had already reviewed this and I've kept your tag for now, even though there have been slight changes in this. If you don't mind taking another look to verify that the changes I've made are still okay. Thanks, Thierry .../bindings/mailbox/nvidia,tegra186-hsp.txt | 30 +++++++++++++++---- include/dt-bindings/mailbox/tegra186-hsp.h | 11 +++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt b/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt index b99d25fc2f26..ff3eafc5a882 100644 --- a/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt +++ b/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt @@ -15,12 +15,15 @@ Required properties: Array of strings. one of: - "nvidia,tegra186-hsp" + - "nvidia,tegra194-hsp", "nvidia,tegra186-hsp" - reg : Offset and length of the register set for the device. - interrupt-names Array of strings. Contains a list of names for the interrupts described by the interrupt property. May contain the following entries, in any order: - "doorbell" + - "sharedN", where 'N' is a number from zero up to the number of + external interrupts supported by the HSP instance minus one. Users of this binding MUST look up entries in the interrupt property by name, using this interrupt-names property to do so. - interrupts @@ -29,12 +32,29 @@ Required properties: in a matching order. - #mbox-cells : Should be 2. -The mbox specifier of the "mboxes" property in the client node should -contain two data. The first one should be the HSP type and the second -one should be the ID that the client is going to use. Those information -can be found in the following file. +The mbox specifier of the "mboxes" property in the client node should contain +two cells. The first cell determines the HSP type and the second cell is used +to identify the mailbox that the client is going to use. -- . +For doorbells, the second cell specifies the index of the doorbell to use. + +For shared mailboxes, the second cell is composed of two fields: +- bits 31..24: + A bit mask of flags that further specify how the shared mailbox will be + used. Valid flags are: + - bit 31: + Defines the direction of the mailbox. If set, the mailbox will be used + as a producer (i.e. used to send data). If cleared, the mailbox is the + consumer of data sent by a producer. + +- bits 23.. 0: + The index of the shared mailbox to use. The number of available mailboxes + may vary by instance of the HSP block and SoC generation. + +The following file contains definitions that can be used to construct mailbox +specifiers: + + Example: diff --git a/include/dt-bindings/mailbox/tegra186-hsp.h b/include/dt-bindings/mailbox/tegra186-hsp.h index bcab5b7ca785..3bdec7a84d35 100644 --- a/include/dt-bindings/mailbox/tegra186-hsp.h +++ b/include/dt-bindings/mailbox/tegra186-hsp.h @@ -22,4 +22,15 @@ #define TEGRA_HSP_DB_MASTER_CCPLEX 17 #define TEGRA_HSP_DB_MASTER_BPMP 19 +/* + * Shared mailboxes are unidirectional, so the direction needs to be specified + * in the device tree. + */ +#define TEGRA_HSP_SM_MASK 0x00ffffff +#define TEGRA_HSP_SM_FLAG_RX (0 << 31) +#define TEGRA_HSP_SM_FLAG_TX (1 << 31) + +#define TEGRA_HSP_SM_RX(x) (TEGRA_HSP_SM_FLAG_RX | ((x) & TEGRA_HSP_SM_MASK)) +#define TEGRA_HSP_SM_TX(x) (TEGRA_HSP_SM_FLAG_TX | ((x) & TEGRA_HSP_SM_MASK)) + #endif