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

Commit d03ac61d authored by Marc Kleine-Budde's avatar Marc Kleine-Budde Committed by Mike Turquette
Browse files

clk: mxs: fix clock lookup after freeing init memory



The struct clk_lookup are marked as __initdata, resulting in being
removed from memory after the kernel finished booting. However this
leads to a NULL pointer de-ref if loading a module which uses clk_get.

This patch removes the __initdata from the struct clk_lookup.

Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent d6dc55c1
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ static void __init clk_misc_init(void)
	__mxs_setl(30 << BP_FRAC_IOFRAC, FRAC);
}

static struct clk_lookup uart_lookups[] __initdata = {
static struct clk_lookup uart_lookups[] = {
	{ .dev_id = "duart", },
	{ .dev_id = "mxs-auart.0", },
	{ .dev_id = "mxs-auart.1", },
@@ -80,31 +80,31 @@ static struct clk_lookup uart_lookups[] __initdata = {
	{ .dev_id = "80070000.serial", },
};

static struct clk_lookup hbus_lookups[] __initdata = {
static struct clk_lookup hbus_lookups[] = {
	{ .dev_id = "imx23-dma-apbh", },
	{ .dev_id = "80004000.dma-apbh", },
};

static struct clk_lookup xbus_lookups[] __initdata = {
static struct clk_lookup xbus_lookups[] = {
	{ .dev_id = "duart", .con_id = "apb_pclk"},
	{ .dev_id = "80070000.serial", .con_id = "apb_pclk"},
	{ .dev_id = "imx23-dma-apbx", },
	{ .dev_id = "80024000.dma-apbx", },
};

static struct clk_lookup ssp_lookups[] __initdata = {
static struct clk_lookup ssp_lookups[] = {
	{ .dev_id = "imx23-mmc.0", },
	{ .dev_id = "imx23-mmc.1", },
	{ .dev_id = "80010000.ssp", },
	{ .dev_id = "80034000.ssp", },
};

static struct clk_lookup lcdif_lookups[] __initdata = {
static struct clk_lookup lcdif_lookups[] = {
	{ .dev_id = "imx23-fb", },
	{ .dev_id = "80030000.lcdif", },
};

static struct clk_lookup gpmi_lookups[] __initdata = {
static struct clk_lookup gpmi_lookups[] = {
	{ .dev_id = "imx23-gpmi-nand", },
	{ .dev_id = "8000c000.gpmi", },
};
+14 −14
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ static void __init clk_misc_init(void)
	writel_relaxed(val, FRAC0);
}

static struct clk_lookup uart_lookups[] __initdata = {
static struct clk_lookup uart_lookups[] = {
	{ .dev_id = "duart", },
	{ .dev_id = "mxs-auart.0", },
	{ .dev_id = "mxs-auart.1", },
@@ -135,71 +135,71 @@ static struct clk_lookup uart_lookups[] __initdata = {
	{ .dev_id = "80074000.serial", },
};

static struct clk_lookup hbus_lookups[] __initdata = {
static struct clk_lookup hbus_lookups[] = {
	{ .dev_id = "imx28-dma-apbh", },
	{ .dev_id = "80004000.dma-apbh", },
};

static struct clk_lookup xbus_lookups[] __initdata = {
static struct clk_lookup xbus_lookups[] = {
	{ .dev_id = "duart", .con_id = "apb_pclk"},
	{ .dev_id = "80074000.serial", .con_id = "apb_pclk"},
	{ .dev_id = "imx28-dma-apbx", },
	{ .dev_id = "80024000.dma-apbx", },
};

static struct clk_lookup ssp0_lookups[] __initdata = {
static struct clk_lookup ssp0_lookups[] = {
	{ .dev_id = "imx28-mmc.0", },
	{ .dev_id = "80010000.ssp", },
};

static struct clk_lookup ssp1_lookups[] __initdata = {
static struct clk_lookup ssp1_lookups[] = {
	{ .dev_id = "imx28-mmc.1", },
	{ .dev_id = "80012000.ssp", },
};

static struct clk_lookup ssp2_lookups[] __initdata = {
static struct clk_lookup ssp2_lookups[] = {
	{ .dev_id = "imx28-mmc.2", },
	{ .dev_id = "80014000.ssp", },
};

static struct clk_lookup ssp3_lookups[] __initdata = {
static struct clk_lookup ssp3_lookups[] = {
	{ .dev_id = "imx28-mmc.3", },
	{ .dev_id = "80016000.ssp", },
};

static struct clk_lookup lcdif_lookups[] __initdata = {
static struct clk_lookup lcdif_lookups[] = {
	{ .dev_id = "imx28-fb", },
	{ .dev_id = "80030000.lcdif", },
};

static struct clk_lookup gpmi_lookups[] __initdata = {
static struct clk_lookup gpmi_lookups[] = {
	{ .dev_id = "imx28-gpmi-nand", },
	{ .dev_id = "8000c000.gpmi", },
};

static struct clk_lookup fec_lookups[] __initdata = {
static struct clk_lookup fec_lookups[] = {
	{ .dev_id = "imx28-fec.0", },
	{ .dev_id = "imx28-fec.1", },
	{ .dev_id = "800f0000.ethernet", },
	{ .dev_id = "800f4000.ethernet", },
};

static struct clk_lookup can0_lookups[] __initdata = {
static struct clk_lookup can0_lookups[] = {
	{ .dev_id = "flexcan.0", },
	{ .dev_id = "80032000.can", },
};

static struct clk_lookup can1_lookups[] __initdata = {
static struct clk_lookup can1_lookups[] = {
	{ .dev_id = "flexcan.1", },
	{ .dev_id = "80034000.can", },
};

static struct clk_lookup saif0_lookups[] __initdata = {
static struct clk_lookup saif0_lookups[] = {
	{ .dev_id = "mxs-saif.0", },
	{ .dev_id = "80042000.saif", },
};

static struct clk_lookup saif1_lookups[] __initdata = {
static struct clk_lookup saif1_lookups[] = {
	{ .dev_id = "mxs-saif.1", },
	{ .dev_id = "80046000.saif", },
};