Okay, thanks for the reviews.  My hope was to avoid having to add that
feature into each driver, but that's okay.
-Charlie

On Fri, Mar 6, 2015 at 3:33 PM, Marcel Holtmann <[email protected]> wrote:
> Hi Charles,
>
>>>>>>>>>>>> Specifically this was motivated by a situation where we have one
>>>>>>>>>>>> device with a dual-sourced touchscreen. Both use the same driver 
>>>>>>>>>>>> but
>>>>>>>>>>>> have different hardware & fw. Our FW updating software therefore,
>>>>>>>>>>>> needs to be able to update with the correct FW and detect all this 
>>>>>>>>>>>> at
>>>>>>>>>>>> runtime due to a read-only partition (so moving the firmware 
>>>>>>>>>>>> binaries
>>>>>>>>>>>> around isn't really an option)
>>>>>>>>>>>> Here the device has only one touchscreen at a time, but it isn't 
>>>>>>>>>>>> known
>>>>>>>>>>>> until run-time which will be present.
>>>>>>>>>>>>
>>>>>>>>>>>> So in this case the driver is serving the same function in each
>>>>>>>>>>>> situation (running a touchscreen) but may be working with different
>>>>>>>>>>>> hardware.
>>>>>>>>>>>>
>>>>>>>>>>>> Another situation where I've personally wanted this functionality 
>>>>>>>>>>>> is
>>>>>>>>>>>> on a device that uses the same touch driver for both a touchscreen 
>>>>>>>>>>>> and
>>>>>>>>>>>> a touchpad on the same device. If the driver only grabs a copy of 
>>>>>>>>>>>> FW
>>>>>>>>>>>> from, say, /lib/firmware/touch_fw.bin then you either need to move 
>>>>>>>>>>>> the
>>>>>>>>>>>> firmware binaries around on disk to update either device, or have a
>>>>>>>>>>>> change like this that allows you to override which filename it 
>>>>>>>>>>>> loads.
>>>>>>>>>>>> The moving option is not viable if you're using a RO filesystem.
>>>>>>>>>>>
>>>>>>>>>>> what is the actual problem here? We have drivers that load multiple 
>>>>>>>>>>> firmware files and we have drivers that pick a different firmware 
>>>>>>>>>>> depending on some parameters it reads from the device.
>>>>>>>>>>>
>>>>>>>>>>> Seems this is all possible already at the moment with the existing 
>>>>>>>>>>> framework. You just need to update the drivers to operate properly.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I totally agree, this functionality is not novel.  We could have 
>>>>>>>>>> added
>>>>>>>>>> this feature into the specific driver in question, but then we will
>>>>>>>>>> have to do the same thing on all the other drivers we might want to 
>>>>>>>>>> do
>>>>>>>>>> this on.  I guess the real problem that this solves is by adding the
>>>>>>>>>> change here, it allows you to override firmware names for *any* 
>>>>>>>>>> driver
>>>>>>>>>> without having to duplicate the functionality in each one as they 
>>>>>>>>>> come
>>>>>>>>>> up.
>>>>>>>>>>
>>>>>>>>>> For a specific instance, here at ChromiumOS we have devices that use
>>>>>>>>>> Atmel, Cypress, Synaptics, and Elan touchpads and touchscreens that
>>>>>>>>>> all can encounter this issue.  The Atmel driver has a similar version
>>>>>>>>>> of this feature baked into it but the others don't.  We could add a
>>>>>>>>>> fw_filename attribute to each of these drivers, but then it would 
>>>>>>>>>> have
>>>>>>>>>> to be maintained across (at least) four drivers.
>>>>>>>>>
>>>>>>>>> what I am hearing here is that you can not query the hardware and 
>>>>>>>>> figure out which manufacturer it is and with that don't know which 
>>>>>>>>> firmware you need.
>>>>>>>>
>>>>>>>> Right, the drivers in question (bunch of input drivers such as
>>>>>>>> elan_ts, atmel_mxt_ts, etc) might not be able to determine the
>>>>>>>> "proper" configuration to load. Factories quite often swap
>>>>>>>> pin-compatible parts and want to use the same image. Also the parts
>>>>>>>> can be swapped out during RMA while keeping the same image. Userspace
>>>>>>>> is able to query magnitude of sources and make an informed decision
>>>>>>>> that it then communicates to the kernel.
>>>>>>>>
>>>>>>>>> However if that is the case, then this seems to be something that 
>>>>>>>>> should be solved with device tree.
>>>>>>>>
>>>>>>>> Why are we making device tree a hard dependency here?
>>>>>>>
>>>>>>> device tree is suppose to describe the hardware in your devices. If you 
>>>>>>> can not determinate your hardware by enumeration or other means, then 
>>>>>>> it should be done via device tree. Seems the perfect fit here.
>>>>>>
>>>>>> And if I do not have device tree?
>>>>>
>>>>> so if you do not have an enumeration method for your hardware, then I 
>>>>> assume you most likely have device tree in one form or another.
>>>>>
>>>>> And even if you really don't, nothing is stopping you from adding device 
>>>>> tree.
>>>>
>>>> We have ACPI (for example) and no, it is not 5.0.
>>>
>>> It depends if the driver can determinate what the device is from
>>> ACPI. If yes, you can just load the corresponding fw image
>>> for the current device. Otherwise the ACPI can't help your problem.
>>
>> We run into the situation where to very similar devices (all the same
>> HW models) need to ship with the same OS image.  One device may have a
>> pin-for-pin compatable, 2nd source version of some piece of hardware.
>> The device tree/etc is all the same because the two slighty different
>> parts are connected the same way (same i2c address, or similar).
>>
>> The only way to tell them apart is by talking to the driver once the
>> device is already up and running.  In our motivating case it's reading
>> a sysfs attribute to get a manufacturer ID, but it could be anything
>> similar.
>>
>> If you want to be able to put a different FW on these two very similar
>> devices (that can only be differentiated once they're up and running)
>> I think this might be the best way to do it -- apart from altering the
>> driver for every part that needs this kind of special treatment.
>
> if you can get a manufacturer ID over sysfs, then you can obviously pick the 
> right firmware from within the driver. No need to play any tricks in 
> userspace or the request_firmware interface.
>
> Regards
>
> Marcel
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to