diff mbox

[HELP/RFC] Moving ppc8xx microcode patch from micropatch.c to firmware

Message ID 5592FE50.2080000@c-s.fr (mailing list archive)
State RFC
Delegated to: Scott Wood
Headers show

Commit Message

Christophe Leroy June 30, 2015, 8:38 p.m. UTC
I'm trying to move the 3 microcode patches included in 
arch/powerpc/sysdev/micropatch.c into the firmware directory in order to 
use request_firmware() and then be able to add additional micropatch 
that I need to relocate SMC2 on my MPC885.

I have written the below patch in order to test the principle, but the 
firmware never gets included in my kernel, allthough I have set the 
below CONFIG items:

# CONFIG_NO_UCODE_PATCH is not set
CONFIG_USB_SOF_UCODE_PATCH=y
# CONFIG_I2C_SPI_UCODE_PATCH is not set
# CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set
CONFIG_UCODE_PATCH=y
#
# Generic Driver Options
#
# CONFIG_UEVENT_HELPER is not set
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_STANDALONE is not set
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y

Can anybody help in finding what's wrong there ?

Christophe

---
  arch/powerpc/sysdev/micropatch.c         | 655 
++-----------------------------
  firmware/Makefile                        |   3 +
  firmware/freescale/i2c_spi.bin.ihex      | 257 ++++++++++++
  firmware/freescale/i2c_spi_smc1.bin.ihex | 257 ++++++++++++
  firmware/freescale/usb_sof.bin.ihex      | 513 ++++++++++++++++++++++++
  5 files changed, 1065 insertions(+), 620 deletions(-)
  create mode 100644 firmware/freescale/i2c_spi.bin.ihex
  create mode 100644 firmware/freescale/i2c_spi_smc1.bin.ihex
  create mode 100644 firmware/freescale/usb_sof.bin.ihex

Comments

Christophe Leroy July 1, 2015, 7:47 a.m. UTC | #1
Le 30/06/2015 22:38, christophe leroy a écrit :
> I'm trying to move the 3 microcode patches included in 
> arch/powerpc/sysdev/micropatch.c into the firmware directory in order 
> to use request_firmware() and then be able to add additional 
> micropatch that I need to relocate SMC2 on my MPC885.
I've now been able to get it compiled in, was due to Makefile item 
written fw_shipped- instead of fw-shipped-

I'm now facing an Oops for NULL pointer in kmem_cache_alloc() after a 
call to kzalloc(sizeof(*firmware), GFP_KERNEL) in 
_request_firmware_prepare() (drivers/base/firmware_class.c)

Is that due to cpm_reset() being called too early ? Shouldn't kzalloc() 
allocate memory from the bootmem pool in that case ?

[    0.000000] Unable to handle kernel paging request for data at 
address 0x00000000
[    0.000000] Faulting instruction address: 0xc00a77cc
[    0.000000] Oops: Kernel access of bad area, sig: 11 [#1]
[    0.000000] PREEMPT CMPC885
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 
3.18.17-local-knld-998-g9c4c6b6-svn-dirty #1022
[    0.000000] task: c04dc3d0 ti: c04fc000 task.ti: c04fc000
[    0.000000] NIP: c00a77cc LR: c01bc3b8 CTR: 00000000
[    0.000000] REGS: c04fde20 TRAP: 0300   Not tainted 
(3.18.17-local-knld-998-g9c4c6b6-svn-dirty)
[    0.000000] MSR: 00001032 <ME,IR,DR,RI>  CR: 93d55d35  XER: a000fb40
[    0.000000] DAR: 00000000 DSISR: c0000000
GPR00: c01bc3b8 c04fded0 c04dc3d0 00000000 000080d0 00000000 00000009 
01ffffff
GPR08: 00000000 00200002 c0510000 00000158 53d55d39 00000000 00000000 
07ff94e8
GPR16: 00000000 07bb5d70 00000000 07ff81f4 c0534468 c04fdf68 00000000 
00000009
GPR24: 07ffb3a0 00000000 00000001 000080d0 07ffb3a0 00000000 c04fc000 
c0410878
[    0.000000] NIP [c00a77cc] kmem_cache_alloc+0x28/0x120
[    0.000000] LR [c01bc3b8] _request_firmware+0x58/0xa14
[    0.000000] Call Trace:
[    0.000000] [c04fded0] [c045f588] ___alloc_bootmem_nopanic+0x34/0x64 
(unreliable)
[    0.000000] [c04fdef0] [c01bc3b8] _request_firmware+0x58/0xa14
[    0.000000] [c04fdf60] [c0458678] cpm_load_patch+0x34/0xac
[    0.000000] [c04fdf80] [c0458620] cpm_reset+0x5c/0x80
[    0.000000] [c04fdf90] [c0458c1c] cmpc885_setup_arch+0x10/0x30
[    0.000000] [c04fdfa0] [c0457cbc] setup_arch+0x130/0x168
[    0.000000] [c04fdfb0] [c045469c] start_kernel+0x84/0x37c
[    0.000000] [c04fdff0] [c0002214] start_here+0x38/0x98
[    0.000000] Instruction dump:
[    0.000000] 7c832378 4e800020 7c0802a6 9421ffe0 bf61000c 90010024 
7c7d1b78 7c9b2378
[    0.000000] 543e0024 813e000c 39290001 913e000c <83fd0000> 839f0004 
813e000c 3929ffff
[    0.000000] ---[ end trace dc8fa200cb88537f ]---



>
> I have written the below patch in order to test the principle, but the 
> firmware never gets included in my kernel, allthough I have set the 
> below CONFIG items:
>
> # CONFIG_NO_UCODE_PATCH is not set
> CONFIG_USB_SOF_UCODE_PATCH=y
> # CONFIG_I2C_SPI_UCODE_PATCH is not set
> # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set
> CONFIG_UCODE_PATCH=y
> #
> # Generic Driver Options
> #
> # CONFIG_UEVENT_HELPER is not set
> CONFIG_DEVTMPFS=y
> CONFIG_DEVTMPFS_MOUNT=y
> # CONFIG_STANDALONE is not set
> # CONFIG_PREVENT_FIRMWARE_BUILD is not set
> CONFIG_FW_LOADER=y
> CONFIG_FIRMWARE_IN_KERNEL=y
> CONFIG_EXTRA_FIRMWARE=""
> CONFIG_FW_LOADER_USER_HELPER=y
> CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
>
> Can anybody help in finding what's wrong there ?
>
> Christophe
>
> ---
>  arch/powerpc/sysdev/micropatch.c         | 655 
> ++-----------------------------
>  firmware/Makefile                        |   3 +
>  firmware/freescale/i2c_spi.bin.ihex      | 257 ++++++++++++
>  firmware/freescale/i2c_spi_smc1.bin.ihex | 257 ++++++++++++
>  firmware/freescale/usb_sof.bin.ihex      | 513 ++++++++++++++++++++++++
>  5 files changed, 1065 insertions(+), 620 deletions(-)
>  create mode 100644 firmware/freescale/i2c_spi.bin.ihex
>  create mode 100644 firmware/freescale/i2c_spi_smc1.bin.ihex
>  create mode 100644 firmware/freescale/usb_sof.bin.ihex
>
> diff --git a/arch/powerpc/sysdev/micropatch.c 
> b/arch/powerpc/sysdev/micropatch.c
> index 6727dc5..c24780c 100644
> --- a/arch/powerpc/sysdev/micropatch.c
> +++ b/arch/powerpc/sysdev/micropatch.c
> @@ -12,6 +12,8 @@
>  #include <linux/string.h>
>  #include <linux/mm.h>
>  #include <linux/interrupt.h>
> +#include <linux/firmware.h>
> +#include <linux/module.h>
>  #include <asm/irq.h>
>  #include <asm/page.h>
>  #include <asm/pgtable.h>
> @@ -19,652 +21,69 @@
>  #include <asm/cpm.h>
>  #include <asm/cpm1.h>
>
> -/*
> - * I2C/SPI relocation patch arrays.
> - */
> -
> -#ifdef CONFIG_I2C_SPI_UCODE_PATCH
> -
> -static uint patch_2000[] __initdata = {
> -    0x7FFFEFD9,
> -    0x3FFD0000,
> -    0x7FFB49F7,
> -    0x7FF90000,
> -    0x5FEFADF7,
> -    0x5F89ADF7,
> -    0x5FEFAFF7,
> -    0x5F89AFF7,
> -    0x3A9CFBC8,
> -    0xE7C0EDF0,
> -    0x77C1E1BB,
> -    0xF4DC7F1D,
> -    0xABAD932F,
> -    0x4E08FDCF,
> -    0x6E0FAFF8,
> -    0x7CCF76CF,
> -    0xFD1FF9CF,
> -    0xABF88DC6,
> -    0xAB5679F7,
> -    0xB0937383,
> -    0xDFCE79F7,
> -    0xB091E6BB,
> -    0xE5BBE74F,
> -    0xB3FA6F0F,
> -    0x6FFB76CE,
> -    0xEE0DF9CF,
> -    0x2BFBEFEF,
> -    0xCFEEF9CF,
> -    0x76CEAD24,
> -    0x90B2DF9A,
> -    0x7FDDD0BF,
> -    0x4BF847FD,
> -    0x7CCF76CE,
> -    0xCFEF7E1F,
> -    0x7F1D7DFD,
> -    0xF0B6EF71,
> -    0x7FC177C1,
> -    0xFBC86079,
> -    0xE722FBC8,
> -    0x5FFFDFFF,
> -    0x5FB2FFFB,
> -    0xFBC8F3C8,
> -    0x94A67F01,
> -    0x7F1D5F39,
> -    0xAFE85F5E,
> -    0xFFDFDF96,
> -    0xCB9FAF7D,
> -    0x5FC1AFED,
> -    0x8C1C5FC1,
> -    0xAFDD5FC3,
> -    0xDF9A7EFD,
> -    0xB0B25FB2,
> -    0xFFFEABAD,
> -    0x5FB2FFFE,
> -    0x5FCE600B,
> -    0xE6BB600B,
> -    0x5FCEDFC6,
> -    0x27FBEFDF,
> -    0x5FC8CFDE,
> -    0x3A9CE7C0,
> -    0xEDF0F3C8,
> -    0x7F0154CD,
> -    0x7F1D2D3D,
> -    0x363A7570,
> -    0x7E0AF1CE,
> -    0x37EF2E68,
> -    0x7FEE10EC,
> -    0xADF8EFDE,
> -    0xCFEAE52F,
> -    0x7D0FE12B,
> -    0xF1CE5F65,
> -    0x7E0A4DF8,
> -    0xCFEA5F72,
> -    0x7D0BEFEE,
> -    0xCFEA5F74,
> -    0xE522EFDE,
> -    0x5F74CFDA,
> -    0x0B627385,
> -    0xDF627E0A,
> -    0x30D8145B,
> -    0xBFFFF3C8,
> -    0x5FFFDFFF,
> -    0xA7F85F5E,
> -    0xBFFE7F7D,
> -    0x10D31450,
> -    0x5F36BFFF,
> -    0xAF785F5E,
> -    0xBFFDA7F8,
> -    0x5F36BFFE,
> -    0x77FD30C0,
> -    0x4E08FDCF,
> -    0xE5FF6E0F,
> -    0xAFF87E1F,
> -    0x7E0FFD1F,
> -    0xF1CF5F1B,
> -    0xABF80D5E,
> -    0x5F5EFFEF,
> -    0x79F730A2,
> -    0xAFDD5F34,
> -    0x47F85F34,
> -    0xAFED7FDD,
> -    0x50B24978,
> -    0x47FD7F1D,
> -    0x7DFD70AD,
> -    0xEF717EC1,
> -    0x6BA47F01,
> -    0x2D267EFD,
> -    0x30DE5F5E,
> -    0xFFFD5F5E,
> -    0xFFEF5F5E,
> -    0xFFDF0CA0,
> -    0xAFED0A9E,
> -    0xAFDD0C3A,
> -    0x5F3AAFBD,
> -    0x7FBDB082,
> -    0x5F8247F8
> -};
> -
> -static uint patch_2f00[] __initdata = {
> -    0x3E303430,
> -    0x34343737,
> -    0xABF7BF9B,
> -    0x994B4FBD,
> -    0xBD599493,
> -    0x349FFF37,
> -    0xFB9B177D,
> -    0xD9936956,
> -    0xBBFDD697,
> -    0xBDD2FD11,
> -    0x31DB9BB3,
> -    0x63139637,
> -    0x93733693,
> -    0x193137F7,
> -    0x331737AF,
> -    0x7BB9B999,
> -    0xBB197957,
> -    0x7FDFD3D5,
> -    0x73B773F7,
> -    0x37933B99,
> -    0x1D115316,
> -    0x99315315,
> -    0x31694BF4,
> -    0xFBDBD359,
> -    0x31497353,
> -    0x76956D69,
> -    0x7B9D9693,
> -    0x13131979,
> -    0x79376935
> -};
> -#endif
> -
> -/*
> - * I2C/SPI/SMC1 relocation patch arrays.
> - */
> -
> -#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
> +MODULE_FIRMWARE("freescale/i2c_spi.bin");
> +MODULE_FIRMWARE("freescale/i2c_spi_smc1.bin");
> +MODULE_FIRMWARE("freescale/usb_sof.bin");
>
> -static uint patch_2000[] __initdata = {
> -    0x3fff0000,
> -    0x3ffd0000,
> -    0x3ffb0000,
> -    0x3ff90000,
> -    0x5f13eff8,
> -    0x5eb5eff8,
> -    0x5f88adf7,
> -    0x5fefadf7,
> -    0x3a9cfbc8,
> -    0x77cae1bb,
> -    0xf4de7fad,
> -    0xabae9330,
> -    0x4e08fdcf,
> -    0x6e0faff8,
> -    0x7ccf76cf,
> -    0xfdaff9cf,
> -    0xabf88dc8,
> -    0xab5879f7,
> -    0xb0925d8d,
> -    0xdfd079f7,
> -    0xb090e6bb,
> -    0xe5bbe74f,
> -    0x9e046f0f,
> -    0x6ffb76ce,
> -    0xee0cf9cf,
> -    0x2bfbefef,
> -    0xcfeef9cf,
> -    0x76cead23,
> -    0x90b3df99,
> -    0x7fddd0c1,
> -    0x4bf847fd,
> -    0x7ccf76ce,
> -    0xcfef77ca,
> -    0x7eaf7fad,
> -    0x7dfdf0b7,
> -    0xef7a7fca,
> -    0x77cafbc8,
> -    0x6079e722,
> -    0xfbc85fff,
> -    0xdfff5fb3,
> -    0xfffbfbc8,
> -    0xf3c894a5,
> -    0xe7c9edf9,
> -    0x7f9a7fad,
> -    0x5f36afe8,
> -    0x5f5bffdf,
> -    0xdf95cb9e,
> -    0xaf7d5fc3,
> -    0xafed8c1b,
> -    0x5fc3afdd,
> -    0x5fc5df99,
> -    0x7efdb0b3,
> -    0x5fb3fffe,
> -    0xabae5fb3,
> -    0xfffe5fd0,
> -    0x600be6bb,
> -    0x600b5fd0,
> -    0xdfc827fb,
> -    0xefdf5fca,
> -    0xcfde3a9c,
> -    0xe7c9edf9,
> -    0xf3c87f9e,
> -    0x54ca7fed,
> -    0x2d3a3637,
> -    0x756f7e9a,
> -    0xf1ce37ef,
> -    0x2e677fee,
> -    0x10ebadf8,
> -    0xefdecfea,
> -    0xe52f7d9f,
> -    0xe12bf1ce,
> -    0x5f647e9a,
> -    0x4df8cfea,
> -    0x5f717d9b,
> -    0xefeecfea,
> -    0x5f73e522,
> -    0xefde5f73,
> -    0xcfda0b61,
> -    0x5d8fdf61,
> -    0xe7c9edf9,
> -    0x7e9a30d5,
> -    0x1458bfff,
> -    0xf3c85fff,
> -    0xdfffa7f8,
> -    0x5f5bbffe,
> -    0x7f7d10d0,
> -    0x144d5f33,
> -    0xbfffaf78,
> -    0x5f5bbffd,
> -    0xa7f85f33,
> -    0xbffe77fd,
> -    0x30bd4e08,
> -    0xfdcfe5ff,
> -    0x6e0faff8,
> -    0x7eef7e9f,
> -    0xfdeff1cf,
> -    0x5f17abf8,
> -    0x0d5b5f5b,
> -    0xffef79f7,
> -    0x309eafdd,
> -    0x5f3147f8,
> -    0x5f31afed,
> -    0x7fdd50af,
> -    0x497847fd,
> -    0x7f9e7fed,
> -    0x7dfd70a9,
> -    0xef7e7ece,
> -    0x6ba07f9e,
> -    0x2d227efd,
> -    0x30db5f5b,
> -    0xfffd5f5b,
> -    0xffef5f5b,
> -    0xffdf0c9c,
> -    0xafed0a9a,
> -    0xafdd0c37,
> -    0x5f37afbd,
> -    0x7fbdb081,
> -    0x5f8147f8,
> -    0x3a11e710,
> -    0xedf0ccdd,
> -    0xf3186d0a,
> -    0x7f0e5f06,
> -    0x7fedbb38,
> -    0x3afe7468,
> -    0x7fedf4fc,
> -    0x8ffbb951,
> -    0xb85f77fd,
> -    0xb0df5ddd,
> -    0xdefe7fed,
> -    0x90e1e74d,
> -    0x6f0dcbf7,
> -    0xe7decfed,
> -    0xcb74cfed,
> -    0xcfeddf6d,
> -    0x91714f74,
> -    0x5dd2deef,
> -    0x9e04e7df,
> -    0xefbb6ffb,
> -    0xe7ef7f0e,
> -    0x9e097fed,
> -    0xebdbeffa,
> -    0xeb54affb,
> -    0x7fea90d7,
> -    0x7e0cf0c3,
> -    0xbffff318,
> -    0x5fffdfff,
> -    0xac59efea,
> -    0x7fce1ee5,
> -    0xe2ff5ee1,
> -    0xaffbe2ff,
> -    0x5ee3affb,
> -    0xf9cc7d0f,
> -    0xaef8770f,
> -    0x7d0fb0c6,
> -    0xeffbbfff,
> -    0xcfef5ede,
> -    0x7d0fbfff,
> -    0x5ede4cf8,
> -    0x7fddd0bf,
> -    0x49f847fd,
> -    0x7efdf0bb,
> -    0x7fedfffd,
> -    0x7dfdf0b7,
> -    0xef7e7e1e,
> -    0x5ede7f0e,
> -    0x3a11e710,
> -    0xedf0ccab,
> -    0xfb18ad2e,
> -    0x1ea9bbb8,
> -    0x74283b7e,
> -    0x73c2e4bb,
> -    0x2ada4fb8,
> -    0xdc21e4bb,
> -    0xb2a1ffbf,
> -    0x5e2c43f8,
> -    0xfc87e1bb,
> -    0xe74ffd91,
> -    0x6f0f4fe8,
> -    0xc7ba32e2,
> -    0xf396efeb,
> -    0x600b4f78,
> -    0xe5bb760b,
> -    0x53acaef8,
> -    0x4ef88b0e,
> -    0xcfef9e09,
> -    0xabf8751f,
> -    0xefef5bac,
> -    0x741f4fe8,
> -    0x751e760d,
> -    0x7fdbf081,
> -    0x741cafce,
> -    0xefcc7fce,
> -    0x751e70ac,
> -    0x741ce7bb,
> -    0x3372cfed,
> -    0xafdbefeb,
> -    0xe5bb760b,
> -    0x53f2aef8,
> -    0xafe8e7eb,
> -    0x4bf8771e,
> -    0x7e247fed,
> -    0x4fcbe2cc,
> -    0x7fbc30a9,
> -    0x7b0f7a0f,
> -    0x34d577fd,
> -    0x308b5db7,
> -    0xde553e5f,
> -    0xaf78741f,
> -    0x741f30f0,
> -    0xcfef5e2c,
> -    0x741f3eac,
> -    0xafb8771e,
> -    0x5e677fed,
> -    0x0bd3e2cc,
> -    0x741ccfec,
> -    0xe5ca53cd,
> -    0x6fcb4f74,
> -    0x5dadde4b,
> -    0x2ab63d38,
> -    0x4bb3de30,
> -    0x751f741c,
> -    0x6c42effa,
> -    0xefea7fce,
> -    0x6ffc30be,
> -    0xefec3fca,
> -    0x30b3de2e,
> -    0xadf85d9e,
> -    0xaf7daefd,
> -    0x5d9ede2e,
> -    0x5d9eafdd,
> -    0x761f10ac,
> -    0x1da07efd,
> -    0x30adfffe,
> -    0x4908fb18,
> -    0x5fffdfff,
> -    0xafbb709b,
> -    0x4ef85e67,
> -    0xadf814ad,
> -    0x7a0f70ad,
> -    0xcfef50ad,
> -    0x7a0fde30,
> -    0x5da0afed,
> -    0x3c12780f,
> -    0xefef780f,
> -    0xefef790f,
> -    0xa7f85e0f,
> -    0xffef790f,
> -    0xefef790f,
> -    0x14adde2e,
> -    0x5d9eadfd,
> -    0x5e2dfffb,
> -    0xe79addfd,
> -    0xeff96079,
> -    0x607ae79a,
> -    0xddfceff9,
> -    0x60795dff,
> -    0x607acfef,
> -    0xefefefdf,
> -    0xefbfef7f,
> -    0xeeffedff,
> -    0xebffe7ff,
> -    0xafefafdf,
> -    0xafbfaf7f,
> -    0xaeffadff,
> -    0xabffa7ff,
> -    0x6fef6fdf,
> -    0x6fbf6f7f,
> -    0x6eff6dff,
> -    0x6bff67ff,
> -    0x2fef2fdf,
> -    0x2fbf2f7f,
> -    0x2eff2dff,
> -    0x2bff27ff,
> -    0x4e08fd1f,
> -    0xe5ff6e0f,
> -    0xaff87eef,
> -    0x7e0ffdef,
> -    0xf11f6079,
> -    0xabf8f542,
> -    0x7e0af11c,
> -    0x37cfae3a,
> -    0x7fec90be,
> -    0xadf8efdc,
> -    0xcfeae52f,
> -    0x7d0fe12b,
> -    0xf11c6079,
> -    0x7e0a4df8,
> -    0xcfea5dc4,
> -    0x7d0befec,
> -    0xcfea5dc6,
> -    0xe522efdc,
> -    0x5dc6cfda,
> -    0x4e08fd1f,
> -    0x6e0faff8,
> -    0x7c1f761f,
> -    0xfdeff91f,
> -    0x6079abf8,
> -    0x761cee24,
> -    0xf91f2bfb,
> -    0xefefcfec,
> -    0xf91f6079,
> -    0x761c27fb,
> -    0xefdf5da7,
> -    0xcfdc7fdd,
> -    0xd09c4bf8,
> -    0x47fd7c1f,
> -    0x761ccfcf,
> -    0x7eef7fed,
> -    0x7dfdf093,
> -    0xef7e7f1e,
> -    0x771efb18,
> -    0x6079e722,
> -    0xe6bbe5bb,
> -    0xae0ae5bb,
> -    0x600bae85,
> -    0xe2bbe2bb,
> -    0xe2bbe2bb,
> -    0xaf02e2bb,
> -    0xe2bb2ff9,
> -    0x6079e2bb
> -};
> -
> -static uint patch_2f00[] __initdata = {
> -    0x30303030,
> -    0x3e3e3434,
> -    0xabbf9b99,
> -    0x4b4fbdbd,
> -    0x59949334,
> -    0x9fff37fb,
> -    0x9b177dd9,
> -    0x936956bb,
> -    0xfbdd697b,
> -    0xdd2fd113,
> -    0x1db9f7bb,
> -    0x36313963,
> -    0x79373369,
> -    0x3193137f,
> -    0x7331737a,
> -    0xf7bb9b99,
> -    0x9bb19795,
> -    0x77fdfd3d,
> -    0x573b773f,
> -    0x737933f7,
> -    0xb991d115,
> -    0x31699315,
> -    0x31531694,
> -    0xbf4fbdbd,
> -    0x35931497,
> -    0x35376956,
> -    0xbd697b9d,
> -    0x96931313,
> -    0x19797937,
> -    0x6935af78,
> -    0xb9b3baa3,
> -    0xb8788683,
> -    0x368f78f7,
> -    0x87778733,
> -    0x3ffffb3b,
> -    0x8e8f78b8,
> -    0x1d118e13,
> -    0xf3ff3f8b,
> -    0x6bd8e173,
> -    0xd1366856,
> -    0x68d1687b,
> -    0x3daf78b8,
> -    0x3a3a3f87,
> -    0x8f81378f,
> -    0xf876f887,
> -    0x77fd8778,
> -    0x737de8d6,
> -    0xbbf8bfff,
> -    0xd8df87f7,
> -    0xfd876f7b,
> -    0x8bfff8bd,
> -    0x8683387d,
> -    0xb873d87b,
> -    0x3b8fd7f8,
> -    0xf7338883,
> -    0xbb8ee1f8,
> -    0xef837377,
> -    0x3337b836,
> -    0x817d11f8,
> -    0x7378b878,
> -    0xd3368b7d,
> -    0xed731b7d,
> -    0x833731f3,
> -    0xf22f3f23
> -};
> -
> -static uint patch_2e00[] __initdata = {
> -    0x27eeeeee,
> -    0xeeeeeeee,
> -    0xeeeeeeee,
> -    0xeeeeeeee,
> -    0xee4bf4fb,
> -    0xdbd259bb,
> -    0x1979577f,
> -    0xdfd2d573,
> -    0xb773f737,
> -    0x4b4fbdbd,
> -    0x25b9b177,
> -    0xd2d17376,
> -    0x956bbfdd,
> -    0x697bdd2f,
> -    0xff9f79ff,
> -    0xff9ff22f
> -};
> -#endif
> +static int cpm_copy_firmware(unsigned char *dpmem, char *file)
> +{
> +    const struct firmware *fw;
> +    uint *src;
> +    int i;
>
> -/*
> - *  USB SOF patch arrays.
> - */
> +    if (request_firmware_direct(&fw, file, NULL)) {
> +        printk("%s microcode patch not found\n", file);
> +        return -1;
> +    }
>
> -#ifdef CONFIG_USB_SOF_UCODE_PATCH
> +    for (i = 0, src = (uint*)fw->data; i < fw->size >> 2; i++)
> +        *dpmem++ = *src++;
>
> -static uint patch_2000[] __initdata = {
> -    0x7fff0000,
> -    0x7ffd0000,
> -    0x7ffb0000,
> -    0x49f7ba5b,
> -    0xba383ffb,
> -    0xf9b8b46d,
> -    0xe5ab4e07,
> -    0xaf77bffe,
> -    0x3f7bbf79,
> -    0xba5bba38,
> -    0xe7676076,
> -    0x60750000
> -};
> -
> -static uint patch_2f00[] __initdata = {
> -    0x3030304c,
> -    0xcab9e441,
> -    0xa1aaf220
> -};
> -#endif
> +    return 0;
> +}
>
>  void __init cpm_load_patch(cpm8xx_t *cp)
>  {
> -    volatile uint        *dp;        /* Dual-ported RAM. */
>      volatile cpm8xx_t    *commproc;
>  #if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
>      defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
>      volatile iic_t        *iip;
>      volatile struct spi_pram *spp;
> +    int    i;
>  #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
>      volatile smc_uart_t    *smp;
>  #endif
>  #endif
> -    int    i;
>
>      commproc = cp;
>
> -#ifdef CONFIG_USB_SOF_UCODE_PATCH
>      commproc->cp_rccr = 0;
>
> -    dp = (uint *)(commproc->cp_dpmem);
> -    for (i=0; i<(sizeof(patch_2000)/4); i++)
> -        *dp++ = patch_2000[i];
> -
> -    dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
> -    for (i=0; i<(sizeof(patch_2f00)/4); i++)
> -        *dp++ = patch_2f00[i];
> +#ifdef CONFIG_USB_SOF_UCODE_PATCH
> +    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
> +        "freescale/usb_sof.bin"))
> +        return;
>
>      commproc->cp_rccr = 0x0009;
>
>      printk("USB SOF microcode patch installed\n");
>  #endif /* CONFIG_USB_SOF_UCODE_PATCH */
>
> -#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
> -    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
> +#ifdef CONFIG_I2C_SPI_UCODE_PATCH
> +    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
> +        "freescale/i2c_spi.bin"))
> +        return;
>
> -    commproc->cp_rccr = 0;
> +#endif
> +#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
> +    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
> +        "freescale/i2c_spi_smc1.bin"))
> +        return;
>
> -    dp = (uint *)(commproc->cp_dpmem);
> -    for (i=0; i<(sizeof(patch_2000)/4); i++)
> -        *dp++ = patch_2000[i];
> +#endif
>
> -    dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
> -    for (i=0; i<(sizeof(patch_2f00)/4); i++)
> -        *dp++ = patch_2f00[i];
> +#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
> +    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
>
>      iip = (iic_t *)&commproc->cp_dparam[PROFF_IIC];
>  # define RPBASE 0x0500
> @@ -688,10 +107,6 @@ void __init cpm_load_patch(cpm8xx_t *cp)
>
>  # if defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
>
> -    dp = (uint *)&(commproc->cp_dpmem[0x0e00]);
> -    for (i=0; i<(sizeof(patch_2e00)/4); i++)
> -        *dp++ = patch_2e00[i];
> -
>      commproc->cp_cpmcr1 = 0x8080;
>      commproc->cp_cpmcr2 = 0x808a;
>      commproc->cp_cpmcr3 = 0x8028;
> diff --git a/firmware/Makefile b/firmware/Makefile
> index e297e1b..1454d27 100644
> --- a/firmware/Makefile
> +++ b/firmware/Makefile
> @@ -135,6 +135,9 @@ fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += 
> keyspan_pda/xircom_pgs.fw
>  fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
>  fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
>  fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
> +fw_shipped-$(CONFIG_USB_SOF_UCODE_PATCH) += freescale/usb_sof.bin
> +fw_shipped-$(CONFIG_I2C_SPI_UCODE_PATCH) += freescale/i2c_spi.bin
> +fw_shipped-$(CONFIG_I2C_SPI_SMC1_UCODE_PATCH) += 
> freescale/i2c_spi_smc1.bin
>
>  fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
>
> diff --git a/firmware/freescale/i2c_spi.bin.ihex 
> b/firmware/freescale/i2c_spi.bin.ihex
> new file mode 100644
> index 0000000..d9fe26a
> --- /dev/null
> +++ b/firmware/freescale/i2c_spi.bin.ihex
> @@ -0,0 +1,257 @@
> +:100000007FFFEFD93FFD00007FFB49F77FF900003C
> +:100010005FEFADF75F89ADF75FEFAFF75F89AFF7E0
> +:100020003A9CFBC8E7C0EDF077C1E1BBF4DC7F1D73
> +:10003000ABAD932F4E08FDCF6E0FAFF87CCF76CFD0
> +:10004000FD1FF9CFABF88DC6AB5679F7B09373832C
> +:10005000DFCE79F7B091E6BBE5BBE74FB3FA6F0FA0
> +:100060006FFB76CEEE0DF9CF2BFBEFEFCFEEF9CF96
> +:1000700076CEAD2490B2DF9A7FDDD0BF4BF847FD3E
> +:100080007CCF76CECFEF7E1F7F1D7DFDF0B6EF716A
> +:100090007FC177C1FBC86079E722FBC85FFFDFFF44
> +:1000A0005FB2FFFBFBC8F3C894A67F017F1D5F39D9
> +:1000B000AFE85F5EFFDFDF96CB9FAF7D5FC1AFED47
> +:1000C0008C1C5FC1AFDD5FC3DF9A7EFDB0B25FB253
> +:1000D000FFFEABAD5FB2FFFE5FCE600BE6BB600B19
> +:1000E0005FCEDFC627FBEFDF5FC8CFDE3A9CE7C0FD
> +:1000F000EDF0F3C87F0154CD7F1D2D3D363A75706C
> +:100100007E0AF1CE37EF2E687FEE10ECADF8EFDE11
> +:10011000CFEAE52F7D0FE12BF1CE5F657E0A4DF82A
> +:10012000CFEA5F727D0BEFEECFEA5F74E522EFDE80
> +:100130005F74CFDA0B627385DF627E0A30D8145B9E
> +:10014000BFFFF3C85FFFDFFFA7F85F5EBFFE7F7DE5
> +:1001500010D314505F36BFFFAF785F5EBFFDA7F8C6
> +:100160005F36BFFE77FD30C04E08FDCFE5FF6E0F56
> +:10017000AFF87E1F7E0FFD1FF1CF5F1BABF80D5E4A
> +:100180005F5EFFEF79F730A2AFDD5F3447F85F3491
> +:10019000AFED7FDD50B2497847FD7F1D7DFD70AD2D
> +:1001A000EF717EC16BA47F012D267EFD30DE5F5E88
> +:1001B000FFFD5F5EFFEF5F5EFFDF0CA0AFED0A9E0D
> +:1001C000AFDD0C3A5F3AAFBD7FBDB0825F8247F8CA
> +:1001D000000000000000000000000000000000001F
> +:1001E000000000000000000000000000000000000F
> +:1001F00000000000000000000000000000000000FF
> +:1002000000000000000000000000000000000000EE
> +:1002100000000000000000000000000000000000DE
> +:1002200000000000000000000000000000000000CE
> +:1002300000000000000000000000000000000000BE
> +:1002400000000000000000000000000000000000AE
> +:10025000000000000000000000000000000000009E
> +:10026000000000000000000000000000000000008E
> +:10027000000000000000000000000000000000007E
> +:10028000000000000000000000000000000000006E
> +:10029000000000000000000000000000000000005E
> +:1002A000000000000000000000000000000000004E
> +:1002B000000000000000000000000000000000003E
> +:1002C000000000000000000000000000000000002E
> +:1002D000000000000000000000000000000000001E
> +:1002E000000000000000000000000000000000000E
> +:1002F00000000000000000000000000000000000FE
> +:1003000000000000000000000000000000000000ED
> +:1003100000000000000000000000000000000000DD
> +:1003200000000000000000000000000000000000CD
> +:1003300000000000000000000000000000000000BD
> +:1003400000000000000000000000000000000000AD
> +:10035000000000000000000000000000000000009D
> +:10036000000000000000000000000000000000008D
> +:10037000000000000000000000000000000000007D
> +:10038000000000000000000000000000000000006D
> +:10039000000000000000000000000000000000005D
> +:1003A000000000000000000000000000000000004D
> +:1003B000000000000000000000000000000000003D
> +:1003C000000000000000000000000000000000002D
> +:1003D000000000000000000000000000000000001D
> +:1003E000000000000000000000000000000000000D
> +:1003F00000000000000000000000000000000000FD
> +:1004000000000000000000000000000000000000EC
> +:1004100000000000000000000000000000000000DC
> +:1004200000000000000000000000000000000000CC
> +:1004300000000000000000000000000000000000BC
> +:1004400000000000000000000000000000000000AC
> +:10045000000000000000000000000000000000009C
> +:10046000000000000000000000000000000000008C
> +:10047000000000000000000000000000000000007C
> +:10048000000000000000000000000000000000006C
> +:10049000000000000000000000000000000000005C
> +:1004A000000000000000000000000000000000004C
> +:1004B000000000000000000000000000000000003C
> +:1004C000000000000000000000000000000000002C
> +:1004D000000000000000000000000000000000001C
> +:1004E000000000000000000000000000000000000C
> +:1004F00000000000000000000000000000000000FC
> +:1005000000000000000000000000000000000000EB
> +:1005100000000000000000000000000000000000DB
> +:1005200000000000000000000000000000000000CB
> +:1005300000000000000000000000000000000000BB
> +:1005400000000000000000000000000000000000AB
> +:10055000000000000000000000000000000000009B
> +:10056000000000000000000000000000000000008B
> +:10057000000000000000000000000000000000007B
> +:10058000000000000000000000000000000000006B
> +:10059000000000000000000000000000000000005B
> +:1005A000000000000000000000000000000000004B
> +:1005B000000000000000000000000000000000003B
> +:1005C000000000000000000000000000000000002B
> +:1005D000000000000000000000000000000000001B
> +:1005E000000000000000000000000000000000000B
> +:1005F00000000000000000000000000000000000FB
> +:1006000000000000000000000000000000000000EA
> +:1006100000000000000000000000000000000000DA
> +:1006200000000000000000000000000000000000CA
> +:1006300000000000000000000000000000000000BA
> +:1006400000000000000000000000000000000000AA
> +:10065000000000000000000000000000000000009A
> +:10066000000000000000000000000000000000008A
> +:10067000000000000000000000000000000000007A
> +:10068000000000000000000000000000000000006A
> +:10069000000000000000000000000000000000005A
> +:1006A000000000000000000000000000000000004A
> +:1006B000000000000000000000000000000000003A
> +:1006C000000000000000000000000000000000002A
> +:1006D000000000000000000000000000000000001A
> +:1006E000000000000000000000000000000000000A
> +:1006F00000000000000000000000000000000000FA
> +:1007000000000000000000000000000000000000E9
> +:1007100000000000000000000000000000000000D9
> +:1007200000000000000000000000000000000000C9
> +:1007300000000000000000000000000000000000B9
> +:1007400000000000000000000000000000000000A9
> +:100750000000000000000000000000000000000099
> +:100760000000000000000000000000000000000089
> +:100770000000000000000000000000000000000079
> +:100780000000000000000000000000000000000069
> +:100790000000000000000000000000000000000059
> +:1007A0000000000000000000000000000000000049
> +:1007B0000000000000000000000000000000000039
> +:1007C0000000000000000000000000000000000029
> +:1007D0000000000000000000000000000000000019
> +:1007E0000000000000000000000000000000000009
> +:1007F00000000000000000000000000000000000F9
> +:1008000000000000000000000000000000000000E8
> +:1008100000000000000000000000000000000000D8
> +:1008200000000000000000000000000000000000C8
> +:1008300000000000000000000000000000000000B8
> +:1008400000000000000000000000000000000000A8
> +:100850000000000000000000000000000000000098
> +:100860000000000000000000000000000000000088
> +:100870000000000000000000000000000000000078
> +:100880000000000000000000000000000000000068
> +:100890000000000000000000000000000000000058
> +:1008A0000000000000000000000000000000000048
> +:1008B0000000000000000000000000000000000038
> +:1008C0000000000000000000000000000000000028
> +:1008D0000000000000000000000000000000000018
> +:1008E0000000000000000000000000000000000008
> +:1008F00000000000000000000000000000000000F8
> +:1009000000000000000000000000000000000000E7
> +:1009100000000000000000000000000000000000D7
> +:1009200000000000000000000000000000000000C7
> +:1009300000000000000000000000000000000000B7
> +:1009400000000000000000000000000000000000A7
> +:100950000000000000000000000000000000000097
> +:100960000000000000000000000000000000000087
> +:100970000000000000000000000000000000000077
> +:100980000000000000000000000000000000000067
> +:100990000000000000000000000000000000000057
> +:1009A0000000000000000000000000000000000047
> +:1009B0000000000000000000000000000000000037
> +:1009C0000000000000000000000000000000000027
> +:1009D0000000000000000000000000000000000017
> +:1009E0000000000000000000000000000000000007
> +:1009F00000000000000000000000000000000000F7
> +:100A000000000000000000000000000000000000E6
> +:100A100000000000000000000000000000000000D6
> +:100A200000000000000000000000000000000000C6
> +:100A300000000000000000000000000000000000B6
> +:100A400000000000000000000000000000000000A6
> +:100A50000000000000000000000000000000000096
> +:100A60000000000000000000000000000000000086
> +:100A70000000000000000000000000000000000076
> +:100A80000000000000000000000000000000000066
> +:100A90000000000000000000000000000000000056
> +:100AA0000000000000000000000000000000000046
> +:100AB0000000000000000000000000000000000036
> +:100AC0000000000000000000000000000000000026
> +:100AD0000000000000000000000000000000000016
> +:100AE0000000000000000000000000000000000006
> +:100AF00000000000000000000000000000000000F6
> +:100B000000000000000000000000000000000000E5
> +:100B100000000000000000000000000000000000D5
> +:100B200000000000000000000000000000000000C5
> +:100B300000000000000000000000000000000000B5
> +:100B400000000000000000000000000000000000A5
> +:100B50000000000000000000000000000000000095
> +:100B60000000000000000000000000000000000085
> +:100B70000000000000000000000000000000000075
> +:100B80000000000000000000000000000000000065
> +:100B90000000000000000000000000000000000055
> +:100BA0000000000000000000000000000000000045
> +:100BB0000000000000000000000000000000000035
> +:100BC0000000000000000000000000000000000025
> +:100BD0000000000000000000000000000000000015
> +:100BE0000000000000000000000000000000000005
> +:100BF00000000000000000000000000000000000F5
> +:100C000000000000000000000000000000000000E4
> +:100C100000000000000000000000000000000000D4
> +:100C200000000000000000000000000000000000C4
> +:100C300000000000000000000000000000000000B4
> +:100C400000000000000000000000000000000000A4
> +:100C50000000000000000000000000000000000094
> +:100C60000000000000000000000000000000000084
> +:100C70000000000000000000000000000000000074
> +:100C80000000000000000000000000000000000064
> +:100C90000000000000000000000000000000000054
> +:100CA0000000000000000000000000000000000044
> +:100CB0000000000000000000000000000000000034
> +:100CC0000000000000000000000000000000000024
> +:100CD0000000000000000000000000000000000014
> +:100CE0000000000000000000000000000000000004
> +:100CF00000000000000000000000000000000000F4
> +:100D000000000000000000000000000000000000E3
> +:100D100000000000000000000000000000000000D3
> +:100D200000000000000000000000000000000000C3
> +:100D300000000000000000000000000000000000B3
> +:100D400000000000000000000000000000000000A3
> +:100D50000000000000000000000000000000000093
> +:100D60000000000000000000000000000000000083
> +:100D70000000000000000000000000000000000073
> +:100D80000000000000000000000000000000000063
> +:100D90000000000000000000000000000000000053
> +:100DA0000000000000000000000000000000000043
> +:100DB0000000000000000000000000000000000033
> +:100DC0000000000000000000000000000000000023
> +:100DD0000000000000000000000000000000000013
> +:100DE0000000000000000000000000000000000003
> +:100DF00000000000000000000000000000000000F3
> +:100E000000000000000000000000000000000000E2
> +:100E100000000000000000000000000000000000D2
> +:100E200000000000000000000000000000000000C2
> +:100E300000000000000000000000000000000000B2
> +:100E400000000000000000000000000000000000A2
> +:100E50000000000000000000000000000000000092
> +:100E60000000000000000000000000000000000082
> +:100E70000000000000000000000000000000000072
> +:100E80000000000000000000000000000000000062
> +:100E90000000000000000000000000000000000052
> +:100EA0000000000000000000000000000000000042
> +:100EB0000000000000000000000000000000000032
> +:100EC0000000000000000000000000000000000022
> +:100ED0000000000000000000000000000000000012
> +:100EE0000000000000000000000000000000000002
> +:100EF00000000000000000000000000000000000F2
> +:100F00003E30343034343737ABF7BF9B994B4FBD4D
> +:100F1000BD599493349FFF37FB9B177DD993695636
> +:100F2000BBFDD697BDD2FD1131DB9BB36313963762
> +:100F300093733693193137F7331737AF7BB9B999B4
> +:100F4000BB1979577FDFD3D573B773F737933B99C5
> +:100F50001D1153169931531531694BF4FBDBD359ED
> +:100F60003149735376956D697B9D96931313197967
> +:100F70007937693500000000000000000000000023
> +:100F80000000000000000000000000000000000061
> +:100F90000000000000000000000000000000000051
> +:100FA0000000000000000000000000000000000041
> +:100FB0000000000000000000000000000000000031
> +:100FC0000000000000000000000000000000000021
> +:100FD0000000000000000000000000000000000011
> +:100FE0000000000000000000000000000000000001
> +:100FF00000000000000000000000000000000000F1
> +:00000001FF
> diff --git a/firmware/freescale/i2c_spi_smc1.bin.ihex 
> b/firmware/freescale/i2c_spi_smc1.bin.ihex
> new file mode 100644
> index 0000000..96fe6e0
> --- /dev/null
> +++ b/firmware/freescale/i2c_spi_smc1.bin.ihex
> @@ -0,0 +1,257 @@
> +:100000003FFF00003FFD00003FFB00003FF9000004
> +:100010005F13EFF85EB5EFF85F88ADF75FEFADF710
> +:100020003A9CFBC877CAE1BBF4DE7FADABAE933040
> +:100030004E08FDCF6E0FAFF87CCF76CFFDAFF9CF76
> +:10004000ABF88DC8AB5879F7B0925D8DDFD079F7FA
> +:10005000B090E6BBE5BBE74F9E046F0F6FFB76CE1B
> +:10006000EE0CF9CF2BFBEFEFCFEEF9CF76CEAD2331
> +:1000700090B3DF997FDDD0C14BF847FD7CCF76CEC2
> +:10008000CFEF77CA7EAF7FAD7DFDF0B7EF7A7FCA45
> +:1000900077CAFBC86079E722FBC85FFFDFFF5FB369
> +:1000A000FFFBFBC8F3C894A5E7C9EDF97F9A7FADC4
> +:1000B0005F36AFE85F5BFFDFDF95CB9EAF7D5FC351
> +:1000C000AFED8C1B5FC3AFDD5FC5DF997EFDB0B3C5
> +:1000D0005FB3FFFEABAE5FB3FFFE5FD0600BE6BB6E
> +:1000E000600B5FD0DFC827FBEFDF5FCACFDE3A9C33
> +:1000F000E7C9EDF9F3C87F9E54CA7FED2D3A363734
> +:10010000756F7E9AF1CE37EF2E677FEE10EBADF86C
> +:10011000EFDECFEAE52F7D9FE12BF1CE5F647E9A83
> +:100120004DF8CFEA5F717D9BEFEECFEA5F73E5227A
> +:10013000EFDE5F73CFDA0B615D8FDF61E7C9EDF949
> +:100140007E9A30D51458BFFFF3C85FFFDFFFA7F8D2
> +:100150005F5BBFFE7F7D10D0144D5F33BFFFAF7874
> +:100160005F5BBFFDA7F85F33BFFE77FD30BD4E0874
> +:10017000FDCFE5FF6E0FAFF87EEF7E9FFDEFF1CF75
> +:100180005F17ABF80D5B5F5BFFEF79F7309EAFDD7C
> +:100190005F3147F85F31AFED7FDD50AF497847FD04
> +:1001A0007F9E7FED7DFD70A9EF7E7ECE6BA07F9E52
> +:1001B0002D227EFD30DB5F5BFFFD5F5BFFEF5F5B52
> +:1001C000FFDF0C9CAFED0A9AAFDD0C375F37AFBD98
> +:1001D0007FBDB0815F8147F83A11E710EDF0CCDDCB
> +:1001E000F3186D0A7F0E5F067FEDBB383AFE746828
> +:1001F0007FEDF4FC8FFBB951B85F77FDB0DF5DDDBB
> +:10020000DEFE7FED90E1E74D6F0DCBF7E7DECFED42
> +:10021000CB74CFEDCFEDDF6D91714F745DD2DEEF1A
> +:100220009E04E7DFEFBB6FFBE7EF7F0E9E097FEDDC
> +:10023000EBDBEFFAEB54AFFB7FEA90D77E0CF0C319
> +:10024000BFFFF3185FFFDFFFAC59EFEA7FCE1EE57B
> +:10025000E2FF5EE1AFFBE2FF5EE3AFFBF9CC7D0FB7
> +:10026000AEF8770F7D0FB0C6EFFBBFFFCFEF5EDEBE
> +:100270007D0FBFFF5EDE4CF87FDDD0BF49F847FD44
> +:100280007EFDF0BB7FEDFFFD7DFDF0B7EF7E7E1EB6
> +:100290005EDE7F0E3A11E710EDF0CCABFB18AD2E11
> +:1002A0001EA9BBB874283B7E73C2E4BB2ADA4FB8E0
> +:1002B000DC21E4BBB2A1FFBF5E2C43F8FC87E1BBAD
> +:1002C000E74FFD916F0F4FE8C7BA32E2F396EFEBBD
> +:1002D000600B4F78E5BB760B53ACAEF84EF88B0E47
> +:1002E000CFEF9E09ABF8751FEFEF5BAC741F4FE8C3
> +:1002F000751E760D7FDBF081741CAFCEEFCC7FCE08
> +:10030000751E70AC741CE7BB3372CFEDAFDBEFEB47
> +:10031000E5BB760B53F2AEF8AFE8E7EB4BF8771E90
> +:100320007E247FED4FCBE2CC7FBC30A97B0F7A0FD0
> +:1003300034D577FD308B5DB7DE553E5FAF78741FE7
> +:10034000741F30F0CFEF5E2C741F3EACAFB8771E39
> +:100350005E677FED0BD3E2CC741CCFECE5CA53CDC6
> +:100360006FCB4F745DADDE4B2AB63D384BB3DE30FC
> +:10037000751F741C6C42EFFAEFEA7FCE6FFC30BE43
> +:10038000EFEC3FCA30B3DE2EADF85D9EAF7DAEFD23
> +:100390005D9EDE2E5D9EAFDD761F10AC1DA07EFD46
> +:1003A00030ADFFFE4908FB185FFFDFFFAFBB709B5E
> +:1003B0004EF85E67ADF814AD7A0F70ADCFEF50AD6B
> +:1003C0007A0FDE305DA0AFED3C12780FEFEF780FC3
> +:1003D000EFEF790FA7F85E0FFFEF790FEFEF790FCF
> +:1003E00014ADDE2E5D9EADFD5E2DFFFBE79ADDFDBB
> +:1003F000EFF96079607AE79ADDFCEFF960795DFFEB
> +:10040000607ACFEFEFEFEFDFEFBFEF7FEEFFEDFFB3
> +:10041000EBFFE7FFAFEFAFDFAFBFAF7FAEFFADFFEB
> +:10042000ABFFA7FF6FEF6FDF6FBF6F7F6EFF6DFFDB
> +:100430006BFF67FF2FEF2FDF2FBF2F7F2EFF2DFFCB
> +:100440002BFF27FF4E08FD1FE5FF6E0FAFF87EEF75
> +:100450007E0FFDEFF11F6079ABF8F5427E0AF11CCB
> +:1004600037CFAE3A7FEC90BEADF8EFDCCFEAE52FA8
> +:100470007D0FE12BF11C60797E0A4DF8CFEA5DC457
> +:100480007D0BEFECCFEA5DC6E522EFDC5DC6CFDA8F
> +:100490004E08FD1F6E0FAFF87C1F761FFDEFF91F92
> +:1004A0006079ABF8761CEE24F91F2BFBEFEFCFEC55
> +:1004B000F91F6079761C27FBEFDF5DA7CFDC7FDDBE
> +:1004C000D09C4BF847FD7C1F761CCFCF7EEF7FED95
> +:1004D0007DFDF093EF7E7F1E771EFB186079E7228B
> +:1004E000E6BBE5BBAE0AE5BB600BAE85E2BBE2BB9B
> +:1004F000E2BBE2BBAF02E2BBE2BB2FF96079E2BB39
> +:1005000000000000000000000000000000000000EB
> +:1005100000000000000000000000000000000000DB
> +:1005200000000000000000000000000000000000CB
> +:1005300000000000000000000000000000000000BB
> +:1005400000000000000000000000000000000000AB
> +:10055000000000000000000000000000000000009B
> +:10056000000000000000000000000000000000008B
> +:10057000000000000000000000000000000000007B
> +:10058000000000000000000000000000000000006B
> +:10059000000000000000000000000000000000005B
> +:1005A000000000000000000000000000000000004B
> +:1005B000000000000000000000000000000000003B
> +:1005C000000000000000000000000000000000002B
> +:1005D000000000000000000000000000000000001B
> +:1005E000000000000000000000000000000000000B
> +:1005F00000000000000000000000000000000000FB
> +:1006000000000000000000000000000000000000EA
> +:1006100000000000000000000000000000000000DA
> +:1006200000000000000000000000000000000000CA
> +:1006300000000000000000000000000000000000BA
> +:1006400000000000000000000000000000000000AA
> +:10065000000000000000000000000000000000009A
> +:10066000000000000000000000000000000000008A
> +:10067000000000000000000000000000000000007A
> +:10068000000000000000000000000000000000006A
> +:10069000000000000000000000000000000000005A
> +:1006A000000000000000000000000000000000004A
> +:1006B000000000000000000000000000000000003A
> +:1006C000000000000000000000000000000000002A
> +:1006D000000000000000000000000000000000001A
> +:1006E000000000000000000000000000000000000A
> +:1006F00000000000000000000000000000000000FA
> +:1007000000000000000000000000000000000000E9
> +:1007100000000000000000000000000000000000D9
> +:1007200000000000000000000000000000000000C9
> +:1007300000000000000000000000000000000000B9
> +:1007400000000000000000000000000000000000A9
> +:100750000000000000000000000000000000000099
> +:100760000000000000000000000000000000000089
> +:100770000000000000000000000000000000000079
> +:100780000000000000000000000000000000000069
> +:100790000000000000000000000000000000000059
> +:1007A0000000000000000000000000000000000049
> +:1007B0000000000000000000000000000000000039
> +:1007C0000000000000000000000000000000000029
> +:1007D0000000000000000000000000000000000019
> +:1007E0000000000000000000000000000000000009
> +:1007F00000000000000000000000000000000000F9
> +:1008000000000000000000000000000000000000E8
> +:1008100000000000000000000000000000000000D8
> +:1008200000000000000000000000000000000000C8
> +:1008300000000000000000000000000000000000B8
> +:1008400000000000000000000000000000000000A8
> +:100850000000000000000000000000000000000098
> +:100860000000000000000000000000000000000088
> +:100870000000000000000000000000000000000078
> +:100880000000000000000000000000000000000068
> +:100890000000000000000000000000000000000058
> +:1008A0000000000000000000000000000000000048
> +:1008B0000000000000000000000000000000000038
> +:1008C0000000000000000000000000000000000028
> +:1008D0000000000000000000000000000000000018
> +:1008E0000000000000000000000000000000000008
> +:1008F00000000000000000000000000000000000F8
> +:1009000000000000000000000000000000000000E7
> +:1009100000000000000000000000000000000000D7
> +:1009200000000000000000000000000000000000C7
> +:1009300000000000000000000000000000000000B7
> +:1009400000000000000000000000000000000000A7
> +:100950000000000000000000000000000000000097
> +:100960000000000000000000000000000000000087
> +:100970000000000000000000000000000000000077
> +:100980000000000000000000000000000000000067
> +:100990000000000000000000000000000000000057
> +:1009A0000000000000000000000000000000000047
> +:1009B0000000000000000000000000000000000037
> +:1009C0000000000000000000000000000000000027
> +:1009D0000000000000000000000000000000000017
> +:1009E0000000000000000000000000000000000007
> +:1009F00000000000000000000000000000000000F7
> +:100A000000000000000000000000000000000000E6
> +:100A100000000000000000000000000000000000D6
> +:100A200000000000000000000000000000000000C6
> +:100A300000000000000000000000000000000000B6
> +:100A400000000000000000000000000000000000A6
> +:100A50000000000000000000000000000000000096
> +:100A60000000000000000000000000000000000086
> +:100A70000000000000000000000000000000000076
> +:100A80000000000000000000000000000000000066
> +:100A90000000000000000000000000000000000056
> +:100AA0000000000000000000000000000000000046
> +:100AB0000000000000000000000000000000000036
> +:100AC0000000000000000000000000000000000026
> +:100AD0000000000000000000000000000000000016
> +:100AE0000000000000000000000000000000000006
> +:100AF00000000000000000000000000000000000F6
> +:100B000000000000000000000000000000000000E5
> +:100B100000000000000000000000000000000000D5
> +:100B200000000000000000000000000000000000C5
> +:100B300000000000000000000000000000000000B5
> +:100B400000000000000000000000000000000000A5
> +:100B50000000000000000000000000000000000095
> +:100B60000000000000000000000000000000000085
> +:100B70000000000000000000000000000000000075
> +:100B80000000000000000000000000000000000065
> +:100B90000000000000000000000000000000000055
> +:100BA0000000000000000000000000000000000045
> +:100BB0000000000000000000000000000000000035
> +:100BC0000000000000000000000000000000000025
> +:100BD0000000000000000000000000000000000015
> +:100BE0000000000000000000000000000000000005
> +:100BF00000000000000000000000000000000000F5
> +:100C000000000000000000000000000000000000E4
> +:100C100000000000000000000000000000000000D4
> +:100C200000000000000000000000000000000000C4
> +:100C300000000000000000000000000000000000B4
> +:100C400000000000000000000000000000000000A4
> +:100C50000000000000000000000000000000000094
> +:100C60000000000000000000000000000000000084
> +:100C70000000000000000000000000000000000074
> +:100C80000000000000000000000000000000000064
> +:100C90000000000000000000000000000000000054
> +:100CA0000000000000000000000000000000000044
> +:100CB0000000000000000000000000000000000034
> +:100CC0000000000000000000000000000000000024
> +:100CD0000000000000000000000000000000000014
> +:100CE0000000000000000000000000000000000004
> +:100CF00000000000000000000000000000000000F4
> +:100D000000000000000000000000000000000000E3
> +:100D100000000000000000000000000000000000D3
> +:100D200000000000000000000000000000000000C3
> +:100D300000000000000000000000000000000000B3
> +:100D400000000000000000000000000000000000A3
> +:100D50000000000000000000000000000000000093
> +:100D60000000000000000000000000000000000083
> +:100D70000000000000000000000000000000000073
> +:100D80000000000000000000000000000000000063
> +:100D90000000000000000000000000000000000053
> +:100DA0000000000000000000000000000000000043
> +:100DB0000000000000000000000000000000000033
> +:100DC0000000000000000000000000000000000023
> +:100DD0000000000000000000000000000000000013
> +:100DE0000000000000000000000000000000000003
> +:100DF00000000000000000000000000000000000F3
> +:100E000027EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEC9
> +:100E1000EE4BF4FBDBD259BB1979577FDFD2D57388
> +:100E2000B773F7374B4FBDBD25B9B177D2D17376C4
> +:100E3000956BBFDD697BDD2FFF9F79FFFF9FF22F51
> +:100E400000000000000000000000000000000000A2
> +:100E50000000000000000000000000000000000092
> +:100E60000000000000000000000000000000000082
> +:100E70000000000000000000000000000000000072
> +:100E80000000000000000000000000000000000062
> +:100E90000000000000000000000000000000000052
> +:100EA0000000000000000000000000000000000042
> +:100EB0000000000000000000000000000000000032
> +:100EC0000000000000000000000000000000000022
> +:100ED0000000000000000000000000000000000012
> +:100EE0000000000000000000000000000000000002
> +:100EF00000000000000000000000000000000000F2
> +:100F0000303030303E3E3434ABBF9B994B4FBDBD8B
> +:100F1000599493349FFF37FB9B177DD9936956BB38
> +:100F2000FBDD697BDD2FD1131DB9F7BB363139638A
> +:100F3000793733693193137F7331737AF7BB9B9998
> +:100F40009BB1979577FDFD3D573B773F737933F71D
> +:100F5000B991D1153169931531531694BF4FBDBD69
> +:100F60003593149735376956BD697B9D9693131356
> +:100F7000197979376935AF78B9B3BAA3B878868368
> +:100F8000368F78F7877787333FFFFB3B8E8F78B8B4
> +:100F90001D118E13F3FF3F8B6BD8E173D13668566A
> +:100FA00068D1687B3DAF78B83A3A3F878F81378FF9
> +:100FB000F876F88777FD8778737DE8D6BBF8BFFFB2
> +:100FC000D8DF87F7FD876F7B8BFFF8BD8683387D81
> +:100FD000B873D87B3B8FD7F8F7338883BB8EE1F8A3
> +:100FE000EF8373773337B836817D11F87378B8782B
> +:100FF000D3368B7DED731B7D833731F3F22F3F2387
> +:00000001FF
> diff --git a/firmware/freescale/usb_sof.bin.ihex 
> b/firmware/freescale/usb_sof.bin.ihex
> new file mode 100644
> index 0000000..69fb776
> --- /dev/null
> +++ b/firmware/freescale/usb_sof.bin.ihex
> @@ -0,0 +1,513 @@
> +:100000007FFF00007FFD00007FFB000049F7BA5B27
> +:10001000BA383FFBF9B8B46DE5AB4E07AF77BFFE1A
> +:100020003F7BBF79BA5BBA38E767607660750000DE
> +:1000300000000000000000000000000000000000C0
> +:1000400000000000000000000000000000000000B0
> +:1000500000000000000000000000000000000000A0
> +:100060000000000000000000000000000000000090
> +:100070000000000000000000000000000000000080
> +:100080000000000000000000000000000000000070
> +:100090000000000000000000000000000000000060
> +:1000A0000000000000000000000000000000000050
> +:1000B0000000000000000000000000000000000040
> +:1000C0000000000000000000000000000000000030
> +:1000D0000000000000000000000000000000000020
> +:1000E0000000000000000000000000000000000010
> +:1000F0000000000000000000000000000000000000
> +:1001000000000000000000000000000000000000EF
> +:1001100000000000000000000000000000000000DF
> +:1001200000000000000000000000000000000000CF
> +:1001300000000000000000000000000000000000BF
> +:1001400000000000000000000000000000000000AF
> +:10015000000000000000000000000000000000009F
> +:10016000000000000000000000000000000000008F
> +:10017000000000000000000000000000000000007F
> +:10018000000000000000000000000000000000006F
> +:10019000000000000000000000000000000000005F
> +:1001A000000000000000000000000000000000004F
> +:1001B000000000000000000000000000000000003F
> +:1001C000000000000000000000000000000000002F
> +:1001D000000000000000000000000000000000001F
> +:1001E000000000000000000000000000000000000F
> +:1001F00000000000000000000000000000000000FF
> +:1002000000000000000000000000000000000000EE
> +:1002100000000000000000000000000000000000DE
> +:1002200000000000000000000000000000000000CE
> +:1002300000000000000000000000000000000000BE
> +:1002400000000000000000000000000000000000AE
> +:10025000000000000000000000000000000000009E
> +:10026000000000000000000000000000000000008E
> +:10027000000000000000000000000000000000007E
> +:10028000000000000000000000000000000000006E
> +:10029000000000000000000000000000000000005E
> +:1002A000000000000000000000000000000000004E
> +:1002B000000000000000000000000000000000003E
> +:1002C000000000000000000000000000000000002E
> +:1002D000000000000000000000000000000000001E
> +:1002E000000000000000000000000000000000000E
> +:1002F00000000000000000000000000000000000FE
> +:1003000000000000000000000000000000000000ED
> +:1003100000000000000000000000000000000000DD
> +:1003200000000000000000000000000000000000CD
> +:1003300000000000000000000000000000000000BD
> +:1003400000000000000000000000000000000000AD
> +:10035000000000000000000000000000000000009D
> +:10036000000000000000000000000000000000008D
> +:10037000000000000000000000000000000000007D
> +:10038000000000000000000000000000000000006D
> +:10039000000000000000000000000000000000005D
> +:1003A000000000000000000000000000000000004D
> +:1003B000000000000000000000000000000000003D
> +:1003C000000000000000000000000000000000002D
> +:1003D000000000000000000000000000000000001D
> +:1003E000000000000000000000000000000000000D
> +:1003F00000000000000000000000000000000000FD
> +:1004000000000000000000000000000000000000EC
> +:1004100000000000000000000000000000000000DC
> +:1004200000000000000000000000000000000000CC
> +:1004300000000000000000000000000000000000BC
> +:1004400000000000000000000000000000000000AC
> +:10045000000000000000000000000000000000009C
> +:10046000000000000000000000000000000000008C
> +:10047000000000000000000000000000000000007C
> +:10048000000000000000000000000000000000006C
> +:10049000000000000000000000000000000000005C
> +:1004A000000000000000000000000000000000004C
> +:1004B000000000000000000000000000000000003C
> +:1004C000000000000000000000000000000000002C
> +:1004D000000000000000000000000000000000001C
> +:1004E000000000000000000000000000000000000C
> +:1004F00000000000000000000000000000000000FC
> +:1005000000000000000000000000000000000000EB
> +:1005100000000000000000000000000000000000DB
> +:1005200000000000000000000000000000000000CB
> +:1005300000000000000000000000000000000000BB
> +:1005400000000000000000000000000000000000AB
> +:10055000000000000000000000000000000000009B
> +:10056000000000000000000000000000000000008B
> +:10057000000000000000000000000000000000007B
> +:10058000000000000000000000000000000000006B
> +:10059000000000000000000000000000000000005B
> +:1005A000000000000000000000000000000000004B
> +:1005B000000000000000000000000000000000003B
> +:1005C000000000000000000000000000000000002B
> +:1005D000000000000000000000000000000000001B
> +:1005E000000000000000000000000000000000000B
> +:1005F00000000000000000000000000000000000FB
> +:1006000000000000000000000000000000000000EA
> +:1006100000000000000000000000000000000000DA
> +:1006200000000000000000000000000000000000CA
> +:1006300000000000000000000000000000000000BA
> +:1006400000000000000000000000000000000000AA
> +:10065000000000000000000000000000000000009A
> +:10066000000000000000000000000000000000008A
> +:10067000000000000000000000000000000000007A
> +:10068000000000000000000000000000000000006A
> +:10069000000000000000000000000000000000005A
> +:1006A000000000000000000000000000000000004A
> +:1006B000000000000000000000000000000000003A
> +:1006C000000000000000000000000000000000002A
> +:1006D000000000000000000000000000000000001A
> +:1006E000000000000000000000000000000000000A
> +:1006F00000000000000000000000000000000000FA
> +:1007000000000000000000000000000000000000E9
> +:1007100000000000000000000000000000000000D9
> +:1007200000000000000000000000000000000000C9
> +:1007300000000000000000000000000000000000B9
> +:1007400000000000000000000000000000000000A9
> +:100750000000000000000000000000000000000099
> +:100760000000000000000000000000000000000089
> +:100770000000000000000000000000000000000079
> +:100780000000000000000000000000000000000069
> +:100790000000000000000000000000000000000059
> +:1007A0000000000000000000000000000000000049
> +:1007B0000000000000000000000000000000000039
> +:1007C0000000000000000000000000000000000029
> +:1007D0000000000000000000000000000000000019
> +:1007E0000000000000000000000000000000000009
> +:1007F00000000000000000000000000000000000F9
> +:1008000000000000000000000000000000000000E8
> +:1008100000000000000000000000000000000000D8
> +:1008200000000000000000000000000000000000C8
> +:1008300000000000000000000000000000000000B8
> +:1008400000000000000000000000000000000000A8
> +:100850000000000000000000000000000000000098
> +:100860000000000000000000000000000000000088
> +:100870000000000000000000000000000000000078
> +:100880000000000000000000000000000000000068
> +:100890000000000000000000000000000000000058
> +:1008A0000000000000000000000000000000000048
> +:1008B0000000000000000000000000000000000038
> +:1008C0000000000000000000000000000000000028
> +:1008D0000000000000000000000000000000000018
> +:1008E0000000000000000000000000000000000008
> +:1008F00000000000000000000000000000000000F8
> +:1009000000000000000000000000000000000000E7
> +:1009100000000000000000000000000000000000D7
> +:1009200000000000000000000000000000000000C7
> +:1009300000000000000000000000000000000000B7
> +:1009400000000000000000000000000000000000A7
> +:100950000000000000000000000000000000000097
> +:100960000000000000000000000000000000000087
> +:100970000000000000000000000000000000000077
> +:100980000000000000000000000000000000000067
> +:100990000000000000000000000000000000000057
> +:1009A0000000000000000000000000000000000047
> +:1009B0000000000000000000000000000000000037
> +:1009C0000000000000000000000000000000000027
> +:1009D0000000000000000000000000000000000017
> +:1009E0000000000000000000000000000000000007
> +:1009F00000000000000000000000000000000000F7
> +:100A000000000000000000000000000000000000E6
> +:100A100000000000000000000000000000000000D6
> +:100A200000000000000000000000000000000000C6
> +:100A300000000000000000000000000000000000B6
> +:100A400000000000000000000000000000000000A6
> +:100A50000000000000000000000000000000000096
> +:100A60000000000000000000000000000000000086
> +:100A70000000000000000000000000000000000076
> +:100A80000000000000000000000000000000000066
> +:100A90000000000000000000000000000000000056
> +:100AA0000000000000000000000000000000000046
> +:100AB0000000000000000000000000000000000036
> +:100AC0000000000000000000000000000000000026
> +:100AD0000000000000000000000000000000000016
> +:100AE0000000000000000000000000000000000006
> +:100AF00000000000000000000000000000000000F6
> +:100B000000000000000000000000000000000000E5
> +:100B100000000000000000000000000000000000D5
> +:100B200000000000000000000000000000000000C5
> +:100B300000000000000000000000000000000000B5
> +:100B400000000000000000000000000000000000A5
> +:100B50000000000000000000000000000000000095
> +:100B60000000000000000000000000000000000085
> +:100B70000000000000000000000000000000000075
> +:100B80000000000000000000000000000000000065
> +:100B90000000000000000000000000000000000055
> +:100BA0000000000000000000000000000000000045
> +:100BB0000000000000000000000000000000000035
> +:100BC0000000000000000000000000000000000025
> +:100BD0000000000000000000000000000000000015
> +:100BE0000000000000000000000000000000000005
> +:100BF00000000000000000000000000000000000F5
> +:100C000000000000000000000000000000000000E4
> +:100C100000000000000000000000000000000000D4
> +:100C200000000000000000000000000000000000C4
> +:100C300000000000000000000000000000000000B4
> +:100C400000000000000000000000000000000000A4
> +:100C50000000000000000000000000000000000094
> +:100C60000000000000000000000000000000000084
> +:100C70000000000000000000000000000000000074
> +:100C80000000000000000000000000000000000064
> +:100C90000000000000000000000000000000000054
> +:100CA0000000000000000000000000000000000044
> +:100CB0000000000000000000000000000000000034
> +:100CC0000000000000000000000000000000000024
> +:100CD0000000000000000000000000000000000014
> +:100CE0000000000000000000000000000000000004
> +:100CF00000000000000000000000000000000000F4
> +:100D000000000000000000000000000000000000E3
> +:100D100000000000000000000000000000000000D3
> +:100D200000000000000000000000000000000000C3
> +:100D300000000000000000000000000000000000B3
> +:100D400000000000000000000000000000000000A3
> +:100D50000000000000000000000000000000000093
> +:100D60000000000000000000000000000000000083
> +:100D70000000000000000000000000000000000073
> +:100D80000000000000000000000000000000000063
> +:100D90000000000000000000000000000000000053
> +:100DA0000000000000000000000000000000000043
> +:100DB0000000000000000000000000000000000033
> +:100DC0000000000000000000000000000000000023
> +:100DD0000000000000000000000000000000000013
> +:100DE0000000000000000000000000000000000003
> +:100DF00000000000000000000000000000000000F3
> +:100E000000000000000000000000000000000000E2
> +:100E100000000000000000000000000000000000D2
> +:100E200000000000000000000000000000000000C2
> +:100E300000000000000000000000000000000000B2
> +:100E400000000000000000000000000000000000A2
> +:100E50000000000000000000000000000000000092
> +:100E60000000000000000000000000000000000082
> +:100E70000000000000000000000000000000000072
> +:100E80000000000000000000000000000000000062
> +:100E90000000000000000000000000000000000052
> +:100EA0000000000000000000000000000000000042
> +:100EB0000000000000000000000000000000000032
> +:100EC0000000000000000000000000000000000022
> +:100ED0000000000000000000000000000000000012
> +:100EE0000000000000000000000000000000000002
> +:100EF00000000000000000000000000000000000F2
> +:100F00003030304CCAB9E441A1AAF2200000000000
> +:100F100000000000000000000000000000000000D1
> +:100F200000000000000000000000000000000000C1
> +:100F300000000000000000000000000000000000B1
> +:100F400000000000000000000000000000000000A1
> +:100F50000000000000000000000000000000000091
> +:100F60000000000000000000000000000000000081
> +:100F70000000000000000000000000000000000071
> +:100F80000000000000000000000000000000000061
> +:100F90000000000000000000000000000000000051
> +:100FA0000000000000000000000000000000000041
> +:100FB0000000000000000000000000000000000031
> +:100FC0000000000000000000000000000000000021
> +:100FD0000000000000000000000000000000000011
> +:100FE0000000000000000000000000000000000001
> +:100FF00000000000000000000000000000000000F1
> +:1010000000000000000000000000000000000000E0
> +:1010100000000000000000000000000000000000D0
> +:1010200000000000000000000000000000000000C0
> +:1010300000000000000000000000000000000000B0
> +:1010400000000000000000000000000000000000A0
> +:101050000000000000000000000000000000000090
> +:101060000000000000000000000000000000000080
> +:101070000000000000000000000000000000000070
> +:101080000000000000000000000000000000000060
> +:101090000000000000000000000000000000000050
> +:1010A0000000000000000000000000000000000040
> +:1010B0000000000000000000000000000000000030
> +:1010C0000000000000000000000000000000000020
> +:1010D0000000000000000000000000000000000010
> +:1010E0000000000000000000000000000000000000
> +:1010F00000000000000000000000000000000000F0
> +:1011000000000000000000000000000000000000DF
> +:1011100000000000000000000000000000000000CF
> +:1011200000000000000000000000000000000000BF
> +:1011300000000000000000000000000000000000AF
> +:10114000000000000000000000000000000000009F
> +:10115000000000000000000000000000000000008F
> +:10116000000000000000000000000000000000007F
> +:10117000000000000000000000000000000000006F
> +:10118000000000000000000000000000000000005F
> +:10119000000000000000000000000000000000004F
> +:1011A000000000000000000000000000000000003F
> +:1011B000000000000000000000000000000000002F
> +:1011C000000000000000000000000000000000001F
> +:1011D000000000000000000000000000000000000F
> +:1011E00000000000000000000000000000000000FF
> +:1011F00000000000000000000000000000000000EF
> +:1012000000000000000000000000000000000000DE
> +:1012100000000000000000000000000000000000CE
> +:1012200000000000000000000000000000000000BE
> +:1012300000000000000000000000000000000000AE
> +:10124000000000000000000000000000000000009E
> +:10125000000000000000000000000000000000008E
> +:10126000000000000000000000000000000000007E
> +:10127000000000000000000000000000000000006E
> +:10128000000000000000000000000000000000005E
> +:10129000000000000000000000000000000000004E
> +:1012A000000000000000000000000000000000003E
> +:1012B000000000000000000000000000000000002E
> +:1012C000000000000000000000000000000000001E
> +:1012D000000000000000000000000000000000000E
> +:1012E00000000000000000000000000000000000FE
> +:1012F00000000000000000000000000000000000EE
> +:1013000000000000000000000000000000000000DD
> +:1013100000000000000000000000000000000000CD
> +:1013200000000000000000000000000000000000BD
> +:1013300000000000000000000000000000000000AD
> +:10134000000000000000000000000000000000009D
> +:10135000000000000000000000000000000000008D
> +:10136000000000000000000000000000000000007D
> +:10137000000000000000000000000000000000006D
> +:10138000000000000000000000000000000000005D
> +:10139000000000000000000000000000000000004D
> +:1013A000000000000000000000000000000000003D
> +:1013B000000000000000000000000000000000002D
> +:1013C000000000000000000000000000000000001D
> +:1013D000000000000000000000000000000000000D
> +:1013E00000000000000000000000000000000000FD
> +:1013F00000000000000000000000000000000000ED
> +:1014000000000000000000000000000000000000DC
> +:1014100000000000000000000000000000000000CC
> +:1014200000000000000000000000000000000000BC
> +:1014300000000000000000000000000000000000AC
> +:10144000000000000000000000000000000000009C
> +:10145000000000000000000000000000000000008C
> +:10146000000000000000000000000000000000007C
> +:10147000000000000000000000000000000000006C
> +:10148000000000000000000000000000000000005C
> +:10149000000000000000000000000000000000004C
> +:1014A000000000000000000000000000000000003C
> +:1014B000000000000000000000000000000000002C
> +:1014C000000000000000000000000000000000001C
> +:1014D000000000000000000000000000000000000C
> +:1014E00000000000000000000000000000000000FC
> +:1014F00000000000000000000000000000000000EC
> +:1015000000000000000000000000000000000000DB
> +:1015100000000000000000000000000000000000CB
> +:1015200000000000000000000000000000000000BB
> +:1015300000000000000000000000000000000000AB
> +:10154000000000000000000000000000000000009B
> +:10155000000000000000000000000000000000008B
> +:10156000000000000000000000000000000000007B
> +:10157000000000000000000000000000000000006B
> +:10158000000000000000000000000000000000005B
> +:10159000000000000000000000000000000000004B
> +:1015A000000000000000000000000000000000003B
> +:1015B000000000000000000000000000000000002B
> +:1015C000000000000000000000000000000000001B
> +:1015D000000000000000000000000000000000000B
> +:1015E00000000000000000000000000000000000FB
> +:1015F00000000000000000000000000000000000EB
> +:1016000000000000000000000000000000000000DA
> +:1016100000000000000000000000000000000000CA
> +:1016200000000000000000000000000000000000BA
> +:1016300000000000000000000000000000000000AA
> +:10164000000000000000000000000000000000009A
> +:10165000000000000000000000000000000000008A
> +:10166000000000000000000000000000000000007A
> +:10167000000000000000000000000000000000006A
> +:10168000000000000000000000000000000000005A
> +:10169000000000000000000000000000000000004A
> +:1016A000000000000000000000000000000000003A
> +:1016B000000000000000000000000000000000002A
> +:1016C000000000000000000000000000000000001A
> +:1016D000000000000000000000000000000000000A
> +:1016E00000000000000000000000000000000000FA
> +:1016F00000000000000000000000000000000000EA
> +:1017000000000000000000000000000000000000D9
> +:1017100000000000000000000000000000000000C9
> +:1017200000000000000000000000000000000000B9
> +:1017300000000000000000000000000000000000A9
> +:101740000000000000000000000000000000000099
> +:101750000000000000000000000000000000000089
> +:101760000000000000000000000000000000000079
> +:101770000000000000000000000000000000000069
> +:101780000000000000000000000000000000000059
> +:101790000000000000000000000000000000000049
> +:1017A0000000000000000000000000000000000039
> +:1017B0000000000000000000000000000000000029
> +:1017C0000000000000000000000000000000000019
> +:1017D0000000000000000000000000000000000009
> +:1017E00000000000000000000000000000000000F9
> +:1017F00000000000000000000000000000000000E9
> +:1018000000000000000000000000000000000000D8
> +:1018100000000000000000000000000000000000C8
> +:1018200000000000000000000000000000000000B8
> +:1018300000000000000000000000000000000000A8
> +:101840000000000000000000000000000000000098
> +:101850000000000000000000000000000000000088
> +:101860000000000000000000000000000000000078
> +:101870000000000000000000000000000000000068
> +:101880000000000000000000000000000000000058
> +:101890000000000000000000000000000000000048
> +:1018A0000000000000000000000000000000000038
> +:1018B0000000000000000000000000000000000028
> +:1018C0000000000000000000000000000000000018
> +:1018D0000000000000000000000000000000000008
> +:1018E00000000000000000000000000000000000F8
> +:1018F00000000000000000000000000000000000E8
> +:1019000000000000000000000000000000000000D7
> +:1019100000000000000000000000000000000000C7
> +:1019200000000000000000000000000000000000B7
> +:1019300000000000000000000000000000000000A7
> +:101940000000000000000000000000000000000097
> +:101950000000000000000000000000000000000087
> +:101960000000000000000000000000000000000077
> +:101970000000000000000000000000000000000067
> +:101980000000000000000000000000000000000057
> +:101990000000000000000000000000000000000047
> +:1019A0000000000000000000000000000000000037
> +:1019B0000000000000000000000000000000000027
> +:1019C0000000000000000000000000000000000017
> +:1019D0000000000000000000000000000000000007
> +:1019E00000000000000000000000000000000000F7
> +:1019F00000000000000000000000000000000000E7
> +:101A000000000000000000000000000000000000D6
> +:101A100000000000000000000000000000000000C6
> +:101A200000000000000000000000000000000000B6
> +:101A300000000000000000000000000000000000A6
> +:101A40000000000000000000000000000000000096
> +:101A50000000000000000000000000000000000086
> +:101A60000000000000000000000000000000000076
> +:101A70000000000000000000000000000000000066
> +:101A80000000000000000000000000000000000056
> +:101A90000000000000000000000000000000000046
> +:101AA0000000000000000000000000000000000036
> +:101AB0000000000000000000000000000000000026
> +:101AC0000000000000000000000000000000000016
> +:101AD0000000000000000000000000000000000006
> +:101AE00000000000000000000000000000000000F6
> +:101AF00000000000000000000000000000000000E6
> +:101B000000000000000000000000000000000000D5
> +:101B100000000000000000000000000000000000C5
> +:101B200000000000000000000000000000000000B5
> +:101B300000000000000000000000000000000000A5
> +:101B40000000000000000000000000000000000095
> +:101B50000000000000000000000000000000000085
> +:101B60000000000000000000000000000000000075
> +:101B70000000000000000000000000000000000065
> +:101B80000000000000000000000000000000000055
> +:101B90000000000000000000000000000000000045
> +:101BA0000000000000000000000000000000000035
> +:101BB0000000000000000000000000000000000025
> +:101BC0000000000000000000000000000000000015
> +:101BD0000000000000000000000000000000000005
> +:101BE00000000000000000000000000000000000F5
> +:101BF00000000000000000000000000000000000E5
> +:101C000000000000000000000000000000000000D4
> +:101C100000000000000000000000000000000000C4
> +:101C200000000000000000000000000000000000B4
> +:101C300000000000000000000000000000000000A4
> +:101C40000000000000000000000000000000000094
> +:101C50000000000000000000000000000000000084
> +:101C60000000000000000000000000000000000074
> +:101C70000000000000000000000000000000000064
> +:101C80000000000000000000000000000000000054
> +:101C90000000000000000000000000000000000044
> +:101CA0000000000000000000000000000000000034
> +:101CB0000000000000000000000000000000000024
> +:101CC0000000000000000000000000000000000014
> +:101CD0000000000000000000000000000000000004
> +:101CE00000000000000000000000000000000000F4
> +:101CF00000000000000000000000000000000000E4
> +:101D000000000000000000000000000000000000D3
> +:101D100000000000000000000000000000000000C3
> +:101D200000000000000000000000000000000000B3
> +:101D300000000000000000000000000000000000A3
> +:101D40000000000000000000000000000000000093
> +:101D50000000000000000000000000000000000083
> +:101D60000000000000000000000000000000000073
> +:101D70000000000000000000000000000000000063
> +:101D80000000000000000000000000000000000053
> +:101D90000000000000000000000000000000000043
> +:101DA0000000000000000000000000000000000033
> +:101DB0000000000000000000000000000000000023
> +:101DC0000000000000000000000000000000000013
> +:101DD0000000000000000000000000000000000003
> +:101DE00000000000000000000000000000000000F3
> +:101DF00000000000000000000000000000000000E3
> +:101E000000000000000000000000000000000000D2
> +:101E100000000000000000000000000000000000C2
> +:101E200000000000000000000000000000000000B2
> +:101E300000000000000000000000000000000000A2
> +:101E40000000000000000000000000000000000092
> +:101E50000000000000000000000000000000000082
> +:101E60000000000000000000000000000000000072
> +:101E70000000000000000000000000000000000062
> +:101E80000000000000000000000000000000000052
> +:101E90000000000000000000000000000000000042
> +:101EA0000000000000000000000000000000000032
> +:101EB0000000000000000000000000000000000022
> +:101EC0000000000000000000000000000000000012
> +:101ED0000000000000000000000000000000000002
> +:101EE00000000000000000000000000000000000F2
> +:101EF00000000000000000000000000000000000E2
> +:101F000000000000000000000000000000000000D1
> +:101F100000000000000000000000000000000000C1
> +:101F200000000000000000000000000000000000B1
> +:101F300000000000000000000000000000000000A1
> +:101F40000000000000000000000000000000000091
> +:101F50000000000000000000000000000000000081
> +:101F60000000000000000000000000000000000071
> +:101F70000000000000000000000000000000000061
> +:101F80000000000000000000000000000000000051
> +:101F90000000000000000000000000000000000041
> +:101FA0000000000000000000000000000000000031
> +:101FB0000000000000000000000000000000000021
> +:101FC0000000000000000000000000000000000011
> +:101FD0000000000000000000000000000000000001
> +:101FE00000000000000000000000000000000000F1
> +:101FF00000000000000000000000000000000000E1
> +:00000001FF
diff mbox

Patch

diff --git a/arch/powerpc/sysdev/micropatch.c 
b/arch/powerpc/sysdev/micropatch.c
index 6727dc5..c24780c 100644
--- a/arch/powerpc/sysdev/micropatch.c
+++ b/arch/powerpc/sysdev/micropatch.c
@@ -12,6 +12,8 @@ 
  #include <linux/string.h>
  #include <linux/mm.h>
  #include <linux/interrupt.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
  #include <asm/irq.h>
  #include <asm/page.h>
  #include <asm/pgtable.h>
@@ -19,652 +21,69 @@ 
  #include <asm/cpm.h>
  #include <asm/cpm1.h>

-/*
- * I2C/SPI relocation patch arrays.
- */
-
-#ifdef CONFIG_I2C_SPI_UCODE_PATCH
-
-static uint patch_2000[] __initdata = {
-    0x7FFFEFD9,
-    0x3FFD0000,
-    0x7FFB49F7,
-    0x7FF90000,
-    0x5FEFADF7,
-    0x5F89ADF7,
-    0x5FEFAFF7,
-    0x5F89AFF7,
-    0x3A9CFBC8,
-    0xE7C0EDF0,
-    0x77C1E1BB,
-    0xF4DC7F1D,
-    0xABAD932F,
-    0x4E08FDCF,
-    0x6E0FAFF8,
-    0x7CCF76CF,
-    0xFD1FF9CF,
-    0xABF88DC6,
-    0xAB5679F7,
-    0xB0937383,
-    0xDFCE79F7,
-    0xB091E6BB,
-    0xE5BBE74F,
-    0xB3FA6F0F,
-    0x6FFB76CE,
-    0xEE0DF9CF,
-    0x2BFBEFEF,
-    0xCFEEF9CF,
-    0x76CEAD24,
-    0x90B2DF9A,
-    0x7FDDD0BF,
-    0x4BF847FD,
-    0x7CCF76CE,
-    0xCFEF7E1F,
-    0x7F1D7DFD,
-    0xF0B6EF71,
-    0x7FC177C1,
-    0xFBC86079,
-    0xE722FBC8,
-    0x5FFFDFFF,
-    0x5FB2FFFB,
-    0xFBC8F3C8,
-    0x94A67F01,
-    0x7F1D5F39,
-    0xAFE85F5E,
-    0xFFDFDF96,
-    0xCB9FAF7D,
-    0x5FC1AFED,
-    0x8C1C5FC1,
-    0xAFDD5FC3,
-    0xDF9A7EFD,
-    0xB0B25FB2,
-    0xFFFEABAD,
-    0x5FB2FFFE,
-    0x5FCE600B,
-    0xE6BB600B,
-    0x5FCEDFC6,
-    0x27FBEFDF,
-    0x5FC8CFDE,
-    0x3A9CE7C0,
-    0xEDF0F3C8,
-    0x7F0154CD,
-    0x7F1D2D3D,
-    0x363A7570,
-    0x7E0AF1CE,
-    0x37EF2E68,
-    0x7FEE10EC,
-    0xADF8EFDE,
-    0xCFEAE52F,
-    0x7D0FE12B,
-    0xF1CE5F65,
-    0x7E0A4DF8,
-    0xCFEA5F72,
-    0x7D0BEFEE,
-    0xCFEA5F74,
-    0xE522EFDE,
-    0x5F74CFDA,
-    0x0B627385,
-    0xDF627E0A,
-    0x30D8145B,
-    0xBFFFF3C8,
-    0x5FFFDFFF,
-    0xA7F85F5E,
-    0xBFFE7F7D,
-    0x10D31450,
-    0x5F36BFFF,
-    0xAF785F5E,
-    0xBFFDA7F8,
-    0x5F36BFFE,
-    0x77FD30C0,
-    0x4E08FDCF,
-    0xE5FF6E0F,
-    0xAFF87E1F,
-    0x7E0FFD1F,
-    0xF1CF5F1B,
-    0xABF80D5E,
-    0x5F5EFFEF,
-    0x79F730A2,
-    0xAFDD5F34,
-    0x47F85F34,
-    0xAFED7FDD,
-    0x50B24978,
-    0x47FD7F1D,
-    0x7DFD70AD,
-    0xEF717EC1,
-    0x6BA47F01,
-    0x2D267EFD,
-    0x30DE5F5E,
-    0xFFFD5F5E,
-    0xFFEF5F5E,
-    0xFFDF0CA0,
-    0xAFED0A9E,
-    0xAFDD0C3A,
-    0x5F3AAFBD,
-    0x7FBDB082,
-    0x5F8247F8
-};
-
-static uint patch_2f00[] __initdata = {
-    0x3E303430,
-    0x34343737,
-    0xABF7BF9B,
-    0x994B4FBD,
-    0xBD599493,
-    0x349FFF37,
-    0xFB9B177D,
-    0xD9936956,
-    0xBBFDD697,
-    0xBDD2FD11,
-    0x31DB9BB3,
-    0x63139637,
-    0x93733693,
-    0x193137F7,
-    0x331737AF,
-    0x7BB9B999,
-    0xBB197957,
-    0x7FDFD3D5,
-    0x73B773F7,
-    0x37933B99,
-    0x1D115316,
-    0x99315315,
-    0x31694BF4,
-    0xFBDBD359,
-    0x31497353,
-    0x76956D69,
-    0x7B9D9693,
-    0x13131979,
-    0x79376935
-};
-#endif
-
-/*
- * I2C/SPI/SMC1 relocation patch arrays.
- */
-
-#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
+MODULE_FIRMWARE("freescale/i2c_spi.bin");
+MODULE_FIRMWARE("freescale/i2c_spi_smc1.bin");
+MODULE_FIRMWARE("freescale/usb_sof.bin");

