blob: 4cbc6aeda431deb574f56319bec78b1079ad7ff4 [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",
Marek Vasut884e8142025-03-16 14:51:43 +010062 .reset_node = "renesas,r8a779g0-rst",
63 .otp_node = "renesas,r8a779g0-otp",
Marek Vasut1f7ba642024-12-12 14:34:30 +010064};
65
66static const struct udevice_id renesas_dbsc5_ids[] = {
67 {
68 .compatible = "renesas,r8a779g0-dbsc",
69 .data = (ulong)&r8a779g0_dbsc5_data
70 },
71 { /* sentinel */ }
72};
73
74U_BOOT_DRIVER(renesas_dbsc5) = {
75 .name = "dbsc5",
76 .id = UCLASS_NOP,
77 .of_match = renesas_dbsc5_ids,
78 .bind = renesas_dbsc5_bind,
79 .probe = renesas_dbsc5_probe,
80};