mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
PCI: dw-rockchip: Change get_ltssm() to provide L1 Substates info
Rename rockchip_pcie_get_ltssm() to rockchip_pcie_get_ltssm_reg() and add rockchip_pcie_get_ltssm() to get_ltssm() callback in order to show the proper L1 Substates. The PCIE_CLIENT_LTSSM_STATUS[5:0] register returns the same LTSSM layout as enum dw_pcie_ltssm. So the driver just need to convey L1 PM Substates by returning the proper value defined in pcie-designware.h. cat /sys/kernel/debug/dwc_pcie_a40000000.pcie/ltssm_status L1_2 (0x142) Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Link: https://patch.msgid.link/1765503205-22184-2-git-send-email-shawn.lin@rock-chips.com
This commit is contained in:
parent
679ec639f2
commit
f994bb8f1c
|
|
@ -68,6 +68,11 @@
|
|||
#define PCIE_CLKREQ_NOT_READY FIELD_PREP_WM16(BIT(0), 0)
|
||||
#define PCIE_CLKREQ_PULL_DOWN FIELD_PREP_WM16(GENMASK(13, 12), 1)
|
||||
|
||||
/* RASDES TBA information */
|
||||
#define PCIE_CLIENT_CDM_RASDES_TBA_INFO_CMN 0x154
|
||||
#define PCIE_CLIENT_CDM_RASDES_TBA_L1_1 BIT(4)
|
||||
#define PCIE_CLIENT_CDM_RASDES_TBA_L1_2 BIT(5)
|
||||
|
||||
/* Hot Reset Control Register */
|
||||
#define PCIE_CLIENT_HOT_RESET_CTRL 0x180
|
||||
#define PCIE_LTSSM_APP_DLY2_EN BIT(1)
|
||||
|
|
@ -181,11 +186,26 @@ static int rockchip_pcie_init_irq_domain(struct rockchip_pcie *rockchip)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u32 rockchip_pcie_get_ltssm(struct rockchip_pcie *rockchip)
|
||||
static u32 rockchip_pcie_get_ltssm_reg(struct rockchip_pcie *rockchip)
|
||||
{
|
||||
return rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_LTSSM_STATUS);
|
||||
}
|
||||
|
||||
static enum dw_pcie_ltssm rockchip_pcie_get_ltssm(struct dw_pcie *pci)
|
||||
{
|
||||
struct rockchip_pcie *rockchip = to_rockchip_pcie(pci);
|
||||
u32 val = rockchip_pcie_readl_apb(rockchip,
|
||||
PCIE_CLIENT_CDM_RASDES_TBA_INFO_CMN);
|
||||
|
||||
if (val & PCIE_CLIENT_CDM_RASDES_TBA_L1_1)
|
||||
return DW_PCIE_LTSSM_L1_1;
|
||||
|
||||
if (val & PCIE_CLIENT_CDM_RASDES_TBA_L1_2)
|
||||
return DW_PCIE_LTSSM_L1_2;
|
||||
|
||||
return rockchip_pcie_get_ltssm_reg(rockchip) & PCIE_LTSSM_STATUS_MASK;
|
||||
}
|
||||
|
||||
static void rockchip_pcie_enable_ltssm(struct rockchip_pcie *rockchip)
|
||||
{
|
||||
rockchip_pcie_writel_apb(rockchip, PCIE_CLIENT_ENABLE_LTSSM,
|
||||
|
|
@ -201,7 +221,7 @@ static void rockchip_pcie_disable_ltssm(struct rockchip_pcie *rockchip)
|
|||
static bool rockchip_pcie_link_up(struct dw_pcie *pci)
|
||||
{
|
||||
struct rockchip_pcie *rockchip = to_rockchip_pcie(pci);
|
||||
u32 val = rockchip_pcie_get_ltssm(rockchip);
|
||||
u32 val = rockchip_pcie_get_ltssm_reg(rockchip);
|
||||
|
||||
return FIELD_GET(PCIE_LINKUP_MASK, val) == PCIE_LINKUP;
|
||||
}
|
||||
|
|
@ -485,6 +505,7 @@ static const struct dw_pcie_ops dw_pcie_ops = {
|
|||
.link_up = rockchip_pcie_link_up,
|
||||
.start_link = rockchip_pcie_start_link,
|
||||
.stop_link = rockchip_pcie_stop_link,
|
||||
.get_ltssm = rockchip_pcie_get_ltssm,
|
||||
};
|
||||
|
||||
static irqreturn_t rockchip_pcie_rc_sys_irq_thread(int irq, void *arg)
|
||||
|
|
@ -499,7 +520,7 @@ static irqreturn_t rockchip_pcie_rc_sys_irq_thread(int irq, void *arg)
|
|||
rockchip_pcie_writel_apb(rockchip, reg, PCIE_CLIENT_INTR_STATUS_MISC);
|
||||
|
||||
dev_dbg(dev, "PCIE_CLIENT_INTR_STATUS_MISC: %#x\n", reg);
|
||||
dev_dbg(dev, "LTSSM_STATUS: %#x\n", rockchip_pcie_get_ltssm(rockchip));
|
||||
dev_dbg(dev, "LTSSM_STATUS: %#x\n", rockchip_pcie_get_ltssm_reg(rockchip));
|
||||
|
||||
if (reg & PCIE_RDLH_LINK_UP_CHGED) {
|
||||
if (rockchip_pcie_link_up(pci)) {
|
||||
|
|
@ -526,7 +547,7 @@ static irqreturn_t rockchip_pcie_ep_sys_irq_thread(int irq, void *arg)
|
|||
rockchip_pcie_writel_apb(rockchip, reg, PCIE_CLIENT_INTR_STATUS_MISC);
|
||||
|
||||
dev_dbg(dev, "PCIE_CLIENT_INTR_STATUS_MISC: %#x\n", reg);
|
||||
dev_dbg(dev, "LTSSM_STATUS: %#x\n", rockchip_pcie_get_ltssm(rockchip));
|
||||
dev_dbg(dev, "LTSSM_STATUS: %#x\n", rockchip_pcie_get_ltssm_reg(rockchip));
|
||||
|
||||
if (reg & PCIE_LINK_REQ_RST_NOT_INT) {
|
||||
dev_dbg(dev, "hot reset or link-down reset\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user