Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a54b8a7d authored by Elliot Berman's avatar Elliot Berman
Browse files

power: reset: qcom-dload-mode: Store KASLR offset when available



Store KASLR offset in imem property when requested by devicetree.

Change-Id: I4f5f359fadab413db6bc5e80799a445218251872
Signed-off-by: default avatarElliot Berman <eberman@codeaurora.org>
parent f9dc3d38
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -213,6 +213,27 @@ static void __iomem *map_prop_mem(const char *propname)
	return addr;
}

#ifdef CONFIG_RANDOMIZE_BASE
#define KASLR_OFFSET_MASK	0x00000000FFFFFFFF
static void store_kaslr_offset(void)
{
	void __iomem *mem = map_prop_mem("qcom,msm-imem-kaslr_offset");

	if (!mem)
		return;

	__raw_writel(0xdead4ead, mem);
	__raw_writel((kimage_vaddr - KIMAGE_VADDR) & KASLR_OFFSET_MASK,
		     mem + 4);
	__raw_writel(((kimage_vaddr - KIMAGE_VADDR) >> 32) & KASLR_OFFSET_MASK,
		     mem + 8);

	iounmap(mem);
}
#else
static void store_kaslr_offset(void) {}
#endif /* CONFIG_RANDOMIZE_BASE */

static int qcom_dload_probe(struct platform_device *pdev)
{
	struct qcom_dload *poweroff;
@@ -238,6 +259,7 @@ static int qcom_dload_probe(struct platform_device *pdev)
	}

	poweroff->dload_dest_addr = map_prop_mem("qcom,msm-imem-dload-type");
	store_kaslr_offset();

	if (enable_dump)
		set_download_mode(QCOM_DOWNLOAD_FULLDUMP);