Misc driver changes only :
- TI-MsgMgr: Fix print format for a printk - TI-MSgMgr: SPDX license switch for the driver - QCOM-IPC: Convert driver to use regmap - QCOM-IPC: Spawn sibling clock device from mailbox driver -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJadq9yAAoJEH/ZZH/HmD+VupMP/2WiPSo8mP4Pdb5TvlHDZQA2 e99YCwxGgvwIs5i9TmTNz4jyrXZa36S+m/LYvuBrKncjPl0BHQVpKa/vFM4NJOw5 evlMgB+c8wdAbIQtP3w3f72TClpIutKdsWA+wTxH4221TLFRmpptj/tY5JHEezFw KrIKhesYUTjulNTrA+rGe3e/xso8f2P8OfQAtK8k+nVrqp6Wnu/IeXftLkMuRAR8 tSzz2CTIMC1iBFGZn6TRXLn1qe6rnO8uZrN4DmJGMe/dudQ8hjRzb2zx9bDOhtG3 uLcD2ETsZNS0g6rJP0iltIz3FdZEqS5gugOIIQ+b6opZ2rNkSWlkQLCTnwqLWZ3w eLqBbRumb0+kDfdTheBijUjd+NJupR8/zEkSxWx2VUwP4zRzrgvmdqyfghAQD2jv lLjQHmG6JBO/NTwgQ9WgSO7Noem7tfeIu+jdS4robihk7x2/TrdRFvfTayndWy9Q 6mRAKgk3ElL83VeyfVZF9jSOqu/SwemUYw4+wSnAS1u+SL6Am/U5HXTggLclqM9o ETkR+5aL6RYA1ik/vRIhV9TvoT7Ew4GKRI1etBvh0gkSlJ9PgRUNL7IS+yUdBMYX btD79ZIM6VjGWxVx80aDhTfYndcDPokvBYxD39vezy5w9SqEZzMSm1oO6zkO4X9p ry3ZToIwhuXKBtE8hkIX =SEiX -----END PGP SIGNATURE----- Merge tag 'mailbox-v4.16' of git://git.linaro.org/landing-teams/working/fujitsu/integration Pull mailbox updates from Jassi Brar: "Misc driver changes only: - TI-MsgMgr: Fix print format for a printk - TI-MSgMgr: SPDX license switch for the driver - QCOM-IPC: Convert driver to use regmap - QCOM-IPC: Spawn sibling clock device from mailbox driver" * tag 'mailbox-v4.16' of git://git.linaro.org/landing-teams/working/fujitsu/integration: dt-bindings: mailbox: qcom: Document the APCS clock binding mailbox: qcom: Create APCS child device for clock controller mailbox: qcom: Convert APCS IPC driver to use regmap mailbox: ti-msgmgr: Use %zu for size_t print format mailbox: ti-msgmgr: Switch to SPDX Licensing
This commit is contained in:
commit
8ac4840a3c
|
@ -15,12 +15,21 @@ platforms.
|
|||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: must specify the base address and size of the global block
|
||||
- clocks:
|
||||
Usage: required if #clocks-cells property is present
|
||||
Value type: <phandle>
|
||||
Definition: phandle to the input PLL, which feeds the APCS mux/divider
|
||||
|
||||
- #mbox-cells:
|
||||
Usage: required
|
||||
Value type: <u32>
|
||||
Definition: as described in mailbox.txt, must be 1
|
||||
|
||||
- #clock-cells:
|
||||
Usage: optional
|
||||
Value type: <u32>
|
||||
Definition: as described in clock.txt, must be 0
|
||||
|
||||
|
||||
= EXAMPLE
|
||||
The following example describes the APCS HMSS found in MSM8996 and part of the
|
||||
|
@ -44,3 +53,12 @@ GLINK RPM referencing the "rpm_hlos" doorbell therein.
|
|||
mbox-names = "rpm_hlos";
|
||||
};
|
||||
|
||||
Below is another example of the APCS binding on MSM8916 platforms:
|
||||
|
||||
apcs: mailbox@b011000 {
|
||||
compatible = "qcom,msm8916-apcs-kpss-global";
|
||||
reg = <0xb011000 0x1000>;
|
||||
#mbox-cells = <1>;
|
||||
clocks = <&a53pll>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/mailbox_controller.h>
|
||||
|
||||
#define QCOM_APCS_IPC_BITS 32
|
||||
|
@ -26,8 +27,17 @@ struct qcom_apcs_ipc {
|
|||
struct mbox_controller mbox;
|
||||
struct mbox_chan mbox_chans[QCOM_APCS_IPC_BITS];
|
||||
|
||||
void __iomem *reg;
|
||||
struct regmap *regmap;
|
||||
unsigned long offset;
|
||||
struct platform_device *clk;
|
||||
};
|
||||
|
||||
static const struct regmap_config apcs_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x1000,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static int qcom_apcs_ipc_send_data(struct mbox_chan *chan, void *data)
|
||||
|
@ -36,9 +46,7 @@ static int qcom_apcs_ipc_send_data(struct mbox_chan *chan, void *data)
|
|||
struct qcom_apcs_ipc, mbox);
|
||||
unsigned long idx = (unsigned long)chan->con_priv;
|
||||
|
||||
writel(BIT(idx), apcs->reg);
|
||||
|
||||
return 0;
|
||||
return regmap_write(apcs->regmap, apcs->offset, BIT(idx));
|
||||
}
|
||||
|
||||
static const struct mbox_chan_ops qcom_apcs_ipc_ops = {
|
||||
|
@ -47,7 +55,9 @@ static const struct mbox_chan_ops qcom_apcs_ipc_ops = {
|
|||
|
||||
static int qcom_apcs_ipc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct qcom_apcs_ipc *apcs;
|
||||
struct regmap *regmap;
|
||||
struct resource *res;
|
||||
unsigned long offset;
|
||||
void __iomem *base;
|
||||
|
@ -63,9 +73,14 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
regmap = devm_regmap_init_mmio(&pdev->dev, base, &apcs_regmap_config);
|
||||
if (IS_ERR(regmap))
|
||||
return PTR_ERR(regmap);
|
||||
|
||||
offset = (unsigned long)of_device_get_match_data(&pdev->dev);
|
||||
|
||||
apcs->reg = base + offset;
|
||||
apcs->regmap = regmap;
|
||||
apcs->offset = offset;
|
||||
|
||||
/* Initialize channel identifiers */
|
||||
for (i = 0; i < ARRAY_SIZE(apcs->mbox_chans); i++)
|
||||
|
@ -82,6 +97,14 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (of_device_is_compatible(np, "qcom,msm8916-apcs-kpss-global")) {
|
||||
apcs->clk = platform_device_register_data(&pdev->dev,
|
||||
"qcom-apcs-msm8916-clk",
|
||||
-1, NULL, 0);
|
||||
if (IS_ERR(apcs->clk))
|
||||
dev_err(&pdev->dev, "failed to register APCS clk\n");
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, apcs);
|
||||
|
||||
return 0;
|
||||
|
@ -90,8 +113,10 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
|
|||
static int qcom_apcs_ipc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct qcom_apcs_ipc *apcs = platform_get_drvdata(pdev);
|
||||
struct platform_device *clk = apcs->clk;
|
||||
|
||||
mbox_controller_unregister(&apcs->mbox);
|
||||
platform_device_unregister(clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Texas Instruments' Message Manager Driver
|
||||
*
|
||||
* Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Nishanth Menon
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
|
||||
* kind, whether express or implied; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
@ -291,7 +283,7 @@ static int ti_msgmgr_send_data(struct mbox_chan *chan, void *data)
|
|||
desc = inst->desc;
|
||||
|
||||
if (desc->max_message_size < message->len) {
|
||||
dev_err(dev, "Queue %s message length %d > max %d\n",
|
||||
dev_err(dev, "Queue %s message length %zu > max %d\n",
|
||||
qinst->name, message->len, desc->max_message_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue