blob: 5ed2b32c1128139f3bfa852aab6bf0a127f2ad13 [file] [log] [blame]
Rajan Vaja14723ed2019-02-15 04:45:32 -08001// SPDX-License-Identifier: GPL-2.0
Ibai Erkiaga1327d162019-09-27 12:51:41 +02002/*
3 * Xilinx Zynq MPSoC Firmware driver
4 *
5 * Copyright (C) 2018-2019 Xilinx, Inc.
6 */
Rajan Vaja14723ed2019-02-15 04:45:32 -08007
Ibai Erkiaga1327d162019-09-27 12:51:41 +02008#include <common.h>
Rajan Vaja14723ed2019-02-15 04:45:32 -08009#include <dm.h>
10
Ibai Erkiaga1327d162019-09-27 12:51:41 +020011#if defined(CONFIG_ZYNQMP_IPI)
12#include <mailbox.h>
13#include <asm/arch/sys_proto.h>
14
15struct zynqmp_power {
16 struct mbox_chan tx_chan;
17 struct mbox_chan rx_chan;
18} zynqmp_power;
19
20static int zynqmp_power_probe(struct udevice *dev)
21{
22 int ret = 0;
23
24 debug("%s, (dev=%p)\n", __func__, dev);
25
26 ret = mbox_get_by_name(dev, "tx", &zynqmp_power.tx_chan);
27 if (ret) {
28 debug("%s, cannot tx mailbox\n", __func__);
29 return ret;
30 }
31
32 ret = mbox_get_by_name(dev, "rx", &zynqmp_power.rx_chan);
33 if (ret)
34 debug("%s, cannot rx mailbox\n", __func__);
35
36 return ret;
37};
38
39static const struct udevice_id zynqmp_power_ids[] = {
40 { .compatible = "xlnx,zynqmp-power" },
41 { }
42};
43
44U_BOOT_DRIVER(zynqmp_power) = {
45 .name = "zynqmp_power",
46 .id = UCLASS_FIRMWARE,
47 .of_match = zynqmp_power_ids,
48 .probe = zynqmp_power_probe,
49};
50#endif
51
Rajan Vaja14723ed2019-02-15 04:45:32 -080052static const struct udevice_id zynqmp_firmware_ids[] = {
53 { .compatible = "xlnx,zynqmp-firmware" },
Siva Durga Prasad Paladugu95105082019-06-23 12:24:57 +053054 { .compatible = "xlnx,versal-firmware"},
Rajan Vaja14723ed2019-02-15 04:45:32 -080055 { }
56};
57
58U_BOOT_DRIVER(zynqmp_firmware) = {
59 .id = UCLASS_FIRMWARE,
60 .name = "zynqmp-firmware",
61 .probe = dm_scan_fdt_dev,
62 .of_match = zynqmp_firmware_ids,
63};