linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups
@ 2025-05-13  7:30 Niklas Cassel
  2025-05-13  7:30 ` [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback Niklas Cassel
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Niklas Cassel @ 2025-05-13  7:30 UTC (permalink / raw)
  To: Lorenzo Pieralisi, Krzysztof Wilczyński,
	Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Jingoo Han,
	Marek Vasut, Yoshihiro Shimoda, Shawn Lin, Heiko Stuebner,
	Kishon Vijay Abraham I, Alan Douglas
  Cc: Wilfred Mallawa, Damien Le Moal, Niklas Cassel, linux-pci,
	linux-renesas-soc, linux-rockchip, linux-arm-kernel

Hello all,

The first two patches in this series are IRQ callback fixes that should
get backported.

The reason why the bugs existed in the first place is because the APIs
are very confusing. The rest of the patches are cleanups of the APIs.
These cleanups should not get backported.


Changes since v1:
-Improved commit message of the fix patches.
-Picked up tags on the fix patches.
-Added cleanups patches.


Niklas Cassel (6):
  PCI: dwc: ep: Fix broken set_msix() callback
  PCI: cadence-ep: Fix broken set_msix() callback
  PCI: endpoint: cleanup get_msi() callback
  PCI: endpoint: cleanup set_msi() callback
  PCI: endpoint: cleanup get_msix() callback
  PCI: endpoint: cleanup set_msix() callback

 drivers/pci/controller/cadence/pcie-cadence-ep.c | 10 ++++++----
 drivers/pci/controller/dwc/pcie-designware-ep.c  |  9 +++++----
 drivers/pci/controller/pcie-rcar-ep.c            |  5 +++--
 drivers/pci/controller/pcie-rockchip-ep.c        |  9 +++++----
 drivers/pci/endpoint/pci-epc-core.c              | 11 +++--------
 5 files changed, 22 insertions(+), 22 deletions(-)

-- 
2.49.0



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback
  2025-05-13  7:30 [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Niklas Cassel
@ 2025-05-13  7:30 ` Niklas Cassel
  2025-05-14  6:35   ` Damien Le Moal
  2025-05-13  7:30 ` [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback Niklas Cassel
  2025-05-13 10:25 ` [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Krzysztof Wilczyński
  2 siblings, 1 reply; 8+ messages in thread
From: Niklas Cassel @ 2025-05-13  7:30 UTC (permalink / raw)
  To: Lorenzo Pieralisi, Krzysztof Wilczyński,
	Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Jingoo Han,
	Marek Vasut, Yoshihiro Shimoda, Shawn Lin, Heiko Stuebner,
	Kishon Vijay Abraham I
  Cc: Wilfred Mallawa, Damien Le Moal, Niklas Cassel, stable+noautosel,
	linux-pci, linux-renesas-soc, linux-rockchip, linux-arm-kernel

The kdoc for pci_epc_get_msi() says:
"Invoke to get the number of MSI interrupts allocated by the RC"
the kdoc for the callback pci_epc_ops->get_msi() says:
"ops to get the number of MSI interrupts allocated by the RC from
the MSI capability register"

pci_epc_ops->get_msi() does however return the number of interrupts
in the encoding as defined by the MME Multiple Message Enable field.

Nowhere in the kdoc does it say that the returned number of interrupts
is in MME encoding.

Thus, it is very confusing that the wrapper function (pci_epc_get_msi())
and the callback function (pci_epc_ops->get_msi()) don't return the same
value.

Cleanup the API so that the wrapper function and the callback function
will have the same semantics.

Cc: <stable+noautosel@kernel.org> # this is simply a cleanup
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
 drivers/pci/controller/cadence/pcie-cadence-ep.c | 2 +-
 drivers/pci/controller/dwc/pcie-designware-ep.c  | 2 +-
 drivers/pci/controller/pcie-rcar-ep.c            | 2 +-
 drivers/pci/controller/pcie-rockchip-ep.c        | 4 ++--
 drivers/pci/endpoint/pci-epc-core.c              | 2 --
 5 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c
index 112ae200b393..78b4d009cd04 100644
--- a/drivers/pci/controller/cadence/pcie-cadence-ep.c
+++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c
@@ -262,7 +262,7 @@ static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn)
 	 */
 	mme = FIELD_GET(PCI_MSI_FLAGS_QSIZE, flags);
 
-	return mme;
+	return 1 << mme;
 }
 
 static int cdns_pcie_ep_get_msix(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 24026f3f3413..03597551f4cd 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -532,7 +532,7 @@ static int dw_pcie_ep_get_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
 
 	val = FIELD_GET(PCI_MSI_FLAGS_QSIZE, val);
 
-	return val;
+	return 1 << val;
 }
 
 static int dw_pcie_ep_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
diff --git a/drivers/pci/controller/pcie-rcar-ep.c b/drivers/pci/controller/pcie-rcar-ep.c
index c5e0d025bc43..9da39a4617b6 100644
--- a/drivers/pci/controller/pcie-rcar-ep.c
+++ b/drivers/pci/controller/pcie-rcar-ep.c
@@ -280,7 +280,7 @@ static int rcar_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn)
 	if (!(flags & MSICAP0_MSIE))
 		return -EINVAL;
 
-	return ((flags & MSICAP0_MMESE_MASK) >> MSICAP0_MMESE_OFFSET);
+	return 1 << ((flags & MSICAP0_MMESE_MASK) >> MSICAP0_MMESE_OFFSET);
 }
 
 static int rcar_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, u8 vfn,
diff --git a/drivers/pci/controller/pcie-rockchip-ep.c b/drivers/pci/controller/pcie-rockchip-ep.c
index 85ea36df2f59..85ca7d9b4c77 100644
--- a/drivers/pci/controller/pcie-rockchip-ep.c
+++ b/drivers/pci/controller/pcie-rockchip-ep.c
@@ -340,8 +340,8 @@ static int rockchip_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn)
 	if (!(flags & ROCKCHIP_PCIE_EP_MSI_CTRL_ME))
 		return -EINVAL;
 
-	return ((flags & ROCKCHIP_PCIE_EP_MSI_CTRL_MME_MASK) >>
-			ROCKCHIP_PCIE_EP_MSI_CTRL_MME_OFFSET);
+	return 1 << ((flags & ROCKCHIP_PCIE_EP_MSI_CTRL_MME_MASK) >>
+		     ROCKCHIP_PCIE_EP_MSI_CTRL_MME_OFFSET);
 }
 
 static void rockchip_pcie_ep_assert_intx(struct rockchip_pcie_ep *ep, u8 fn,
diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c
index beabea00af91..cc1456bd188e 100644
--- a/drivers/pci/endpoint/pci-epc-core.c
+++ b/drivers/pci/endpoint/pci-epc-core.c
@@ -293,8 +293,6 @@ int pci_epc_get_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
 	if (interrupt < 0)
 		return 0;
 
-	interrupt = 1 << interrupt;
-
 	return interrupt;
 }
 EXPORT_SYMBOL_GPL(pci_epc_get_msi);
-- 
2.49.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback
  2025-05-13  7:30 [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Niklas Cassel
  2025-05-13  7:30 ` [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback Niklas Cassel
@ 2025-05-13  7:30 ` Niklas Cassel
  2025-05-14  6:39   ` Damien Le Moal
  2025-05-13 10:25 ` [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Krzysztof Wilczyński
  2 siblings, 1 reply; 8+ messages in thread
From: Niklas Cassel @ 2025-05-13  7:30 UTC (permalink / raw)
  To: Lorenzo Pieralisi, Krzysztof Wilczyński,
	Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Jingoo Han,
	Marek Vasut, Yoshihiro Shimoda, Shawn Lin, Heiko Stuebner,
	Kishon Vijay Abraham I
  Cc: Wilfred Mallawa, Damien Le Moal, Niklas Cassel, stable+noautosel,
	linux-pci, linux-renesas-soc, linux-rockchip, linux-arm-kernel

The kdoc for pci_epc_set_msi() says:
"Invoke to set the required number of MSI interrupts."
the kdoc for the callback pci_epc_ops->set_msi() says:
"ops to set the requested number of MSI interrupts in the MSI capability
register"

pci_epc_ops->set_msi() does however expect the parameter 'interrupts' to
be in the encoding as defined by the MMC Multiple Message Capable field.

Nowhere in the kdoc does it say that the number of interrupts should be
in MMC encoding.

Thus, it is very confusing that the wrapper function (pci_epc_set_msi())
and the callback function (pci_epc_ops->set_msi()) both take a parameter
named interrupts, but they both expect completely different encodings.

Cleanup the API so that the wrapper function and the callback function
will have the same semantics.

Cc: <stable+noautosel@kernel.org> # this is simply a cleanup
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
 drivers/pci/controller/cadence/pcie-cadence-ep.c | 4 +++-
 drivers/pci/controller/dwc/pcie-designware-ep.c  | 3 ++-
 drivers/pci/controller/pcie-rcar-ep.c            | 3 ++-
 drivers/pci/controller/pcie-rockchip-ep.c        | 5 +++--
 drivers/pci/endpoint/pci-epc-core.c              | 5 +----
 5 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c
index 78b4d009cd04..f307256826e6 100644
--- a/drivers/pci/controller/cadence/pcie-cadence-ep.c
+++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c
@@ -220,10 +220,12 @@ static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn,
 	clear_bit(r, &ep->ob_region_map);
 }
 
-static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn, u8 mmc)
+static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
+				u8 interrupts)
 {
 	struct cdns_pcie_ep *ep = epc_get_drvdata(epc);
 	struct cdns_pcie *pcie = &ep->pcie;
+	u8 mmc = order_base_2(interrupts);
 	u32 cap = CDNS_PCIE_EP_FUNC_MSI_CAP_OFFSET;
 	u16 flags;
 
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 03597551f4cd..e7a916bf6b2c 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -541,6 +541,7 @@ static int dw_pcie_ep_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
 	struct dw_pcie_ep *ep = epc_get_drvdata(epc);
 	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
 	struct dw_pcie_ep_func *ep_func;
+	u8 mmc = order_base_2(interrupts);
 	u32 val, reg;
 
 	ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no);
@@ -550,7 +551,7 @@ static int dw_pcie_ep_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
 	reg = ep_func->msi_cap + PCI_MSI_FLAGS;
 	val = dw_pcie_ep_readw_dbi(ep, func_no, reg);
 	val &= ~PCI_MSI_FLAGS_QMASK;
-	val |= FIELD_PREP(PCI_MSI_FLAGS_QMASK, interrupts);
+	val |= FIELD_PREP(PCI_MSI_FLAGS_QMASK, mmc);
 	dw_pcie_dbi_ro_wr_en(pci);
 	dw_pcie_ep_writew_dbi(ep, func_no, reg, val);
 	dw_pcie_dbi_ro_wr_dis(pci);
diff --git a/drivers/pci/controller/pcie-rcar-ep.c b/drivers/pci/controller/pcie-rcar-ep.c
index 9da39a4617b6..b25ad23bedb7 100644
--- a/drivers/pci/controller/pcie-rcar-ep.c
+++ b/drivers/pci/controller/pcie-rcar-ep.c
@@ -261,10 +261,11 @@ static int rcar_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
 {
 	struct rcar_pcie_endpoint *ep = epc_get_drvdata(epc);
 	struct rcar_pcie *pcie = &ep->pcie;
+	u8 mmc = order_base_2(interrupts);
 	u32 flags;
 
 	flags = rcar_pci_read_reg(pcie, MSICAP(fn));
-	flags |= interrupts << MSICAP0_MMESCAP_OFFSET;
+	flags |= mmc << MSICAP0_MMESCAP_OFFSET;
 	rcar_pci_write_reg(pcie, flags, MSICAP(fn));
 
 	return 0;
diff --git a/drivers/pci/controller/pcie-rockchip-ep.c b/drivers/pci/controller/pcie-rockchip-ep.c
index 85ca7d9b4c77..2fb50a35146c 100644
--- a/drivers/pci/controller/pcie-rockchip-ep.c
+++ b/drivers/pci/controller/pcie-rockchip-ep.c
@@ -308,10 +308,11 @@ static void rockchip_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn,
 }
 
 static int rockchip_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
-				    u8 multi_msg_cap)
+				    u8 interrupts)
 {
 	struct rockchip_pcie_ep *ep = epc_get_drvdata(epc);
 	struct rockchip_pcie *rockchip = &ep->rockchip;
+	u8 mmc = order_base_2(interrupts);
 	u32 flags;
 
 	flags = rockchip_pcie_read(rockchip,
@@ -319,7 +320,7 @@ static int rockchip_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
 				   ROCKCHIP_PCIE_EP_MSI_CTRL_REG);
 	flags &= ~ROCKCHIP_PCIE_EP_MSI_CTRL_MMC_MASK;
 	flags |=
-	   (multi_msg_cap << ROCKCHIP_PCIE_EP_MSI_CTRL_MMC_OFFSET) |
+	   (mmc << ROCKCHIP_PCIE_EP_MSI_CTRL_MMC_OFFSET) |
 	   (PCI_MSI_FLAGS_64BIT << ROCKCHIP_PCIE_EP_MSI_FLAGS_OFFSET);
 	flags &= ~ROCKCHIP_PCIE_EP_MSI_CTRL_MASK_MSI_CAP;
 	rockchip_pcie_write(rockchip, flags,
diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c
index cc1456bd188e..cc012373293a 100644
--- a/drivers/pci/endpoint/pci-epc-core.c
+++ b/drivers/pci/endpoint/pci-epc-core.c
@@ -309,7 +309,6 @@ EXPORT_SYMBOL_GPL(pci_epc_get_msi);
 int pci_epc_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no, u8 interrupts)
 {
 	int ret;
-	u8 encode_int;
 
 	if (!pci_epc_function_is_valid(epc, func_no, vfunc_no))
 		return -EINVAL;
@@ -320,10 +319,8 @@ int pci_epc_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no, u8 interrupts)
 	if (!epc->ops->set_msi)
 		return 0;
 
-	encode_int = order_base_2(interrupts);
-
 	mutex_lock(&epc->lock);
-	ret = epc->ops->set_msi(epc, func_no, vfunc_no, encode_int);
+	ret = epc->ops->set_msi(epc, func_no, vfunc_no, interrupts);
 	mutex_unlock(&epc->lock);
 
 	return ret;
-- 
2.49.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups
  2025-05-13  7:30 [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Niklas Cassel
  2025-05-13  7:30 ` [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback Niklas Cassel
  2025-05-13  7:30 ` [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback Niklas Cassel
@ 2025-05-13 10:25 ` Krzysztof Wilczyński
  2025-05-13 12:31   ` Niklas Cassel
  2 siblings, 1 reply; 8+ messages in thread
From: Krzysztof Wilczyński @ 2025-05-13 10:25 UTC (permalink / raw)
  To: Niklas Cassel
  Cc: Lorenzo Pieralisi, Manivannan Sadhasivam, Rob Herring,
	Bjorn Helgaas, Jingoo Han, Marek Vasut, Yoshihiro Shimoda,
	Shawn Lin, Heiko Stuebner, Kishon Vijay Abraham I, Alan Douglas,
	Wilfred Mallawa, Damien Le Moal, linux-pci, linux-renesas-soc,
	linux-rockchip, linux-arm-kernel

Hello,

>   PCI: dwc: ep: Fix broken set_msix() callback
>   PCI: cadence-ep: Fix broken set_msix() callback
>   PCI: endpoint: cleanup get_msi() callback
>   PCI: endpoint: cleanup set_msi() callback
>   PCI: endpoint: cleanup get_msix() callback
>   PCI: endpoint: cleanup set_msix() callback

Note that PCI prefers to capitalise first letter of the subject.

Thank you!

	Krzysztof


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups
  2025-05-13 10:25 ` [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Krzysztof Wilczyński
@ 2025-05-13 12:31   ` Niklas Cassel
  2025-05-13 16:03     ` Manivannan Sadhasivam
  0 siblings, 1 reply; 8+ messages in thread
From: Niklas Cassel @ 2025-05-13 12:31 UTC (permalink / raw)
  To: Krzysztof Wilczyński
  Cc: Lorenzo Pieralisi, Manivannan Sadhasivam, Rob Herring,
	Bjorn Helgaas, Jingoo Han, Marek Vasut, Yoshihiro Shimoda,
	Shawn Lin, Heiko Stuebner, Kishon Vijay Abraham I, Alan Douglas,
	Wilfred Mallawa, Damien Le Moal, linux-pci, linux-renesas-soc,
	linux-rockchip, linux-arm-kernel

On Tue, May 13, 2025 at 07:25:22PM +0900, Krzysztof Wilczyński wrote:
> Hello,

Hello

> 
> >   PCI: dwc: ep: Fix broken set_msix() callback
> >   PCI: cadence-ep: Fix broken set_msix() callback
> >   PCI: endpoint: cleanup get_msi() callback
> >   PCI: endpoint: cleanup set_msi() callback
> >   PCI: endpoint: cleanup get_msix() callback
> >   PCI: endpoint: cleanup set_msix() callback
> 
> Note that PCI prefers to capitalise first letter of the subject.

Do I need to resend or can some of the maintainers fix this up while applying?


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups
  2025-05-13 12:31   ` Niklas Cassel
@ 2025-05-13 16:03     ` Manivannan Sadhasivam
  0 siblings, 0 replies; 8+ messages in thread
From: Manivannan Sadhasivam @ 2025-05-13 16:03 UTC (permalink / raw)
  To: Niklas Cassel
  Cc: Krzysztof Wilczyński, Lorenzo Pieralisi, Rob Herring,
	Bjorn Helgaas, Jingoo Han, Marek Vasut, Yoshihiro Shimoda,
	Shawn Lin, Heiko Stuebner, Kishon Vijay Abraham I, Alan Douglas,
	Wilfred Mallawa, Damien Le Moal, linux-pci, linux-renesas-soc,
	linux-rockchip, linux-arm-kernel

On Tue, May 13, 2025 at 02:31:17PM +0200, Niklas Cassel wrote:
> On Tue, May 13, 2025 at 07:25:22PM +0900, Krzysztof Wilczyński wrote:
> > Hello,
> 
> Hello
> 
> > 
> > >   PCI: dwc: ep: Fix broken set_msix() callback
> > >   PCI: cadence-ep: Fix broken set_msix() callback
> > >   PCI: endpoint: cleanup get_msi() callback
> > >   PCI: endpoint: cleanup set_msi() callback
> > >   PCI: endpoint: cleanup get_msix() callback
> > >   PCI: endpoint: cleanup set_msix() callback
> > 
> > Note that PCI prefers to capitalise first letter of the subject.
> 
> Do I need to resend or can some of the maintainers fix this up while applying?

I will fix it up while applying.

- Mani

-- 
மணிவண்ணன் சதாசிவம்


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback
  2025-05-13  7:30 ` [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback Niklas Cassel
@ 2025-05-14  6:35   ` Damien Le Moal
  0 siblings, 0 replies; 8+ messages in thread
From: Damien Le Moal @ 2025-05-14  6:35 UTC (permalink / raw)
  To: Niklas Cassel, Lorenzo Pieralisi, Krzysztof Wilczyński,
	Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Jingoo Han,
	Marek Vasut, Yoshihiro Shimoda, Shawn Lin, Heiko Stuebner,
	Kishon Vijay Abraham I
  Cc: Wilfred Mallawa, stable+noautosel, linux-pci, linux-renesas-soc,
	linux-rockchip, linux-arm-kernel

On 5/13/25 16:30, Niklas Cassel wrote:
> The kdoc for pci_epc_get_msi() says:
> "Invoke to get the number of MSI interrupts allocated by the RC"
> the kdoc for the callback pci_epc_ops->get_msi() says:
> "ops to get the number of MSI interrupts allocated by the RC from
> the MSI capability register"
> 
> pci_epc_ops->get_msi() does however return the number of interrupts
> in the encoding as defined by the MME Multiple Message Enable field.
> 
> Nowhere in the kdoc does it say that the returned number of interrupts
> is in MME encoding.
> 
> Thus, it is very confusing that the wrapper function (pci_epc_get_msi())
> and the callback function (pci_epc_ops->get_msi()) don't return the same
> value.
> 
> Cleanup the API so that the wrapper function and the callback function
> will have the same semantics.

Nit: please mention which semantic this patch changes the API to use, that is,
to follow the kdoc and return the number of interrupts, regardless of the
internal encoding of that value.

Other than that, looks good to me.

Reviewed-by: Damien Le Moal <dlemoal@kernel.org>]

-- 
Damien Le Moal
Western Digital Research


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback
  2025-05-13  7:30 ` [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback Niklas Cassel
@ 2025-05-14  6:39   ` Damien Le Moal
  0 siblings, 0 replies; 8+ messages in thread
From: Damien Le Moal @ 2025-05-14  6:39 UTC (permalink / raw)
  To: Niklas Cassel, Lorenzo Pieralisi, Krzysztof Wilczyński,
	Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Jingoo Han,
	Marek Vasut, Yoshihiro Shimoda, Shawn Lin, Heiko Stuebner,
	Kishon Vijay Abraham I
  Cc: Wilfred Mallawa, stable+noautosel, linux-pci, linux-renesas-soc,
	linux-rockchip, linux-arm-kernel

On 5/13/25 16:30, Niklas Cassel wrote:
> The kdoc for pci_epc_set_msi() says:
> "Invoke to set the required number of MSI interrupts."
> the kdoc for the callback pci_epc_ops->set_msi() says:
> "ops to set the requested number of MSI interrupts in the MSI capability
> register"
> 
> pci_epc_ops->set_msi() does however expect the parameter 'interrupts' to
> be in the encoding as defined by the MMC Multiple Message Capable field.
> 
> Nowhere in the kdoc does it say that the number of interrupts should be
> in MMC encoding.
> 
> Thus, it is very confusing that the wrapper function (pci_epc_set_msi())
> and the callback function (pci_epc_ops->set_msi()) both take a parameter
> named interrupts, but they both expect completely different encodings.
> 
> Cleanup the API so that the wrapper function and the callback function
> will have the same semantics.

Same comment as patch 3. Mention the semantic the patch implements.

> 
> Cc: <stable+noautosel@kernel.org> # this is simply a cleanup
> Signed-off-by: Niklas Cassel <cassel@kernel.org>

A few nits below, but other than that, looks good to me.

Reviewed-by: Damien Le Moal <dlemoal@kernel.org>

> ---
>  drivers/pci/controller/cadence/pcie-cadence-ep.c | 4 +++-
>  drivers/pci/controller/dwc/pcie-designware-ep.c  | 3 ++-
>  drivers/pci/controller/pcie-rcar-ep.c            | 3 ++-
>  drivers/pci/controller/pcie-rockchip-ep.c        | 5 +++--
>  drivers/pci/endpoint/pci-epc-core.c              | 5 +----
>  5 files changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c
> index 78b4d009cd04..f307256826e6 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-ep.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c
> @@ -220,10 +220,12 @@ static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn,
>  	clear_bit(r, &ep->ob_region_map);
>  }
>  
> -static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn, u8 mmc)
> +static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
> +				u8 interrupts)

