mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
PCI: rcar-gen4: Add .speed_control() callback
Introduce new rcar_gen4_pcie_drvdata->speed_control() callback and implement it on R-Car Gen4. The callback implements the second half of what is currently present in rcar_gen4_pcie_start_link(), and rcar_gen4_pcie_start_link() does call the .speed_control() callback. This is a preparatory work for R-Car Gen5 support, where the .speed_control() implementation is different. Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> [mani: commit log] Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20260921202823.72620-5-marek.vasut+renesas@mailbox.org
This commit is contained in:
parent
a9b2dc6de8
commit
bb0cf158cf
|
|
@ -90,6 +90,7 @@ struct rcar_gen4_pcie_drvdata {
|
|||
int (*init)(struct rcar_gen4_pcie *rcar);
|
||||
void (*deinit)(struct rcar_gen4_pcie *rcar);
|
||||
int (*ltssm_control)(struct rcar_gen4_pcie *rcar, bool enable);
|
||||
int (*speed_control)(struct rcar_gen4_pcie *rcar);
|
||||
enum dw_pcie_device_mode mode;
|
||||
};
|
||||
|
||||
|
|
@ -141,20 +142,10 @@ static int rcar_gen4_pcie_speed_change(struct dw_pcie *dw)
|
|||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable LTSSM of this controller and manually initiate the speed change.
|
||||
* Always return 0.
|
||||
*/
|
||||
static int rcar_gen4_pcie_start_link(struct dw_pcie *dw)
|
||||
static int rcar_gen4_pcie_speed_control(struct rcar_gen4_pcie *rcar)
|
||||
{
|
||||
struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
|
||||
int i, changes, ret;
|
||||
|
||||
if (rcar->drvdata->ltssm_control) {
|
||||
ret = rcar->drvdata->ltssm_control(rcar, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
struct dw_pcie *dw = &rcar->dw;
|
||||
int i, changes;
|
||||
|
||||
/*
|
||||
* Require direct speed change with retrying here if the max_link_speed
|
||||
|
|
@ -178,6 +169,24 @@ static int rcar_gen4_pcie_start_link(struct dw_pcie *dw)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable LTSSM of this controller and manually initiate the speed change.
|
||||
* Always return 0.
|
||||
*/
|
||||
static int rcar_gen4_pcie_start_link(struct dw_pcie *dw)
|
||||
{
|
||||
struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
|
||||
int ret;
|
||||
|
||||
if (rcar->drvdata->ltssm_control) {
|
||||
ret = rcar->drvdata->ltssm_control(rcar, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return rcar->drvdata->speed_control(rcar);
|
||||
}
|
||||
|
||||
static void rcar_gen4_pcie_stop_link(struct dw_pcie *dw)
|
||||
{
|
||||
struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
|
||||
|
|
@ -916,6 +925,7 @@ static struct rcar_gen4_pcie_drvdata drvdata_r8a779f0_pcie = {
|
|||
.init = rcar_gen4_pcie_common_init,
|
||||
.deinit = rcar_gen4_pcie_common_deinit,
|
||||
.ltssm_control = r8a779f0_pcie_ltssm_control,
|
||||
.speed_control = rcar_gen4_pcie_speed_control,
|
||||
.mode = DW_PCIE_RC_TYPE,
|
||||
};
|
||||
|
||||
|
|
@ -923,6 +933,7 @@ static struct rcar_gen4_pcie_drvdata drvdata_r8a779f0_pcie_ep = {
|
|||
.init = rcar_gen4_pcie_common_init,
|
||||
.deinit = rcar_gen4_pcie_common_deinit,
|
||||
.ltssm_control = r8a779f0_pcie_ltssm_control,
|
||||
.speed_control = rcar_gen4_pcie_speed_control,
|
||||
.mode = DW_PCIE_EP_TYPE,
|
||||
};
|
||||
|
||||
|
|
@ -930,6 +941,7 @@ static struct rcar_gen4_pcie_drvdata drvdata_rcar_gen4_pcie = {
|
|||
.init = rcar_gen4_v4h_v4m_pcie_init,
|
||||
.deinit = rcar_gen4_pcie_common_deinit,
|
||||
.ltssm_control = rcar_gen4_pcie_ltssm_control,
|
||||
.speed_control = rcar_gen4_pcie_speed_control,
|
||||
.mode = DW_PCIE_RC_TYPE,
|
||||
};
|
||||
|
||||
|
|
@ -937,6 +949,7 @@ static struct rcar_gen4_pcie_drvdata drvdata_rcar_gen4_pcie_ep = {
|
|||
.init = rcar_gen4_v4h_v4m_pcie_init,
|
||||
.deinit = rcar_gen4_pcie_common_deinit,
|
||||
.ltssm_control = rcar_gen4_pcie_ltssm_control,
|
||||
.speed_control = rcar_gen4_pcie_speed_control,
|
||||
.mode = DW_PCIE_EP_TYPE,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user