Blame view

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

f33017716   Simon Glass   dm: Support addre...
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  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...
25
26
  static int simple_bus_post_bind(struct udevice *dev)
  {
6943ee14e   Kever Yang   simple-bus: enabl...
27
28
29
  #if CONFIG_IS_ENABLED(OF_PLATDATA)
  	return 0;
  #else
f33017716   Simon Glass   dm: Support addre...
30
31
  	u32 cell[3];
  	int ret;
7a993bbcf   Simon Glass   dm: simple-bus: A...
32
  	ret = dev_read_u32_array(dev, "ranges", cell, ARRAY_SIZE(cell));
f33017716   Simon Glass   dm: Support addre...
33
34
35
36
37
38
39
  	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...
40
  	return dm_scan_fdt_dev(dev);
6943ee14e   Kever Yang   simple-bus: enabl...
41
  #endif
da802b9e2   Simon Glass   dm: core: Add sup...
42
43
44
45
46
47
  }
  
  UCLASS_DRIVER(simple_bus) = {
  	.id		= UCLASS_SIMPLE_BUS,
  	.name		= "simple_bus",
  	.post_bind	= simple_bus_post_bind,
f33017716   Simon Glass   dm: Support addre...
48
  	.per_device_platdata_auto_alloc_size = sizeof(struct simple_bus_plat),
da802b9e2   Simon Glass   dm: core: Add sup...
49
50
51
52
  };
  
  static const struct udevice_id generic_simple_bus_ids[] = {
  	{ .compatible = "simple-bus" },
9f56917ab   Masahiro Yamada   dm: core: make si...
53
  	{ .compatible = "simple-mfd" },
da802b9e2   Simon Glass   dm: core: Add sup...
54
55
56
57
58
59
60
61
  	{ }
  };
  
  U_BOOT_DRIVER(simple_bus_drv) = {
  	.name	= "generic_simple_bus",
  	.id	= UCLASS_SIMPLE_BUS,
  	.of_match = generic_simple_bus_ids,
  };