-static uint patch_2000[] __initdata = {
-    0x3fff0000,
-    0x3ffd0000,
-    0x3ffb0000,
-    0x3ff90000,
-    0x5f13eff8,
-    0x5eb5eff8,
-    0x5f88adf7,
-    0x5fefadf7,
-    0x3a9cfbc8,
-    0x77cae1bb,
-    0xf4de7fad,
-    0xabae9330,
-    0x4e08fdcf,
-    0x6e0faff8,
-    0x7ccf76cf,
-    0xfdaff9cf,
-    0xabf88dc8,
-    0xab5879f7,
-    0xb0925d8d,
-    0xdfd079f7,
-    0xb090e6bb,
-    0xe5bbe74f,
-    0x9e046f0f,
-    0x6ffb76ce,
-    0xee0cf9cf,
-    0x2bfbefef,
-    0xcfeef9cf,
-    0x76cead23,
-    0x90b3df99,
-    0x7fddd0c1,
-    0x4bf847fd,
-    0x7ccf76ce,
-    0xcfef77ca,
-    0x7eaf7fad,
-    0x7dfdf0b7,
-    0xef7a7fca,
-    0x77cafbc8,
-    0x6079e722,
-    0xfbc85fff,
-    0xdfff5fb3,
-    0xfffbfbc8,
-    0xf3c894a5,
-    0xe7c9edf9,
-    0x7f9a7fad,
-    0x5f36afe8,
-    0x5f5bffdf,
-    0xdf95cb9e,
-    0xaf7d5fc3,
-    0xafed8c1b,
-    0x5fc3afdd,
-    0x5fc5df99,
-    0x7efdb0b3,
-    0x5fb3fffe,
-    0xabae5fb3,
-    0xfffe5fd0,
-    0x600be6bb,
-    0x600b5fd0,
-    0xdfc827fb,
-    0xefdf5fca,
-    0xcfde3a9c,
-    0xe7c9edf9,
-    0xf3c87f9e,
-    0x54ca7fed,
-    0x2d3a3637,
-    0x756f7e9a,
-    0xf1ce37ef,
-    0x2e677fee,
-    0x10ebadf8,
-    0xefdecfea,
-    0xe52f7d9f,
-    0xe12bf1ce,
-    0x5f647e9a,
-    0x4df8cfea,
-    0x5f717d9b,
-    0xefeecfea,
-    0x5f73e522,
-    0xefde5f73,
-    0xcfda0b61,
-    0x5d8fdf61,
-    0xe7c9edf9,
-    0x7e9a30d5,
-    0x1458bfff,
-    0xf3c85fff,
-    0xdfffa7f8,
-    0x5f5bbffe,
-    0x7f7d10d0,
-    0x144d5f33,
-    0xbfffaf78,
-    0x5f5bbffd,
-    0xa7f85f33,
-    0xbffe77fd,
-    0x30bd4e08,
-    0xfdcfe5ff,
-    0x6e0faff8,
-    0x7eef7e9f,
-    0xfdeff1cf,
-    0x5f17abf8,
-    0x0d5b5f5b,
-    0xffef79f7,
-    0x309eafdd,
-    0x5f3147f8,
-    0x5f31afed,
-    0x7fdd50af,
-    0x497847fd,
-    0x7f9e7fed,
-    0x7dfd70a9,
-    0xef7e7ece,
-    0x6ba07f9e,
-    0x2d227efd,
-    0x30db5f5b,
-    0xfffd5f5b,
-    0xffef5f5b,
-    0xffdf0c9c,
-    0xafed0a9a,
-    0xafdd0c37,
-    0x5f37afbd,
-    0x7fbdb081,
-    0x5f8147f8,
-    0x3a11e710,
-    0xedf0ccdd,
-    0xf3186d0a,
-    0x7f0e5f06,
-    0x7fedbb38,
-    0x3afe7468,
-    0x7fedf4fc,
-    0x8ffbb951,
-    0xb85f77fd,
-    0xb0df5ddd,
-    0xdefe7fed,
-    0x90e1e74d,
-    0x6f0dcbf7,
-    0xe7decfed,
-    0xcb74cfed,
-    0xcfeddf6d,
-    0x91714f74,
-    0x5dd2deef,
-    0x9e04e7df,
-    0xefbb6ffb,
-    0xe7ef7f0e,
-    0x9e097fed,
-    0xebdbeffa,
-    0xeb54affb,
-    0x7fea90d7,
-    0x7e0cf0c3,
-    0xbffff318,
-    0x5fffdfff,
-    0xac59efea,
-    0x7fce1ee5,
-    0xe2ff5ee1,
-    0xaffbe2ff,
-    0x5ee3affb,
-    0xf9cc7d0f,
-    0xaef8770f,
-    0x7d0fb0c6,
-    0xeffbbfff,
-    0xcfef5ede,
-    0x7d0fbfff,
-    0x5ede4cf8,
-    0x7fddd0bf,
-    0x49f847fd,
-    0x7efdf0bb,
-    0x7fedfffd,
-    0x7dfdf0b7,
-    0xef7e7e1e,
-    0x5ede7f0e,
-    0x3a11e710,
-    0xedf0ccab,
-    0xfb18ad2e,
-    0x1ea9bbb8,
-    0x74283b7e,
-    0x73c2e4bb,
-    0x2ada4fb8,
-    0xdc21e4bb,
-    0xb2a1ffbf,
-    0x5e2c43f8,
-    0xfc87e1bb,
-    0xe74ffd91,
-    0x6f0f4fe8,
-    0xc7ba32e2,
-    0xf396efeb,
-    0x600b4f78,
-    0xe5bb760b,
-    0x53acaef8,
-    0x4ef88b0e,
-    0xcfef9e09,
-    0xabf8751f,
-    0xefef5bac,
-    0x741f4fe8,
-    0x751e760d,
-    0x7fdbf081,
-    0x741cafce,
-    0xefcc7fce,
-    0x751e70ac,
-    0x741ce7bb,
-    0x3372cfed,
-    0xafdbefeb,
-    0xe5bb760b,
-    0x53f2aef8,
-    0xafe8e7eb,
-    0x4bf8771e,
-    0x7e247fed,
-    0x4fcbe2cc,
-    0x7fbc30a9,
-    0x7b0f7a0f,
-    0x34d577fd,
-    0x308b5db7,
-    0xde553e5f,
-    0xaf78741f,
-    0x741f30f0,
-    0xcfef5e2c,
-    0x741f3eac,
-    0xafb8771e,
-    0x5e677fed,
-    0x0bd3e2cc,
-    0x741ccfec,
-    0xe5ca53cd,
-    0x6fcb4f74,
-    0x5dadde4b,
-    0x2ab63d38,
-    0x4bb3de30,
-    0x751f741c,
-    0x6c42effa,
-    0xefea7fce,
-    0x6ffc30be,
-    0xefec3fca,
-    0x30b3de2e,
-    0xadf85d9e,
-    0xaf7daefd,
-    0x5d9ede2e,
-    0x5d9eafdd,
-    0x761f10ac,
-    0x1da07efd,
-    0x30adfffe,
-    0x4908fb18,
-    0x5fffdfff,
-    0xafbb709b,
-    0x4ef85e67,
-    0xadf814ad,
-    0x7a0f70ad,
-    0xcfef50ad,
-    0x7a0fde30,
-    0x5da0afed,
-    0x3c12780f,
-    0xefef780f,
-    0xefef790f,
-    0xa7f85e0f,
-    0xffef790f,
-    0xefef790f,
-    0x14adde2e,
-    0x5d9eadfd,
-    0x5e2dfffb,
-    0xe79addfd,
-    0xeff96079,
-    0x607ae79a,
-    0xddfceff9,
-    0x60795dff,
-    0x607acfef,
-    0xefefefdf,
-    0xefbfef7f,
-    0xeeffedff,
-    0xebffe7ff,
-    0xafefafdf,
-    0xafbfaf7f,
-    0xaeffadff,
-    0xabffa7ff,
-    0x6fef6fdf,
-    0x6fbf6f7f,
-    0x6eff6dff,
-    0x6bff67ff,
-    0x2fef2fdf,
-    0x2fbf2f7f,
-    0x2eff2dff,
-    0x2bff27ff,
-    0x4e08fd1f,
-    0xe5ff6e0f,
-    0xaff87eef,
-    0x7e0ffdef,
-    0xf11f6079,
-    0xabf8f542,
-    0x7e0af11c,
-    0x37cfae3a,
-    0x7fec90be,
-    0xadf8efdc,
-    0xcfeae52f,
-    0x7d0fe12b,
-    0xf11c6079,
-    0x7e0a4df8,
-    0xcfea5dc4,
-    0x7d0befec,
-    0xcfea5dc6,
-    0xe522efdc,
-    0x5dc6cfda,
-    0x4e08fd1f,
-    0x6e0faff8,
-    0x7c1f761f,
-    0xfdeff91f,
-    0x6079abf8,
-    0x761cee24,
-    0xf91f2bfb,
-    0xefefcfec,
-    0xf91f6079,
-    0x761c27fb,
-    0xefdf5da7,
-    0xcfdc7fdd,
-    0xd09c4bf8,
-    0x47fd7c1f,
-    0x761ccfcf,
-    0x7eef7fed,
-    0x7dfdf093,
-    0xef7e7f1e,
-    0x771efb18,
-    0x6079e722,
-    0xe6bbe5bb,
-    0xae0ae5bb,
-    0x600bae85,
-    0xe2bbe2bb,
-    0xe2bbe2bb,
-    0xaf02e2bb,
-    0xe2bb2ff9,
-    0x6079e2bb
-};
-
-static uint patch_2f00[] __initdata = {
-    0x30303030,
-    0x3e3e3434,
-    0xabbf9b99,
-    0x4b4fbdbd,
-    0x59949334,
-    0x9fff37fb,
-    0x9b177dd9,
-    0x936956bb,
-    0xfbdd697b,
-    0xdd2fd113,
-    0x1db9f7bb,
-    0x36313963,
-    0x79373369,
-    0x3193137f,
-    0x7331737a,
-    0xf7bb9b99,
-    0x9bb19795,
-    0x77fdfd3d,
-    0x573b773f,
-    0x737933f7,
-    0xb991d115,
-    0x31699315,
-    0x31531694,
-    0xbf4fbdbd,
-    0x35931497,
-    0x35376956,
-    0xbd697b9d,
-    0x96931313,
-    0x19797937,
-    0x6935af78,
-    0xb9b3baa3,
-    0xb8788683,
-    0x368f78f7,
-    0x87778733,
-    0x3ffffb3b,
-    0x8e8f78b8,
-    0x1d118e13,
-    0xf3ff3f8b,
-    0x6bd8e173,
-    0xd1366856,
-    0x68d1687b,
-    0x3daf78b8,
-    0x3a3a3f87,
-    0x8f81378f,
-    0xf876f887,
-    0x77fd8778,
-    0x737de8d6,
-    0xbbf8bfff,
-    0xd8df87f7,
-    0xfd876f7b,
-    0x8bfff8bd,
-    0x8683387d,
-    0xb873d87b,
-    0x3b8fd7f8,
-    0xf7338883,
-    0xbb8ee1f8,
-    0xef837377,
-    0x3337b836,
-    0x817d11f8,
-    0x7378b878,
-    0xd3368b7d,
-    0xed731b7d,
-    0x833731f3,
-    0xf22f3f23
-};
-
-static uint patch_2e00[] __initdata = {
-    0x27eeeeee,
-    0xeeeeeeee,
-    0xeeeeeeee,
-    0xeeeeeeee,
-    0xee4bf4fb,
-    0xdbd259bb,
-    0x1979577f,
-    0xdfd2d573,
-    0xb773f737,
-    0x4b4fbdbd,
-    0x25b9b177,
-    0xd2d17376,
-    0x956bbfdd,
-    0x697bdd2f,
-    0xff9f79ff,
-    0xff9ff22f
-};
-#endif
+static int cpm_copy_firmware(unsigned char *dpmem, char *file)
+{
+    const struct firmware *fw;
+    uint *src;
+    int i;

-/*
- *  USB SOF patch arrays.
- */
+    if (request_firmware_direct(&fw, file, NULL)) {
+        printk("%s microcode patch not found\n", file);
+        return -1;
+    }

-#ifdef CONFIG_USB_SOF_UCODE_PATCH
+    for (i = 0, src = (uint*)fw->data; i < fw->size >> 2; i++)
+        *dpmem++ = *src++;

-static uint patch_2000[] __initdata = {
-    0x7fff0000,
-    0x7ffd0000,
-    0x7ffb0000,
-    0x49f7ba5b,
-    0xba383ffb,
-    0xf9b8b46d,
-    0xe5ab4e07,
-    0xaf77bffe,
-    0x3f7bbf79,
-    0xba5bba38,
-    0xe7676076,
-    0x60750000
-};
-
-static uint patch_2f00[] __initdata = {
-    0x3030304c,
-    0xcab9e441,
-    0xa1aaf220
-};
-#endif
+    return 0;
+}

  void __init cpm_load_patch(cpm8xx_t *cp)
  {
-    volatile uint        *dp;        /* Dual-ported RAM. */
      volatile cpm8xx_t    *commproc;
  #if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
      defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
      volatile iic_t        *iip;
      volatile struct spi_pram *spp;
+    int    i;
  #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
      volatile smc_uart_t    *smp;
  #endif
  #endif
-    int    i;

      commproc = cp;

-#ifdef CONFIG_USB_SOF_UCODE_PATCH
      commproc->cp_rccr = 0;

-    dp = (uint *)(commproc->cp_dpmem);
-    for (i=0; i<(sizeof(patch_2000)/4); i++)
-        *dp++ = patch_2000[i];
-
-    dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
-    for (i=0; i<(sizeof(patch_2f00)/4); i++)
-        *dp++ = patch_2f00[i];
+#ifdef CONFIG_USB_SOF_UCODE_PATCH
+    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
+        "freescale/usb_sof.bin"))
+        return;

      commproc->cp_rccr = 0x0009;

      printk("USB SOF microcode patch installed\n");
  #endif /* CONFIG_USB_SOF_UCODE_PATCH */

