This work is a workaround I'm looking into (more as a background task)
in order to add support for cpuidle on i.MX8MQ based platforms.

The main idea here is getting around the missing GIC wake_request signal
(due to integration design issue) by waking up a each individual core through
some dedicated SW power-up bits inside the power controller (GPC) right before
every IPI is requested for that each individual core.

This work is basically composed of four parts (in kernel):

 - the cpuidle core poking mechanism along with the related sched/irq_work calls
 - the cpuidle-arm ops addition in order to support poking, along with the
   'local-wakeup-poke' DT idle state knob
 - the psci and cpu_ops cpu_poke addition
 - the i.MX8MQ specific idle states in dts

There is also a change needed in TF-A which is available here:

  https://lists.trustedfirmware.org/pipermail/tf-a/2019-March/000009.html

Abel Vesa (7):
  sched: idle: Add sched get idle state helper
  cpuidle: Add cpu poke support
  smp: Poke the cores before requesting IPI
  psci: Add cpu_poke ops to support core poking
  cpuidle-arm: Add ops to support poke alonside enter
  cpuidle-arm: Add arm64 wake helper for cpu_poke op
  arm64: dts: imx8mq: Add cpu-sleep state with poke wake-up enabled

 arch/arm64/boot/dts/freescale/imx8mq.dtsi | 20 ++++++++++++++++++
 arch/arm64/include/asm/cpu_ops.h          |  1 +
 arch/arm64/include/asm/cpuidle.h          |  6 ++++++
 arch/arm64/kernel/cpuidle.c               |  8 ++++++++
 arch/arm64/kernel/psci.c                  |  1 +
 drivers/cpuidle/cpuidle-arm.c             | 13 +++++++++++-
 drivers/cpuidle/cpuidle.c                 | 34 +++++++++++++++++++++++++++++++
 drivers/cpuidle/dt_idle_states.c          | 15 +++++++++-----
 drivers/cpuidle/dt_idle_states.h          | 10 +++++++++
 drivers/firmware/psci.c                   |  6 ++++++
 include/linux/cpuidle.h                   |  7 +++++++
 include/linux/psci.h                      |  1 +
 include/uapi/linux/psci.h                 |  2 ++
 kernel/irq_work.c                         | 19 ++++++++++++++---
 kernel/sched/core.c                       | 16 ++++++++++-----
 kernel/sched/idle.c                       | 11 ++++++++++
 kernel/smp.c                              | 10 ++++++++-
 kernel/time/tick-broadcast.c              |  4 ++++
 18 files changed, 169 insertions(+), 15 deletions(-)

-- 
2.7.4

Reply via email to