Hi Richard, Apologies for a very late review! Especially since Lorenzo already took patches as per: https://lore.kernel.org/linux-pci/163965080404.20006.5241609551643501749.b4-ty@xxxxxxx/ However, perhaps it's not too late. [...] > @@ -446,6 +452,13 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie) > break; > case IMX7D: > break; > + case IMX8MM: > + ret = clk_prepare_enable(imx6_pcie->pcie_aux); > + if (ret) { > + dev_err(dev, "unable to enable pcie_aux clock\n"); > + break; > + } > + break; You can drop the inner break, it wouldn't do much here, unless this was intended to be a return? > @@ -538,6 +559,10 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie) > case IMX8MQ: > reset_control_deassert(imx6_pcie->pciephy_reset); > break; > + case IMX8MM: > + if (phy_init(imx6_pcie->phy) != 0) > + dev_err(dev, "Waiting for PHY ready timeout!\n"); > + break; If the above, you can keep the same style as used throughout the file already, so it would just simply be: if (phy_init(imx6_pcie->phy)) Also, a nitpick: to be consistent with other such messages here, the error message would be all lower-case letters. [...] > @@ -614,6 +639,8 @@ static void imx6_pcie_configure_type(struct imx6_pcie *imx6_pcie) > static void imx6_pcie_init_phy(struct imx6_pcie *imx6_pcie) > { > switch (imx6_pcie->drvdata->variant) { > + case IMX8MM: > + break; > case IMX8MQ: Would it warrant a comment that adds a note there to this single bare break? Perhaps this version is not support, lack this particular functionality, etc. [...] > @@ -1089,10 +1122,39 @@ static int imx6_pcie_probe(struct platform_device *pdev) > dev_err(dev, "Failed to get PCIE APPS reset control\n"); > return PTR_ERR(imx6_pcie->apps_reset); > } > + break; > + case IMX8MM: > + imx6_pcie->pcie_aux = devm_clk_get(dev, "pcie_aux"); > + if (IS_ERR(imx6_pcie->pcie_aux)) > + return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_aux), > + "pcie_aux clock source missing or invalid\n"); > + imx6_pcie->apps_reset = devm_reset_control_get_exclusive(dev, > + "apps"); > + if (IS_ERR(imx6_pcie->apps_reset)) { > + dev_err(dev, "Failed to get PCIE APPS reset control\n"); > + return PTR_ERR(imx6_pcie->apps_reset); > + } > + > + imx6_pcie->phy = devm_phy_get(dev, "pcie-phy"); > + if (IS_ERR(imx6_pcie->phy)) { > + if (PTR_ERR(imx6_pcie->phy) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + dev_err(dev, "Failed to get PCIE PHY\n"); > + return PTR_ERR(imx6_pcie->phy); > + } A question about handling of the -EPROBE_DEFER above: why not to use the dev_err_probe() helper similarly to the code above and below? Would there be something different preventing the use of dev_err_probe() here too? > break; > default: > break; > } > + /* Don't fetch the pcie_phy clock, if it has abstract PHY driver */ > + if (imx6_pcie->phy == NULL) { > + imx6_pcie->pcie_phy = devm_clk_get(dev, "pcie_phy"); > + if (IS_ERR(imx6_pcie->pcie_phy)) > + return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_phy), > + "pcie_phy clock source missing or invalid\n"); > + } Thank you for another amazing patch! Krzysztof