summaryrefslogtreecommitdiff
path: root/drivers/sysreset
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2018-07-12 10:36:07 +0200
committerMichal Simek <michal.simek@xilinx.com>2018-07-19 10:49:54 +0200
commit758de97bb8be091e0b1ab25af6bb9965d54fa839 (patch)
tree16cf8d3a697185deb17cd5bd639011ed849ab865 /drivers/sysreset
parent946205a8570bd5bf961aa0da8d82e0d0aa26f8c6 (diff)
sysreset: dm: Support manual relocation for sysreset
Relocate sysreset ops as was done by: "dm: Add support for all targets which requires MANUAL_RELOC" (sha1: 484fdf5ba058b07be5ca82763aa2b72063540ef3) Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/sysreset')
-rw-r--r--drivers/sysreset/sysreset-uclass.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c
index 7e06c3c90a..840eab6b57 100644
--- a/drivers/sysreset/sysreset-uclass.c
+++ b/drivers/sysreset/sysreset-uclass.c
@@ -74,7 +74,23 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return 0;
}
+static int sysreset_post_bind(struct udevice *dev)
+{
+#if defined(CONFIG_NEEDS_MANUAL_RELOC)
+ struct sysreset_ops *ops = sysreset_get_ops(dev);
+ static int reloc_done;
+
+ if (!reloc_done) {
+ if (ops->request)
+ ops->request += gd->reloc_off;
+ reloc_done++;
+ }
+#endif
+ return 0;
+}
+
UCLASS_DRIVER(sysreset) = {
.id = UCLASS_SYSRESET,
.name = "sysreset",
+ .post_bind = sysreset_post_bind,
};