-#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
-    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
+#ifdef CONFIG_I2C_SPI_UCODE_PATCH
+    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
+        "freescale/i2c_spi.bin"))
+        return;

-    commproc->cp_rccr = 0;
+#endif
+#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
+    if (cpm_copy_firmware((unsigned char*)commproc->cp_dpmem,
+        "freescale/i2c_spi_smc1.bin"))
+        return;

-    dp = (uint *)(commproc->cp_dpmem);
-    for (i=0; i<(sizeof(patch_2000)/4); i++)
-        *dp++ = patch_2000[i];
+#endif

-    dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
-    for (i=0; i<(sizeof(patch_2f00)/4); i++)
-        *dp++ = patch_2f00[i];
+#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
+    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)

      iip = (iic_t *)&commproc->cp_dparam[PROFF_IIC];
  # define RPBASE 0x0500
@@ -688,10 +107,6 @@  void __init cpm_load_patch(cpm8xx_t *cp)

  # if defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)

-    dp = (uint *)&(commproc->cp_dpmem[0x0e00]);
-    for (i=0; i<(sizeof(patch_2e00)/4); i++)
-        *dp++ = patch_2e00[i];
-
      commproc->cp_cpmcr1 = 0x8080;
      commproc->cp_cpmcr2 = 0x808a;
      commproc->cp_cpmcr3 = 0x8028;
