Commit 247ee3e7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull mailbox updates from Jassi Brar:
 "qcom:
   - add support for qcm2290
   - consolidate msm8994 type apcs_data

  mtk:
   - fix clock id usage

  apple:
   - add driver for ASC/M3 controllers

  pcc:
   - reorganise PCC pcc_mbox_request_channel
   - add support for PCCT extended PCC subspaces

  misc:
   - make use of devm_platform_ioremap_resource()
   - change Altera, PCC and Apple mailbox maintainers"

* tag 'mailbox-v5.16' of git://git.linaro.org/landing-teams/working/fujitsu/integration: (38 commits)
  mailbox: imx: support i.MX8ULP S4 MU
  dt-bindings: mailbox: imx-mu: add i.MX8ULP S400 MU support
  ACPI/PCC: Add maintainer for PCC mailbox driver
  mailbox: pcc: Move bulk of PCCT parsing into pcc_mbox_probe
  mailbox: pcc: Add support for PCCT extended PCC subspaces(type 3/4)
  mailbox: pcc: Drop handling invalid bit-width in {read,write}_register
  mailbox: pcc: Avoid accessing PCCT table in pcc_send_data and pcc_mbox_irq
  mailbox: pcc: Add PCC register bundle and associated accessor functions
  mailbox: pcc: Rename doorbell ack to platform interrupt ack register
  mailbox: pcc: Use PCC mailbox channel pointer instead of standard
  mailbox: pcc: Add pcc_mbox_chan structure to hold shared memory region info
  mailbox: pcc: Consolidate subspace doorbell register parsing
  mailbox: pcc: Consolidate subspace interrupt information parsing
  mailbox: pcc: Refactor all PCC channel information into a structure
  mailbox: pcc: Fix kernel doc warnings
  mailbox: apple: Add driver for Apple mailboxes
  dt-bindings: mailbox: Add Apple mailbox bindings
  MAINTAINERS: Add Apple mailbox files
  mailbox: mtk-cmdq: Fix local clock ID usage
  mailbox: mtk-cmdq: Validate alias_id on probe
  ...
parents 8a73c77c 97961f78
Loading
Loading
Loading
Loading
+77 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mailbox/apple,mailbox.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Apple Mailbox Controller

maintainers:
  - Hector Martin <marcan@marcan.st>
  - Sven Peter <sven@svenpeter.dev>

description:
  The Apple mailbox consists of two FIFOs used to exchange 64+32 bit
  messages between the main CPU and a co-processor. Multiple instances
  of this mailbox can be found on Apple SoCs.
  One of the two FIFOs is used to send data to a co-processor while the other
  FIFO is used for the other direction.
  Various clients implement different IPC protocols based on these simple
  messages and shared memory buffers.

properties:
  compatible:
    oneOf:
      - description:
          ASC mailboxes are the most common variant found on the M1 used
          for example for the display controller, the system management
          controller and the NVMe coprocessor.
        items:
          - const: apple,t8103-asc-mailbox

      - description:
          M3 mailboxes are an older variant with a slightly different MMIO
          interface still found on the M1. It is used for the Thunderbolt
          co-processors.
        items:
          - const: apple,t8103-m3-mailbox

  reg:
    maxItems: 1

  interrupts:
    items:
      - description: send fifo is empty interrupt
      - description: send fifo is not empty interrupt
      - description: receive fifo is empty interrupt
      - description: receive fifo is not empty interrupt

  interrupt-names:
    items:
      - const: send-empty
      - const: send-not-empty
      - const: recv-empty
      - const: recv-not-empty

  "#mbox-cells":
    const: 0

required:
  - compatible
  - reg
  - interrupts
  - interrupt-names
  - "#mbox-cells"

additionalProperties: false

examples:
  - |
        mailbox@77408000 {
                compatible = "apple,t8103-asc-mailbox";
                reg = <0x77408000 0x4000>;
                interrupts = <1 583 4>, <1 584 4>, <1 585 4>, <1 586 4>;
                interrupt-names = "send-empty", "send-not-empty",
                 "recv-empty", "recv-not-empty";
                #mbox-cells = <0>;
        };
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ properties:
      - const: fsl,imx7ulp-mu
      - const: fsl,imx8ulp-mu
      - const: fsl,imx8-mu-scu
      - const: fsl,imx8ulp-mu-s4
      - items:
          - enum:
              - fsl,imx7s-mu
+2 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ description:
  platforms.

maintainers:
  - Sivaprakash Murugesan <sivaprak@codeaurora.org>
  - Jassi Brar <jassisinghbrar@gmail.com>

properties:
  compatible:
@@ -24,6 +24,7 @@ properties:
      - qcom,msm8994-apcs-kpss-global
      - qcom,msm8996-apcs-hmss-global
      - qcom,msm8998-apcs-hmss-global
      - qcom,qcm2290-apcs-hmss-global
      - qcom,qcs404-apcs-apps-global
      - qcom,sc7180-apss-shared
      - qcom,sc8180x-apss-shared
