Re: Can request_firmware be called from a platform_driver ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

HI Mike,

On Wed, Apr 18, 2012 at 1:24 PM, Holmes, Michael A (Mike)
<Mike.Holmes@xxxxxxx> wrote:
> -----Original Message-----
> From: Dave Hylands [mailto:dhylands@xxxxxxxxx]
> Sent: Wednesday, April 18, 2012 3:15 PM
> To: Holmes, Michael A (Mike)
> Cc: kernelnewbies@xxxxxxxxxxxxxxxxx
> Subject: Re: Can request_firmware be called from a platform_driver ?
> Hi Mike,
> On Wed, Apr 18, 2012 at 11:07 AM, Holmes, Michael A (Mike)
> <Mike.Holmes@xxxxxxx> wrote:
>> Hi
>> I have a fully working system to which I want to add the request firmware
>> mechanism to an existing platform driver I have working.
>> I instrumented mdev in busybox 1.5.1 and in firmware_class.c 2.6.35 so that
>> I could figure this out.
>> What I see with firmware_request() is that the kernel makes the firmware
>> request and does not find any firmware and mdev sees nothing.
>> However if I change my code to do request_firmare_nowait(), the entire
>> system comes up and about 30seconds in the timeout calls my kernel side
>> continue for request_firmare_nowait() and I DO now see my request handled by
>> mdev, however it is a REMOVE request not the ADD request.
>> All this makes me think that platform drivers exist before the hotplug
>> mechanism is able to operate, is this true ?
> Well, request_firmware is ultimately serviced by a user-space process.
> So platform drivers compiled statically into the kernel get
> initialized long before user-space starts.
> Platform drivers compiled as modules will get the firmware loaded much
> more quickly after loading the module.
> Thanks Dave,
> Currently in make menuconfig I put '*' against it to compile it into the kernel, I made it an 'm' so that it is made as a module.
> For modules made outside the tree I call modprobe to load them, but I never made a module in the tree before, I don't know how to get its init called.
> When it was compiled in, I called the init from my machine init directly in my mach-lcp/arch.c via platform_device_register()

As far as init being called, this is identical for modules compiled as
part of the kernel as it is for modules compiled out of tree.

Normally, you would use module_init to specify a function to be
called. This function will be called when a module is loaded
(regardless of whether its compiled in or out of tree).

For modules statically compiled into the kernel, module_init becomes
the same as device_initcall.

For code compiled as a module, all of the various xxx_initcall stuff
gets translated to module_init
See: include/linux/init.h

Dave Hylands
Shuswap, BC, Canada

Kernelnewbies mailing list

[Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Networking]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

Add to Google Powered by Linux