Blame view
drivers/core/simple-bus.c
1.29 KB
83d290c56
|
1 |
// SPDX-License-Identifier: GPL-2.0+ |
da802b9e2
|
2 3 |
/* * Copyright (c) 2014 Google, Inc |
da802b9e2
|
4 5 6 7 |
*/ #include <common.h> #include <dm.h> |
da802b9e2
|
8 |
|
f33017716
|
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
struct simple_bus_plat { u32 base; u32 size; u32 target; }; fdt_addr_t simple_bus_translate(struct udevice *dev, fdt_addr_t addr) { struct simple_bus_plat *plat = dev_get_uclass_platdata(dev); if (addr >= plat->base && addr < plat->base + plat->size) addr = (addr - plat->base) + plat->target; return addr; } |
da802b9e2
|
24 25 |
static int simple_bus_post_bind(struct udevice *dev) { |
6943ee14e
|
26 27 28 |
#if CONFIG_IS_ENABLED(OF_PLATDATA) return 0; #else |
f33017716
|
29 30 |
u32 cell[3]; int ret; |
7a993bbcf
|
31 |
ret = dev_read_u32_array(dev, "ranges", cell, ARRAY_SIZE(cell)); |
f33017716
|
32 33 34 35 36 37 38 |
if (!ret) { struct simple_bus_plat *plat = dev_get_uclass_platdata(dev); plat->base = cell[0]; plat->target = cell[1]; plat->size = cell[2]; } |
2e3f1ff63
|
39 |
return dm_scan_fdt_dev(dev); |
6943ee14e
|
40 |
#endif |
da802b9e2
|
41 42 43 44 45 46 |
} UCLASS_DRIVER(simple_bus) = { .id = UCLASS_SIMPLE_BUS, .name = "simple_bus", .post_bind = simple_bus_post_bind, |
f33017716
|
47 |
.per_device_platdata_auto_alloc_size = sizeof(struct simple_bus_plat), |
da802b9e2
|
48 49 50 51 |
}; static const struct udevice_id generic_simple_bus_ids[] = { { .compatible = "simple-bus" }, |
9f56917ab
|
52 |
{ .compatible = "simple-mfd" }, |
da802b9e2
|
53 54 55 56 57 58 59 |
{ } }; U_BOOT_DRIVER(simple_bus_drv) = { .name = "generic_simple_bus", .id = UCLASS_SIMPLE_BUS, .of_match = generic_simple_bus_ids, |
3a7c45f6a
|
60 |
.flags = DM_FLAG_PRE_RELOC, |
da802b9e2
|
61 |
}; |