* [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264.
@ 2023-05-10 14:22 Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP Peter De Schrijver
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, stefank, thierry.reding, jonathanh
Cc: jassisinghbrar, linux-kernel, linux-tegra
In Tegra264 the carveouts (GSCs) used to communicate between BPMP and
CPU-NS may reside in DRAM. The location will be signalled using reserved
memory node in DT. Additionally some minor updates to the HSP driver are
done to support the new chip.
Peter De Schrijver (4):
dt-bindings: mailbox: tegra: Document Tegra264 HSP
dt-bindings: Add bindings to support DRAM MRQ GSCs
dt-bindings: memory-region property for tegra186-bpmp
firmware: tegra: bpmp: Add support for DRAM MRQ GSCs
Stefan Kristiansson (2):
mailbox: tegra: add support for Tegra264
soc: tegra: fuse: add support for Tegra264
Changes in v2:
- Added signoff messages
- Updated bindings to support DRAM MRQ GSCs
- Split out memory-region property for tegra186-bpmp
- Addressed sparse errors in bpmp-tegra186.c
Changes in v3:
- Add #address-cells = <2> and #size-cells = <2> to
nvidia,tegra264-bpmp-shmem binding example.
.../firmware/nvidia,tegra186-bpmp.yaml | 37 ++-
.../bindings/mailbox/nvidia,tegra186-hsp.yaml | 1 +
.../nvidia,tegra264-bpmp-shmem.yaml | 47 ++++
drivers/firmware/tegra/bpmp-tegra186.c | 214 ++++++++++++------
drivers/firmware/tegra/bpmp.c | 4 +-
drivers/mailbox/tegra-hsp.c | 16 +-
drivers/soc/tegra/fuse/tegra-apbmisc.c | 3 +-
include/soc/tegra/fuse.h | 3 +-
8 files changed, 253 insertions(+), 72 deletions(-)
create mode 100644 Documentation/devicetree/bindings/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml
--
2.34.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 15:00 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 2/6] mailbox: tegra: add support for Tegra264 Peter De Schrijver
` (5 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, Thierry Reding, Jonathan Hunter
Cc: Jassi Brar, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Joe Perches, linux-kernel, devicetree, linux-tegra
Add the compatible string for the HSP block found on the Tegra264 SoC.
The HSP block in Tegra264 is not register compatible with the one in
Tegra194 or Tegra234 hence there is no fallback compatibility string.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
.../devicetree/bindings/mailbox/nvidia,tegra186-hsp.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.yaml b/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.yaml
index a3e87516d637..2d14fc948999 100644
--- a/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.yaml
+++ b/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.yaml
@@ -66,6 +66,7 @@ properties:
oneOf:
- const: nvidia,tegra186-hsp
- const: nvidia,tegra194-hsp
+ - const: nvidia,tegra264-hsp
- items:
- const: nvidia,tegra234-hsp
- const: nvidia,tegra194-hsp
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 2/6] mailbox: tegra: add support for Tegra264
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 3/6] soc: tegra: fuse: " Peter De Schrijver
` (4 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: Stefan Kristiansson, jassisinghbrar, linux-kernel, linux-tegra
From: Stefan Kristiansson <stefank@nvidia.com>
Tegra264 has a slightly different doorbell register layout than
previous chips.
Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
drivers/mailbox/tegra-hsp.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
index 573481e436f5..7f98e7436d94 100644
--- a/drivers/mailbox/tegra-hsp.c
+++ b/drivers/mailbox/tegra-hsp.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2016-2023, NVIDIA CORPORATION. All rights reserved.
*/
#include <linux/delay.h>
@@ -97,6 +97,7 @@ struct tegra_hsp_soc {
const struct tegra_hsp_db_map *map;
bool has_per_mb_ie;
bool has_128_bit_mb;
+ unsigned int reg_stride;
};
struct tegra_hsp {
@@ -279,7 +280,7 @@ tegra_hsp_doorbell_create(struct tegra_hsp *hsp, const char *name,
return ERR_PTR(-ENOMEM);
offset = (1 + (hsp->num_sm / 2) + hsp->num_ss + hsp->num_as) * SZ_64K;
- offset += index * 0x100;
+ offset += index * hsp->soc->reg_stride;
db->channel.regs = hsp->regs + offset;
db->channel.hsp = hsp;
@@ -916,24 +917,35 @@ static const struct tegra_hsp_soc tegra186_hsp_soc = {
.map = tegra186_hsp_db_map,
.has_per_mb_ie = false,
.has_128_bit_mb = false,
+ .reg_stride = 0x100,
};
static const struct tegra_hsp_soc tegra194_hsp_soc = {
.map = tegra186_hsp_db_map,
.has_per_mb_ie = true,
.has_128_bit_mb = false,
+ .reg_stride = 0x100,
};
static const struct tegra_hsp_soc tegra234_hsp_soc = {
.map = tegra186_hsp_db_map,
.has_per_mb_ie = false,
.has_128_bit_mb = true,
+ .reg_stride = 0x100,
+};
+
+static const struct tegra_hsp_soc tegra264_hsp_soc = {
+ .map = tegra186_hsp_db_map,
+ .has_per_mb_ie = false,
+ .has_128_bit_mb = true,
+ .reg_stride = 0x1000,
};
static const struct of_device_id tegra_hsp_match[] = {
{ .compatible = "nvidia,tegra186-hsp", .data = &tegra186_hsp_soc },
{ .compatible = "nvidia,tegra194-hsp", .data = &tegra194_hsp_soc },
{ .compatible = "nvidia,tegra234-hsp", .data = &tegra234_hsp_soc },
+ { .compatible = "nvidia,tegra264-hsp", .data = &tegra264_hsp_soc },
{ }
};
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 3/6] soc: tegra: fuse: add support for Tegra264
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 2/6] mailbox: tegra: add support for Tegra264 Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs Peter De Schrijver
` (3 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: Stefan Kristiansson, arnd, kkartik, sumitg, windhl, linux-tegra,
linux-kernel
From: Stefan Kristiansson <stefank@nvidia.com>
Add support for Tegra264 to the fuse handling code.
Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
drivers/soc/tegra/fuse/tegra-apbmisc.c | 3 ++-
include/soc/tegra/fuse.h | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/soc/tegra/fuse/tegra-apbmisc.c b/drivers/soc/tegra/fuse/tegra-apbmisc.c
index 4591c5bcb690..eb0a1d924526 100644
--- a/drivers/soc/tegra/fuse/tegra-apbmisc.c
+++ b/drivers/soc/tegra/fuse/tegra-apbmisc.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
*/
#include <linux/export.h>
@@ -62,6 +62,7 @@ bool tegra_is_silicon(void)
switch (tegra_get_chip_id()) {
case TEGRA194:
case TEGRA234:
+ case TEGRA264:
if (tegra_get_platform() == 0)
return true;
diff --git a/include/soc/tegra/fuse.h b/include/soc/tegra/fuse.h
index a63de5da8124..3a513be50243 100644
--- a/include/soc/tegra/fuse.h
+++ b/include/soc/tegra/fuse.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
- * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2012-2023, NVIDIA CORPORATION. All rights reserved.
*/
#ifndef __SOC_TEGRA_FUSE_H__
@@ -17,6 +17,7 @@
#define TEGRA186 0x18
#define TEGRA194 0x19
#define TEGRA234 0x23
+#define TEGRA264 0x26
#define TEGRA_FUSE_SKU_CALIB_0 0xf0
#define TEGRA30_FUSE_SATA_CALIB 0x124
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
` (2 preceding siblings ...)
2023-05-10 14:22 ` [PATCH v3 3/6] soc: tegra: fuse: " Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 15:01 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp Peter De Schrijver
` (2 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: robh+dt, krzysztof.kozlowski+dt, conor+dt, devicetree,
linux-tegra, linux-kernel, stefank
Add bindings for DRAM MRQ GSC support.
Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
.../nvidia,tegra264-bpmp-shmem.yaml | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 Documentation/devicetree/bindings/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml
diff --git a/Documentation/devicetree/bindings/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml b/Documentation/devicetree/bindings/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml
new file mode 100644
index 000000000000..4087459c01db
--- /dev/null
+++ b/Documentation/devicetree/bindings/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml
@@ -0,0 +1,47 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/reserved-memory/nvidia,tegra264-bpmp-shmem.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Tegra CPU-NS - BPMP IPC reserved memory
+
+maintainers:
+ - Peter De Schrijver <pdeschrijver@nvidia.com>
+
+description: |
+ Define a memory region used for communication between CPU-NS and BPMP.
+ Typically this node is created by the bootloader as the physical address
+ has to be known to both CPU-NS and BPMP for correct IPC operation.
+ The memory region is defined using a child node under /reserved-memory.
+ The sub-node is named shmem@<address>.
+
+allOf:
+ - $ref: reserved-memory.yaml
+
+properties:
+ compatible:
+ const: nvidia,tegra264-bpmp-shmem
+
+ reg:
+ description: The physical address and size of the shared SDRAM region
+
+unevaluatedProperties: false
+
+required:
+ - compatible
+ - reg
+ - no-map
+
+examples:
+ - |
+ reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ dram_cpu_bpmp_mail: shmem@f1be0000 {
+ compatible = "nvidia,tegra264-bpmp-shmem";
+ reg = <0x0 0xf1be0000 0x0 0x2000>;
+ no-map;
+ };
+ };
+...
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
` (3 preceding siblings ...)
2023-05-10 14:22 ` [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 15:01 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 6/6] firmware: tegra: bpmp: Add support for DRAM MRQ GSCs Peter De Schrijver
2023-05-10 14:43 ` [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Thierry Reding
6 siblings, 1 reply; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: robh+dt, krzysztof.kozlowski+dt, conor+dt, devicetree,
linux-tegra, linux-kernel, stefank
Add memory-region property to the tegra186-bpmp binding to support
DRAM MRQ GSCs.
Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
.../firmware/nvidia,tegra186-bpmp.yaml | 37 +++++++++++++++++--
1 file changed, 34 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/firmware/nvidia,tegra186-bpmp.yaml b/Documentation/devicetree/bindings/firmware/nvidia,tegra186-bpmp.yaml
index 833c07f1685c..f3e02c9d090d 100644
--- a/Documentation/devicetree/bindings/firmware/nvidia,tegra186-bpmp.yaml
+++ b/Documentation/devicetree/bindings/firmware/nvidia,tegra186-bpmp.yaml
@@ -57,8 +57,11 @@ description: |
"#address-cells" or "#size-cells" property.
The shared memory area for the IPC TX and RX between CPU and BPMP are
- predefined and work on top of sysram, which is an SRAM inside the
- chip. See ".../sram/sram.yaml" for the bindings.
+ predefined and work on top of either sysram, which is an SRAM inside the
+ chip, or in normal SDRAM.
+ See ".../sram/sram.yaml" for the bindings for the SRAM case.
+ See "../reserved-memory/nvidia,tegra264-bpmp-shmem.yaml" for bindings for
+ the SDRAM case.
properties:
compatible:
@@ -81,6 +84,11 @@ properties:
minItems: 2
maxItems: 2
+ memory-region:
+ description: phandle to reserved memory region used for IPC between
+ CPU-NS and BPMP.
+ maxItems: 1
+
"#clock-cells":
const: 1
@@ -115,10 +123,15 @@ properties:
additionalProperties: false
+oneOf:
+ - required:
+ - memory-region
+ - required:
+ - shmem
+
required:
- compatible
- mboxes
- - shmem
- "#clock-cells"
- "#power-domain-cells"
- "#reset-cells"
@@ -184,3 +197,21 @@ examples:
#thermal-sensor-cells = <1>;
};
};
+
+ - |
+ #include <dt-bindings/mailbox/tegra186-hsp.h>
+
+ bpmp {
+ compatible = "nvidia,tegra186-bpmp";
+ interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,
+ <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,
+ <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,
+ <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;
+ interconnect-names = "read", "write", "dma-mem", "dma-write";
+ mboxes = <&hsp_top1 TEGRA_HSP_MBOX_TYPE_DB
+ TEGRA_HSP_DB_MASTER_BPMP>;
+ memory-region = <&dram_cpu_bpmp_mail>;
+ #clock-cells = <1>;
+ #power-domain-cells = <1>;
+ #reset-cells = <1>;
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 6/6] firmware: tegra: bpmp: Add support for DRAM MRQ GSCs
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
` (4 preceding siblings ...)
2023-05-10 14:22 ` [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp Peter De Schrijver
@ 2023-05-10 14:22 ` Peter De Schrijver
2023-05-10 14:43 ` [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Thierry Reding
6 siblings, 0 replies; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-10 14:22 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh, mperttunen
Cc: sudeep.holla, talho, robh, linux-tegra, linux-kernel, stefank
Implement support for DRAM MRQ GSCs.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
drivers/firmware/tegra/bpmp-tegra186.c | 214 +++++++++++++++++--------
drivers/firmware/tegra/bpmp.c | 4 +-
2 files changed, 153 insertions(+), 65 deletions(-)
diff --git a/drivers/firmware/tegra/bpmp-tegra186.c b/drivers/firmware/tegra/bpmp-tegra186.c
index 2e26199041cd..43e2563575fc 100644
--- a/drivers/firmware/tegra/bpmp-tegra186.c
+++ b/drivers/firmware/tegra/bpmp-tegra186.c
@@ -4,8 +4,11 @@
*/
#include <linux/genalloc.h>
+#include <linux/io.h>
#include <linux/mailbox_client.h>
+#include <linux/of_address.h>
#include <linux/platform_device.h>
+#include <linux/range.h>
#include <soc/tegra/bpmp.h>
#include <soc/tegra/bpmp-abi.h>
@@ -13,12 +16,13 @@
#include "bpmp-private.h"
+enum tegra_bpmp_mem_type { TEGRA_INVALID, TEGRA_SRAM, TEGRA_RMEM };
+
struct tegra186_bpmp {
struct tegra_bpmp *parent;
struct {
- struct gen_pool *pool;
- void __iomem *virt;
+ void *virt;
dma_addr_t phys;
} tx, rx;
@@ -26,6 +30,12 @@ struct tegra186_bpmp {
struct mbox_client client;
struct mbox_chan *channel;
} mbox;
+
+ struct {
+ struct gen_pool *tx, *rx;
+ } sram;
+
+ enum tegra_bpmp_mem_type type;
};
static inline struct tegra_bpmp *
@@ -118,8 +128,8 @@ static int tegra186_bpmp_channel_init(struct tegra_bpmp_channel *channel,
queue_size = tegra_ivc_total_queue_size(message_size);
offset = queue_size * index;
- iosys_map_set_vaddr_iomem(&rx, priv->rx.virt + offset);
- iosys_map_set_vaddr_iomem(&tx, priv->tx.virt + offset);
+ iosys_map_set_vaddr_iomem(&rx, (void __iomem *)priv->rx.virt + offset);
+ iosys_map_set_vaddr_iomem(&tx, (void __iomem *)priv->tx.virt + offset);
err = tegra_ivc_init(channel->ivc, NULL, &rx, priv->rx.phys + offset, &tx,
priv->tx.phys + offset, 1, message_size, tegra186_bpmp_ivc_notify,
@@ -158,64 +168,171 @@ static void mbox_handle_rx(struct mbox_client *client, void *data)
tegra_bpmp_handle_rx(bpmp);
}
-static int tegra186_bpmp_init(struct tegra_bpmp *bpmp)
+static void tegra186_bpmp_channel_deinit(struct tegra_bpmp *bpmp)
+{
+ int i;
+ struct tegra186_bpmp *priv = bpmp->priv;
+
+ for (i = 0; i < bpmp->threaded.count; i++) {
+ if (!bpmp->threaded_channels[i].bpmp)
+ continue;
+
+ tegra186_bpmp_channel_cleanup(&bpmp->threaded_channels[i]);
+ }
+
+ tegra186_bpmp_channel_cleanup(bpmp->rx_channel);
+ tegra186_bpmp_channel_cleanup(bpmp->tx_channel);
+
+ if (priv->type == TEGRA_SRAM) {
+ gen_pool_free(priv->sram.tx, (unsigned long)priv->tx.virt, 4096);
+ gen_pool_free(priv->sram.rx, (unsigned long)priv->rx.virt, 4096);
+ } else if (priv->type == TEGRA_RMEM) {
+ memunmap(priv->tx.virt);
+ }
+}
+
+static int tegra186_bpmp_channel_setup(struct tegra_bpmp *bpmp)
{
- struct tegra186_bpmp *priv;
unsigned int i;
int err;
- priv = devm_kzalloc(bpmp->dev, sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
+ err = tegra186_bpmp_channel_init(bpmp->tx_channel, bpmp,
+ bpmp->soc->channels.cpu_tx.offset);
+ if (err < 0)
+ return err;
- bpmp->priv = priv;
- priv->parent = bpmp;
+ err = tegra186_bpmp_channel_init(bpmp->rx_channel, bpmp,
+ bpmp->soc->channels.cpu_rx.offset);
+ if (err < 0) {
+ tegra186_bpmp_channel_cleanup(bpmp->tx_channel);
+ return err;
+ }
+
+ for (i = 0; i < bpmp->threaded.count; i++) {
+ unsigned int index = bpmp->soc->channels.thread.offset + i;
- priv->tx.pool = of_gen_pool_get(bpmp->dev->of_node, "shmem", 0);
- if (!priv->tx.pool) {
+ err = tegra186_bpmp_channel_init(&bpmp->threaded_channels[i],
+ bpmp, index);
+ if (err < 0)
+ break;
+ }
+
+ if (err < 0)
+ tegra186_bpmp_channel_deinit(bpmp);
+
+ return err;
+}
+
+static void tegra186_bpmp_reset_channels(struct tegra_bpmp *bpmp)
+{
+ unsigned int i;
+
+ tegra186_bpmp_channel_reset(bpmp->tx_channel);
+ tegra186_bpmp_channel_reset(bpmp->rx_channel);
+
+ for (i = 0; i < bpmp->threaded.count; i++)
+ tegra186_bpmp_channel_reset(&bpmp->threaded_channels[i]);
+}
+
+static int tegra186_bpmp_sram_init(struct tegra_bpmp *bpmp)
+{
+ int err;
+ struct tegra186_bpmp *priv = bpmp->priv;
+
+ priv->sram.tx = of_gen_pool_get(bpmp->dev->of_node, "shmem", 0);
+ if (!priv->sram.tx) {
dev_err(bpmp->dev, "TX shmem pool not found\n");
return -EPROBE_DEFER;
}
- priv->tx.virt = (void __iomem *)gen_pool_dma_alloc(priv->tx.pool, 4096, &priv->tx.phys);
+ priv->tx.virt = gen_pool_dma_alloc(priv->sram.tx, 4096, &priv->tx.phys);
if (!priv->tx.virt) {
dev_err(bpmp->dev, "failed to allocate from TX pool\n");
return -ENOMEM;
}
- priv->rx.pool = of_gen_pool_get(bpmp->dev->of_node, "shmem", 1);
- if (!priv->rx.pool) {
+ priv->sram.rx = of_gen_pool_get(bpmp->dev->of_node, "shmem", 1);
+ if (!priv->sram.rx) {
dev_err(bpmp->dev, "RX shmem pool not found\n");
err = -EPROBE_DEFER;
goto free_tx;
}
- priv->rx.virt = (void __iomem *)gen_pool_dma_alloc(priv->rx.pool, 4096, &priv->rx.phys);
+ priv->rx.virt = gen_pool_dma_alloc(priv->sram.rx, 4096, &priv->rx.phys);
if (!priv->rx.virt) {
dev_err(bpmp->dev, "failed to allocate from RX pool\n");
err = -ENOMEM;
goto free_tx;
}
- err = tegra186_bpmp_channel_init(bpmp->tx_channel, bpmp,
- bpmp->soc->channels.cpu_tx.offset);
- if (err < 0)
- goto free_rx;
+ priv->type = TEGRA_SRAM;
- err = tegra186_bpmp_channel_init(bpmp->rx_channel, bpmp,
- bpmp->soc->channels.cpu_rx.offset);
- if (err < 0)
- goto cleanup_tx_channel;
+ return 0;
- for (i = 0; i < bpmp->threaded.count; i++) {
- unsigned int index = bpmp->soc->channels.thread.offset + i;
+free_tx:
+ gen_pool_free(priv->sram.tx, (unsigned long)priv->tx.virt, 4096);
- err = tegra186_bpmp_channel_init(&bpmp->threaded_channels[i],
- bpmp, index);
+ return err;
+}
+
+static enum tegra_bpmp_mem_type tegra186_bpmp_dram_init(struct tegra_bpmp *bpmp)
+{
+ int err;
+ struct resource res;
+ struct device_node *np;
+ struct tegra186_bpmp *priv = bpmp->priv;
+
+ np = of_parse_phandle(bpmp->dev->of_node, "memory-region", 0);
+ if (!np)
+ return TEGRA_INVALID;
+
+ err = of_address_to_resource(np, 0, &res);
+ if (err) {
+ dev_warn(bpmp->dev, "Parsing memory region returned: %d\n", err);
+ return TEGRA_INVALID;
+ }
+
+ if ((res.end - res.start + 1) < 0x2000) {
+ dev_warn(bpmp->dev, "DRAM region less than 0x2000 bytes\n");
+ return TEGRA_INVALID;
+ }
+
+ priv->tx.phys = res.start;
+ priv->rx.phys = res.start + 0x1000;
+
+ priv->tx.virt = memremap(priv->tx.phys, res.end - res.start + 1, MEMREMAP_WC);
+ if (priv->tx.virt == NULL) {
+ dev_warn(bpmp->dev, "DRAM region mapping failed\n");
+ return TEGRA_INVALID;
+ }
+ priv->rx.virt = priv->tx.virt + 0x1000;
+
+ return TEGRA_RMEM;
+}
+
+static int tegra186_bpmp_init(struct tegra_bpmp *bpmp)
+{
+ struct tegra186_bpmp *priv;
+ int err;
+
+ priv = devm_kzalloc(bpmp->dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ bpmp->priv = priv;
+ priv->parent = bpmp;
+
+ priv->type = tegra186_bpmp_dram_init(bpmp);
+ if (priv->type == TEGRA_INVALID) {
+ err = tegra186_bpmp_sram_init(bpmp);
if (err < 0)
- goto cleanup_channels;
+ return err;
}
+ err = tegra186_bpmp_channel_setup(bpmp);
+ if (err < 0)
+ return err;
+
/* mbox registration */
priv->mbox.client.dev = bpmp->dev;
priv->mbox.client.rx_callback = mbox_handle_rx;
@@ -226,51 +343,22 @@ static int tegra186_bpmp_init(struct tegra_bpmp *bpmp)
if (IS_ERR(priv->mbox.channel)) {
err = PTR_ERR(priv->mbox.channel);
dev_err(bpmp->dev, "failed to get HSP mailbox: %d\n", err);
- goto cleanup_channels;
+ tegra186_bpmp_channel_deinit(bpmp);
+ return err;
}
- tegra186_bpmp_channel_reset(bpmp->tx_channel);
- tegra186_bpmp_channel_reset(bpmp->rx_channel);
-
- for (i = 0; i < bpmp->threaded.count; i++)
- tegra186_bpmp_channel_reset(&bpmp->threaded_channels[i]);
+ tegra186_bpmp_reset_channels(bpmp);
return 0;
-
-cleanup_channels:
- for (i = 0; i < bpmp->threaded.count; i++) {
- if (!bpmp->threaded_channels[i].bpmp)
- continue;
-
- tegra186_bpmp_channel_cleanup(&bpmp->threaded_channels[i]);
- }
-
- tegra186_bpmp_channel_cleanup(bpmp->rx_channel);
-cleanup_tx_channel:
- tegra186_bpmp_channel_cleanup(bpmp->tx_channel);
-free_rx:
- gen_pool_free(priv->rx.pool, (unsigned long)priv->rx.virt, 4096);
-free_tx:
- gen_pool_free(priv->tx.pool, (unsigned long)priv->tx.virt, 4096);
-
- return err;
}
static void tegra186_bpmp_deinit(struct tegra_bpmp *bpmp)
{
struct tegra186_bpmp *priv = bpmp->priv;
- unsigned int i;
mbox_free_channel(priv->mbox.channel);
- for (i = 0; i < bpmp->threaded.count; i++)
- tegra186_bpmp_channel_cleanup(&bpmp->threaded_channels[i]);
-
- tegra186_bpmp_channel_cleanup(bpmp->rx_channel);
- tegra186_bpmp_channel_cleanup(bpmp->tx_channel);
-
- gen_pool_free(priv->rx.pool, (unsigned long)priv->rx.virt, 4096);
- gen_pool_free(priv->tx.pool, (unsigned long)priv->tx.virt, 4096);
+ tegra186_bpmp_channel_deinit(bpmp);
}
static int tegra186_bpmp_resume(struct tegra_bpmp *bpmp)
diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c
index 8b5e5daa9fae..17bd3590aaa2 100644
--- a/drivers/firmware/tegra/bpmp.c
+++ b/drivers/firmware/tegra/bpmp.c
@@ -735,6 +735,8 @@ static int tegra_bpmp_probe(struct platform_device *pdev)
if (!bpmp->threaded_channels)
return -ENOMEM;
+ platform_set_drvdata(pdev, bpmp);
+
err = bpmp->soc->ops->init(bpmp);
if (err < 0)
return err;
@@ -758,8 +760,6 @@ static int tegra_bpmp_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "firmware: %.*s\n", (int)sizeof(tag), tag);
- platform_set_drvdata(pdev, bpmp);
-
err = of_platform_default_populate(pdev->dev.of_node, NULL, &pdev->dev);
if (err < 0)
goto free_mrq;
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264.
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
` (5 preceding siblings ...)
2023-05-10 14:22 ` [PATCH v3 6/6] firmware: tegra: bpmp: Add support for DRAM MRQ GSCs Peter De Schrijver
@ 2023-05-10 14:43 ` Thierry Reding
6 siblings, 0 replies; 15+ messages in thread
From: Thierry Reding @ 2023-05-10 14:43 UTC (permalink / raw)
To: Peter De Schrijver
Cc: stefank, jonathanh, jassisinghbrar, linux-kernel, linux-tegra
[-- Attachment #1: Type: text/plain, Size: 764 bytes --]
On Wed, May 10, 2023 at 05:22:42PM +0300, Peter De Schrijver wrote:
> In Tegra264 the carveouts (GSCs) used to communicate between BPMP and
> CPU-NS may reside in DRAM. The location will be signalled using reserved
> memory node in DT. Additionally some minor updates to the HSP driver are
> done to support the new chip.
I was still reviewing v2 when you sent this out. Obviously none of those
comments have now been addressed, so we'll need v4. Generally, try to
give people a bit more time to review patches before sending new
versions even if you've got early feedback from the various bots. You
can of course already integrate fixes for issues pointed out, but there
is no need to rush one version after the other at this point in the
review cycle.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP
2023-05-10 14:22 ` [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP Peter De Schrijver
@ 2023-05-10 15:00 ` Krzysztof Kozlowski
0 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-10 15:00 UTC (permalink / raw)
To: Peter De Schrijver, Thierry Reding, Jonathan Hunter
Cc: Jassi Brar, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Joe Perches, linux-kernel, devicetree, linux-tegra
On 10/05/2023 16:22, Peter De Schrijver wrote:
> Add the compatible string for the HSP block found on the Tegra264 SoC.
> The HSP block in Tegra264 is not register compatible with the one in
> Tegra194 or Tegra234 hence there is no fallback compatibility string.
>
> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> ---
Srsly, all tags ignored...
This is a friendly reminder during the review process.
It looks like you received a tag and forgot to add it.
If you do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new
versions. However, there's no need to repost patches *only* to add the
tags. The upstream maintainer will do that for acks received on the
version they apply.
https://elixir.bootlin.com/linux/v5.17/source/Documentation/process/submitting-patches.rst#L540
If a tag was not added on purpose, please state why and what changed.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs
2023-05-10 14:22 ` [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs Peter De Schrijver
@ 2023-05-10 15:01 ` Krzysztof Kozlowski
0 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-10 15:01 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: robh+dt, krzysztof.kozlowski+dt, conor+dt, devicetree,
linux-tegra, linux-kernel, stefank
On 10/05/2023 16:22, Peter De Schrijver wrote:
> Add bindings for DRAM MRQ GSC support.
>
> Co-developed-by: Stefan Kristiansson <stefank@nvidia
Subject: drop second/last, redundant "bindings". The "dt-bindings"
prefix is already stating that these are bindings.
Use subject prefixes matching the subsystem (which you can get for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching).
.com>
> Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> ---
Missing changelog. I am not going to review the same patch.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-10 14:22 ` [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp Peter De Schrijver
@ 2023-05-10 15:01 ` Krzysztof Kozlowski
2023-05-11 8:04 ` Peter De Schrijver
0 siblings, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-10 15:01 UTC (permalink / raw)
To: Peter De Schrijver, thierry.reding, jonathanh
Cc: robh+dt, krzysztof.kozlowski+dt, conor+dt, devicetree,
linux-tegra, linux-kernel, stefank
On 10/05/2023 16:22, Peter De Schrijver wrote:
> Add memory-region property to the tegra186-bpmp binding to support
> DRAM MRQ GSCs.
>
> Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
> Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> ---
Also no changelog. Since I do not see improvements after Thierry
comments I assume you send the same.
Use subject prefixes matching the subsystem (which you can get for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching).
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-10 15:01 ` Krzysztof Kozlowski
@ 2023-05-11 8:04 ` Peter De Schrijver
2023-05-11 9:03 ` Krzysztof Kozlowski
0 siblings, 1 reply; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-11 8:04 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: thierry.reding, jonathanh, robh+dt, krzysztof.kozlowski+dt,
conor+dt, devicetree, linux-tegra, linux-kernel, stefank
On Wed, May 10, 2023 at 05:01:55PM +0200, Krzysztof Kozlowski wrote:
> On 10/05/2023 16:22, Peter De Schrijver wrote:
> > Add memory-region property to the tegra186-bpmp binding to support
> > DRAM MRQ GSCs.
> >
> > Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
> > Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
> > Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> > ---
>
> Also no changelog. Since I do not see improvements after Thierry
> comments I assume you send the same.
>
The changelog is in the cover letter. I will send it to you next
iteration.
Peter.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-11 8:04 ` Peter De Schrijver
@ 2023-05-11 9:03 ` Krzysztof Kozlowski
2023-05-11 10:31 ` Peter De Schrijver
0 siblings, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-11 9:03 UTC (permalink / raw)
To: Peter De Schrijver
Cc: thierry.reding, jonathanh, robh+dt, krzysztof.kozlowski+dt,
conor+dt, devicetree, linux-tegra, linux-kernel, stefank
On 11/05/2023 10:04, Peter De Schrijver wrote:
> On Wed, May 10, 2023 at 05:01:55PM +0200, Krzysztof Kozlowski wrote:
>> On 10/05/2023 16:22, Peter De Schrijver wrote:
>>> Add memory-region property to the tegra186-bpmp binding to support
>>> DRAM MRQ GSCs.
>>>
>>> Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
>>> Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
>>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
>>> ---
>>
>> Also no changelog. Since I do not see improvements after Thierry
>> comments I assume you send the same.
>>
>
> The changelog is in the cover letter. I will send it to you next
> iteration.
I got only few patches, rest is missing including changelog. Thus it is
the same as it did not exist.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-11 9:03 ` Krzysztof Kozlowski
@ 2023-05-11 10:31 ` Peter De Schrijver
2023-05-11 16:58 ` Krzysztof Kozlowski
0 siblings, 1 reply; 15+ messages in thread
From: Peter De Schrijver @ 2023-05-11 10:31 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: thierry.reding, jonathanh, robh+dt, krzysztof.kozlowski+dt,
conor+dt, devicetree, linux-tegra, linux-kernel, stefank
On Thu, May 11, 2023 at 11:03:24AM +0200, Krzysztof Kozlowski wrote:
> On 11/05/2023 10:04, Peter De Schrijver wrote:
> > On Wed, May 10, 2023 at 05:01:55PM +0200, Krzysztof Kozlowski wrote:
> >> On 10/05/2023 16:22, Peter De Schrijver wrote:
> >>> Add memory-region property to the tegra186-bpmp binding to support
> >>> DRAM MRQ GSCs.
> >>>
> >>> Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
> >>> Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
> >>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> >>> ---
> >>
> >> Also no changelog. Since I do not see improvements after Thierry
> >> comments I assume you send the same.
> >>
> >
> > The changelog is in the cover letter. I will send it to you next
> > iteration.
>
> I got only few patches, rest is missing including changelog. Thus it is
> the same as it did not exist.
>
Do you want all of them? Some people seem to object to that so I didn't
send them to all people.
Peter.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp
2023-05-11 10:31 ` Peter De Schrijver
@ 2023-05-11 16:58 ` Krzysztof Kozlowski
0 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-05-11 16:58 UTC (permalink / raw)
To: Peter De Schrijver
Cc: thierry.reding, jonathanh, robh+dt, krzysztof.kozlowski+dt,
conor+dt, devicetree, linux-tegra, linux-kernel, stefank
On 11/05/2023 12:31, Peter De Schrijver wrote:
> On Thu, May 11, 2023 at 11:03:24AM +0200, Krzysztof Kozlowski wrote:
>> On 11/05/2023 10:04, Peter De Schrijver wrote:
>>> On Wed, May 10, 2023 at 05:01:55PM +0200, Krzysztof Kozlowski wrote:
>>>> On 10/05/2023 16:22, Peter De Schrijver wrote:
>>>>> Add memory-region property to the tegra186-bpmp binding to support
>>>>> DRAM MRQ GSCs.
>>>>>
>>>>> Co-developed-by: Stefan Kristiansson <stefank@nvidia.com>
>>>>> Signed-off-by: Stefan Kristiansson <stefank@nvidia.com>
>>>>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
>>>>> ---
>>>>
>>>> Also no changelog. Since I do not see improvements after Thierry
>>>> comments I assume you send the same.
>>>>
>>>
>>> The changelog is in the cover letter. I will send it to you next
>>> iteration.
>>
>> I got only few patches, rest is missing including changelog. Thus it is
>> the same as it did not exist.
>>
>
> Do you want all of them? Some people seem to object to that so I didn't
> send them to all people.
If you do not send entire patchset to everyone, then cover letter should
reach everyone.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2023-05-11 16:58 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-10 14:22 [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 1/6] dt-bindings: mailbox: tegra: Document Tegra264 HSP Peter De Schrijver
2023-05-10 15:00 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 2/6] mailbox: tegra: add support for Tegra264 Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 3/6] soc: tegra: fuse: " Peter De Schrijver
2023-05-10 14:22 ` [PATCH v3 4/6] dt-bindings: Add bindings to support DRAM MRQ GSCs Peter De Schrijver
2023-05-10 15:01 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 5/6] dt-bindings: memory-region property for tegra186-bpmp Peter De Schrijver
2023-05-10 15:01 ` Krzysztof Kozlowski
2023-05-11 8:04 ` Peter De Schrijver
2023-05-11 9:03 ` Krzysztof Kozlowski
2023-05-11 10:31 ` Peter De Schrijver
2023-05-11 16:58 ` Krzysztof Kozlowski
2023-05-10 14:22 ` [PATCH v3 6/6] firmware: tegra: bpmp: Add support for DRAM MRQ GSCs Peter De Schrijver
2023-05-10 14:43 ` [PATCH v3 0/6] firmware: tegra: Add MRQ support for Tegra264 Thierry Reding
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).