Lines Matching +full:mpfs +full:- +full:sys +full:- +full:controller
1 // SPDX-License-Identifier: GPL-2.0
3 * Microchip PolarFire SoC (MPFS) system controller driver
5 * Copyright (c) 2020-2021 Microchip Corporation. All rights reserved.
18 #include <soc/microchip/mpfs.h>
37 reinit_completion(&sys_controller->c); in mpfs_blocking_transaction()
39 ret = mbox_send_message(sys_controller->chan, msg); in mpfs_blocking_transaction()
41 if (wait_for_completion_timeout(&sys_controller->c, HZ)) { in mpfs_blocking_transaction()
44 ret = -ETIMEDOUT; in mpfs_blocking_transaction()
45 dev_warn(sys_controller->client.dev, in mpfs_blocking_transaction()
46 "MPFS sys controller transaction timeout\n"); in mpfs_blocking_transaction()
49 dev_err(sys_controller->client.dev, in mpfs_blocking_transaction()
50 "mpfs sys controller transaction returned %d\n", ret); in mpfs_blocking_transaction()
64 complete(&sys_controller->c); in rx_callback()
72 mbox_free_channel(sys_controller->chan); in mpfs_sys_controller_delete()
80 kref_put(&sys_controller->consumers, mpfs_sys_controller_delete); in mpfs_sys_controller_put()
85 .name = "mpfs-rng",
86 .id = -1,
89 .name = "mpfs-generic-service",
90 .id = -1,
96 struct device *dev = &pdev->dev; in mpfs_sys_controller_probe()
102 return -ENOMEM; in mpfs_sys_controller_probe()
104 sys_controller->client.dev = dev; in mpfs_sys_controller_probe()
105 sys_controller->client.rx_callback = rx_callback; in mpfs_sys_controller_probe()
106 sys_controller->client.tx_block = 1U; in mpfs_sys_controller_probe()
108 sys_controller->chan = mbox_request_channel(&sys_controller->client, 0); in mpfs_sys_controller_probe()
109 if (IS_ERR(sys_controller->chan)) { in mpfs_sys_controller_probe()
110 ret = dev_err_probe(dev, PTR_ERR(sys_controller->chan), in mpfs_sys_controller_probe()
116 init_completion(&sys_controller->c); in mpfs_sys_controller_probe()
117 kref_init(&sys_controller->consumers); in mpfs_sys_controller_probe()
121 dev_info(&pdev->dev, "Registered MPFS system controller\n"); in mpfs_sys_controller_probe()
142 {.compatible = "microchip,mpfs-sys-controller", },
153 if (!dev->parent) in mpfs_sys_controller_get()
156 match = of_match_node(mpfs_sys_controller_of_match, dev->parent->of_node); in mpfs_sys_controller_get()
157 of_node_put(dev->parent->of_node); in mpfs_sys_controller_get()
161 sys_controller = dev_get_drvdata(dev->parent); in mpfs_sys_controller_get()
165 if (!kref_get_unless_zero(&sys_controller->consumers)) in mpfs_sys_controller_get()
175 dev_dbg(dev, "Parent device was not an MPFS system controller\n"); in mpfs_sys_controller_get()
176 return ERR_PTR(-ENODEV); in mpfs_sys_controller_get()
179 dev_dbg(dev, "MPFS system controller found but could not register as a sub device\n"); in mpfs_sys_controller_get()
180 return ERR_PTR(-EPROBE_DEFER); in mpfs_sys_controller_get()
186 .name = "mpfs-sys-controller",
196 MODULE_DESCRIPTION("MPFS system controller driver");