blob: d24b7c5c30a70bb8513f28cfce513a1143976feb [file] [log] [blame]
Marek Vasut1f7ba642024-12-12 14:34:30 +01001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2024 Renesas Electronics Corp.
4 */
5
6#include <asm/io.h>
7#include <dm.h>
8#include <dm/device-internal.h>
9#include <dm/lists.h>
10#include <errno.h>
11#include <linux/sizes.h>
12#include <ram.h>
13#include "dbsc5.h"
14
15static int renesas_dbsc5_probe(struct udevice *dev)
16{
17 struct udevice *pdev;
18 int ret;
19
20 ret = uclass_get_device_by_name(UCLASS_RAM, "dbsc5_dram", &pdev);
21 if (ret)
22 return ret;
23
24 ret = uclass_get_device_by_name(UCLASS_NOP, "dbsc5_qos", &pdev);
25 if (ret)
26 return ret;
27
28 return 0;
29}
30
31int renesas_dbsc5_bind(struct udevice *dev)
32{
33 struct udevice *ramdev, *qosdev;
34 struct driver *ramdrv, *qosdrv;
35 int ret;
36
37 ramdrv = lists_driver_lookup_name("dbsc5_dram");
38 if (!ramdrv)
39 return -ENOENT;
40
41
42 qosdrv = lists_driver_lookup_name("dbsc5_qos");
43 if (!qosdrv)
44 return -ENOENT;
45
46 ret = device_bind_with_driver_data(dev, ramdrv, "dbsc5_dram",
47 dev_get_driver_data(dev),
48 dev_ofnode(dev), &ramdev);
49 if (ret)
50 return ret;
51
52 ret = device_bind_with_driver_data(dev, qosdrv, "dbsc5_qos", 0,
53 dev_ofnode(dev), &qosdev);
54 if (ret)
55 device_unbind(ramdev);
56
57 return ret;
58}
59
60struct renesas_dbsc5_data r8a779g0_dbsc5_data = {
61 .clock_node = "renesas,r8a779g0-cpg-mssr",
62 .reset_node = "renesas,r8a779g0-rst"
63};
64
65static const struct udevice_id renesas_dbsc5_ids[] = {
66 {
67 .compatible = "renesas,r8a779g0-dbsc",
68 .data = (ulong)&r8a779g0_dbsc5_data
69 },
70 { /* sentinel */ }
71};
72
73U_BOOT_DRIVER(renesas_dbsc5) = {
74 .name = "dbsc5",
75 .id = UCLASS_NOP,
76 .of_match = renesas_dbsc5_ids,
77 .bind = renesas_dbsc5_bind,
78 .probe = renesas_dbsc5_probe,
79};