* [PATCH v2 1/4] PCI: mediatek-gen3: Add missing reset_control_deassert() for mac_rst in mtk_pcie_en7581_power_up()
2024-11-09 9:28 [PATCH v2 0/4] PCI: mediatek-gen3: mtk_pcie_en7581_power_up() code refactoring Lorenzo Bianconi
@ 2024-11-09 9:28 ` Lorenzo Bianconi
2024-11-15 8:52 ` Manivannan Sadhasivam
2024-11-09 9:28 ` [PATCH v2 2/4] PCI: mediatek-gen3: rely on clk_bulk_prepare_enable() " Lorenzo Bianconi
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-09 9:28 UTC (permalink / raw)
To: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Rob Herring,
Bjorn Helgaas, Philipp Zabel, Matthias Brugger,
AngeloGioacchino Del Regno
Cc: linux-pci, linux-mediatek, linux-arm-kernel, Lorenzo Bianconi
Even if this is not a real issue since Airoha EN7581 SoC does not require
the mac reset line, add missing reset_control_deassert() for mac reset
line in mtk_pcie_en7581_power_up() callback.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/pci/controller/pcie-mediatek-gen3.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 66ce4b5d309bb6d64618c70ac5e0a529e0910511..0fac0b9fd785e463d26d29d695b923db41eef9cc 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -897,6 +897,9 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
*/
mdelay(PCIE_EN7581_RESET_TIME_MS);
+ /* MAC power on and enable transaction layer clocks */
+ reset_control_deassert(pcie->mac_reset);
+
pm_runtime_enable(dev);
pm_runtime_get_sync(dev);
@@ -931,6 +934,7 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
err_clk_prepare:
pm_runtime_put_sync(dev);
pm_runtime_disable(dev);
+ reset_control_assert(pcie->mac_reset);
reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
err_phy_deassert:
phy_power_off(pcie->phy);
--
2.47.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 1/4] PCI: mediatek-gen3: Add missing reset_control_deassert() for mac_rst in mtk_pcie_en7581_power_up()
2024-11-09 9:28 ` [PATCH v2 1/4] PCI: mediatek-gen3: Add missing reset_control_deassert() for mac_rst in mtk_pcie_en7581_power_up() Lorenzo Bianconi
@ 2024-11-15 8:52 ` Manivannan Sadhasivam
0 siblings, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2024-11-15 8:52 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
On Sat, Nov 09, 2024 at 10:28:37AM +0100, Lorenzo Bianconi wrote:
> Even if this is not a real issue since Airoha EN7581 SoC does not require
> the mac reset line, add missing reset_control_deassert() for mac reset
> line in mtk_pcie_en7581_power_up() callback.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
- Mani
> ---
> drivers/pci/controller/pcie-mediatek-gen3.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> index 66ce4b5d309bb6d64618c70ac5e0a529e0910511..0fac0b9fd785e463d26d29d695b923db41eef9cc 100644
> --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> @@ -897,6 +897,9 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> */
> mdelay(PCIE_EN7581_RESET_TIME_MS);
>
> + /* MAC power on and enable transaction layer clocks */
> + reset_control_deassert(pcie->mac_reset);
> +
> pm_runtime_enable(dev);
> pm_runtime_get_sync(dev);
>
> @@ -931,6 +934,7 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> err_clk_prepare:
> pm_runtime_put_sync(dev);
> pm_runtime_disable(dev);
> + reset_control_assert(pcie->mac_reset);
> reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> err_phy_deassert:
> phy_power_off(pcie->phy);
>
> --
> 2.47.0
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 2/4] PCI: mediatek-gen3: rely on clk_bulk_prepare_enable() in mtk_pcie_en7581_power_up()
2024-11-09 9:28 [PATCH v2 0/4] PCI: mediatek-gen3: mtk_pcie_en7581_power_up() code refactoring Lorenzo Bianconi
2024-11-09 9:28 ` [PATCH v2 1/4] PCI: mediatek-gen3: Add missing reset_control_deassert() for mac_rst in mtk_pcie_en7581_power_up() Lorenzo Bianconi
@ 2024-11-09 9:28 ` Lorenzo Bianconi
2024-11-15 8:59 ` Manivannan Sadhasivam
2024-11-09 9:28 ` [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up() Lorenzo Bianconi
2024-11-09 9:28 ` [PATCH v2 4/4] PCI: mediatek-gen3: Add comment about initialization order in mtk_pcie_en7581_power_up() Lorenzo Bianconi
3 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-09 9:28 UTC (permalink / raw)
To: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Rob Herring,
Bjorn Helgaas, Philipp Zabel, Matthias Brugger,
AngeloGioacchino Del Regno
Cc: linux-pci, linux-mediatek, linux-arm-kernel, Lorenzo Bianconi
Squash clk_bulk_prepare() and clk_bulk_enable() in
clk_bulk_prepare_enable() in mtk_pcie_en7581_power_up() routine
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/pci/controller/pcie-mediatek-gen3.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 0fac0b9fd785e463d26d29d695b923db41eef9cc..8c8c733a145634cdbfefd339f4a692f25a6e24de 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -903,12 +903,6 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
pm_runtime_enable(dev);
pm_runtime_get_sync(dev);
- err = clk_bulk_prepare(pcie->num_clks, pcie->clks);
- if (err) {
- dev_err(dev, "failed to prepare clock\n");
- goto err_clk_prepare;
- }
-
val = FIELD_PREP(PCIE_VAL_LN0_DOWNSTREAM, 0x47) |
FIELD_PREP(PCIE_VAL_LN1_DOWNSTREAM, 0x47) |
FIELD_PREP(PCIE_VAL_LN0_UPSTREAM, 0x41) |
@@ -921,17 +915,15 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
FIELD_PREP(PCIE_K_FINETUNE_MAX, 0xf);
writel_relaxed(val, pcie->base + PCIE_PIPE4_PIE8_REG);
- err = clk_bulk_enable(pcie->num_clks, pcie->clks);
+ err = clk_bulk_prepare_enable(pcie->num_clks, pcie->clks);
if (err) {
dev_err(dev, "failed to prepare clock\n");
- goto err_clk_enable;
+ goto err_clk_init;
}
return 0;
-err_clk_enable:
- clk_bulk_unprepare(pcie->num_clks, pcie->clks);
-err_clk_prepare:
+err_clk_init:
pm_runtime_put_sync(dev);
pm_runtime_disable(dev);
reset_control_assert(pcie->mac_reset);
--
2.47.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 2/4] PCI: mediatek-gen3: rely on clk_bulk_prepare_enable() in mtk_pcie_en7581_power_up()
2024-11-09 9:28 ` [PATCH v2 2/4] PCI: mediatek-gen3: rely on clk_bulk_prepare_enable() " Lorenzo Bianconi
@ 2024-11-15 8:59 ` Manivannan Sadhasivam
0 siblings, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2024-11-15 8:59 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
On Sat, Nov 09, 2024 at 10:28:38AM +0100, Lorenzo Bianconi wrote:
> Squash clk_bulk_prepare() and clk_bulk_enable() in
> clk_bulk_prepare_enable() in mtk_pcie_en7581_power_up() routine
>
Perhaps use something like,
"Replace clk_bulk_prepare() and clk_bulk_enable() with clk_bulk_prepare_enable()
in mtk_pcie_en7581_power_up()."
'Squash' doesn't sound right since you are not squashing any code.
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> drivers/pci/controller/pcie-mediatek-gen3.c | 14 +++-----------
> 1 file changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> index 0fac0b9fd785e463d26d29d695b923db41eef9cc..8c8c733a145634cdbfefd339f4a692f25a6e24de 100644
> --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> @@ -903,12 +903,6 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> pm_runtime_enable(dev);
> pm_runtime_get_sync(dev);
>
> - err = clk_bulk_prepare(pcie->num_clks, pcie->clks);
> - if (err) {
> - dev_err(dev, "failed to prepare clock\n");
> - goto err_clk_prepare;
> - }
> -
> val = FIELD_PREP(PCIE_VAL_LN0_DOWNSTREAM, 0x47) |
> FIELD_PREP(PCIE_VAL_LN1_DOWNSTREAM, 0x47) |
> FIELD_PREP(PCIE_VAL_LN0_UPSTREAM, 0x41) |
> @@ -921,17 +915,15 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> FIELD_PREP(PCIE_K_FINETUNE_MAX, 0xf);
> writel_relaxed(val, pcie->base + PCIE_PIPE4_PIE8_REG);
>
> - err = clk_bulk_enable(pcie->num_clks, pcie->clks);
> + err = clk_bulk_prepare_enable(pcie->num_clks, pcie->clks);
> if (err) {
> dev_err(dev, "failed to prepare clock\n");
> - goto err_clk_enable;
> + goto err_clk_init;
err_clk_prepare_enable?
But I usually prefer err labels to be named after their purpose. Like here,
'err_runtime_put_reset' so it gives the reader a sense of what the label is
supposed to do.
However, to keep the existing sematics, you can just name it
err_clk_prepare_enable.
- Mani
> }
>
> return 0;
>
> -err_clk_enable:
> - clk_bulk_unprepare(pcie->num_clks, pcie->clks);
> -err_clk_prepare:
> +err_clk_init:
> pm_runtime_put_sync(dev);
> pm_runtime_disable(dev);
> reset_control_assert(pcie->mac_reset);
>
> --
> 2.47.0
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up()
2024-11-09 9:28 [PATCH v2 0/4] PCI: mediatek-gen3: mtk_pcie_en7581_power_up() code refactoring Lorenzo Bianconi
2024-11-09 9:28 ` [PATCH v2 1/4] PCI: mediatek-gen3: Add missing reset_control_deassert() for mac_rst in mtk_pcie_en7581_power_up() Lorenzo Bianconi
2024-11-09 9:28 ` [PATCH v2 2/4] PCI: mediatek-gen3: rely on clk_bulk_prepare_enable() " Lorenzo Bianconi
@ 2024-11-09 9:28 ` Lorenzo Bianconi
2024-11-15 9:02 ` Manivannan Sadhasivam
2024-11-09 9:28 ` [PATCH v2 4/4] PCI: mediatek-gen3: Add comment about initialization order in mtk_pcie_en7581_power_up() Lorenzo Bianconi
3 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-09 9:28 UTC (permalink / raw)
To: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Rob Herring,
Bjorn Helgaas, Philipp Zabel, Matthias Brugger,
AngeloGioacchino Del Regno
Cc: linux-pci, linux-mediatek, linux-arm-kernel, Lorenzo Bianconi
In order to make the code more readable, move phy and mac reset lines
assert/de-assert configuration in .power_up() callback
(mtk_pcie_en7581_power_up()/mtk_pcie_power_up()).
Introduce PCIE_MTK_RESET_TIME_US macro for the time needed to
complete PCIe reset on MediaTek controller.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/pci/controller/pcie-mediatek-gen3.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 8c8c733a145634cdbfefd339f4a692f25a6e24de..1ad93d2407810ba873d9a16da96208b3cc0c3011 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -120,6 +120,9 @@
#define MAX_NUM_PHY_RESETS 3
+/* Time in us needed to complete PCIe reset on MediaTek controller */
+#define PCIE_MTK_RESET_TIME_US 10
+
/* Time in ms needed to complete PCIe reset on EN7581 SoC */
#define PCIE_EN7581_RESET_TIME_MS 100
@@ -867,6 +870,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
int err;
u32 val;
+ /*
+ * The controller may have been left out of reset by the bootloader
+ * so make sure that we get a clean start by asserting resets here.
+ */
+ reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
+ pcie->phy_resets);
+ reset_control_assert(pcie->mac_reset);
+
/*
* Wait for the time needed to complete the bulk assert in
* mtk_pcie_setup for EN7581 SoC.
@@ -941,6 +952,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
struct device *dev = pcie->dev;
int err;
+ /*
+ * The controller may have been left out of reset by the bootloader
+ * so make sure that we get a clean start by asserting resets here.
+ */
+ reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
+ pcie->phy_resets);
+ reset_control_assert(pcie->mac_reset);
+ usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
+
/* PHY power on and enable pipe clock */
err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
if (err) {
@@ -1013,14 +1033,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
* counter since the bulk is shared.
*/
reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
- /*
- * The controller may have been left out of reset by the bootloader
- * so make sure that we get a clean start by asserting resets here.
- */
- reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
-
- reset_control_assert(pcie->mac_reset);
- usleep_range(10, 20);
/* Don't touch the hardware registers before power up */
err = pcie->soc->power_up(pcie);
--
2.47.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up()
2024-11-09 9:28 ` [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up() Lorenzo Bianconi
@ 2024-11-15 9:02 ` Manivannan Sadhasivam
2024-11-15 9:15 ` Lorenzo Bianconi
0 siblings, 1 reply; 12+ messages in thread
From: Manivannan Sadhasivam @ 2024-11-15 9:02 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
On Sat, Nov 09, 2024 at 10:28:39AM +0100, Lorenzo Bianconi wrote:
> In order to make the code more readable, move phy and mac reset lines
> assert/de-assert configuration in .power_up() callback
> (mtk_pcie_en7581_power_up()/mtk_pcie_power_up()).
>
I don't understand how moving the code (duplicting it also) makes the code more
readable. Could you please explain?
> Introduce PCIE_MTK_RESET_TIME_US macro for the time needed to
> complete PCIe reset on MediaTek controller.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> drivers/pci/controller/pcie-mediatek-gen3.c | 28 ++++++++++++++++++++--------
> 1 file changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> index 8c8c733a145634cdbfefd339f4a692f25a6e24de..1ad93d2407810ba873d9a16da96208b3cc0c3011 100644
> --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> @@ -120,6 +120,9 @@
>
> #define MAX_NUM_PHY_RESETS 3
>
> +/* Time in us needed to complete PCIe reset on MediaTek controller */
No need of this comment. Macro name itself is explanatory.
- Mani
> +#define PCIE_MTK_RESET_TIME_US 10
> +
> /* Time in ms needed to complete PCIe reset on EN7581 SoC */
> #define PCIE_EN7581_RESET_TIME_MS 100
>
> @@ -867,6 +870,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> int err;
> u32 val;
>
> + /*
> + * The controller may have been left out of reset by the bootloader
> + * so make sure that we get a clean start by asserting resets here.
> + */
> + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> + pcie->phy_resets);
> + reset_control_assert(pcie->mac_reset);
> +
> /*
> * Wait for the time needed to complete the bulk assert in
> * mtk_pcie_setup for EN7581 SoC.
> @@ -941,6 +952,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
> struct device *dev = pcie->dev;
> int err;
>
> + /*
> + * The controller may have been left out of reset by the bootloader
> + * so make sure that we get a clean start by asserting resets here.
> + */
> + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> + pcie->phy_resets);
> + reset_control_assert(pcie->mac_reset);
> + usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
> +
> /* PHY power on and enable pipe clock */
> err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> if (err) {
> @@ -1013,14 +1033,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
> * counter since the bulk is shared.
> */
> reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> - /*
> - * The controller may have been left out of reset by the bootloader
> - * so make sure that we get a clean start by asserting resets here.
> - */
> - reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> -
> - reset_control_assert(pcie->mac_reset);
> - usleep_range(10, 20);
>
> /* Don't touch the hardware registers before power up */
> err = pcie->soc->power_up(pcie);
>
> --
> 2.47.0
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up()
2024-11-15 9:02 ` Manivannan Sadhasivam
@ 2024-11-15 9:15 ` Lorenzo Bianconi
2024-11-15 12:37 ` Manivannan Sadhasivam
0 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-15 9:15 UTC (permalink / raw)
To: Manivannan Sadhasivam
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 3736 bytes --]
> On Sat, Nov 09, 2024 at 10:28:39AM +0100, Lorenzo Bianconi wrote:
> > In order to make the code more readable, move phy and mac reset lines
> > assert/de-assert configuration in .power_up() callback
> > (mtk_pcie_en7581_power_up()/mtk_pcie_power_up()).
> >
>
> I don't understand how moving the code (duplicting it also) makes the code more
> readable. Could you please explain?
Hi Manivannan,
this has been requested by Bjorn in
https://patchwork.kernel.org/project/linux-pci/patch/aca00bd672ee576ad96d279414fc0835ff31f637.1720022580.git.lorenzo@kernel.org/#26110282
>
> > Introduce PCIE_MTK_RESET_TIME_US macro for the time needed to
> > complete PCIe reset on MediaTek controller.
> >
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> > drivers/pci/controller/pcie-mediatek-gen3.c | 28 ++++++++++++++++++++--------
> > 1 file changed, 20 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> > index 8c8c733a145634cdbfefd339f4a692f25a6e24de..1ad93d2407810ba873d9a16da96208b3cc0c3011 100644
> > --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > @@ -120,6 +120,9 @@
> >
> > #define MAX_NUM_PHY_RESETS 3
> >
> > +/* Time in us needed to complete PCIe reset on MediaTek controller */
>
> No need of this comment. Macro name itself is explanatory.
ack, I will fix it.
Regards,
Lorenzo
>
> - Mani
>
> > +#define PCIE_MTK_RESET_TIME_US 10
> > +
> > /* Time in ms needed to complete PCIe reset on EN7581 SoC */
> > #define PCIE_EN7581_RESET_TIME_MS 100
> >
> > @@ -867,6 +870,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> > int err;
> > u32 val;
> >
> > + /*
> > + * The controller may have been left out of reset by the bootloader
> > + * so make sure that we get a clean start by asserting resets here.
> > + */
> > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > + pcie->phy_resets);
> > + reset_control_assert(pcie->mac_reset);
> > +
> > /*
> > * Wait for the time needed to complete the bulk assert in
> > * mtk_pcie_setup for EN7581 SoC.
> > @@ -941,6 +952,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
> > struct device *dev = pcie->dev;
> > int err;
> >
> > + /*
> > + * The controller may have been left out of reset by the bootloader
> > + * so make sure that we get a clean start by asserting resets here.
> > + */
> > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > + pcie->phy_resets);
> > + reset_control_assert(pcie->mac_reset);
> > + usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
> > +
> > /* PHY power on and enable pipe clock */
> > err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > if (err) {
> > @@ -1013,14 +1033,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
> > * counter since the bulk is shared.
> > */
> > reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > - /*
> > - * The controller may have been left out of reset by the bootloader
> > - * so make sure that we get a clean start by asserting resets here.
> > - */
> > - reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > -
> > - reset_control_assert(pcie->mac_reset);
> > - usleep_range(10, 20);
> >
> > /* Don't touch the hardware registers before power up */
> > err = pcie->soc->power_up(pcie);
> >
> > --
> > 2.47.0
> >
>
> --
> மணிவண்ணன் சதாசிவம்
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up()
2024-11-15 9:15 ` Lorenzo Bianconi
@ 2024-11-15 12:37 ` Manivannan Sadhasivam
2024-11-15 13:15 ` Lorenzo Bianconi
0 siblings, 1 reply; 12+ messages in thread
From: Manivannan Sadhasivam @ 2024-11-15 12:37 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
On Fri, Nov 15, 2024 at 10:15:07AM +0100, Lorenzo Bianconi wrote:
> > On Sat, Nov 09, 2024 at 10:28:39AM +0100, Lorenzo Bianconi wrote:
> > > In order to make the code more readable, move phy and mac reset lines
> > > assert/de-assert configuration in .power_up() callback
> > > (mtk_pcie_en7581_power_up()/mtk_pcie_power_up()).
> > >
> >
> > I don't understand how moving the code (duplicting it also) makes the code more
> > readable. Could you please explain?
>
> Hi Manivannan,
>
> this has been requested by Bjorn in
> https://patchwork.kernel.org/project/linux-pci/patch/aca00bd672ee576ad96d279414fc0835ff31f637.1720022580.git.lorenzo@kernel.org/#26110282
>
Ok. The description needs to state the reason i.e., the
reset_control_bulk_assert() is moved to make it pair with
reset_control_bulk_deassert() in mtk_pcie_setup() and
mtk_pcie_en7581_power_up().
Btw, could you explain why reset_control_bulk_deassert() is present in
mtk_pcie_setup()?
- Mani
> >
> > > Introduce PCIE_MTK_RESET_TIME_US macro for the time needed to
> > > complete PCIe reset on MediaTek controller.
> > >
> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > ---
> > > drivers/pci/controller/pcie-mediatek-gen3.c | 28 ++++++++++++++++++++--------
> > > 1 file changed, 20 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > index 8c8c733a145634cdbfefd339f4a692f25a6e24de..1ad93d2407810ba873d9a16da96208b3cc0c3011 100644
> > > --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> > > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > @@ -120,6 +120,9 @@
> > >
> > > #define MAX_NUM_PHY_RESETS 3
> > >
> > > +/* Time in us needed to complete PCIe reset on MediaTek controller */
> >
> > No need of this comment. Macro name itself is explanatory.
>
> ack, I will fix it.
>
> Regards,
> Lorenzo
>
> >
> > - Mani
> >
> > > +#define PCIE_MTK_RESET_TIME_US 10
> > > +
> > > /* Time in ms needed to complete PCIe reset on EN7581 SoC */
> > > #define PCIE_EN7581_RESET_TIME_MS 100
> > >
> > > @@ -867,6 +870,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> > > int err;
> > > u32 val;
> > >
> > > + /*
> > > + * The controller may have been left out of reset by the bootloader
> > > + * so make sure that we get a clean start by asserting resets here.
> > > + */
> > > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > > + pcie->phy_resets);
> > > + reset_control_assert(pcie->mac_reset);
> > > +
> > > /*
> > > * Wait for the time needed to complete the bulk assert in
> > > * mtk_pcie_setup for EN7581 SoC.
> > > @@ -941,6 +952,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
> > > struct device *dev = pcie->dev;
> > > int err;
> > >
> > > + /*
> > > + * The controller may have been left out of reset by the bootloader
> > > + * so make sure that we get a clean start by asserting resets here.
> > > + */
> > > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > > + pcie->phy_resets);
> > > + reset_control_assert(pcie->mac_reset);
> > > + usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
> > > +
> > > /* PHY power on and enable pipe clock */
> > > err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > if (err) {
> > > @@ -1013,14 +1033,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
> > > * counter since the bulk is shared.
> > > */
> > > reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > - /*
> > > - * The controller may have been left out of reset by the bootloader
> > > - * so make sure that we get a clean start by asserting resets here.
> > > - */
> > > - reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > -
> > > - reset_control_assert(pcie->mac_reset);
> > > - usleep_range(10, 20);
> > >
> > > /* Don't touch the hardware registers before power up */
> > > err = pcie->soc->power_up(pcie);
> > >
> > > --
> > > 2.47.0
> > >
> >
> > --
> > மணிவண்ணன் சதாசிவம்
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up()
2024-11-15 12:37 ` Manivannan Sadhasivam
@ 2024-11-15 13:15 ` Lorenzo Bianconi
0 siblings, 0 replies; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-15 13:15 UTC (permalink / raw)
To: Manivannan Sadhasivam
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 4938 bytes --]
On Nov 15, Manivannan Sadhasivam wrote:
> On Fri, Nov 15, 2024 at 10:15:07AM +0100, Lorenzo Bianconi wrote:
> > > On Sat, Nov 09, 2024 at 10:28:39AM +0100, Lorenzo Bianconi wrote:
> > > > In order to make the code more readable, move phy and mac reset lines
> > > > assert/de-assert configuration in .power_up() callback
> > > > (mtk_pcie_en7581_power_up()/mtk_pcie_power_up()).
> > > >
> > >
> > > I don't understand how moving the code (duplicting it also) makes the code more
> > > readable. Could you please explain?
> >
> > Hi Manivannan,
> >
> > this has been requested by Bjorn in
> > https://patchwork.kernel.org/project/linux-pci/patch/aca00bd672ee576ad96d279414fc0835ff31f637.1720022580.git.lorenzo@kernel.org/#26110282
> >
>
> Ok. The description needs to state the reason i.e., the
> reset_control_bulk_assert() is moved to make it pair with
> reset_control_bulk_deassert() in mtk_pcie_setup() and
> mtk_pcie_en7581_power_up().
ack, I will update the commit log.
>
> Btw, could you explain why reset_control_bulk_deassert() is present in
> mtk_pcie_setup()?
it is because the clock is shared for Airoha EN7581 and we need to be sure
rstc->deassert_count is not 0 running reset_control_bulk_assert().
https://github.com/torvalds/linux/blob/master/drivers/reset/core.c#L483
Regards,
Lorenzo
>
> - Mani
>
> > >
> > > > Introduce PCIE_MTK_RESET_TIME_US macro for the time needed to
> > > > complete PCIe reset on MediaTek controller.
> > > >
> > > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > > ---
> > > > drivers/pci/controller/pcie-mediatek-gen3.c | 28 ++++++++++++++++++++--------
> > > > 1 file changed, 20 insertions(+), 8 deletions(-)
> > > >
> > > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > > index 8c8c733a145634cdbfefd339f4a692f25a6e24de..1ad93d2407810ba873d9a16da96208b3cc0c3011 100644
> > > > --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> > > > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > > @@ -120,6 +120,9 @@
> > > >
> > > > #define MAX_NUM_PHY_RESETS 3
> > > >
> > > > +/* Time in us needed to complete PCIe reset on MediaTek controller */
> > >
> > > No need of this comment. Macro name itself is explanatory.
> >
> > ack, I will fix it.
> >
> > Regards,
> > Lorenzo
> >
> > >
> > > - Mani
> > >
> > > > +#define PCIE_MTK_RESET_TIME_US 10
> > > > +
> > > > /* Time in ms needed to complete PCIe reset on EN7581 SoC */
> > > > #define PCIE_EN7581_RESET_TIME_MS 100
> > > >
> > > > @@ -867,6 +870,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> > > > int err;
> > > > u32 val;
> > > >
> > > > + /*
> > > > + * The controller may have been left out of reset by the bootloader
> > > > + * so make sure that we get a clean start by asserting resets here.
> > > > + */
> > > > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > > > + pcie->phy_resets);
> > > > + reset_control_assert(pcie->mac_reset);
> > > > +
> > > > /*
> > > > * Wait for the time needed to complete the bulk assert in
> > > > * mtk_pcie_setup for EN7581 SoC.
> > > > @@ -941,6 +952,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
> > > > struct device *dev = pcie->dev;
> > > > int err;
> > > >
> > > > + /*
> > > > + * The controller may have been left out of reset by the bootloader
> > > > + * so make sure that we get a clean start by asserting resets here.
> > > > + */
> > > > + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
> > > > + pcie->phy_resets);
> > > > + reset_control_assert(pcie->mac_reset);
> > > > + usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
> > > > +
> > > > /* PHY power on and enable pipe clock */
> > > > err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > > if (err) {
> > > > @@ -1013,14 +1033,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
> > > > * counter since the bulk is shared.
> > > > */
> > > > reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > > - /*
> > > > - * The controller may have been left out of reset by the bootloader
> > > > - * so make sure that we get a clean start by asserting resets here.
> > > > - */
> > > > - reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
> > > > -
> > > > - reset_control_assert(pcie->mac_reset);
> > > > - usleep_range(10, 20);
> > > >
> > > > /* Don't touch the hardware registers before power up */
> > > > err = pcie->soc->power_up(pcie);
> > > >
> > > > --
> > > > 2.47.0
> > > >
> > >
> > > --
> > > மணிவண்ணன் சதாசிவம்
>
>
>
> --
> மணிவண்ணன் சதாசிவம்
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 4/4] PCI: mediatek-gen3: Add comment about initialization order in mtk_pcie_en7581_power_up()
2024-11-09 9:28 [PATCH v2 0/4] PCI: mediatek-gen3: mtk_pcie_en7581_power_up() code refactoring Lorenzo Bianconi
` (2 preceding siblings ...)
2024-11-09 9:28 ` [PATCH v2 3/4] PCI: mediatek-gen3: Move reset/assert callbacks in .power_up() Lorenzo Bianconi
@ 2024-11-09 9:28 ` Lorenzo Bianconi
2024-11-15 9:05 ` Manivannan Sadhasivam
3 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Bianconi @ 2024-11-09 9:28 UTC (permalink / raw)
To: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Manivannan Sadhasivam, Rob Herring,
Bjorn Helgaas, Philipp Zabel, Matthias Brugger,
AngeloGioacchino Del Regno
Cc: linux-pci, linux-mediatek, linux-arm-kernel, Lorenzo Bianconi
Add a comment in mtk_pcie_en7581_power_up() to clarify, unlike MediaTek
PCIe controller, the Airoha EN7581 requires PHY initialization and
power-on before PHY reset deassert.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/pci/controller/pcie-mediatek-gen3.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 1ad93d2407810ba873d9a16da96208b3cc0c3011..c9981013e59d18ccd3294acdcbd536dd95a0e436 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -884,6 +884,10 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
*/
mdelay(PCIE_EN7581_RESET_TIME_MS);
+ /*
+ * Unlike the MediaTek controllers, the Airoha EN7581 requires PHY
+ * initialization and power-on before PHY reset deassert.
+ */
err = phy_init(pcie->phy);
if (err) {
dev_err(dev, "failed to initialize PHY\n");
--
2.47.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 4/4] PCI: mediatek-gen3: Add comment about initialization order in mtk_pcie_en7581_power_up()
2024-11-09 9:28 ` [PATCH v2 4/4] PCI: mediatek-gen3: Add comment about initialization order in mtk_pcie_en7581_power_up() Lorenzo Bianconi
@ 2024-11-15 9:05 ` Manivannan Sadhasivam
0 siblings, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2024-11-15 9:05 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Ryder Lee, Jianjun Wang, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Philipp Zabel, Matthias Brugger, AngeloGioacchino Del Regno,
linux-pci, linux-mediatek, linux-arm-kernel
On Sat, Nov 09, 2024 at 10:28:40AM +0100, Lorenzo Bianconi wrote:
> Add a comment in mtk_pcie_en7581_power_up() to clarify, unlike MediaTek
> PCIe controller, the Airoha EN7581 requires PHY initialization and
> power-on before PHY reset deassert.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
- Mani
> ---
> drivers/pci/controller/pcie-mediatek-gen3.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
> index 1ad93d2407810ba873d9a16da96208b3cc0c3011..c9981013e59d18ccd3294acdcbd536dd95a0e436 100644
> --- a/drivers/pci/controller/pcie-mediatek-gen3.c
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> @@ -884,6 +884,10 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
> */
> mdelay(PCIE_EN7581_RESET_TIME_MS);
>
> + /*
> + * Unlike the MediaTek controllers, the Airoha EN7581 requires PHY
> + * initialization and power-on before PHY reset deassert.
> + */
> err = phy_init(pcie->phy);
> if (err) {
> dev_err(dev, "failed to initialize PHY\n");
>
> --
> 2.47.0
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread