2 * Copyright (c) 2014 Google, Inc
4 * SPDX-License-Identifier: GPL-2.0+
10 struct simple_bus_plat
{
16 fdt_addr_t
simple_bus_translate(struct udevice
*dev
, fdt_addr_t addr
)
18 struct simple_bus_plat
*plat
= dev_get_uclass_platdata(dev
);
20 if (addr
>= plat
->base
&& addr
< plat
->base
+ plat
->size
)
21 addr
= (addr
- plat
->base
) + plat
->target
;
26 static int simple_bus_post_bind(struct udevice
*dev
)
28 #if CONFIG_IS_ENABLED(OF_PLATDATA)
34 ret
= dev_read_u32_array(dev
, "ranges", cell
, ARRAY_SIZE(cell
));
36 struct simple_bus_plat
*plat
= dev_get_uclass_platdata(dev
);
39 plat
->target
= cell
[1];
43 return dm_scan_fdt_dev(dev
);
47 UCLASS_DRIVER(simple_bus
) = {
48 .id
= UCLASS_SIMPLE_BUS
,
50 .post_bind
= simple_bus_post_bind
,
51 .per_device_platdata_auto_alloc_size
= sizeof(struct simple_bus_plat
),
54 static const struct udevice_id generic_simple_bus_ids
[] = {
55 { .compatible
= "simple-bus" },
56 { .compatible
= "simple-mfd" },
60 U_BOOT_DRIVER(simple_bus_drv
) = {
61 .name
= "generic_simple_bus",
62 .id
= UCLASS_SIMPLE_BUS
,
63 .of_match
= generic_simple_bus_ids
,