Bien, ya he resuelto el misterio de las cachés en este SoC.
Como algunos saben, la CPU en los bcm6358 tiene dos cores, aunque en OpenWrt solo usamos uno (no existe soporte SMP todavía). Y esto es lo que nos encontramos en cada core
core0: 16KB dcache, 32KB icache
core1: 16KB dcache, 16KB icache
Que está ocurriendo?, pues que el CFE configura el core1 como primario, por tanto nos quedamos con 16KB de icache. Pero esto se puede cambiar en una zona de CFE de donde toma cual será el core primario. Concretamente en el offset 0x0017, el cual está a 1 por defecto. Entonces podemos hacer un backup del bootloader buscamos ese offset lo ponemos a 0 y lo flasheamos de nuevo.
Benchmarks opensssl, antes y después del cambio del CFE modificado:
| 1.0.1e | 12943360 | 9699730 | 4768430 | 1933920 | 1872210 | 670940 | 3755010 | 3251630 | 2874710 | 4.0 | 140.6 | 14.2 | 11.6 |
http://pastebin.com/kwLpuvSC| 1.0.1e | 13841870 | 10867160 | 4824100 | 1954560 | 1882790 | 675430 | 3809620 | 3288520 | 2889390 | 4.1 | 142.6 | 14.3 | 11.6 |
http://pastebin.com/472RPMKNNo explicaré mucho más, ya que el proceso es sencillo. Para flashear CFE usé este comando
root@OpenWrt:/tmp# flashcp -v cfehw556.bin /dev/mtd0
Erasing block: 1/1 (100%)
Writing kb: 120/128 (93%)
Verifying kb: 120/128 (93%)
root@OpenWrt:/tmp# reboot
Ojo flashear un CFE mal manipulado puede dejar nuestro
router inutilizado, e irrecuperable a menos que usemos JTAG
Este proceso sería válido también para el Hg553 que usa el core1 como primario.