blob: 2e1ac7d80a08c2be30cedae483d6fe5f1018196c [file] [log] [blame]
\ Script to change the speed code in 1 GHz production MMP2 chips to
\ match the old speed code value that was used for 1 GHz engineering
\ sample MMP2 chips.
0 value fuse-block#
: fuse-ena! ( n -- ) h# 68 pmua! ;
: fuse-ena@ ( -- n ) h# 68 pmua@ ;
: ena-fuse-module ( -- )
\ Do not touch the enable register if it is already enabled.
\ That register also controls the interface between the SP and
\ PJ4 processors, which is used for keyboard communication.
\ The enabling process resets the device, causing system lockups
\ if the keyboard interface is active.
fuse-ena@ h# 1b = if exit then
h# 08 fuse-ena!
h# 09 fuse-ena!
h# 19 fuse-ena!
h# 1b fuse-ena!
;
: fuse-ctl! ( n -- )
fuse-block# d# 18 lshift or h# 292804 io!
d# 100 ms
;
: otp-setup ( -- )
ena-fuse-module
h# 0002.0000 fuse-ctl! \ HiV
h# 0042.0000 fuse-ctl! \ Reset + HiV
h# 0002.0000 fuse-ctl! \ HiV
;
: otp-teardown ( -- )
h# 0200.4000 fuse-ctl! \ ClkDiv + SOFT
h# 0240.4000 fuse-ctl! \ ClkDiv + SetRst + SOFT
h# 0200.4000 fuse-ctl! \ ClkDiv + SOFT
;
: pgm-fuses2 ( v7 v6 v5 v4 v3 v2 v1 v0 block# -- )
to fuse-block# ( v7 v6 v5 v4 v3 v2 v1 v0 )
otp-setup ( v7 v6 v5 v4 v3 v2 v1 v0 )
h# 292838 h# 20 bounds do i io! 4 +loop ( )
h# 0203.4000 fuse-ctl! \ ClkDiv + HiV + Burn + SOFT
begin h# 292984 io@ h# 100 and until \ Wait for complete
h# 0202.4000 fuse-ctl! \ ClkDiv + HiV + + SOFT
h# 0200.4000 fuse-ctl! \ ClkDiv + + SOFT
h# 0240.4000 fuse-ctl! \ ClkDiv + SetRst + SOFT
h# 0200.4000 fuse-ctl! \ ClkDiv + + SOFT
otp-teardown
;
2 value es-speed-1g \ This is the engineering sample speed code for 1 GHz parts
: fix-speed ( -- )
ena-fuse-module
\ Reprogram only if the divider values are the ones that we
\ observe in the first batch of production parts - indicating
\ that the SoC is not an engineering sample
h# 290c fuse@ h# 90001410 = if
\ Reprogram only if the SW version field is 0 - a virgin part
\ that we have not yet reprogrammed
h# 2898 fuse@ 0= if
\ If the speed code indicates a 988 MHz part, change the
\ speed code to the old engineering sample code for 1001 MHz
\ and reboot to switch to the higher speed
rated-speed 0= if
." Reprogramming speed code and SW version" cr
es-speed-1g d# 14 lshift 0 0 1 0 0 0 0 3 pgm-fuses2
bye
then
\ If the speed code has already been reprogrammed to the
\ engineering sample 1001 MHz value, but the SW version field
\ is 0, set the SW version field to 1. This fixes an initial
\ batch of 200 chips whose speed code was reprogrammed
\ using a different procedure.
rated-speed 2 = if
." Reprogramming SW version only" cr
0 0 0 1 0 0 0 0 3 pgm-fuses2
then
then
then
;