* [PATCH v2 0/2] NTB: epf: add vNTB support for Renesas rcar platform
@ 2025-06-24 16:06 Jerome Brunet
2025-06-24 16:06 ` [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping Jerome Brunet
2025-06-24 16:06 ` [PATCH v2 2/2] NTB: epf: Add Renesas rcar support Jerome Brunet
0 siblings, 2 replies; 6+ messages in thread
From: Jerome Brunet @ 2025-06-24 16:06 UTC (permalink / raw)
To: Jon Mason, Dave Jiang, Allen Hubbe
Cc: ntb, linux-kernel, Frank Li, Yoshihiro Shimoda, Yuya Hamamachi,
Jerome Brunet
This patchset adds support create vNTB link between rcar platforms
This was tested on rcar gen4.
The changes here are for the RC side of things. The EP side was sent here
[2]. There is a runtime dependency to get a working vNTB link between the
two but no compile time dependency. It should be safe for 2 series to go
along in different trees, even during the same cycle.
It may seem like we are starting straight from v2, but a v1 of PATCH 1 has
been sent along the v1 of EP side series [1], for illustration. Starting
from v2 to avoid any confusion.
Changes in v2:
- Rename barno to barno_map
- Drop unnecessary default values
- Actually add rcar support with an product id provided by Renesas
- Link to v1: https://lore.kernel.org/r/20250505-pci-vntb-bar-mapping-v1-4-0e0d12b2fa71@baylibre.com
[1]: https://lore.kernel.org/r/20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com
[2]: https://lore.kernel.org/r/20250603-pci-vntb-bar-mapping-v2-0-fc685a22ad28@baylibre.com
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
Jerome Brunet (2):
NTB: epf: Allow arbitrary BAR mapping
NTB: epf: Add Renesas rcar support
drivers/ntb/hw/epf/ntb_hw_epf.c | 120 +++++++++++++++++++++++-----------------
1 file changed, 69 insertions(+), 51 deletions(-)
---
base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494
change-id: 20250624-ntb-rcar-support-e3397f76c532
Best regards,
--
Jerome
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping
2025-06-24 16:06 [PATCH v2 0/2] NTB: epf: add vNTB support for Renesas rcar platform Jerome Brunet
@ 2025-06-24 16:06 ` Jerome Brunet
2025-06-24 20:00 ` Frank Li
2025-06-24 16:06 ` [PATCH v2 2/2] NTB: epf: Add Renesas rcar support Jerome Brunet
1 sibling, 1 reply; 6+ messages in thread
From: Jerome Brunet @ 2025-06-24 16:06 UTC (permalink / raw)
To: Jon Mason, Dave Jiang, Allen Hubbe
Cc: ntb, linux-kernel, Frank Li, Yoshihiro Shimoda, Yuya Hamamachi,
Jerome Brunet
The NTB epf host driver assumes the BAR number associated with a memory
window is just incremented from the BAR number associated with MW1. This
seems to have been enough so far but this is not really how the endpoint
side work and the two could easily become mis-aligned.
ntb_epf_mw_to_bar() even assumes that the BAR number is the memory window
index + 2, which means the function only returns a proper result if BAR_2
is associated with MW1.
Instead, fully describe and allow arbitrary NTB BAR mapping.
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/ntb/hw/epf/ntb_hw_epf.c | 105 +++++++++++++++++++++-------------------
1 file changed, 54 insertions(+), 51 deletions(-)
diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
index 00f0e78f685bf7917b02dd8a52b5b35f68d5bb64..e8eb3adc6cecd2d52235a3f0b6b5a59ec58f1d73 100644
--- a/drivers/ntb/hw/epf/ntb_hw_epf.c
+++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
@@ -49,6 +49,7 @@
#define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */
enum pci_barno {
+ NO_BAR = -1,
BAR_0,
BAR_1,
BAR_2,
@@ -57,16 +58,26 @@ enum pci_barno {
BAR_5,
};
+enum epf_ntb_bar {
+ BAR_CONFIG,
+ BAR_PEER_SPAD,
+ BAR_DB,
+ BAR_MW1,
+ BAR_MW2,
+ BAR_MW3,
+ BAR_MW4,
+ NTB_BAR_NUM,
+};
+
+#define NTB_EPF_MAX_MW_COUNT (NTB_BAR_NUM - BAR_MW1)
+
struct ntb_epf_dev {
struct ntb_dev ntb;
struct device *dev;
/* Mutex to protect providing commands to NTB EPF */
struct mutex cmd_lock;
- enum pci_barno ctrl_reg_bar;
- enum pci_barno peer_spad_reg_bar;
- enum pci_barno db_reg_bar;
- enum pci_barno mw_bar;
+ const enum pci_barno *barno_map;
unsigned int mw_count;
unsigned int spad_count;
@@ -85,17 +96,6 @@ struct ntb_epf_dev {
#define ntb_ndev(__ntb) container_of(__ntb, struct ntb_epf_dev, ntb)
-struct ntb_epf_data {
- /* BAR that contains both control region and self spad region */
- enum pci_barno ctrl_reg_bar;
- /* BAR that contains peer spad region */
- enum pci_barno peer_spad_reg_bar;
- /* BAR that contains Doorbell region and Memory window '1' */
- enum pci_barno db_reg_bar;
- /* BAR that contains memory windows*/
- enum pci_barno mw_bar;
-};
-
static int ntb_epf_send_command(struct ntb_epf_dev *ndev, u32 command,
u32 argument)
{
@@ -144,7 +144,7 @@ static int ntb_epf_mw_to_bar(struct ntb_epf_dev *ndev, int idx)
return -EINVAL;
}
- return idx + 2;
+ return ndev->barno_map[BAR_MW1 + idx];
}
static int ntb_epf_mw_count(struct ntb_dev *ntb, int pidx)
@@ -413,7 +413,9 @@ static int ntb_epf_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx,
return -EINVAL;
}
- bar = idx + ndev->mw_bar;
+ bar = ntb_epf_mw_to_bar(ndev, idx);
+ if (bar < 0)
+ return bar;
mw_size = pci_resource_len(ntb->pdev, bar);
@@ -455,7 +457,9 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *ntb, int idx,
if (idx == 0)
offset = readl(ndev->ctrl_reg + NTB_EPF_MW1_OFFSET);
- bar = idx + ndev->mw_bar;
+ bar = ntb_epf_mw_to_bar(ndev, idx);
+ if (bar < 0)
+ return bar;
if (base)
*base = pci_resource_start(ndev->ntb.pdev, bar) + offset;
@@ -557,8 +561,13 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev)
}
ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
- ndev->mw_count = readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT);
ndev->spad_count = readl(ndev->ctrl_reg + NTB_EPF_SPAD_COUNT);
+ ndev->mw_count = readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT);
+
+ if (ndev->mw_count > NTB_EPF_MAX_MW_COUNT) {
+ dev_err(dev, "Unsupported MW count: %u\n", ndev->mw_count);
+ return -EINVAL;
+ }
return 0;
}
@@ -596,14 +605,15 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,
dev_warn(&pdev->dev, "Cannot DMA highmem\n");
}
- ndev->ctrl_reg = pci_iomap(pdev, ndev->ctrl_reg_bar, 0);
+ ndev->ctrl_reg = pci_iomap(pdev, ndev->barno_map[BAR_CONFIG], 0);
if (!ndev->ctrl_reg) {
ret = -EIO;
goto err_pci_regions;
}
- if (ndev->peer_spad_reg_bar) {
- ndev->peer_spad_reg = pci_iomap(pdev, ndev->peer_spad_reg_bar, 0);
+ if (ndev->barno_map[BAR_PEER_SPAD] != ndev->barno_map[BAR_CONFIG]) {
+ ndev->peer_spad_reg = pci_iomap(pdev,
+ ndev->barno_map[BAR_PEER_SPAD], 0);
if (!ndev->peer_spad_reg) {
ret = -EIO;
goto err_pci_regions;
@@ -614,7 +624,7 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,
ndev->peer_spad_reg = ndev->ctrl_reg + spad_off + spad_sz;
}
- ndev->db_reg = pci_iomap(pdev, ndev->db_reg_bar, 0);
+ ndev->db_reg = pci_iomap(pdev, ndev->barno_map[BAR_DB], 0);
if (!ndev->db_reg) {
ret = -EIO;
goto err_pci_regions;
@@ -659,12 +669,7 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *ndev)
static int ntb_epf_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
- enum pci_barno peer_spad_reg_bar = BAR_1;
- enum pci_barno ctrl_reg_bar = BAR_0;
- enum pci_barno db_reg_bar = BAR_2;
- enum pci_barno mw_bar = BAR_2;
struct device *dev = &pdev->dev;
- struct ntb_epf_data *data;
struct ntb_epf_dev *ndev;
int ret;
@@ -675,18 +680,10 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev,
if (!ndev)
return -ENOMEM;
- data = (struct ntb_epf_data *)id->driver_data;
- if (data) {
- peer_spad_reg_bar = data->peer_spad_reg_bar;
- ctrl_reg_bar = data->ctrl_reg_bar;
- db_reg_bar = data->db_reg_bar;
- mw_bar = data->mw_bar;
- }
+ ndev->barno_map = (const enum pci_barno *)id->driver_data;
+ if (!ndev->barno_map)
+ return -EINVAL;
- ndev->peer_spad_reg_bar = peer_spad_reg_bar;
- ndev->ctrl_reg_bar = ctrl_reg_bar;
- ndev->db_reg_bar = db_reg_bar;
- ndev->mw_bar = mw_bar;
ndev->dev = dev;
ntb_epf_init_struct(ndev, pdev);
@@ -730,30 +727,36 @@ static void ntb_epf_pci_remove(struct pci_dev *pdev)
ntb_epf_deinit_pci(ndev);
}
-static const struct ntb_epf_data j721e_data = {
- .ctrl_reg_bar = BAR_0,
- .peer_spad_reg_bar = BAR_1,
- .db_reg_bar = BAR_2,
- .mw_bar = BAR_2,
+static const enum pci_barno j721e_map[NTB_BAR_NUM] = {
+ [BAR_CONFIG] = BAR_0,
+ [BAR_PEER_SPAD] = BAR_1,
+ [BAR_DB] = BAR_2,
+ [BAR_MW1] = BAR_2,
+ [BAR_MW2] = BAR_3,
+ [BAR_MW3] = BAR_4,
+ [BAR_MW4] = BAR_5
};
-static const struct ntb_epf_data mx8_data = {
- .ctrl_reg_bar = BAR_0,
- .peer_spad_reg_bar = BAR_0,
- .db_reg_bar = BAR_2,
- .mw_bar = BAR_4,
+static const enum pci_barno mx8_map[NTB_BAR_NUM] = {
+ [BAR_CONFIG] = BAR_0,
+ [BAR_PEER_SPAD] = BAR_0,
+ [BAR_DB] = BAR_2,
+ [BAR_MW1] = BAR_4,
+ [BAR_MW2] = BAR_5,
+ [BAR_MW3] = NO_BAR,
+ [BAR_MW4] = NO_BAR
};
static const struct pci_device_id ntb_epf_pci_tbl[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
- .driver_data = (kernel_ulong_t)&j721e_data,
+ .driver_data = (kernel_ulong_t)j721e_map,
},
{
PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809),
.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
- .driver_data = (kernel_ulong_t)&mx8_data,
+ .driver_data = (kernel_ulong_t)mx8_map,
},
{ },
};
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] NTB: epf: Add Renesas rcar support
2025-06-24 16:06 [PATCH v2 0/2] NTB: epf: add vNTB support for Renesas rcar platform Jerome Brunet
2025-06-24 16:06 ` [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping Jerome Brunet
@ 2025-06-24 16:06 ` Jerome Brunet
2025-06-24 20:02 ` Frank Li
1 sibling, 1 reply; 6+ messages in thread
From: Jerome Brunet @ 2025-06-24 16:06 UTC (permalink / raw)
To: Jon Mason, Dave Jiang, Allen Hubbe
Cc: ntb, linux-kernel, Frank Li, Yoshihiro Shimoda, Yuya Hamamachi,
Jerome Brunet
Add virtual non-transparent bridge support for Renesas rcar platform
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/ntb/hw/epf/ntb_hw_epf.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
index e8eb3adc6cecd2d52235a3f0b6b5a59ec58f1d73..97c9ed7e4dc27dabd21d3f083cc70d55bb280df8 100644
--- a/drivers/ntb/hw/epf/ntb_hw_epf.c
+++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
@@ -747,6 +747,16 @@ static const enum pci_barno mx8_map[NTB_BAR_NUM] = {
[BAR_MW4] = NO_BAR
};
+static const enum pci_barno rcar_barno[NTB_BAR_NUM] = {
+ [BAR_CONFIG] = BAR_0,
+ [BAR_PEER_SPAD] = BAR_0,
+ [BAR_DB] = BAR_4,
+ [BAR_MW1] = BAR_2,
+ [BAR_MW2] = NO_BAR,
+ [BAR_MW3] = NO_BAR,
+ [BAR_MW4] = NO_BAR,
+};
+
static const struct pci_device_id ntb_epf_pci_tbl[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
@@ -758,6 +768,11 @@ static const struct pci_device_id ntb_epf_pci_tbl[] = {
.class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
.driver_data = (kernel_ulong_t)mx8_map,
},
+ {
+ PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0030),
+ .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
+ .driver_data = (kernel_ulong_t)rcar_barno,
+ },
{ },
};
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping
2025-06-24 16:06 ` [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping Jerome Brunet
@ 2025-06-24 20:00 ` Frank Li
0 siblings, 0 replies; 6+ messages in thread
From: Frank Li @ 2025-06-24 20:00 UTC (permalink / raw)
To: Jerome Brunet
Cc: Jon Mason, Dave Jiang, Allen Hubbe, ntb, linux-kernel,
Yoshihiro Shimoda, Yuya Hamamachi
On Tue, Jun 24, 2025 at 06:06:16PM +0200, Jerome Brunet wrote:
> The NTB epf host driver assumes the BAR number associated with a memory
> window is just incremented from the BAR number associated with MW1. This
> seems to have been enough so far but this is not really how the endpoint
> side work and the two could easily become mis-aligned.
>
> ntb_epf_mw_to_bar() even assumes that the BAR number is the memory window
> index + 2, which means the function only returns a proper result if BAR_2
> is associated with MW1.
>
> Instead, fully describe and allow arbitrary NTB BAR mapping.
>
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> ---
> drivers/ntb/hw/epf/ntb_hw_epf.c | 105 +++++++++++++++++++++-------------------
> 1 file changed, 54 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
> index 00f0e78f685bf7917b02dd8a52b5b35f68d5bb64..e8eb3adc6cecd2d52235a3f0b6b5a59ec58f1d73 100644
> --- a/drivers/ntb/hw/epf/ntb_hw_epf.c
> +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
> @@ -49,6 +49,7 @@
> #define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */
>
> enum pci_barno {
> + NO_BAR = -1,
> BAR_0,
> BAR_1,
> BAR_2,
> @@ -57,16 +58,26 @@ enum pci_barno {
> BAR_5,
> };
>
> +enum epf_ntb_bar {
> + BAR_CONFIG,
> + BAR_PEER_SPAD,
> + BAR_DB,
> + BAR_MW1,
> + BAR_MW2,
> + BAR_MW3,
> + BAR_MW4,
> + NTB_BAR_NUM,
> +};
> +
> +#define NTB_EPF_MAX_MW_COUNT (NTB_BAR_NUM - BAR_MW1)
> +
> struct ntb_epf_dev {
> struct ntb_dev ntb;
> struct device *dev;
> /* Mutex to protect providing commands to NTB EPF */
> struct mutex cmd_lock;
>
> - enum pci_barno ctrl_reg_bar;
> - enum pci_barno peer_spad_reg_bar;
> - enum pci_barno db_reg_bar;
> - enum pci_barno mw_bar;
> + const enum pci_barno *barno_map;
>
> unsigned int mw_count;
> unsigned int spad_count;
> @@ -85,17 +96,6 @@ struct ntb_epf_dev {
>
> #define ntb_ndev(__ntb) container_of(__ntb, struct ntb_epf_dev, ntb)
>
> -struct ntb_epf_data {
> - /* BAR that contains both control region and self spad region */
> - enum pci_barno ctrl_reg_bar;
> - /* BAR that contains peer spad region */
> - enum pci_barno peer_spad_reg_bar;
> - /* BAR that contains Doorbell region and Memory window '1' */
> - enum pci_barno db_reg_bar;
> - /* BAR that contains memory windows*/
> - enum pci_barno mw_bar;
> -};
> -
> static int ntb_epf_send_command(struct ntb_epf_dev *ndev, u32 command,
> u32 argument)
> {
> @@ -144,7 +144,7 @@ static int ntb_epf_mw_to_bar(struct ntb_epf_dev *ndev, int idx)
> return -EINVAL;
> }
>
> - return idx + 2;
> + return ndev->barno_map[BAR_MW1 + idx];
> }
>
> static int ntb_epf_mw_count(struct ntb_dev *ntb, int pidx)
> @@ -413,7 +413,9 @@ static int ntb_epf_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx,
> return -EINVAL;
> }
>
> - bar = idx + ndev->mw_bar;
> + bar = ntb_epf_mw_to_bar(ndev, idx);
> + if (bar < 0)
> + return bar;
>
> mw_size = pci_resource_len(ntb->pdev, bar);
>
> @@ -455,7 +457,9 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *ntb, int idx,
> if (idx == 0)
> offset = readl(ndev->ctrl_reg + NTB_EPF_MW1_OFFSET);
>
> - bar = idx + ndev->mw_bar;
> + bar = ntb_epf_mw_to_bar(ndev, idx);
> + if (bar < 0)
> + return bar;
>
> if (base)
> *base = pci_resource_start(ndev->ntb.pdev, bar) + offset;
> @@ -557,8 +561,13 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev)
> }
>
> ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
> - ndev->mw_count = readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT);
> ndev->spad_count = readl(ndev->ctrl_reg + NTB_EPF_SPAD_COUNT);
> + ndev->mw_count = readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT);
This looks like just move readl() pos, not related this patch.
Frank
> +
> + if (ndev->mw_count > NTB_EPF_MAX_MW_COUNT) {
> + dev_err(dev, "Unsupported MW count: %u\n", ndev->mw_count);
> + return -EINVAL;
> + }
>
> return 0;
> }
> @@ -596,14 +605,15 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,
> dev_warn(&pdev->dev, "Cannot DMA highmem\n");
> }
>
> - ndev->ctrl_reg = pci_iomap(pdev, ndev->ctrl_reg_bar, 0);
> + ndev->ctrl_reg = pci_iomap(pdev, ndev->barno_map[BAR_CONFIG], 0);
> if (!ndev->ctrl_reg) {
> ret = -EIO;
> goto err_pci_regions;
> }
>
> - if (ndev->peer_spad_reg_bar) {
> - ndev->peer_spad_reg = pci_iomap(pdev, ndev->peer_spad_reg_bar, 0);
> + if (ndev->barno_map[BAR_PEER_SPAD] != ndev->barno_map[BAR_CONFIG]) {
> + ndev->peer_spad_reg = pci_iomap(pdev,
> + ndev->barno_map[BAR_PEER_SPAD], 0);
> if (!ndev->peer_spad_reg) {
> ret = -EIO;
> goto err_pci_regions;
> @@ -614,7 +624,7 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,
> ndev->peer_spad_reg = ndev->ctrl_reg + spad_off + spad_sz;
> }
>
> - ndev->db_reg = pci_iomap(pdev, ndev->db_reg_bar, 0);
> + ndev->db_reg = pci_iomap(pdev, ndev->barno_map[BAR_DB], 0);
> if (!ndev->db_reg) {
> ret = -EIO;
> goto err_pci_regions;
> @@ -659,12 +669,7 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *ndev)
> static int ntb_epf_pci_probe(struct pci_dev *pdev,
> const struct pci_device_id *id)
> {
> - enum pci_barno peer_spad_reg_bar = BAR_1;
> - enum pci_barno ctrl_reg_bar = BAR_0;
> - enum pci_barno db_reg_bar = BAR_2;
> - enum pci_barno mw_bar = BAR_2;
> struct device *dev = &pdev->dev;
> - struct ntb_epf_data *data;
> struct ntb_epf_dev *ndev;
> int ret;
>
> @@ -675,18 +680,10 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev,
> if (!ndev)
> return -ENOMEM;
>
> - data = (struct ntb_epf_data *)id->driver_data;
> - if (data) {
> - peer_spad_reg_bar = data->peer_spad_reg_bar;
> - ctrl_reg_bar = data->ctrl_reg_bar;
> - db_reg_bar = data->db_reg_bar;
> - mw_bar = data->mw_bar;
> - }
> + ndev->barno_map = (const enum pci_barno *)id->driver_data;
> + if (!ndev->barno_map)
> + return -EINVAL;
>
> - ndev->peer_spad_reg_bar = peer_spad_reg_bar;
> - ndev->ctrl_reg_bar = ctrl_reg_bar;
> - ndev->db_reg_bar = db_reg_bar;
> - ndev->mw_bar = mw_bar;
> ndev->dev = dev;
>
> ntb_epf_init_struct(ndev, pdev);
> @@ -730,30 +727,36 @@ static void ntb_epf_pci_remove(struct pci_dev *pdev)
> ntb_epf_deinit_pci(ndev);
> }
>
> -static const struct ntb_epf_data j721e_data = {
> - .ctrl_reg_bar = BAR_0,
> - .peer_spad_reg_bar = BAR_1,
> - .db_reg_bar = BAR_2,
> - .mw_bar = BAR_2,
> +static const enum pci_barno j721e_map[NTB_BAR_NUM] = {
> + [BAR_CONFIG] = BAR_0,
> + [BAR_PEER_SPAD] = BAR_1,
> + [BAR_DB] = BAR_2,
> + [BAR_MW1] = BAR_2,
> + [BAR_MW2] = BAR_3,
> + [BAR_MW3] = BAR_4,
> + [BAR_MW4] = BAR_5
> };
>
> -static const struct ntb_epf_data mx8_data = {
> - .ctrl_reg_bar = BAR_0,
> - .peer_spad_reg_bar = BAR_0,
> - .db_reg_bar = BAR_2,
> - .mw_bar = BAR_4,
> +static const enum pci_barno mx8_map[NTB_BAR_NUM] = {
> + [BAR_CONFIG] = BAR_0,
> + [BAR_PEER_SPAD] = BAR_0,
> + [BAR_DB] = BAR_2,
> + [BAR_MW1] = BAR_4,
> + [BAR_MW2] = BAR_5,
> + [BAR_MW3] = NO_BAR,
> + [BAR_MW4] = NO_BAR
> };
>
> static const struct pci_device_id ntb_epf_pci_tbl[] = {
> {
> PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
> .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
> - .driver_data = (kernel_ulong_t)&j721e_data,
> + .driver_data = (kernel_ulong_t)j721e_map,
> },
> {
> PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809),
> .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
> - .driver_data = (kernel_ulong_t)&mx8_data,
> + .driver_data = (kernel_ulong_t)mx8_map,
> },
> { },
> };
>
> --
> 2.47.2
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] NTB: epf: Add Renesas rcar support
2025-06-24 16:06 ` [PATCH v2 2/2] NTB: epf: Add Renesas rcar support Jerome Brunet
@ 2025-06-24 20:02 ` Frank Li
2025-07-01 13:38 ` Jerome Brunet
0 siblings, 1 reply; 6+ messages in thread
From: Frank Li @ 2025-06-24 20:02 UTC (permalink / raw)
To: Jerome Brunet
Cc: Jon Mason, Dave Jiang, Allen Hubbe, ntb, linux-kernel,
Yoshihiro Shimoda, Yuya Hamamachi
On Tue, Jun 24, 2025 at 06:06:17PM +0200, Jerome Brunet wrote:
> Add virtual non-transparent bridge support for Renesas rcar platform
>
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> ---
> drivers/ntb/hw/epf/ntb_hw_epf.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
> index e8eb3adc6cecd2d52235a3f0b6b5a59ec58f1d73..97c9ed7e4dc27dabd21d3f083cc70d55bb280df8 100644
> --- a/drivers/ntb/hw/epf/ntb_hw_epf.c
> +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
> @@ -747,6 +747,16 @@ static const enum pci_barno mx8_map[NTB_BAR_NUM] = {
> [BAR_MW4] = NO_BAR
> };
>
> +static const enum pci_barno rcar_barno[NTB_BAR_NUM] = {
Nit: suppose neend't NTB_BAR_NUM.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> + [BAR_CONFIG] = BAR_0,
> + [BAR_PEER_SPAD] = BAR_0,
> + [BAR_DB] = BAR_4,
> + [BAR_MW1] = BAR_2,
> + [BAR_MW2] = NO_BAR,
> + [BAR_MW3] = NO_BAR,
> + [BAR_MW4] = NO_BAR,
> +};
> +
> static const struct pci_device_id ntb_epf_pci_tbl[] = {
> {
> PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
> @@ -758,6 +768,11 @@ static const struct pci_device_id ntb_epf_pci_tbl[] = {
> .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
> .driver_data = (kernel_ulong_t)mx8_map,
> },
> + {
> + PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0030),
> + .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
> + .driver_data = (kernel_ulong_t)rcar_barno,
> + },
> { },
> };
>
>
> --
> 2.47.2
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] NTB: epf: Add Renesas rcar support
2025-06-24 20:02 ` Frank Li
@ 2025-07-01 13:38 ` Jerome Brunet
0 siblings, 0 replies; 6+ messages in thread
From: Jerome Brunet @ 2025-07-01 13:38 UTC (permalink / raw)
To: Frank Li
Cc: Jon Mason, Dave Jiang, Allen Hubbe, ntb, linux-kernel,
Yoshihiro Shimoda, Yuya Hamamachi
On Tue 24 Jun 2025 at 16:02, Frank Li <Frank.li@nxp.com> wrote:
> On Tue, Jun 24, 2025 at 06:06:17PM +0200, Jerome Brunet wrote:
>> Add virtual non-transparent bridge support for Renesas rcar platform
>>
>> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
>> ---
>> drivers/ntb/hw/epf/ntb_hw_epf.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>> diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
>> index e8eb3adc6cecd2d52235a3f0b6b5a59ec58f1d73..97c9ed7e4dc27dabd21d3f083cc70d55bb280df8 100644
>> --- a/drivers/ntb/hw/epf/ntb_hw_epf.c
>> +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
>> @@ -747,6 +747,16 @@ static const enum pci_barno mx8_map[NTB_BAR_NUM] = {
>> [BAR_MW4] = NO_BAR
>> };
>>
>> +static const enum pci_barno rcar_barno[NTB_BAR_NUM] = {
>
> Nit: suppose neend't NTB_BAR_NUM.
Not strictly no, but it does not hurt.
It's an obvious reminder that of that table is fixed.
I'll keep it that way if you don't mind.
>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>> + [BAR_CONFIG] = BAR_0,
>> + [BAR_PEER_SPAD] = BAR_0,
>> + [BAR_DB] = BAR_4,
>> + [BAR_MW1] = BAR_2,
>> + [BAR_MW2] = NO_BAR,
>> + [BAR_MW3] = NO_BAR,
>> + [BAR_MW4] = NO_BAR,
>> +};
>> +
>> static const struct pci_device_id ntb_epf_pci_tbl[] = {
>> {
>> PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
>> @@ -758,6 +768,11 @@ static const struct pci_device_id ntb_epf_pci_tbl[] = {
>> .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
>> .driver_data = (kernel_ulong_t)mx8_map,
>> },
>> + {
>> + PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0030),
>> + .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
>> + .driver_data = (kernel_ulong_t)rcar_barno,
>> + },
>> { },
>> };
>>
>>
>> --
>> 2.47.2
>>
--
Jerome
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-07-01 13:39 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-24 16:06 [PATCH v2 0/2] NTB: epf: add vNTB support for Renesas rcar platform Jerome Brunet
2025-06-24 16:06 ` [PATCH v2 1/2] NTB: epf: Allow arbitrary BAR mapping Jerome Brunet
2025-06-24 20:00 ` Frank Li
2025-06-24 16:06 ` [PATCH v2 2/2] NTB: epf: Add Renesas rcar support Jerome Brunet
2025-06-24 20:02 ` Frank Li
2025-07-01 13:38 ` Jerome Brunet
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).