Blame view

drivers/core/simple-bus.c 1.29 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
da802b9e2   Simon Glass   dm: core: Add sup...
2
3
  /*
   * Copyright (c) 2014 Google, Inc
da802b9e2   Simon Glass   dm: core: Add sup...
4
5
6
7
   */
  
  #include <common.h>
  #include <dm.h>
da802b9e2   Simon Glass   dm: core: Add sup...
8

f33017716   Simon Glass   dm: Support addre...
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   Simon Glass   dm: core: Add sup...
24
25
  static int simple_bus_post_bind(struct udevice *dev)
  {
6943ee14e   Kever Yang   simple-bus: enabl...
26
27
28
  #if CONFIG_IS_ENABLED(OF_PLATDATA)
  	return 0;
  #else
f33017716   Simon Glass   dm: Support addre...
29
30
  	u32 cell[3];
  	int ret;
7a993bbcf   Simon Glass   dm: simple-bus: A...
31
  	ret = dev_read_u32_array(dev, "ranges", cell, ARRAY_SIZE(cell));
f33017716   Simon Glass   dm: Support addre...
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   Simon Glass   dm: Convert users...
39
  	return dm_scan_fdt_dev(dev);
6943ee14e   Kever Yang   simple-bus: enabl...
40
  #endif
da802b9e2   Simon Glass   dm: core: Add sup...
41
42
43
44
45
46
  }
  
  UCLASS_DRIVER(simple_bus) = {
  	.id		= UCLASS_SIMPLE_BUS,
  	.name		= "simple_bus",
  	.post_bind	= simple_bus_post_bind,
f33017716   Simon Glass   dm: Support addre...
47
  	.per_device_platdata_auto_alloc_size = sizeof(struct simple_bus_plat),
da802b9e2   Simon Glass   dm: core: Add sup...
48
49
50
51
  };
  
  static const struct udevice_id generic_simple_bus_ids[] = {
  	{ .compatible = "simple-bus" },
9f56917ab   Masahiro Yamada   dm: core: make si...
52
  	{ .compatible = "simple-mfd" },
da802b9e2   Simon Glass   dm: core: Add sup...
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   Lukas Auer   simple-bus: add D...
60
  	.flags	= DM_FLAG_PRE_RELOC,
da802b9e2   Simon Glass   dm: core: Add sup...
61
  };