I felt I should disclose some information about the imx233 target and the
roadmap that I have been pursuing in the last months. I'll try to start
from scratch and give you an overview of what I'm doing and why.
For those for don't know about it, the imx233 is a port to the Sigmatel
STMP3780 (aka Freescale i.MX233) SoC. It is used in at least three recent
devices: Creative Zen X-Fi2, Zen X-Fi3 and Sansa Fuze+. The port to the
Fuze+ is close to stable, same for the Zen X-Fi3 and the Zen X-Fi2 is
unstable but already has a solid basis.
The world seemed beautiful and all but then someone came and told us he had
a device based on the STMP3700 SoC for which we didn't have the datasheet
but some Linux code. It was obvious from the start that this chip was
extremely close to the imx233 and that a Rockbox port was possible. At this
point, we realised that some other devices were using another undocumented
chip named STMP3770 and we even realised that the older and documented
STMP3600 family was also very close. Here is a list of devices with those
SoCs to give you an idea of the situation (you can find more information on
* I.MX233: Zen X-Fi Style, Zen X-Fi2, Zen X-Fi3, Sansa Fuze+
* STMP3770: Zen Style M100/300
* STMP3700: Zen, Zen Mozaic, Zen X-Fi, YP-Q2
* STMP3600: Sansa Express, Zen V (Plus), YP-Z5
* Unsure: Zen MX, Zen Style 100/300 (probably STMP3700 and STMP 3780)
To summarise, there are lots of target out there using those chips and I
thought that it would be great to port Rockbox to them. I concluded that it
was possible to handle them all in the imx233 port with a reasonable amount
of modification and with careful handling. A major pain in handling those
SoC at once is that the registers are very similar but not exactly similar
and there are many of them (~500). Another major issue was that we had the
datasheet of the STMP3600 and i.MX233 but not the STMP3700/3770.
I am glad to say today that I solved both issues. I managed to get my hand
on the two missing datasheets, that wasn't exactly easy but I managed to
got them without any NDA or anything! (please contact me if you are
In order to solve the issue of keeping consistent a set of three big
register set, I decided that the best way was to automatically generate the
headers for them, out of the messy and buggy sigmatel/freescale headers
extracted from Linux ports. This works in two steps: first I produced an
XML description of the register map from those headers and then I produced
the rockbox headers from the XML description. The register set is chosen at
compile time with a switch in the target specific configuration header.
This way we ensure a correct use of registers at all time.
A byproduct of this register map being available is the (wonderful) hwstub
tool: it is a small blob that one can upload to any STMP device and allows
to control the device over USB. Using the shell tool I wrote, one can
identify the chip, load the register description and poke at registers
easily. The tool is scriptable in Lua which makes it easy and painless to
hack and debug early code for a device. The tool itself is not really STMP
specific and could be used on other SoC provided the blob is ported to
those obviously (the TCC and RK27xx are good candidates for it).
This is still work in progress but the majority of the switch to the new
headers has now been done in my personal branch and proven successful. With
the help of Lorenzo we are currently porting Rockbox to the STMP3600 and
specifically to the Creative ZEN V and YP-Z5. I also have some solid
codebase for the STMP3700 with the Zen Mozaic and Zen X-Fi, port to the Zen
is in progress too.
I will start to integrate those changes in the trunk soon. The amount of
modifications outside of the imx233/ subdir should be minimal (mostly
SOURCES, tools and configure) so I don't expect any breakable*.
If you have any comment/objection, please do so quickly before I begin
merging some code. If you would like all/some of those changes to go on
gerrit before being committed so that everyone is given a chance to review,
i'll be happy to do so.
Long life to Rockbox!
PS(*): the only expected potential breakage is the mkzenboot tool which I
improved/fixed for the more recent STMP based devices. It is used by the
Creative ZVM port I think. I have no way to check this though.
Received on 2013-06-12