[MinnowBoard] Problem with boot firmware for MinnowMax version 0.90

Wu, Mike mike.wu at intel.com
Fri Mar 25 02:07:32 UTC 2016


Michael and John are right, when enabling Turbot at 0.82, we added the SPI chip support for W25Q64FV for Turbot and cleaned up some unused/error entries in SPI device data structure. W25Q64FW was replaced at that time. Since you report this, we are considering to add it back. At the same time, as an open source firmware, you also can do this by yourself, check out the file SpiChipDefinitions.h(Vlv2TbltDevicePkg\Library\FlashDeviceLib), modify it and rebuild the image, you will get your own firmware for your board. That is the beauty of open source. :)

Mike Wu


-----Original Message-----
From: elinux-MinnowBoard [mailto:elinux-minnowboard-bounces at lists.elinux.org] On Behalf Of Krau, Michael P
Sent: Friday, March 25, 2016 3:27 AM
To: elinux-minnowboard at lists.elinux.org
Subject: Re: [MinnowBoard] Problem with boot firmware for MinnowMax version 0.90

On a fundamental level the SPI part is an integral part of the system.   Changing the SPI part to another vendor/part ID changed the fundamental nature of the platform, it stopped being a MinnowBoard MAX by definition with that change, and that any of the MinnowBoard Firmware images would work on this new 'platform' was more of a fluke than than that some do not.   Basically, no Firmware engineer would change the SPI part in a system from one manufacturer/part designation to another and expect the previously working firmware to simply work with the new part.    

Explanation:
The SPI part's function on the MinnowBoard is more than just the location of the early stage boot code of the platform.   The SPI contains code and data used by the firmware and later in the software stack, to configure, boot, and record the configuration of the platform.   For the first stages of the boot process, it is only necessary for the processor to have access and the ability to read the SPI part to initiate the boot sequence.  However, as the boot progresses, the firmware begins to use the SPI storage with more advanced methods to meet the additional requirements of the boot process.  

In fact the SPI is treated as a mass storage device (called the firmware volume - or FV), this use of the SPI allows the firmware to use it for multi-purpose, and to partition the data in such a way as to concurrently store programs and data in a file system.  (The drivers that support the Block I/O operations on the Firmware Volume are called Firmware volume block drivers - FVB - note the modules that were running toward the end of your boot log)

Since the FVB drivers are used to read, erase, reprogram the SPI part, it is necessary for the firmware to have a complete understanding of the Flash part installed in the platform.  Each manufacturer, and each part of each manufacturer can be unique.  There are aspects of these part that need to be fully understood to operate successfully against the part.  The part has a size, an organization (how data is stored and retrieved), and methodology (how the part is erased and programmed).   Thus the firmware must be sure that the SPI that is installed in the system is correct to its understanding of the system.  

Bottom line: the SPI part is identified by its self-announcing vendor and part number and compared against the parts the firmware can correctly operate against.  If the part is in the list, then the FVB drivers will use the proper algorithms and continue to boot.  If the part (vendor and part ID) is not in the list, then the firmware has no understanding of the part, and will halt before an incorrect algorithm is used which could do damage to the part or its contents.  This is why your boots failed...  The Winbond W25Q64FW part reports itself as vendor ID 0x56 and  is not an officially supported part on the platform.

For  MinnowBoard Max manufactured by Circuito, the SPI flash is Micron's Numonyx N25Q064A11, whose vendor ID is 0x20.
For  MinnowBoard Turbot manufactured by ADI , the SPI flash is Winbond W25Q64FV, whose vendor ID is reported as 0xEF.

I do wonder why two Winbond parts identify themselves with different vendor ID, but that is an irrelevant curiosity.

So you may ask:  Why does the earlier firmware work on the Winbond W25Q64FW part?  

This is a bit more complicated.  In the earlier days of the MinnowBoard firmware program the list may have contained the Winbond W25Q64FW part.  This may have been a remnant of previous code or from a 'sister product' which was not removed from the list, at the time.  Firmware engineers like most people have to choose their work efforts to get maximum use of both their resources (the SPI part) and their efforts (time to get things one).  So rather than remove the Winbond W25Q64FW from the list, it was left, but as the Max did not use it, the code remained inert'.  However, when the Turbot was developed, a new SPI part was to be supported: The Winbond W25Q64FV.  

So the Winbond W25Q64FW entry was modified to support that part and identify it.  And with that modification the W25Q64FW support went away from the firmware.  When the later firmware versions come up and the FVB drivers load, they look at the W25Q64FW and do not recognize it, causing the assert error. 

The fact that the older versions of the firmware do work with the W25Q64FW part is really the oddity, not that the later versions do not.  

Sincerely,



Michael Krau
 
-----Original Message-----
From: elinux-MinnowBoard [mailto:elinux-minnowboard-bounces at lists.elinux.org] On Behalf Of John Hawley
Sent: Thursday, March 24, 2016 11:09 AM
To: elinux-minnowboard at lists.elinux.org
Subject: Re: [MinnowBoard] Problem with boot firmware for MinnowMax version 0.90

If your flash part doesn't work with anything after 0.81, I'm guessing there's a change in there between what the MinnowBoard MAX and the MinnowBoard Turbot use (as there was a part change there I believe, and the firmware that supported the Turbot is 0.82 I think).  Is there any particular reason to swap it out other than for testing?  I know that Mike would know for sure what the change was and IF it's something that can be easily adjusted.

- John

On 3/24/2016 2:43 AM, AntejaVM wrote:
> Hi,
> 
> Yes we replaced SMD IC flash part, because we have tested if BIOS 
> works with other flashes. I'm using Minnowboard Max.
> Original flash part is Micron and the new that we have soldered is 
> Winbond W25Q64FW .
> 
> Minnowboard Max with Winbond flash don't boot firmware version 0.90, 
> 0.84, 0.83, 0.82.
> Both flash ICs boot firmware version 0.81. 
> 
> Best Regards,
> Anteja
> 
> 
> 
> --
> View this message in context: 
> http://minnowboard.57273.x6.nabble.com/MinnowBoard-Problem-with-boot-f
> irmware-for-MinnowMax-version-0-90-tp2133p2140.html
> Sent from the MinnowBoard mailing list archive at Nabble.com.
> _______________________________________________
> elinux-MinnowBoard mailing list
> elinux-MinnowBoard at lists.elinux.org
> http://lists.elinux.org/mailman/listinfo/elinux-minnowboard
> 
_______________________________________________
elinux-MinnowBoard mailing list
elinux-MinnowBoard at lists.elinux.org
http://lists.elinux.org/mailman/listinfo/elinux-minnowboard
_______________________________________________
elinux-MinnowBoard mailing list
elinux-MinnowBoard at lists.elinux.org
http://lists.elinux.org/mailman/listinfo/elinux-minnowboard


More information about the elinux-MinnowBoard mailing list