Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed4b300c authored by Gilad Avidov's avatar Gilad Avidov
Browse files

spmi: pmic-arb: Dump values of dbg regs on transfer err



Dump values of core HW debugging registers on an error
in transfer. These values are valuable for root cause
analysis.

Change-Id: I206c4a2232f44480220e795a8d8e946d8352ba19
Signed-off-by: default avatarGilad Avidov <gavidov@codeaurora.org>
parent 98611669
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
@@ -33,6 +33,9 @@
/* PMIC Arbiter configuration registers */
/* PMIC Arbiter configuration registers */
#define PMIC_ARB_VERSION		0x0000
#define PMIC_ARB_VERSION		0x0000
#define PMIC_ARB_INT_EN			0x0004
#define PMIC_ARB_INT_EN			0x0004
#define PMIC_ARB_GENI_CTRL		0x0024
#define PMIC_ARB_GENI_STATUS		0x0028
#define PMIC_ARB_PROTOCOL_IRQ_STATUS	(0x700 + 0x820)


/* PMIC Arbiter channel registers */
/* PMIC Arbiter channel registers */
#define PMIC_ARB_CMD(N)			(0x0800 + (0x80 * (N)))
#define PMIC_ARB_CMD(N)			(0x0800 + (0x80 * (N)))
@@ -209,6 +212,17 @@ pa_write_data(struct spmi_pmic_arb_dev *dev, u8 *buf, u32 reg, u8 bc)
	pmic_arb_write(dev, reg, data);
	pmic_arb_write(dev, reg, data);
}
}


static void pmic_arb_dbg_dump_regs(struct spmi_pmic_arb_dev *pmic_arb, int ret,
								const char *msg)
{
	u32 irq = readl_relaxed(pmic_arb->cnfg + PMIC_ARB_PROTOCOL_IRQ_STATUS);
	u32 geni_stat = readl_relaxed(pmic_arb->cnfg + PMIC_ARB_GENI_STATUS);
	u32 geni_ctrl = readl_relaxed(pmic_arb->cnfg + PMIC_ARB_GENI_CTRL);
	dev_err(pmic_arb->dev,
	"err:%d on %s PROTOCOL_IRQ_STATUS:0x%x GENI_STATUS:0x%x GENI_CTRL:0x%x\n",
		ret, msg, irq, geni_stat, geni_ctrl);
}

/* Non-data command */
/* Non-data command */
static int pmic_arb_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid)
static int pmic_arb_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid)
{
{
@@ -230,6 +244,8 @@ static int pmic_arb_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid)
	rc = pmic_arb_wait_for_done(pmic_arb);
	rc = pmic_arb_wait_for_done(pmic_arb);
	spin_unlock_irqrestore(&pmic_arb->lock, flags);
	spin_unlock_irqrestore(&pmic_arb->lock, flags);


	if (rc)
		pmic_arb_dbg_dump_regs(pmic_arb, rc, "cmd");
	return rc;
	return rc;
}
}


@@ -277,6 +293,8 @@ static int pmic_arb_read_cmd(struct spmi_controller *ctrl,


done:
done:
	spin_unlock_irqrestore(&pmic_arb->lock, flags);
	spin_unlock_irqrestore(&pmic_arb->lock, flags);
	if (rc)
		pmic_arb_dbg_dump_regs(pmic_arb, rc, "read_cmd");
	return rc;
	return rc;
}
}


@@ -323,6 +341,8 @@ static int pmic_arb_write_cmd(struct spmi_controller *ctrl,
	rc = pmic_arb_wait_for_done(pmic_arb);
	rc = pmic_arb_wait_for_done(pmic_arb);
	spin_unlock_irqrestore(&pmic_arb->lock, flags);
	spin_unlock_irqrestore(&pmic_arb->lock, flags);


	if (rc)
		pmic_arb_dbg_dump_regs(pmic_arb, rc, "write_cmd");
	return rc;
	return rc;
}
}