diff --git a/firmware/Makefile b/firmware/Makefile
index e297e1b..1454d27 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -135,6 +135,9 @@  fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += 
keyspan_pda/xircom_pgs.fw
  fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
  fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
  fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
+fw_shipped-$(CONFIG_USB_SOF_UCODE_PATCH) += freescale/usb_sof.bin
+fw_shipped-$(CONFIG_I2C_SPI_UCODE_PATCH) += freescale/i2c_spi.bin
+fw_shipped-$(CONFIG_I2C_SPI_SMC1_UCODE_PATCH) += freescale/i2c_spi_smc1.bin

  fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)

diff --git a/firmware/freescale/i2c_spi.bin.ihex 
b/firmware/freescale/i2c_spi.bin.ihex
new file mode 100644
index 0000000..d9fe26a
--- /dev/null
+++ b/firmware/freescale/i2c_spi.bin.ihex
@@ -0,0 +1,257 @@ 
+:100000007FFFEFD93FFD00007FFB49F77FF900003C
+:100010005FEFADF75F89ADF75FEFAFF75F89AFF7E0
+:100020003A9CFBC8E7C0EDF077C1E1BBF4DC7F1D73
+:10003000ABAD932F4E08FDCF6E0FAFF87CCF76CFD0
+:10004000FD1FF9CFABF88DC6AB5679F7B09373832C
+:10005000DFCE79F7B091E6BBE5BBE74FB3FA6F0FA0
+:100060006FFB76CEEE0DF9CF2BFBEFEFCFEEF9CF96
+:1000700076CEAD2490B2DF9A7FDDD0BF4BF847FD3E
+:100080007CCF76CECFEF7E1F7F1D7DFDF0B6EF716A
+:100090007FC177C1FBC86079E722FBC85FFFDFFF44
+:1000A0005FB2FFFBFBC8F3C894A67F017F1D5F39D9
+:1000B000AFE85F5EFFDFDF96CB9FAF7D5FC1AFED47
+:1000C0008C1C5FC1AFDD5FC3DF9A7EFDB0B25FB253
+:1000D000FFFEABAD5FB2FFFE5FCE600BE6BB600B19
+:1000E0005FCEDFC627FBEFDF5FC8CFDE3A9CE7C0FD
+:1000F000EDF0F3C87F0154CD7F1D2D3D363A75706C
+:100100007E0AF1CE37EF2E687FEE10ECADF8EFDE11
+:10011000CFEAE52F7D0FE12BF1CE5F657E0A4DF82A
+:10012000CFEA5F727D0BEFEECFEA5F74E522EFDE80
+:100130005F74CFDA0B627385DF627E0A30D8145B9E
+:10014000BFFFF3C85FFFDFFFA7F85F5EBFFE7F7DE5
+:1001500010D314505F36BFFFAF785F5EBFFDA7F8C6
+:100160005F36BFFE77FD30C04E08FDCFE5FF6E0F56
+:10017000AFF87E1F7E0FFD1FF1CF5F1BABF80D5E4A
+:100180005F5EFFEF79F730A2AFDD5F3447F85F3491
+:10019000AFED7FDD50B2497847FD7F1D7DFD70AD2D
+:1001A000EF717EC16BA47F012D267EFD30DE5F5E88
+:1001B000FFFD5F5EFFEF5F5EFFDF0CA0AFED0A9E0D
+:1001C000AFDD0C3A5F3AAFBD7FBDB0825F8247F8CA
+:1001D000000000000000000000000000000000001F
+:1001E000000000000000000000000000000000000F
+:1001F00000000000000000000000000000000000FF
+:1002000000000000000000000000000000000000EE
+:1002100000000000000000000000000000000000DE
+:1002200000000000000000000000000000000000CE
+:1002300000000000000000000000000000000000BE
+:1002400000000000000000000000000000000000AE
+:10025000000000000000000000000000000000009E
+:10026000000000000000000000000000000000008E
+:10027000000000000000000000000000000000007E
+:10028000000000000000000000000000000000006E
+:10029000000000000000000000000000000000005E
+:1002A000000000000000000000000000000000004E
+:1002B000000000000000000000000000000000003E
+:1002C000000000000000000000000000000000002E
+:1002D000000000000000000000000000000000001E
+:1002E000000000000000000000000000000000000E
+:1002F00000000000000000000000000000000000FE
+:1003000000000000000000000000000000000000ED
+:1003100000000000000000000000000000000000DD
+:1003200000000000000000000000000000000000CD
+:1003300000000000000000000000000000000000BD
+:1003400000000000000000000000000000000000AD
+:10035000000000000000000000000000000000009D
+:10036000000000000000000000000000000000008D
+:10037000000000000000000000000000000000007D
+:10038000000000000000000000000000000000006D
+:10039000000000000000000000000000000000005D
+:1003A000000000000000000000000000000000004D
+:1003B000000000000000000000000000000000003D
+:1003C000000000000000000000000000000000002D
+:1003D000000000000000000000000000000000001D
+:1003E000000000000000000000000000000000000D
+:1003F00000000000000000000000000000000000FD
+:1004000000000000000000000000000000000000EC
+:1004100000000000000000000000000000000000DC
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000000079
+:100780000000000000000000000000000000000069
+:100790000000000000000000000000000000000059
+:1007A0000000000000000000000000000000000049
+:1007B0000000000000000000000000000000000039
+:1007C0000000000000000000000000000000000029
+:1007D0000000000000000000000000000000000019
+:1007E0000000000000000000000000000000000009
+:1007F00000000000000000000000000000000000F9
+:1008000000000000000000000000000000000000E8
+:1008100000000000000000000000000000000000D8
+:1008200000000000000000000000000000000000C8
+:1008300000000000000000000000000000000000B8
+:1008400000000000000000000000000000000000A8
+:100850000000000000000000000000000000000098
+:100860000000000000000000000000000000000088
+:100870000000000000000000000000000000000078
+:100880000000000000000000000000000000000068
+:100890000000000000000000000000000000000058
+:1008A0000000000000000000000000000000000048
+:1008B0000000000000000000000000000000000038
+:1008C0000000000000000000000000000000000028
+:1008D0000000000000000000000000000000000018
+:1008E0000000000000000000000000000000000008
+:1008F00000000000000000000000000000000000F8
+:1009000000000000000000000000000000000000E7
+:1009100000000000000000000000000000000000D7
+:1009200000000000000000000000000000000000C7
+:1009300000000000000000000000000000000000B7
+:1009400000000000000000000000000000000000A7
+:100950000000000000000000000000000000000097
+:100960000000000000000000000000000000000087
+:100970000000000000000000000000000000000077
+:100980000000000000000000000000000000000067
+:100990000000000000000000000000000000000057
+:1009A0000000000000000000000000000000000047
+:1009B0000000000000000000000000000000000037
+:1009C0000000000000000000000000000000000027
+:1009D0000000000000000000000000000000000017
+:1009E0000000000000000000000000000000000007
+:1009F00000000000000000000000000000000000F7
+:100A000000000000000000000000000000000000E6
+:100A100000000000000000000000000000000000D6
+:100A200000000000000000000000000000000000C6
+:100A300000000000000000000000000000000000B6
+:100A400000000000000000000000000000000000A6
+:100A50000000000000000000000000000000000096
+:100A60000000000000000000000000000000000086
+:100A70000000000000000000000000000000000076
+:100A80000000000000000000000000000000000066
+:100A90000000000000000000000000000000000056
+:100AA0000000000000000000000000000000000046
+:100AB0000000000000000000000000000000000036
+:100AC0000000000000000000000000000000000026
+:100AD0000000000000000000000000000000000016
+:100AE0000000000000000000000000000000000006
+:100AF00000000000000000000000000000000000F6
+:100B000000000000000000000000000000000000E5
+:100B100000000000000000000000000000000000D5
+:100B200000000000000000000000000000000000C5
+:100B300000000000000000000000000000000000B5
+:100B400000000000000000000000000000000000A5
+:100B50000000000000000000000000000000000095
+:100B60000000000000000000000000000000000085
+:100B70000000000000000000000000000000000075
+:100B80000000000000000000000000000000000065
+:100B90000000000000000000000000000000000055
+:100BA0000000000000000000000000000000000045
+:100BB0000000000000000000000000000000000035
+:100BC0000000000000000000000000000000000025
+:100BD0000000000000000000000000000000000015
+:100BE0000000000000000000000000000000000005
+:100BF00000000000000000000000000000000000F5
+:100C000000000000000000000000000000000000E4
+:100C100000000000000000000000000000000000D4
+:100C200000000000000000000000000000000000C4
+:100C300000000000000000000000000000000000B4
+:100C400000000000000000000000000000000000A4
+:100C50000000000000000000000000000000000094
+:100C60000000000000000000000000000000000084
+:100C70000000000000000000000000000000000074
+:100C80000000000000000000000000000000000064
+:100C90000000000000000000000000000000000054
+:100CA0000000000000000000000000000000000044
+:100CB0000000000000000000000000000000000034
+:100CC0000000000000000000000000000000000024
+:100CD0000000000000000000000000000000000014
+:100CE0000000000000000000000000000000000004
+:100CF00000000000000000000000000000000000F4
+:100D000000000000000000000000000000000000E3
+:100D100000000000000000000000000000000000D3
+:100D200000000000000000000000000000000000C3
+:100D300000000000000000000000000000000000B3
+:100D400000000000000000000000000000000000A3
+:100D50000000000000000000000000000000000093
+:100D60000000000000000000000000000000000083
+:100D70000000000000000000000000000000000073
+:100D80000000000000000000000000000000000063
+:100D90000000000000000000000000000000000053
+:100DA0000000000000000000000000000000000043
+:100DB0000000000000000000000000000000000033
+:100DC0000000000000000000000000000000000023
+:100DD0000000000000000000000000000000000013
+:100DE0000000000000000000000000000000000003
+:100DF00000000000000000000000000000000000F3
+:100E000000000000000000000000000000000000E2
+:100E100000000000000000000000000000000000D2
+:100E200000000000000000000000000000000000C2
+:100E300000000000000000000000000000000000B2
+:100E400000000000000000000000000000000000A2
+:100E50000000000000000000000000000000000092
+:100E60000000000000000000000000000000000082
+:100E70000000000000000000000000000000000072
+:100E80000000000000000000000000000000000062
+:100E90000000000000000000000000000000000052
+:100EA0000000000000000000000000000000000042
+:100EB0000000000000000000000000000000000032
+:100EC0000000000000000000000000000000000022
+:100ED0000000000000000000000000000000000012
+:100EE0000000000000000000000000000000000002
+:100EF00000000000000000000000000000000000F2
+:100F00003E30343034343737ABF7BF9B994B4FBD4D
+:100F1000BD599493349FFF37FB9B177DD993695636
+:100F2000BBFDD697BDD2FD1131DB9BB36313963762
+:100F300093733693193137F7331737AF7BB9B999B4
+:100F4000BB1979577FDFD3D573B773F737933B99C5
+:100F50001D1153169931531531694BF4FBDBD359ED
+:100F60003149735376956D697B9D96931313197967
+:100F70007937693500000000000000000000000023
+:100F80000000000000000000000000000000000061
+:100F90000000000000000000000000000000000051
+:100FA0000000000000000000000000000000000041
+:100FB0000000000000000000000000000000000031
+:100FC0000000000000000000000000000000000021
+:100FD0000000000000000000000000000000000011
+:100FE0000000000000000000000000000000000001
+:100FF00000000000000000000000000000000000F1
+:00000001FF
diff --git a/firmware/freescale/i2c_spi_smc1.bin.ihex 
b/firmware/freescale/i2c_spi_smc1.bin.ihex
new file mode 100644
index 0000000..96fe6e0
--- /dev/null
+++ b/firmware/freescale/i2c_spi_smc1.bin.ihex
@@ -0,0 +1,257 @@ 
+:100000003FFF00003FFD00003FFB00003FF9000004
+:100010005F13EFF85EB5EFF85F88ADF75FEFADF710
+:100020003A9CFBC877CAE1BBF4DE7FADABAE933040
+:100030004E08FDCF6E0FAFF87CCF76CFFDAFF9CF76
+:10004000ABF88DC8AB5879F7B0925D8DDFD079F7FA
+:10005000B090E6BBE5BBE74F9E046F0F6FFB76CE1B
+:10006000EE0CF9CF2BFBEFEFCFEEF9CF76CEAD2331
+:1000700090B3DF997FDDD0C14BF847FD7CCF76CEC2
+:10008000CFEF77CA7EAF7FAD7DFDF0B7EF7A7FCA45
+:1000900077CAFBC86079E722FBC85FFFDFFF5FB369
+:1000A000FFFBFBC8F3C894A5E7C9EDF97F9A7FADC4
+:1000B0005F36AFE85F5BFFDFDF95CB9EAF7D5FC351
+:1000C000AFED8C1B5FC3AFDD5FC5DF997EFDB0B3C5
+:1000D0005FB3FFFEABAE5FB3FFFE5FD0600BE6BB6E
+:1000E000600B5FD0DFC827FBEFDF5FCACFDE3A9C33
+:1000F000E7C9EDF9F3C87F9E54CA7FED2D3A363734
+:10010000756F7E9AF1CE37EF2E677FEE10EBADF86C
+:10011000EFDECFEAE52F7D9FE12BF1CE5F647E9A83
+:100120004DF8CFEA5F717D9BEFEECFEA5F73E5227A
+:10013000EFDE5F73CFDA0B615D8FDF61E7C9EDF949
+:100140007E9A30D51458BFFFF3C85FFFDFFFA7F8D2
+:100150005F5BBFFE7F7D10D0144D5F33BFFFAF7874
+:100160005F5BBFFDA7F85F33BFFE77FD30BD4E0874
+:10017000FDCFE5FF6E0FAFF87EEF7E9FFDEFF1CF75
+:100180005F17ABF80D5B5F5BFFEF79F7309EAFDD7C
+:100190005F3147F85F31AFED7FDD50AF497847FD04
+:1001A0007F9E7FED7DFD70A9EF7E7ECE6BA07F9E52
+:1001B0002D227EFD30DB5F5BFFFD5F5BFFEF5F5B52
+:1001C000FFDF0C9CAFED0A9AAFDD0C375F37AFBD98
+:1001D0007FBDB0815F8147F83A11E710EDF0CCDDCB
+:1001E000F3186D0A7F0E5F067FEDBB383AFE746828
+:1001F0007FEDF4FC8FFBB951B85F77FDB0DF5DDDBB
+:10020000DEFE7FED90E1E74D6F0DCBF7E7DECFED42
+:10021000CB74CFEDCFEDDF6D91714F745DD2DEEF1A
+:100220009E04E7DFEFBB6FFBE7EF7F0E9E097FEDDC
+:10023000EBDBEFFAEB54AFFB7FEA90D77E0CF0C319
+:10024000BFFFF3185FFFDFFFAC59EFEA7FCE1EE57B
+:10025000E2FF5EE1AFFBE2FF5EE3AFFBF9CC7D0FB7
+:10026000AEF8770F7D0FB0C6EFFBBFFFCFEF5EDEBE
+:100270007D0FBFFF5EDE4CF87FDDD0BF49F847FD44
+:100280007EFDF0BB7FEDFFFD7DFDF0B7EF7E7E1EB6
+:100290005EDE7F0E3A11E710EDF0CCABFB18AD2E11
+:1002A0001EA9BBB874283B7E73C2E4BB2ADA4FB8E0
+:1002B000DC21E4BBB2A1FFBF5E2C43F8FC87E1BBAD
+:1002C000E74FFD916F0F4FE8C7BA32E2F396EFEBBD
+:1002D000600B4F78E5BB760B53ACAEF84EF88B0E47
+:1002E000CFEF9E09ABF8751FEFEF5BAC741F4FE8C3
+:1002F000751E760D7FDBF081741CAFCEEFCC7FCE08
+:10030000751E70AC741CE7BB3372CFEDAFDBEFEB47
+:10031000E5BB760B53F2AEF8AFE8E7EB4BF8771E90
+:100320007E247FED4FCBE2CC7FBC30A97B0F7A0FD0
+:1003300034D577FD308B5DB7DE553E5FAF78741FE7
+:10034000741F30F0CFEF5E2C741F3EACAFB8771E39
+:100350005E677FED0BD3E2CC741CCFECE5CA53CDC6
+:100360006FCB4F745DADDE4B2AB63D384BB3DE30FC
+:10037000751F741C6C42EFFAEFEA7FCE6FFC30BE43
+:10038000EFEC3FCA30B3DE2EADF85D9EAF7DAEFD23
+:100390005D9EDE2E5D9EAFDD761F10AC1DA07EFD46
+:1003A00030ADFFFE4908FB185FFFDFFFAFBB709B5E
+:1003B0004EF85E67ADF814AD7A0F70ADCFEF50AD6B
+:1003C0007A0FDE305DA0AFED3C12780FEFEF780FC3
+:1003D000EFEF790FA7F85E0FFFEF790FEFEF790FCF
+:1003E00014ADDE2E5D9EADFD5E2DFFFBE79ADDFDBB
+:1003F000EFF96079607AE79ADDFCEFF960795DFFEB
+:10040000607ACFEFEFEFEFDFEFBFEF7FEEFFEDFFB3
+:10041000EBFFE7FFAFEFAFDFAFBFAF7FAEFFADFFEB
+:10042000ABFFA7FF6FEF6FDF6FBF6F7F6EFF6DFFDB
+:100430006BFF67FF2FEF2FDF2FBF2F7F2EFF2DFFCB
+:100440002BFF27FF4E08FD1FE5FF6E0FAFF87EEF75
+:100450007E0FFDEFF11F6079ABF8F5427E0AF11CCB
+:1004600037CFAE3A7FEC90BEADF8EFDCCFEAE52FA8
+:100470007D0FE12BF11C60797E0A4DF8CFEA5DC457
+:100480007D0BEFECCFEA5DC6E522EFDC5DC6CFDA8F
+:100490004E08FD1F6E0FAFF87C1F761FFDEFF91F92
+:1004A0006079ABF8761CEE24F91F2BFBEFEFCFEC55
+:1004B000F91F6079761C27FBEFDF5DA7CFDC7FDDBE
+:1004C000D09C4BF847FD7C1F761CCFCF7EEF7FED95
+:1004D0007DFDF093EF7E7F1E771EFB186079E7228B
+:1004E000E6BBE5BBAE0AE5BB600BAE85E2BBE2BB9B
+:1004F000E2BBE2BBAF02E2BBE2BB2FF96079E2BB39
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000000079
+:100780000000000000000000000000000000000069
+:100790000000000000000000000000000000000059
+:1007A0000000000000000000000000000000000049
+:1007B0000000000000000000000000000000000039
+:1007C0000000000000000000000000000000000029
+:1007D0000000000000000000000000000000000019
+:1007E0000000000000000000000000000000000009
+:1007F00000000000000000000000000000000000F9
+:1008000000000000000000000000000000000000E8
+:1008100000000000000000000000000000000000D8
+:1008200000000000000000000000000000000000C8
+:1008300000000000000000000000000000000000B8
+:1008400000000000000000000000000000000000A8
+:100850000000000000000000000000000000000098
+:100860000000000000000000000000000000000088
+:100870000000000000000000000000000000000078
+:100880000000000000000000000000000000000068
+:100890000000000000000000000000000000000058
+:1008A0000000000000000000000000000000000048
+:1008B0000000000000000000000000000000000038
+:1008C0000000000000000000000000000000000028
+:1008D0000000000000000000000000000000000018
+:1008E0000000000000000000000000000000000008
+:1008F00000000000000000000000000000000000F8
+:1009000000000000000000000000000000000000E7
+:1009100000000000000000000000000000000000D7
+:1009200000000000000000000000000000000000C7
+:1009300000000000000000000000000000000000B7
+:1009400000000000000000000000000000000000A7
+:100950000000000000000000000000000000000097
+:100960000000000000000000000000000000000087
+:100970000000000000000000000000000000000077
+:100980000000000000000000000000000000000067
+:100990000000000000000000000000000000000057
+:1009A0000000000000000000000000000000000047
+:1009B0000000000000000000000000000000000037
+:1009C0000000000000000000000000000000000027
+:1009D0000000000000000000000000000000000017
+:1009E0000000000000000000000000000000000007
+:1009F00000000000000000000000000000000000F7
+:100A000000000000000000000000000000000000E6
+:100A100000000000000000000000000000000000D6
+:100A200000000000000000000000000000000000C6
+:100A300000000000000000000000000000000000B6
+:100A400000000000000000000000000000000000A6
+:100A50000000000000000000000000000000000096
+:100A60000000000000000000000000000000000086
+:100A70000000000000000000000000000000000076
+:100A80000000000000000000000000000000000066
+:100A90000000000000000000000000000000000056
+:100AA0000000000000000000000000000000000046
+:100AB0000000000000000000000000000000000036
+:100AC0000000000000000000000000000000000026
+:100AD0000000000000000000000000000000000016
+:100AE0000000000000000000000000000000000006
+:100AF00000000000000000000000000000000000F6
+:100B000000000000000000000000000000000000E5
+:100B100000000000000000000000000000000000D5
+:100B200000000000000000000000000000000000C5
+:100B300000000000000000000000000000000000B5
+:100B400000000000000000000000000000000000A5
+:100B50000000000000000000000000000000000095
+:100B60000000000000000000000000000000000085
+:100B70000000000000000000000000000000000075
+:100B80000000000000000000000000000000000065
+:100B90000000000000000000000000000000000055
+:100BA0000000000000000000000000000000000045
+:100BB0000000000000000000000000000000000035
+:100BC0000000000000000000000000000000000025
+:100BD0000000000000000000000000000000000015
+:100BE0000000000000000000000000000000000005
+:100BF00000000000000000000000000000000000F5
+:100C000000000000000000000000000000000000E4
+:100C100000000000000000000000000000000000D4
+:100C200000000000000000000000000000000000C4
+:100C300000000000000000000000000000000000B4
+:100C400000000000000000000000000000000000A4
+:100C50000000000000000000000000000000000094
+:100C60000000000000000000000000000000000084
+:100C70000000000000000000000000000000000074
+:100C80000000000000000000000000000000000064
+:100C90000000000000000000000000000000000054
+:100CA0000000000000000000000000000000000044
+:100CB0000000000000000000000000000000000034
+:100CC0000000000000000000000000000000000024
+:100CD0000000000000000000000000000000000014
+:100CE0000000000000000000000000000000000004
+:100CF00000000000000000000000000000000000F4
+:100D000000000000000000000000000000000000E3
+:100D100000000000000000000000000000000000D3
+:100D200000000000000000000000000000000000C3
+:100D300000000000000000000000000000000000B3
+:100D400000000000000000000000000000000000A3
+:100D50000000000000000000000000000000000093
+:100D60000000000000000000000000000000000083
+:100D70000000000000000000000000000000000073
+:100D80000000000000000000000000000000000063
+:100D90000000000000000000000000000000000053
+:100DA0000000000000000000000000000000000043
+:100DB0000000000000000000000000000000000033
+:100DC0000000000000000000000000000000000023
+:100DD0000000000000000000000000000000000013
+:100DE0000000000000000000000000000000000003
+:100DF00000000000000000000000000000000000F3
+:100E000027EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEC9
+:100E1000EE4BF4FBDBD259BB1979577FDFD2D57388
+:100E2000B773F7374B4FBDBD25B9B177D2D17376C4
+:100E3000956BBFDD697BDD2FFF9F79FFFF9FF22F51
+:100E400000000000000000000000000000000000A2
+:100E50000000000000000000000000000000000092
+:100E60000000000000000000000000000000000082
+:100E70000000000000000000000000000000000072
+:100E80000000000000000000000000000000000062
+:100E90000000000000000000000000000000000052
+:100EA0000000000000000000000000000000000042
+:100EB0000000000000000000000000000000000032
+:100EC0000000000000000000000000000000000022
+:100ED0000000000000000000000000000000000012
+:100EE0000000000000000000000000000000000002
+:100EF00000000000000000000000000000000000F2
+:100F0000303030303E3E3434ABBF9B994B4FBDBD8B
+:100F1000599493349FFF37FB9B177DD9936956BB38
+:100F2000FBDD697BDD2FD1131DB9F7BB363139638A
+:100F3000793733693193137F7331737AF7BB9B9998
+:100F40009BB1979577FDFD3D573B773F737933F71D
+:100F5000B991D1153169931531531694BF4FBDBD69
+:100F60003593149735376956BD697B9D9693131356
+:100F7000197979376935AF78B9B3BAA3B878868368
+:100F8000368F78F7877787333FFFFB3B8E8F78B8B4
+:100F90001D118E13F3FF3F8B6BD8E173D13668566A
+:100FA00068D1687B3DAF78B83A3A3F878F81378FF9
+:100FB000F876F88777FD8778737DE8D6BBF8BFFFB2
+:100FC000D8DF87F7FD876F7B8BFFF8BD8683387D81
+:100FD000B873D87B3B8FD7F8F7338883BB8EE1F8A3
+:100FE000EF8373773337B836817D11F87378B8782B
+:100FF000D3368B7DED731B7D833731F3F22F3F2387
+:00000001FF
diff --git a/firmware/freescale/usb_sof.bin.ihex 
b/firmware/freescale/usb_sof.bin.ihex
new file mode 100644
index 0000000..69fb776
--- /dev/null
+++ b/firmware/freescale/usb_sof.bin.ihex
@@ -0,0 +1,513 @@ 
+:100000007FFF00007FFD00007FFB000049F7BA5B27
+:10001000BA383FFBF9B8B46DE5AB4E07AF77BFFE1A
+:100020003F7BBF79BA5BBA38E767607660750000DE
+:1000300000000000000000000000000000000000C0
+:1000400000000000000000000000000000000000B0
+:1000500000000000000000000000000000000000A0
+:100060000000000000000000000000000000000090
+:100070000000000000000000000000000000000080
+:100080000000000000000000000000000000000070
+:100090000000000000000000000000000000000060
+:1000A0000000000000000000000000000000000050
+:1000B0000000000000000000000000000000000040
+:1000C0000000000000000000000000000000000030
+:1000D0000000000000000000000000000000000020
+:1000E0000000000000000000000000000000000010
+:1000F0000000000000000000000000000000000000
+:1001000000000000000000000000000000000000EF
+:1001100000000000000000000000000000000000DF
+:1001200000000000000000000000000000000000CF
+:1001300000000000000000000000000000000000BF
+:1001400000000000000000000000000000000000AF
+:10015000000000000000000000000000000000009F
+:10016000000000000000000000000000000000008F
+:10017000000000000000000000000000000000007F
+:10018000000000000000000000000000000000006F
+:10019000000000000000000000000000000000005F
+:1001A000000000000000000000000000000000004F
+:1001B000000000000000000000000000000000003F
+:1001C000000000000000000000000000000000002F
+:1001D000000000000000000000000000000000001F
+:1001E000000000000000000000000000000000000F
+:1001F00000000000000000000000000000000000FF
+:1002000000000000000000000000000000000000EE
+:1002100000000000000000000000000000000000DE
+:1002200000000000000000000000000000000000CE
+:1002300000000000000000000000000000000000BE
+:1002400000000000000000000000000000000000AE
+:10025000000000000000000000000000000000009E
+:10026000000000000000000000000000000000008E
+:10027000000000000000000000000000000000007E
+:10028000000000000000000000000000000000006E
+:10029000000000000000000000000000000000005E
+:1002A000000000000000000000000000000000004E
+:1002B000000000000000000000000000000000003E
+:1002C000000000000000000000000000000000002E
+:1002D000000000000000000000000000000000001E
+:1002E000000000000000000000000000000000000E
+:1002F00000000000000000000000000000000000FE
+:1003000000000000000000000000000000000000ED
+:1003100000000000000000000000000000000000DD
+:1003200000000000000000000000000000000000CD
+:1003300000000000000000000000000000000000BD
+:1003400000000000000000000000000000000000AD
+:10035000000000000000000000000000000000009D
+:10036000000000000000000000000000000000008D
+:10037000000000000000000000000000000000007D
+:10038000000000000000000000000000000000006D
+:10039000000000000000000000000000000000005D
+:1003A000000000000000000000000000000000004D
+:1003B000000000000000000000000000000000003D
+:1003C000000000000000000000000000000000002D
+:1003D000000000000000000000000000000000001D
+:1003E000000000000000000000000000000000000D
+:1003F00000000000000000000000000000000000FD
+:1004000000000000000000000000000000000000EC
+:1004100000000000000000000000000000000000DC
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000000079
+:100780000000000000000000000000000000000069
+:100790000000000000000000000000000000000059
+:1007A0000000000000000000000000000000000049
+:1007B0000000000000000000000000000000000039
+:1007C0000000000000000000000000000000000029
+:1007D0000000000000000000000000000000000019
+:1007E0000000000000000000000000000000000009
+:1007F00000000000000000000000000000000000F9
+:1008000000000000000000000000000000000000E8
+:1008100000000000000000000000000000000000D8
+:1008200000000000000000000000000000000000C8
+:1008300000000000000000000000000000000000B8
+:1008400000000000000000000000000000000000A8
+:100850000000000000000000000000000000000098
+:100860000000000000000000000000000000000088
+:100870000000000000000000000000000000000078
+:100880000000000000000000000000000000000068
+:100890000000000000000000000000000000000058
+:1008A0000000000000000000000000000000000048
+:1008B0000000000000000000000000000000000038
+:1008C0000000000000000000000000000000000028
+:1008D0000000000000000000000000000000000018
+:1008E0000000000000000000000000000000000008
+:1008F00000000000000000000000000000000000F8
+:1009000000000000000000000000000000000000E7
+:1009100000000000000000000000000000000000D7
+:1009200000000000000000000000000000000000C7
+:1009300000000000000000000000000000000000B7
+:1009400000000000000000000000000000000000A7
+:100950000000000000000000000000000000000097
+:100960000000000000000000000000000000000087
+:100970000000000000000000000000000000000077
+:100980000000000000000000000000000000000067
+:100990000000000000000000000000000000000057
+:1009A0000000000000000000000000000000000047
+:1009B0000000000000000000000000000000000037
+:1009C0000000000000000000000000000000000027
+:1009D0000000000000000000000000000000000017
+:1009E0000000000000000000000000000000000007
+:1009F00000000000000000000000000000000000F7
+:100A000000000000000000000000000000000000E6
+:100A100000000000000000000000000000000000D6
+:100A200000000000000000000000000000000000C6
+:100A300000000000000000000000000000000000B6
+:100A400000000000000000000000000000000000A6
+:100A50000000000000000000000000000000000096
+:100A60000000000000000000000000000000000086
+:100A70000000000000000000000000000000000076
+:100A80000000000000000000000000000000000066
+:100A90000000000000000000000000000000000056
+:100AA0000000000000000000000000000000000046
+:100AB0000000000000000000000000000000000036
+:100AC0000000000000000000000000000000000026
+:100AD0000000000000000000000000000000000016
+:100AE0000000000000000000000000000000000006
+:100AF00000000000000000000000000000000000F6
+:100B000000000000000000000000000000000000E5
+:100B100000000000000000000000000000000000D5
+:100B200000000000000000000000000000000000C5
+:100B300000000000000000000000000000000000B5
+:100B400000000000000000000000000000000000A5
+:100B50000000000000000000000000000000000095
+:100B60000000000000000000000000000000000085
+:100B70000000000000000000000000000000000075
+:100B80000000000000000000000000000000000065
+:100B90000000000000000000000000000000000055
+:100BA0000000000000000000000000000000000045
+:100BB0000000000000000000000000000000000035
+:100BC0000000000000000000000000000000000025
+:100BD0000000000000000000000000000000000015
+:100BE0000000000000000000000000000000000005
+:100BF00000000000000000000000000000000000F5
+:100C000000000000000000000000000000000000E4
+:100C100000000000000000000000000000000000D4
+:100C200000000000000000000000000000000000C4
+:100C300000000000000000000000000000000000B4
+:100C400000000000000000000000000000000000A4
+:100C50000000000000000000000000000000000094
+:100C60000000000000000000000000000000000084
+:100C70000000000000000000000000000000000074
+:100C80000000000000000000000000000000000064
+:100C90000000000000000000000000000000000054
+:100CA0000000000000000000000000000000000044
+:100CB0000000000000000000000000000000000034
+:100CC0000000000000000000000000000000000024
+:100CD0000000000000000000000000000000000014
+:100CE0000000000000000000000000000000000004
+:100CF00000000000000000000000000000000000F4
+:100D000000000000000000000000000000000000E3
+:100D100000000000000000000000000000000000D3
+:100D200000000000000000000000000000000000C3
+:100D300000000000000000000000000000000000B3
+:100D400000000000000000000000000000000000A3
+:100D50000000000000000000000000000000000093
+:100D60000000000000000000000000000000000083
+:100D70000000000000000000000000000000000073
+:100D80000000000000000000000000000000000063
+:100D90000000000000000000000000000000000053
+:100DA0000000000000000000000000000000000043
+:100DB0000000000000000000000000000000000033
+:100DC0000000000000000000000000000000000023
+:100DD0000000000000000000000000000000000013
+:100DE0000000000000000000000000000000000003
+:100DF00000000000000000000000000000000000F3
+:100E000000000000000000000000000000000000E2
+:100E100000000000000000000000000000000000D2
+:100E200000000000000000000000000000000000C2
+:100E300000000000000000000000000000000000B2
+:100E400000000000000000000000000000000000A2
+:100E50000000000000000000000000000000000092
+:100E60000000000000000000000000000000000082
+:100E70000000000000000000000000000000000072
+:100E80000000000000000000000000000000000062
+:100E90000000000000000000000000000000000052
+:100EA0000000000000000000000000000000000042
+:100EB0000000000000000000000000000000000032
+:100EC0000000000000000000000000000000000022
+:100ED0000000000000000000000000000000000012
+:100EE0000000000000000000000000000000000002
+:100EF00000000000000000000000000000000000F2
+:100F00003030304CCAB9E441A1AAF2200000000000
+:100F100000000000000000000000000000000000D1
+:100F200000000000000000000000000000000000C1
+:100F300000000000000000000000000000000000B1
+:100F400000000000000000000000000000000000A1
+:100F50000000000000000000000000000000000091
+:100F60000000000000000000000000000000000081
+:100F70000000000000000000000000000000000071
+:100F80000000000000000000000000000000000061
+:100F90000000000000000000000000000000000051
+:100FA0000000000000000000000000000000000041
+:100FB0000000000000000000000000000000000031
+:100FC0000000000000000000000000000000000021
+:100FD0000000000000000000000000000000000011
+:100FE0000000000000000000000000000000000001
+:100FF00000000000000000000000000000000000F1
+:1010000000000000000000000000000000000000E0
+:1010100000000000000000000000000000000000D0
+:1010200000000000000000000000000000000000C0
+:1010300000000000000000000000000000000000B0
+:1010400000000000000000000000000000000000A0
+:101050000000000000000000000000000000000090
+:101060000000000000000000000000000000000080
+:101070000000000000000000000000000000000070
+:101080000000000000000000000000000000000060
+:101090000000000000000000000000000000000050
+:1010A0000000000000000000000000000000000040
+:1010B0000000000000000000000000000000000030
+:1010C0000000000000000000000000000000000020
+:1010D0000000000000000000000000000000000010
+:1010E0000000000000000000000000000000000000
+:1010F00000000000000000000000000000000000F0
+:1011000000000000000000000000000000000000DF
+:1011100000000000000000000000000000000000CF
+:1011200000000000000000000000000000000000BF
+:1011300000000000000000000000000000000000AF
+:10114000000000000000000000000000000000009F
+:10115000000000000000000000000000000000008F
+:10116000000000000000000000000000000000007F
+:10117000000000000000000000000000000000006F
+:10118000000000000000000000000000000000005F
+:10119000000000000000000000000000000000004F
+:1011A000000000000000000000000000000000003F
+:1011B000000000000000000000000000000000002F
+:1011C000000000000000000000000000000000001F
+:1011D000000000000000000000000000000000000F
+:1011E00000000000000000000000000000000000FF
+:1011F00000000000000000000000000000000000EF
+:1012000000000000000000000000000000000000DE
+:1012100000000000000000000000000000000000CE
+:1012200000000000000000000000000000000000BE
+:1012300000000000000000000000000000000000AE
+:10124000000000000000000000000000000000009E
+:10125000000000000000000000000000000000008E
+:10126000000000000000000000000000000000007E
+:10127000000000000000000000000000000000006E
+:10128000000000000000000000000000000000005E
+:10129000000000000000000000000000000000004E
+:1012A000000000000000000000000000000000003E
+:1012B000000000000000000000000000000000002E
+:1012C000000000000000000000000000000000001E
+:1012D000000000000000000000000000000000000E
+:1012E00000000000000000000000000000000000FE
+:1012F00000000000000000000000000000000000EE
+:1013000000000000000000000000000000000000DD
+:1013100000000000000000000000000000000000CD
+:1013200000000000000000000000000000000000BD
+:1013300000000000000000000000000000000000AD
+:10134000000000000000000000000000000000009D
+:10135000000000000000000000000000000000008D
+:10136000000000000000000000000000000000007D
+:10137000000000000000000000000000000000006D
+:10138000000000000000000000000000000000005D
+:10139000000000000000000000000000000000004D
+:1013A000000000000000000000000000000000003D
+:1013B000000000000000000000000000000000002D
+:1013C000000000000000000000000000000000001D
+:1013D000000000000000000000000000000000000D
+:1013E00000000000000000000000000000000000FD
+:1013F00000000000000000000000000000000000ED
+:1014000000000000000000000000000000000000DC
+:1014100000000000000000000000000000000000CC
+:1014200000000000000000000000000000000000BC
+:1014300000000000000000000000000000000000AC
+:10144000000000000000000000000000000000009C
+:10145000000000000000000000000000000000008C
+:10146000000000000000000000000000000000007C
+:10147000000000000000000000000000000000006C
+:10148000000000000000000000000000000000005C
+:10149000000000000000000000000000000000004C
+:1014A000000000000000000000000000000000003C
+:1014B000000000000000000000000000000000002C
+:1014C000000000000000000000000000000000001C
+:1014D000000000000000000000000000000000000C
+:1014E00000000000000000000000000000000000FC
+:1014F00000000000000000000000000000000000EC
+:1015000000000000000000000000000000000000DB
+:1015100000000000000000000000000000000000CB
+:1015200000000000000000000000000000000000BB
+:1015300000000000000000000000000000000000AB
+:10154000000000000000000000000000000000009B
+:10155000000000000000000000000000000000008B
+:10156000000000000000000000000000000000007B
+:10157000000000000000000000000000000000006B
+:10158000000000000000000000000000000000005B
+:10159000000000000000000000000000000000004B
+:1015A000000000000000000000000000000000003B
+:1015B000000000000000000000000000000000002B
+:1015C000000000000000000000000000000000001B
+:1015D000000000000000000000000000000000000B
+:1015E00000000000000000000000000000000000FB
+:1015F00000000000000000000000000000000000EB
+:1016000000000000000000000000000000000000DA
+:1016100000000000000000000000000000000000CA
+:1016200000000000000000000000000000000000BA
+:1016300000000000000000000000000000000000AA
+:10164000000000000000000000000000000000009A
+:10165000000000000000000000000000000000008A
+:10166000000000000000000000000000000000007A
+:10167000000000000000000000000000000000006A
+:10168000000000000000000000000000000000005A
+:10169000000000000000000000000000000000004A
+:1016A000000000000000000000000000000000003A
+:1016B000000000000000000000000000000000002A
+:1016C000000000000000000000000000000000001A
+:1016D000000000000000000000000000000000000A
+:1016E00000000000000000000000000000000000FA
+:1016F00000000000000000000000000000000000EA
+:1017000000000000000000000000000000000000D9
+:1017100000000000000000000000000000000000C9
+:1017200000000000000000000000000000000000B9
+:1017300000000000000000000000000000000000A9
+:101740000000000000000000000000000000000099
+:101750000000000000000000000000000000000089
+:101760000000000000000000000000000000000079
+:101770000000000000000000000000000000000069
+:101780000000000000000000000000000000000059
+:101790000000000000000000000000000000000049
+:1017A0000000000000000000000000000000000039
+:1017B0000000000000000000000000000000000029
+:1017C0000000000000000000000000000000000019
+:1017D0000000000000000000000000000000000009
+:1017E00000000000000000000000000000000000F9
+:1017F00000000000000000000000000000000000E9
+:1018000000000000000000000000000000000000D8
+:1018100000000000000000000000000000000000C8
+:1018200000000000000000000000000000000000B8
+:1018300000000000000000000000000000000000A8
+:101840000000000000000000000000000000000098
+:101850000000000000000000000000000000000088
+:101860000000000000000000000000000000000078
+:101870000000000000000000000000000000000068
+:101880000000000000000000000000000000000058
+:101890000000000000000000000000000000000048
+:1018A0000000000000000000000000000000000038
+:1018B0000000000000000000000000000000000028
+:1018C0000000000000000000000000000000000018
+:1018D0000000000000000000000000000000000008
+:1018E00000000000000000000000000000000000F8
+:1018F00000000000000000000000000000000000E8
+:1019000000000000000000000000000000000000D7
+:1019100000000000000000000000000000000000C7
+:1019200000000000000000000000000000000000B7
+:1019300000000000000000000000000000000000A7
+:101940000000000000000000000000000000000097
+:101950000000000000000000000000000000000087
+:101960000000000000000000000000000000000077
+:101970000000000000000000000000000000000067
+:101980000000000000000000000000000000000057
+:101990000000000000000000000000000000000047
+:1019A0000000000000000000000000000000000037
+:1019B0000000000000000000000000000000000027
+:1019C0000000000000000000000000000000000017
+:1019D0000000000000000000000000000000000007
+:1019E00000000000000000000000000000000000F7
+:1019F00000000000000000000000000000000000E7
+:101A000000000000000000000000000000000000D6
+:101A100000000000000000000000000000000000C6
+:101A200000000000000000000000000000000000B6
+:101A300000000000000000000000000000000000A6
+:101A40000000000000000000000000000000000096
+:101A50000000000000000000000000000000000086
+:101A60000000000000000000000000000000000076
+:101A70000000000000000000000000000000000066
+:101A80000000000000000000000000000000000056
+:101A90000000000000000000000000000000000046
+:101AA0000000000000000000000000000000000036
+:101AB0000000000000000000000000000000000026
+:101AC0000000000000000000000000000000000016
+:101AD0000000000000000000000000000000000006
+:101AE00000000000000000000000000000000000F6
+:101AF00000000000000000000000000000000000E6
+:101B000000000000000000000000000000000000D5
+:101B100000000000000000000000000000000000C5
+:101B200000000000000000000000000000000000B5
+:101B300000000000000000000000000000000000A5
+:101B40000000000000000000000000000000000095
+:101B50000000000000000000000000000000000085
+:101B60000000000000000000000000000000000075
+:101B70000000000000000000000000000000000065
+:101B80000000000000000000000000000000000055
+:101B90000000000000000000000000000000000045
+:101BA0000000000000000000000000000000000035
+:101BB0000000000000000000000000000000000025
+:101BC0000000000000000000000000000000000015
+:101BD0000000000000000000000000000000000005
+:101BE00000000000000000000000000000000000F5
+:101BF00000000000000000000000000000000000E5
+:101C000000000000000000000000000000000000D4
+:101C100000000000000000000000000000000000C4
+:101C200000000000000000000000000000000000B4
+:101C300000000000000000000000000000000000A4
+:101C40000000000000000000000000000000000094
+:101C50000000000000000000000000000000000084
+:101C60000000000000000000000000000000000074
+:101C70000000000000000000000000000000000064
+:101C80000000000000000000000000000000000054
+:101C90000000000000000000000000000000000044
+:101CA0000000000000000000000000000000000034
+:101CB0000000000000000000000000000000000024
+:101CC0000000000000000000000000000000000014
+:101CD0000000000000000000000000000000000004
+:101CE00000000000000000000000000000000000F4
+:101CF00000000000000000000000000000000000E4
+:101D000000000000000000000000000000000000D3
+:101D100000000000000000000000000000000000C3
+:101D200000000000000000000000000000000000B3
+:101D300000000000000000000000000000000000A3
+:101D40000000000000000000000000000000000093
+:101D50000000000000000000000000000000000083
+:101D60000000000000000000000000000000000073
+:101D70000000000000000000000000000000000063
+:101D80000000000000000000000000000000000053
+:101D90000000000000000000000000000000000043
+:101DA0000000000000000000000000000000000033
+:101DB0000000000000000000000000000000000023
+:101DC0000000000000000000000000000000000013
+:101DD0000000000000000000000000000000000003
+:101DE00000000000000000000000000000000000F3
+:101DF00000000000000000000000000000000000E3
+:101E000000000000000000000000000000000000D2
+:101E100000000000000000000000000000000000C2
+:101E200000000000000000000000000000000000B2
+:101E300000000000000000000000000000000000A2
+:101E40000000000000000000000000000000000092
+:101E50000000000000000000000000000000000082
+:101E60000000000000000000000000000000000072
+:101E70000000000000000000000000000000000062
+:101E80000000000000000000000000000000000052
+:101E90000000000000000000000000000000000042
+:101EA0000000000000000000000000000000000032
+:101EB0000000000000000000000000000000000022
+:101EC0000000000000000000000000000000000012
+:101ED0000000000000000000000000000000000002
+:101EE00000000000000000000000000000000000F2
+:101EF00000000000000000000000000000000000E2
+:101F000000000000000000000000000000000000D1
+:101F100000000000000000000000000000000000C1
+:101F200000000000000000000000000000000000B1
+:101F300000000000000000000000000000000000A1
+:101F40000000000000000000000000000000000091
+:101F50000000000000000000000000000000000081
+:101F60000000000000000000000000000000000071
+:101F70000000000000000000000000000000000061
+:101F80000000000000000000000000000000000051
+:101F90000000000000000000000000000000000041
+:101FA0000000000000000000000000000000000031
+:101FB0000000000000000000000000000000000021
+:101FC0000000000000000000000000000000000011
+:101FD0000000000000000000000000000000000001
+:101FE00000000000000000000000000000000000F1
+:101FF00000000000000000000000000000000000E1
+:00000001FF