2 * Copyright (c) 2014 Google, Inc
4 * SPDX-License-Identifier: GPL-2.0+
10 DECLARE_GLOBAL_DATA_PTR
;
12 struct simple_bus_plat
{
18 fdt_addr_t
simple_bus_translate(struct udevice
*dev
, fdt_addr_t addr
)
20 struct simple_bus_plat
*plat
= dev_get_uclass_platdata(dev
);
22 if (addr
>= plat
->base
&& addr
< plat
->base
+ plat
->size
)
23 addr
= (addr
- plat
->base
) + plat
->target
;
28 static int simple_bus_post_bind(struct udevice
*dev
)
33 ret
= fdtdec_get_int_array(gd
->fdt_blob
, dev_of_offset(dev
), "ranges",
34 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
);
46 UCLASS_DRIVER(simple_bus
) = {
47 .id
= UCLASS_SIMPLE_BUS
,
49 .post_bind
= simple_bus_post_bind
,
50 .per_device_platdata_auto_alloc_size
= sizeof(struct simple_bus_plat
),
53 static const struct udevice_id generic_simple_bus_ids
[] = {
54 { .compatible
= "simple-bus" },
55 { .compatible
= "simple-mfd" },
59 U_BOOT_DRIVER(simple_bus_drv
) = {
60 .name
= "generic_simple_bus",
61 .id
= UCLASS_SIMPLE_BUS
,
62 .of_match
= generic_simple_bus_ids
,