Commit 3db617e7 authored by Ofir Drang's avatar Ofir Drang Committed by Herbert Xu
Browse files

crypto: ccree - prevent isr handling in case driver is suspended



ccree irq may be shared with other devices, in order to prevent ccree isr
handling while device maybe suspended we added a check to verify that the
device is not suspended.

Signed-off-by: default avatarOfir Drang <ofir.drang@arm.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d84f6269
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -134,6 +134,9 @@ static irqreturn_t cc_isr(int irq, void *dev_id)
	u32 imr;

	/* STAT_OP_TYPE_GENERIC STAT_PHASE_0: Interrupt */
	/* if driver suspended return, probebly shared interrupt */
	if (cc_pm_is_dev_suspended(dev))
		return IRQ_NONE;

	/* read the interrupt status */
	irr = cc_ioread(drvdata, CC_REG(HOST_IRR));
+6 −0
Original line number Diff line number Diff line
@@ -106,6 +106,12 @@ int cc_pm_put_suspend(struct device *dev)
	return rc;
}

bool cc_pm_is_dev_suspended(struct device *dev)
{
	/* check device state using runtime api */
	return pm_runtime_suspended(dev);
}

int cc_pm_init(struct cc_drvdata *drvdata)
{
	struct device *dev = drvdata_to_dev(drvdata);
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ int cc_pm_suspend(struct device *dev);
int cc_pm_resume(struct device *dev);
int cc_pm_get(struct device *dev);
int cc_pm_put_suspend(struct device *dev);
bool cc_pm_is_dev_suspended(struct device *dev);

#else

@@ -54,6 +55,12 @@ static inline int cc_pm_put_suspend(struct device *dev)
	return 0;
}

static inline bool cc_pm_is_dev_suspended(struct device *dev)
{
	/* if PM not supported device is never suspend */
	return false;
}

#endif

#endif /*__POWER_MGR_H__*/