mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 08:33:31 +08:00
e3e2470fdd
When using OF_PLATDATA, the bind process between devices and drivers is performed trying to match compatible string with driver names. However driver names are not strictly defined, and also there are different names used when declaring a driver with U_BOOT_DRIVER, the name of the symbol used in the linker list and the used in the struct driver_info. In order to make things a bit more clear, rename the drivers names. This will also help for further OF_PLATDATA improvements, such as checking for valid driver names. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Reviewed-by: Simon Glass <sjg@chromium.org> Add a fix for sandbox of-platdata to avoid using an invalid ANSI colour: Signed-off-by: Simon Glass <sjg@chromium.org>
65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (c) 2014 Google, Inc
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
|
|
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;
|
|
}
|
|
|
|
static int simple_bus_post_bind(struct udevice *dev)
|
|
{
|
|
#if CONFIG_IS_ENABLED(OF_PLATDATA)
|
|
return 0;
|
|
#else
|
|
u32 cell[3];
|
|
int ret;
|
|
|
|
ret = dev_read_u32_array(dev, "ranges", cell, ARRAY_SIZE(cell));
|
|
if (!ret) {
|
|
struct simple_bus_plat *plat = dev_get_uclass_platdata(dev);
|
|
|
|
plat->base = cell[0];
|
|
plat->target = cell[1];
|
|
plat->size = cell[2];
|
|
}
|
|
|
|
return dm_scan_fdt_dev(dev);
|
|
#endif
|
|
}
|
|
|
|
UCLASS_DRIVER(simple_bus) = {
|
|
.id = UCLASS_SIMPLE_BUS,
|
|
.name = "simple_bus",
|
|
.post_bind = simple_bus_post_bind,
|
|
.per_device_platdata_auto_alloc_size = sizeof(struct simple_bus_plat),
|
|
};
|
|
|
|
static const struct udevice_id generic_simple_bus_ids[] = {
|
|
{ .compatible = "simple-bus" },
|
|
{ .compatible = "simple-mfd" },
|
|
{ }
|
|
};
|
|
|
|
U_BOOT_DRIVER(simple_bus) = {
|
|
.name = "simple_bus",
|
|
.id = UCLASS_SIMPLE_BUS,
|
|
.of_match = generic_simple_bus_ids,
|
|
.flags = DM_FLAG_PRE_RELOC,
|
|
};
|