mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
coresight: etm4x: Save/restore state across CPU low power states
Some hardware will ignore bit TRCPDCR.PU which is used to signal to hardware that power should not be removed from the trace unit. Let's mitigate against this by conditionally saving and restoring the trace unit state when the CPU enters low power states. This patchset introduces a firmware property named 'arm,coresight-loses-context-with-cpu' - when this is present the hardware state will be conditionally saved and restored. A module parameter 'pm_save_enable' is also introduced which can be configured to override the firmware property. This can be set to never allow save/restore or to conditionally allow it (only for self-hosted). The default value is determined by firmware. We avoid saving the hardware state when self-hosted coresight isn't in use to reduce PM latency - we can't determine this by reading the claim tags (TRCCLAIMCLR) as these are 'trace' registers which need power and clocking, something we can't easily provide in the PM context. Therefore we rely on the existing drvdata->mode internal state that is set when self-hosted coresight is used (and powered). Signed-off-by: Andrew Murray <andrew.murray@arm.com> Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Link: https://lore.kernel.org/r/20191104181251.26732-2-mathieu.poirier@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
891e60368b
commit
f188b5e76a
4 changed files with 394 additions and 0 deletions
|
@ -285,6 +285,8 @@ extern void coresight_disclaim_device(void __iomem *base);
|
|||
extern void coresight_disclaim_device_unlocked(void __iomem *base);
|
||||
extern char *coresight_alloc_device_name(struct coresight_dev_list *devs,
|
||||
struct device *dev);
|
||||
|
||||
extern bool coresight_loses_context_with_cpu(struct device *dev);
|
||||
#else
|
||||
static inline struct coresight_device *
|
||||
coresight_register(struct coresight_desc *desc) { return NULL; }
|
||||
|
@ -307,6 +309,10 @@ static inline int coresight_claim_device(void __iomem *base)
|
|||
static inline void coresight_disclaim_device(void __iomem *base) {}
|
||||
static inline void coresight_disclaim_device_unlocked(void __iomem *base) {}
|
||||
|
||||
static inline bool coresight_loses_context_with_cpu(struct device *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int coresight_get_cpu(struct device *dev);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue