From 3424a516d9d2d3fa45c63750c15ea2bba893ea81 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Thu, 15 Mar 2018 14:17:20 -0500 Subject: ARM: davinci: da8xx: fix oops in USB PHY driver due to stack allocated platform_data This fixes a possible kernel oops due to using stack allocated platform data for the USB PHY driver on DA8XX devices. If the platform device probe is deferred, then we get a corrupt pointer for the platform data. We now use a global static struct for the platform data so that the platform data pointer does not get written over. Fixes: bdec5a6b5789 ("ARM: da8xx: use platform data for CFGCHIP syscon regmap") Signed-off-by: David Lechner Signed-off-by: Sekhar Nori --- arch/arm/mach-davinci/usb-da8xx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'arch') diff --git a/arch/arm/mach-davinci/usb-da8xx.c b/arch/arm/mach-davinci/usb-da8xx.c index 4d89d86ce7e5..50445f0e98de 100644 --- a/arch/arm/mach-davinci/usb-da8xx.c +++ b/arch/arm/mach-davinci/usb-da8xx.c @@ -26,6 +26,8 @@ static struct clk *usb20_clk; +static struct da8xx_usb_phy_platform_data da8xx_usb_phy_pdata; + static struct platform_device da8xx_usb_phy = { .name = "da8xx-usb-phy", .id = -1, @@ -36,15 +38,13 @@ static struct platform_device da8xx_usb_phy = { * registered yet. */ .init_name = "da8xx-usb-phy", + .platform_data = &da8xx_usb_phy_pdata, }, }; int __init da8xx_register_usb_phy(void) { - struct da8xx_usb_phy_platform_data pdata; - - pdata.cfgchip = da8xx_get_cfgchip(); - da8xx_usb_phy.dev.platform_data = &pdata; + da8xx_usb_phy_pdata.cfgchip = da8xx_get_cfgchip(); return platform_device_register(&da8xx_usb_phy); } -- cgit v1.2.3-58-ga151 From f6adc9fd1ff9bbe766cbb68e84a0d97f54a4f436 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Thu, 15 Mar 2018 13:13:41 -0500 Subject: ARM: davinci: da8xx: simplify CFGCHIP regmap_config Since commit 8253bb3f8255 ("regmap: potentially duplicate the name string stored in regmap"), the name field of struct regmap_config is copied in __regmap_init(), so we no longer need to worry about keeping our own copy of the name. Just use a string literal in the initialization of da8xx_cfgchip_config instead of creating a separate variable for the name. Signed-off-by: David Lechner Signed-off-by: Sekhar Nori --- arch/arm/mach-davinci/devices-da8xx.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'arch') diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index 24422ba07cc7..78390c64e6ca 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -1106,11 +1106,8 @@ int __init da850_register_sata(unsigned long refclkpn) static struct regmap *da8xx_cfgchip; -/* regmap doesn't make a copy of this, so we need to keep the pointer around */ -static const char da8xx_cfgchip_name[] = "cfgchip"; - static const struct regmap_config da8xx_cfgchip_config __initconst = { - .name = da8xx_cfgchip_name, + .name = "cfgchip", .reg_bits = 32, .val_bits = 32, .reg_stride = 4, -- cgit v1.2.3-58-ga151