1. 26 2月, 2016 1 次提交
    • L
      arm64: kernel: acpi: fix ioremap in ACPI parking protocol cpu_postboot · c1e4659b
      Lorenzo Pieralisi 提交于
      When secondary cpus are booted through the ACPI parking protocol, the
      booted cpu should check that FW has correctly cleared its mailbox entry
      point value to make sure the boot process was correctly executed.
      The entry point check is carried in the cpu_ops->cpu_postboot method, that
      is executed by secondary cpus when entering the kernel with irqs disabled.
      
      The ACPI parking protocol cpu_ops maps/unmaps the mailboxes on the
      primary CPU to trigger secondary boot in the cpu_ops->cpu_boot method
      and on secondary processors to carry out FW checks on the booted CPU
      to verify the boot protocol was successfully executed in the
      cpu_ops->cpu_postboot method.
      
      Therefore, the cpu_ops->cpu_postboot method is forced to ioremap/unmap the
      mailboxes, which is wrong in that ioremap cannot be safely be carried out
      with irqs disabled.
      
      To fix this issue, this patch reshuffles the code so that the mailboxes
      are still mapped after the boot processor executes the cpu_ops->cpu_boot
      method for a given cpu, and the VA at which a mailbox is mapped for a given
      cpu is stashed in the per-cpu data struct so that secondary cpus can
      retrieve them in the cpu_ops->cpu_postboot and complete the required
      FW checks.
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Reported-by: NItaru Kitayama <itaru.kitayama@riken.jp>
      Tested-by: NLoc Ho <lho@apm.com>
      Tested-by: NItaru Kitayama <itaru.kitayama@riken.jp>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Hanjun Guo <hanjun.guo@linaro.org>
      Cc: Loc Ho <lho@apm.com>
      Cc: Itaru Kitayama <itaru.kitayama@riken.jp>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mark Salter <msalter@redhat.com>
      Cc: Al Stone <ahs3@redhat.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      c1e4659b
  2. 16 2月, 2016 1 次提交
    • L
      arm64: kernel: implement ACPI parking protocol · 5e89c55e
      Lorenzo Pieralisi 提交于
      The SBBR and ACPI specifications allow ACPI based systems that do not
      implement PSCI (eg systems with no EL3) to boot through the ACPI parking
      protocol specification[1].
      
      This patch implements the ACPI parking protocol CPU operations, and adds
      code that eases parsing the parking protocol data structures to the
      ARM64 SMP initializion carried out at the same time as cpus enumeration.
      
      To wake-up the CPUs from the parked state, this patch implements a
      wakeup IPI for ARM64 (ie arch_send_wakeup_ipi_mask()) that mirrors the
      ARM one, so that a specific IPI is sent for wake-up purpose in order
      to distinguish it from other IPI sources.
      
      Given the current ACPI MADT parsing API, the patch implements a glue
      layer that helps passing MADT GICC data structure from SMP initialization
      code to the parking protocol implementation somewhat overriding the CPU
      operations interfaces. This to avoid creating a completely trasparent
      DT/ACPI CPU operations layer that would require creating opaque
      structure handling for CPUs data (DT represents CPU through DT nodes, ACPI
      through static MADT table entries), which seems overkill given that ACPI
      on ARM64 mandates only two booting protocols (PSCI and parking protocol),
      so there is no need for further protocol additions.
      
      Based on the original work by Mark Salter <msalter@redhat.com>
      
      [1] https://acpica.org/sites/acpica/files/MP%20Startup%20for%20ARM%20platforms.docxSigned-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Tested-by: NLoc Ho <lho@apm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Hanjun Guo <hanjun.guo@linaro.org>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mark Salter <msalter@redhat.com>
      Cc: Al Stone <ahs3@redhat.com>
      [catalin.marinas@arm.com: Added WARN_ONCE(!acpi_parking_protocol_valid() on the IPI]
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      5e89c55e