To be extra clear, I would rename this num_interrupts or nr_interrupts. No
confusion possible with such name.

> diff --git a/drivers/pci/controller/pcie-rcar-ep.c b/drivers/pci/controller/pcie-rcar-ep.c
> index 9da39a4617b6..b25ad23bedb7 100644
> --- a/drivers/pci/controller/pcie-rcar-ep.c
> +++ b/drivers/pci/controller/pcie-rcar-ep.c
> @@ -261,10 +261,11 @@ static int rcar_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn,
>  {
>  	struct rcar_pcie_endpoint *ep = epc_get_drvdata(epc);
>  	struct rcar_pcie *pcie = &ep->pcie;
> +	u8 mmc = order_base_2(interrupts);

Same rename suggested here and for the other drivers.


-- 
Damien Le Moal
Western Digital Research


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-05-14  6:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-13  7:30 [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Niklas Cassel
2025-05-13  7:30 ` [PATCH v2 3/6] PCI: endpoint: cleanup get_msi() callback Niklas Cassel
2025-05-14  6:35   ` Damien Le Moal
2025-05-13  7:30 ` [PATCH v2 4/6] PCI: endpoint: cleanup set_msi() callback Niklas Cassel
2025-05-14  6:39   ` Damien Le Moal
2025-05-13 10:25 ` [PATCH v2 0/6] PCI: endpoint: IRQ callback fixes and cleanups Krzysztof Wilczyński
2025-05-13 12:31   ` Niklas Cassel
2025-05-13 16:03     ` Manivannan Sadhasivam

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).