[Galaxy Note II, Galaxy S III Developer Discussion ] E:V:A:
@ Entropy512:

Yes, the FW binary in fw.h seem to be for the "VHX" microcontroller. However,

there are two problems that could occur here. One is that the I9300 is using a

different chip and thus probably also using a different µ-Controller, and/or

µC FW version (as we have seen). That's why I asked earlier to check what

exact eMMC they use in these phones. The best way to check is to open and

look! Second, is that if you're on an older chip, that has not been updated,

you'll get hit in the face by the "Catch-22" bug. See below.

Check HERE:

[SIZE=2]Size Cont* Part Number PKG PKG Dimension MMC Version Class
--------------------------------------------------------------------------------------------------
4GB VFX_U KLM4G1HE3F-B00x 153-ball BGA 11.5mm x 13mm eMMC4.41 Class50
8GB VFX_U KLM8G2FE3B-B00x 153-ball BGA 11.5mm x 13mm eMMC4.41 Class100
16GB [B]VHX[/B] KLMAG2GE4A-A00x 169-ball BGA 12mm x 16mm eMMC4.41 Class400
32GB [B]VHX[/B] KLMBG4GE4A-A00x 169-ball BGA 12mm x 16mm eMMC4.41 Class400
64GB [B]VHX[/B] KLMCG8GE4A-A00x 169-ball BGA 12mm x 16mm eMMC4.41 Class400
16GB VHX2 KLMAG2GE2A-A00x 169-ball BGA 12mm x 16mm eMMC 4.5 Class1500
32GB VHX2 KLMBG4GE2A-A00x 169-ball BGA 12mm x 16mm eMMC 4.5 Class1500
64GB VHX2 KLMCG8GE2A-A00x 169-ball BGA 12mm x 16mm eMMC 4.5 Class1500
--------------------------------------------------------------------------------------------------
Cont* = Controller[/SIZE]

The check is done in movinand.c, by comparing the first 4-bytes of the 16-byte

"FW Patch Version" field of the eMMC Smart Report [327:312]. This is located

at offset 0x1c in the fw.bin. It should be noted that the Smart Report data

structure, as specified for the MoviNAND document (in OP) was changed with

newer chips. So this could potentially cause problems for updating, since an

older FW version would also have a different structure without the "FW Patch

Version" data, than the newer version, potentially causing a Catch-22 error!

int mmc_smartreport(void)
{
...
if( !(buff[312] == 'V' && buff[313] == 'H' && buff[314] == 'X' && buff[315] == '0') ) {
printk(KERN_ALERT"FFU It's not a VHX. %x%x%x%x", buff[312], buff[313], buff[314], buff[315]);
return -1;
}
...

Perhaps you can dump your FW binary, so that we can have a look and compare?

The "old" MoviNAND Smart Report structure:

[SIZE=2]#-------------------------------------------------------------------------------
# Smart Report Output Data: (from: http://tiny.cc/2jacsw )
#-------------------------------------------------------------------------------
#DataSlice Width Field Remark
#-------------------------------------------------------------------------------
#[3:0] 4 Error Mode Normal: 0xD2D2D2D2
# OpenFatalError: 0x37373737
# RuntimeFatalError: 0x5C5C5C5C
# MetaBrokenError: 0xE1E1E1E1
#[7:4] 4 Super Block Size [1] Total Size of simultaneously erasable physical blocks
#[11:8] 4 Super Page Size [2] Total Size of simultaneously programmable physical pages
#[15:12] 4 Optimal Write Size [3] Write size at which the device performs best
#[19:16] 4 Number Of Banks Number of banks connecting to each NAND flash
#[23:20] 4 Bank0 Init Bad Block Number of initial defective physical blocks
#[27:24] 4 Bank0 Runtime Bad Block Number of runtime defective physical blocks
#[31:28] 4 Bank0 Remain Reserved Block Number of remain reserved physical blocks
#[35:32] 4 Bank1 Init Bad Block "
#[39:36] 4 Bank1 Runtime Bad Block "
#[43:40] 4 Bank1 Remain Reserved Block "
#[47:44] 4 Bank2 Init Bad Block "
#[51:48] 4 Bank2 Runtime Bad Block "
#[55:52] 4 Bank2 Remain Reserved Block "
#[59:56] 4 Bank3 Init Bad Block "
#[63:60] 4 Bank3 Runtime Bad Block "
#[67:64] 4 Bank3 Reserved Block "
#[71:68] 4 Max. Erase Count Maximum erase count from among all physical blocks
#[75:72] 4 Min. Erase Count Minimum erase count from among all physical blocks
#[79:76] 4 Avg. Erase Count Average erase count of all physical blocks
#***************** CHANGES FROM HERE ON **************************************
#[83:80] 4 Number of ECC Uncorrectable Error
#[143:84] 30x2 ECC Uncorrectable Error Location Physical Block Address of ECC Uncorrectable Error
#[203:144] 30x2 ECC Uncorrectable Error Location Physical Page Offset of ECC Uncorrectable Error
#[219:204] (16) Reserved
#[223:220] 4 Read Reclaim Count Number of Read Reclaim Count
#[511:224] (288) Reserved
#-------------------------------------------------------------------------------
#[1] Number of Channel * N-way Interleaving * physical block size
#[2] Number of Channel * physical page size
#[3] Super Page Size * N-way Interleaving
#-------------------------------------------------------------------------------
[/SIZE]

The "new" structure:

[SIZE=2]...
# [83:80] 4 Read Reclaim Count
# [87:84] 4 Optimal Trim Size
# [119:88] 32 Firmware Hash Code
# [123:120] 4 SLC Erase Count Max.
# [127:124] 4 SLC Erase Count Min.
# [131:128] 4 SLC Erase Count Avg.
# [135:132] 4 MLC Erase Count Max.
# [139:136] 4 MLC Erase Count Min.
# [143:140] 4 MLC Erase Count Avg.
# [147:144] 4 ECC Uncorrectable Errors (ECC_UE)
# [307:148] 10x2x8 ECC_UE Location (physical block address)
# [311:308] 4 Erase Unit Size
# [B][327:312] 16 FW Patch Version[/B]
# [331:328] 4 FCB Scan Result
# [335:332] 4 FTL Open Count
# [511:336] (176) Reserved[/SIZE]