Subject: Re: [PATCH v2] qe: add ability to upload QE firmware

From: Timur Tabi <[email-masked]>
Date: Thu, 06 Dec 2007 09:03:31 -0600

Arnd Bergmann wrote:
> On Thursday 06 December 2007, Timur Tabi wrote:
>>> In that case, I think it
>>> would really be better to just put the blob into the tree and only
>>> have the fw loading code in the kernel instead of duplicating it in the boot
>>> loader.
>> That would require the firmware to present in RAM for all time, since the device 
>> tree cannot be unloaded.
> 
> Yes, that's a backdraw of my approach, but in the case of spidernet, it was only
> an insignificant amount of RAM. Don't know what sizes of RAM and QE firmware
> to expect typically on the machines you care about.

I'm only familiar with the UART microcode, which is relatively small.  I'll add 
this feature to my to-do list.

> Right, so you can't really get around having it in some boot loaders at least.
> IIRC you said that the firmware is only needed for serial output on some chips
> but not on others. What about the case where you don't need it for serial but
> still want to provide it by the firmware, and perhaps use something other than
> U-boot? Is that relevant?

In this particular case, the UART firmware is needed on some chips only because 
those chips are broken in silicon.  AFAIK, only 8323 and 8360 are affected. 
None of the 85xx chips with QE have the broken UART silicon, so they don't need 
this firmware.

The whole point behind having binary firmware blobs is so that *any* OS, 
boot-loader, or even an application can upload firmware without worrying about 
licensing issues.  The code to parse and process the blobs is open source.

There are other firmwares, such as firmware for TCP/IP interworking. 
Unfortunately, I don't have any direct experience with those firmwares, but in 
discussions with QE engineers who have, my approach works.  My hope is that 
every OS that runs on our QE-enabled parts will contain a version of 
qe_upload_firmware().

> I'm not trying to convince you of this if it's completely pointless for
> all your systems, just want to make sure you're aware of this option,
> because spending a few extra code lines on it now may save you some trouble
> if you need this later.

Um, I think I'm a little confused as to what your point is.  My code is just a 
generic QE firmware uploader.

>> Technically, the firmware could be considered a device on the QE, because it's 
>> loaded into I-RAM and it can significantly alter the behavior of the device. 
> 
> Well, it doesn't have any of the standard properties like registers or interrupts
> though.

Well, there are registers for accessing I-RAM.  It's not memory mapped - you 
have to write the I-RAM internal address to one register, and then write the 
data to another register, in order to actually write to I-RAM.

-- 
Timur Tabi
Linux kernel developer at Freescale