+10 −1
Original line number Diff line number Diff line
@@ -401,6 +401,12 @@ L: platform-driver-x86@vger.kernel.org
S:	Maintained
F:	drivers/platform/x86/i2c-multi-instantiate.c
ACPI PCC(Platform Communication Channel) MAILBOX DRIVER
M:	Sudeep Holla <sudeep.holla@arm.com>
L:	linux-acpi@vger.kernel.org
S:	Supported
F:	drivers/mailbox/pcc.c
ACPI PMIC DRIVERS
M:	"Rafael J. Wysocki" <rafael@kernel.org>
M:	Len Brown <lenb@kernel.org>
@@ -798,7 +804,7 @@ F: Documentation/devicetree/bindings/i2c/i2c-altera.txt
F:	drivers/i2c/busses/i2c-altera.c
ALTERA MAILBOX DRIVER
M:	Joyce Ooi <joyce.ooi@intel.com>
M:	Mun Yew Tham <mun.yew.tham@intel.com>
S:	Maintained
F:	drivers/mailbox/mailbox-altera.c
@@ -1723,11 +1729,14 @@ C: irc://irc.oftc.net/asahi-dev
T:	git https://github.com/AsahiLinux/linux.git
F:	Documentation/devicetree/bindings/arm/apple.yaml
F:	Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
F:	Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
F:	Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
F:	arch/arm64/boot/dts/apple/
F:	drivers/irqchip/irq-apple-aic.c
F:	drivers/mailbox/apple-mailbox.c
F:	include/dt-bindings/interrupt-controller/apple-aic.h
F:	include/dt-bindings/pinctrl/apple.h
F:	include/linux/apple-mailbox.h
ARM/ARTPEC MACHINE SUPPORT
M:	Jesper Nilsson <jesper.nilsson@axis.com>
+15 −28
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@
#include <acpi/cppc_acpi.h>

struct cppc_pcc_data {
	struct mbox_chan *pcc_channel;
	struct pcc_mbox_chan *pcc_channel;
	void __iomem *pcc_comm_addr;
	bool pcc_channel_acquired;
	unsigned int deadline_us;
@@ -295,7 +295,7 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd)
	pcc_ss_data->platform_owns_pcc = true;

	/* Ring doorbell */
	ret = mbox_send_message(pcc_ss_data->pcc_channel, &cmd);
	ret = mbox_send_message(pcc_ss_data->pcc_channel->mchan, &cmd);
	if (ret < 0) {
		pr_err("Err sending PCC mbox message. ss: %d cmd:%d, ret:%d\n",
		       pcc_ss_id, cmd, ret);
@@ -308,10 +308,10 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd)
	if (pcc_ss_data->pcc_mrtt)
		pcc_ss_data->last_cmd_cmpl_time = ktime_get();

	if (pcc_ss_data->pcc_channel->mbox->txdone_irq)
		mbox_chan_txdone(pcc_ss_data->pcc_channel, ret);
	if (pcc_ss_data->pcc_channel->mchan->mbox->txdone_irq)
		mbox_chan_txdone(pcc_ss_data->pcc_channel->mchan, ret);
	else
		mbox_client_txdone(pcc_ss_data->pcc_channel, ret);
		mbox_client_txdone(pcc_ss_data->pcc_channel->mchan, ret);

end:
	if (cmd == CMD_WRITE) {
@@ -493,46 +493,33 @@ EXPORT_SYMBOL_GPL(acpi_get_psd_map);

static int register_pcc_channel(int pcc_ss_idx)
{
	struct acpi_pcct_hw_reduced *cppc_ss;
	struct pcc_mbox_chan *pcc_chan;
	u64 usecs_lat;

	if (pcc_ss_idx >= 0) {
		pcc_data[pcc_ss_idx]->pcc_channel =
			pcc_mbox_request_channel(&cppc_mbox_cl,	pcc_ss_idx);
		pcc_chan = pcc_mbox_request_channel(&cppc_mbox_cl, pcc_ss_idx);

		if (IS_ERR(pcc_data[pcc_ss_idx]->pcc_channel)) {
		if (IS_ERR(pcc_chan)) {
			pr_err("Failed to find PCC channel for subspace %d\n",
			       pcc_ss_idx);
			return -ENODEV;
		}

		/*
		 * The PCC mailbox controller driver should
		 * have parsed the PCCT (global table of all
		 * PCC channels) and stored pointers to the
		 * subspace communication region in con_priv.
		 */
		cppc_ss = (pcc_data[pcc_ss_idx]->pcc_channel)->con_priv;

		if (!cppc_ss) {
			pr_err("No PCC subspace found for %d CPPC\n",
			       pcc_ss_idx);
			return -ENODEV;
		}

		pcc_data[pcc_ss_idx]->pcc_channel = pcc_chan;
		/*
		 * cppc_ss->latency is just a Nominal value. In reality
		 * the remote processor could be much slower to reply.
		 * So add an arbitrary amount of wait on top of Nominal.
		 */
		usecs_lat = NUM_RETRIES * cppc_ss->latency;
		usecs_lat = NUM_RETRIES * pcc_chan->latency;
		pcc_data[pcc_ss_idx]->deadline_us = usecs_lat;
		pcc_data[pcc_ss_idx]->pcc_mrtt = cppc_ss->min_turnaround_time;
		pcc_data[pcc_ss_idx]->pcc_mpar = cppc_ss->max_access_rate;
		pcc_data[pcc_ss_idx]->pcc_nominal = cppc_ss->latency;
		pcc_data[pcc_ss_idx]->pcc_mrtt = pcc_chan->min_turnaround_time;
		pcc_data[pcc_ss_idx]->pcc_mpar = pcc_chan->max_access_rate;
		pcc_data[pcc_ss_idx]->pcc_nominal = pcc_chan->latency;

		pcc_data[pcc_ss_idx]->pcc_comm_addr =
			acpi_os_ioremap(cppc_ss->base_address, cppc_ss->length);
			acpi_os_ioremap(pcc_chan->shmem_base_addr,
					pcc_chan->shmem_size);
		if (!pcc_data[pcc_ss_idx]->pcc_comm_addr) {
			pr_err("Failed to ioremap PCC comm region mem for %d\n",
			       pcc_ss_idx);
Loading