diff mbox

[GIT,PULL] ARM: OMAP: Audio support via omap-twl4030 and pwm support

Message ID 20130204195251.GS22517@atomide.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tony Lindgren Feb. 4, 2013, 7:52 p.m. UTC
* Tony Lindgren <tony@atomide.com> [130130 14:09]:
> * Peter Ujfalusi <peter.ujfalusi@ti.com> [130129 00:34]:
> > Hi Tony,
> > 
> > On 01/22/2013 11:07 AM, Peter Ujfalusi wrote:
> > > Hi Tony,
> > > 
> > > The content of this pull:
> > > 
> > > update for audio support via omap-twl4030 and pwm updates in board level:
> > > http://www.spinics.net/lists/linux-omap/msg85085.html
> > > 
> > > and zoom-peripherals update to not request the TWL GPIO7:
> > > http://www.spinics.net/lists/linux-omap/msg85187.html
> > > 
> > > All is on top of mainline v3.8-rc4 tag.
> > 
> > Have you already pulled this one? I can not find the patches in linux-next.
> 
> Pulled now thanks. Will push out to omap-for-v3.9/twl.

Looks like this now adds some new section warnings:

WARNING: vmlinux.o(.text+0x34124): Section mismatch in reference from the function sdp3430_twl_gpio_setup() to the function .init.text:omap_twl4030_audio_init()
The function sdp3430_twl_gpio_setup() references
the function __init omap_twl4030_audio_init().
This is often because sdp3430_twl_gpio_setup lacks a __init 
annotation or the annotation of omap_twl4030_audio_init is wrong.

WARNING: vmlinux.o(.text+0x34b8c): Section mismatch in reference from the function zoom_twl_gpio_setup() to the function .init.text:omap_twl4030_audio_init()
The function zoom_twl_gpio_setup() references
the function __init omap_twl4030_audio_init().
This is often because zoom_twl_gpio_setup lacks a __init 
annotation or the annotation of omap_twl4030_audio_init is wrong.

These can be fixed with the following patch, but I suspect some
of these cannot be __init/__initdata if the driver reprobes.

Can you please check this? I'll hold on sendinf off
this branch until it's been checked and fixed properly.

Regards,

Tony


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Peter Ujfalusi Feb. 5, 2013, 9:46 a.m. UTC | #1
Hi Tony,

On 02/04/2013 08:52 PM, Tony Lindgren wrote:
> Looks like this now adds some new section warnings:
> 
> WARNING: vmlinux.o(.text+0x34124): Section mismatch in reference from the function sdp3430_twl_gpio_setup() to the function .init.text:omap_twl4030_audio_init()
> The function sdp3430_twl_gpio_setup() references
> the function __init omap_twl4030_audio_init().
> This is often because sdp3430_twl_gpio_setup lacks a __init 
> annotation or the annotation of omap_twl4030_audio_init is wrong.
> 
> WARNING: vmlinux.o(.text+0x34b8c): Section mismatch in reference from the function zoom_twl_gpio_setup() to the function .init.text:omap_twl4030_audio_init()
> The function zoom_twl_gpio_setup() references
> the function __init omap_twl4030_audio_init().
> This is often because zoom_twl_gpio_setup lacks a __init 
> annotation or the annotation of omap_twl4030_audio_init is wrong.

For some reason the CONFIG_DEBUG_SECTION_MISMATCH got disabled in my rolling
kernel config...


> These can be fixed with the following patch, but I suspect some
> of these cannot be __init/__initdata if the driver reprobes.
> 
> Can you please check this? I'll hold on sendinf off
> this branch until it's been checked and fixed properly.

I think this is not the correct way. the *_twl_gpio_setup() is called from the
gpio-twl4030 driver's platform_driver probe function which if I'm not mistaken
is not __init.

I think we should remove the __init from the omap_twl4030_audio_init() in
twl-common.c
With this change I do not have section mismatch either.
Russell King - ARM Linux Feb. 5, 2013, 12:30 p.m. UTC | #2
On Mon, Feb 04, 2013 at 11:52:51AM -0800, Tony Lindgren wrote:
> @@ -245,7 +245,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
>  	return 0;
>  }
>  
> -static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
> +static struct twl4030_gpio_platform_data __initdata sdp3430_gpio_data = {
>  	.pulldowns	= BIT(2) | BIT(6) | BIT(8) | BIT(13)
>  				| BIT(16) | BIT(17),
>  	.setup		= sdp3430_twl_gpio_setup,

Seeing platform data marked with __initdata makes me extremely nervous.
Are you _absolutely_ _sure_ that this data either:

(a) gets copied before use, or
(b) is not used after kernel init

?

Normally, platform data is passed via a pointer in struct device to
drivers, and drivers either store a pointer to it, or if the driver is
unbound/rebound, they can access it well after init time.

Certainly marking a function pointed to by platform data as __init looks
very very wrong.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tony Lindgren Feb. 5, 2013, 6:44 p.m. UTC | #3
* Russell King - ARM Linux <linux@arm.linux.org.uk> [130205 04:34]:
> On Mon, Feb 04, 2013 at 11:52:51AM -0800, Tony Lindgren wrote:
> > @@ -245,7 +245,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
> >  	return 0;
> >  }
> >  
> > -static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
> > +static struct twl4030_gpio_platform_data __initdata sdp3430_gpio_data = {
> >  	.pulldowns	= BIT(2) | BIT(6) | BIT(8) | BIT(13)
> >  				| BIT(16) | BIT(17),
> >  	.setup		= sdp3430_twl_gpio_setup,
> 
> Seeing platform data marked with __initdata makes me extremely nervous.
> Are you _absolutely_ _sure_ that this data either:
> 
> (a) gets copied before use, or
> (b) is not used after kernel init
> 
> ?

No, and that's why I said "I suspect some of these cannot be
__init/__initdata" and asked Peter to verify it :)
 
> Normally, platform data is passed via a pointer in struct device to
> drivers, and drivers either store a pointer to it, or if the driver is
> unbound/rebound, they can access it well after init time.

Yes it's not worth adding any copying of it in the twl-common.c.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -223,7 +223,7 @@  static struct omap_tw4030_pdata omap_twl4030_audio_data = {
 	.has_linein	= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT,
 };
 
-static int sdp3430_twl_gpio_setup(struct device *dev,
+static int __init sdp3430_twl_gpio_setup(struct device *dev,
 		unsigned gpio, unsigned ngpio)
 {
 	/* gpio + 0 is "mmc0_cd" (input/IRQ),
@@ -245,7 +245,7 @@  static int sdp3430_twl_gpio_setup(struct device *dev,
 	return 0;
 }
 
-static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
+static struct twl4030_gpio_platform_data __initdata sdp3430_gpio_data = {
 	.pulldowns	= BIT(2) | BIT(6) | BIT(8) | BIT(13)
 				| BIT(16) | BIT(17),
 	.setup		= sdp3430_twl_gpio_setup,
@@ -374,7 +374,7 @@  static struct regulator_init_data sdp3430_vsim = {
 	.consumer_supplies	= sdp3430_vsim_supplies,
 };
 
-static struct twl4030_platform_data sdp3430_twldata = {
+static struct twl4030_platform_data __initdata sdp3430_twldata = {
 	/* platform_data for children goes here */
 	.gpio		= &sdp3430_gpio_data,
 	.keypad		= &sdp3430_kp_data,
--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
@@ -238,7 +238,7 @@  static struct omap_tw4030_pdata omap_twl4030_audio_data = {
 	.has_linein	= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT,
 };
 
-static int zoom_twl_gpio_setup(struct device *dev,
+static int __init zoom_twl_gpio_setup(struct device *dev,
 		unsigned gpio, unsigned ngpio)
 {
 	/* gpio + 0 is "mmc0_cd" (input/IRQ) */
@@ -252,11 +252,11 @@  static int zoom_twl_gpio_setup(struct device *dev,
 	return 0;
 }
 
-static struct twl4030_gpio_platform_data zoom_gpio_data = {
+static struct twl4030_gpio_platform_data __initdata zoom_gpio_data = {
 	.setup		= zoom_twl_gpio_setup,
 };
 
-static struct twl4030_platform_data zoom_twldata = {
+static struct twl4030_platform_data __initdata zoom_twldata = {
 	/* platform_data for children goes here */
 	.gpio		= &zoom_gpio_data,
 	.keypad		= &zoom_kp_twl4030_data,