View Single Post
Posts: 3,037 | Thanked: 12,671 times | Joined on Mar 2010 @ Sofia,Bulgaria

Cortex-A8 SoC we have in our devices supports several ISAs (Instruction Set Architecture):

- Thumb
- Thumb2
- ThumbEE
- ...

Stock Fremantle, all CSSU flavors and all of the software in repos (excluding some like FB sharing plugin compiled by mistake with Thumb2 ISA) come with binaries (i.e. executable files, libraries) compiled using ARM instruction set, which is the most powerful and fastest. Every ARM instruction uses exactly 4 bytes of memory.

Thumb2 is another instruction set, which have most of the power and speed of ARM ISA, but its instructions could be 2 bytes in length instead of 4 bytes. According to some researches that can be found on internet, using Thumb2 ISA leads to reduction of code size in 30-40% without sacrificing much of the performance (some 2-5% performance decrease). Will explain how that benefits us later.

The logical question:

Why then Nokia didn't compile Fremantle using Thumb2 ISA?

The answer - the SoC revision inside n900 has silicon erratas (i.e. bugs in the hardware) which render Thumb2 compiled binaries unstable if no countermeasures are taken. A system without fixes for the erratas crashes randomly, not only in Thumb2 compiled executables/libraries, but in ordinary ARM ones too.

The countermeasures:

There are two erratas that must be workaroundеd on n900 in order Thumb2 compiled binaries to not lead to system instability: ARM errata 430973 and ARM errata 657417

The first errata(430973) is workaroundеd in kernel, CSSU-thumb repo contains a special kernel (kernel-cssu) based on top of kernel-power 51r1 which workarounds the issue. While workaround for errata 430973 is upstreamed, it does not work on n900 being the High Secure device. A special call to Secure Monitor( that is a piece of ROM in our SoC programed by Texas Instruments during chip manufacture) is needed to properly enable the workaround, and that is handled in kernel-cssu.

The second errata (657417) is workarounded in linker, all binaries in CSSU-thumb repo are compiled using Linaro gcc 4.7.2 and binutils 2.22.

What is the benefit?

Well, we all know that the major performance bottleneck on n900 is the amount (or better said the lack) of RAM. Constantly swapping pages in and out of memory leads to stutter, lag, etc..., you know . A part of that RAM is used to hold the executable code, so the smaller the code is, the larger part of the RAM will be free to be used for data. While it is a simplified explanation, you should be able to get the general idea. In addition - smaller code means better code cache usage, less reading from the storage (faster application start times), etc.

With packages that are so far in CSSU-thumb repo, the code size is reduced with approximately 35MiB, more RAM and storage space will be regained in the future when more packages will be included

The catch:

errata 430973 is workarounded by clearing a special type of cache (Branch Target Buffer) inside the chip on every context switch made by the CPU. In theory that slows down the system. I didn't make any benchmarks, but from my "ordinary user" POV, there is no visible performance loss.

How to install it?

Make sure Nokia and Extras catalogs are enabled in application manager.

Using microb on your n900 click here and follow the instructions on, section Installation, from step 5 on (Hildon Application Manager (HAM) will launch...). cssu-thumb is based on cssu-testing flavor.

If you have kernel-power v51r1 or above, no custom kernel will be installed, as needed errata workaround is included in kernel-power v51r1 (and above)


There is no way to uninstall, i.e. the same rules apply as for the other CSSU flavors. The only way to rollback without messing with apt-get is to reflash. Or you can downgrade all of the packages manually using apt-get.

Setup a development environment


This is still in highly experimental stage and while so far there are no known issues, I will take no responsibility for any damage and/or data loss caused by using CSSU-thumb repo. It is highly unlikely to happen, but be prepared to reflash if something goes south. Make a full backup of your data/settings/whatever before installing stuff from CSSU-thumb repo

You've been warned :P


15.06.2012 - 21.2011.38-1Tmaemo4-thumb7
- Qt libraries moved back to /opt
- added new packages: qt-mobility, clutter, libhildonfm, osso-gnome-vfs2

16.06.2012 - 21.2011.38-1Tmaemo4-thumb9
- added new packages: libalarm2, alarmd, libxml2

20.06.2012 - 21.2011.38-1Tmaemo4-thumb10
- added new packages: xserver-xomap, xserver-xorg-core
- fixed a bug in the kernel : Clear the IT state when invoking a Thumb-2 signal handler

19.07.2012 - 21.2011.38-1Tmaemo4-thumb11
- added new packages: microb-engine

27.07.2012 - 21.2011.38-1Tmaemo4-thumb12

- toolchain upgrade to gcc 4.7.2
- microb-engine - fixed HTTPS TLS error
- Qt libraries rebuild with the new toolchain

29.07.2012 - 21.2011.38-1Tmaemo4-thumb13

- kernel upgraded

01.08.2012 - 21.2011.38-1Tmaemo4-thumb14

- fixed a bug in tinymail

04.09.2012 - 21.2011.38-1Tmaemo4-thumb16

- microb-engine source code was missing some stuff from, rebased.
- add libcurl3 (7.26.0-1maemo1+0cssu1-thumb1) - fix for Facebook widget, photo uploader and MfE IPv6 problems

15.09.2012 - 21.2011.38-1Tmaemo5.1+thumb0

- rebased on top of 21.2011.38-1Tmaemo5.1 CSSU-testing
- changed versioning scheme
- added thumb-compiled camera-ui, alarmd, hildon-application-manager, apt, modest

Because of the versioning scheme change you should follow the instructions here if upgrading from 21.2011.38-1Tmaemo4-thumb16 or older version.

23.09.2012 - 21.2011.38-1Tmaemo5.1+thumb1

- added missing dependency (system-services (>= 0.3.8-68+0cssu0))
- Thumb2 compiled dosfstools and openssl

25.09.2012 - 21.2011.38-1Tmaemo5.1+thumb2

- Thumb2 compiled gdigicam and gst-plugins-bad

03.10.2012 - 21.2011.38-1Tmaemo5.1+thumb3

- Thumb2 compiled sqlite3, gstreamer, gst-plugins-base, gst-plugins-good

03.11.2012 - 21.2011.38-1Tmaemo5.1+thumb4

- Thumb2 compiled db4.2, pulseaudio, calendar-backend, evolution-data-server

26.12.2012 - 21.2011.38-1Tmaemo7.1+thumb0

- packages updated to latest CSSU-testing(21.2011.38-1Tmaemo7.1)
- Thumb2 compiled obexd, gnome-vfs-filechooser-backend, ke-recv, libmatchbox2, rtcom-eventlogger-async

06.01.2013 - 21.2011.38-1Tmaemo7.1+thumb1

- Thumb2 compiled pango, freetype, libpng, zlib, libxml2
- NEON-optimized upstream versions of libpng (~30% faster) and zlib (~8% faster decompression, ~18% faster compression)
- libxml2 recompiled against latest zlib

07.01.2013 - 21.2011.38-1Tmaemo7.2+thumb0

- packages updated to latest CSSU-testing(21.2011.38-1Tmaemo7.2) - blacklist fraudulent TURKTRUST intermediate certificates

07.04.2013 - 21.2011.38-1Tmaemo7.2+thumb1

* pixman upgraded to upstream version 0.29
* build microb against system libpng and zlib
* pulseaudio, qt and hildon-desktop upgraded to latest CSSU versions on gitorious

15.07.2013 - 21.2011.38-1Tmaemo8.2+thumb1

* packages updated to latest CSSU-testing(21.2011.38-1Tmaemo8.2)
* thumb-compile tracker, hildon, hildon-thumbnailer

3.11.2013 - 21.2011.38-1Tmaemo8.3+thumb1

* osso-systemui-alarm: Fix nsv_sv_play_event call
* maemo-security-certman: Change VeriSign certificate order, fixes not working

12.11.2013 - 21.2011.38-1Tmaemo8.3+thumb2

* upgrade glib to 2.24.1
* upgrade pulseaudio to 0.9.15-1maemo44+0m5+0cssu5
* Thumb2 compile alsa-lib, glib, pulseaudio, telepathy-glib, telepathy-gabble and osso-pdf-viewer

24.11.2013 - 21.2011.38-1Tmaemo8.3+thumb3

* upgrade hildon-desktop to 1:2.2.153-2+thumb0
* Thumb2 compile cairo, libx11, libxfont

30.12.2013 - 21.2011.38-1Tmaemo9+thumb1

* clock-ui: Open source rewrite of the nokia clock-ui, thanks to Adekker (ade)
* camera-ui: Added Fallback to DCIM if NOKIA_CAMERA_DIR or NOKIA_MMC_CAMERA_DIR environment variable is not defined
Removed some GLIB Warning messages when changing profile
* dosfstools: Fixed install paths, data will be installed to /usr/share instead of /share
* e2fsprogs: Updated to upstream 1.42.5, fixes fsck for ext* filesystems
* glibc: Enabled kernel implementations of epoll, ppoll and pselect
* fmtx-middleware: Fm TX now keeps running when headphones/usb is plugged in
* gtkfilesystemmemory: Moved development files to osso-memory-backend-dev, frees rootfs space
* hildon-welcome: Fixed not running when /proc/bootreason is missing (ie. an upstream kernel is used)
* initrd-progs: Open source replacement with new feature -G which prints block data to stdout
* ke-recv-extra: Fixed 100% Cpu use on 3.x kernels
* libcpaboutcssu: dpkg-query instead of shell hack, added luf
* maemo-tvout-control: Moved maemo-applet-tvout back into libs section, fixes control panel entry missing
* modest: Moved recursive imap operations into glib main loop, fixes 100% Cpu / freeze on imap sync
* modest-l10n: Added english string for mcen_fi_advsetup_update_all_folders
* osso-af-utils: Replaced call to getbootstate with read of /var/lib/dsme/saved_state,
fixed boot when /proc/bootreason is missing
* osso-calculator: Added support for top_application dbus call
* osso-systemui-tklock: Fixed bug #12701: Ball is moving when touching anywhere along the bar-slide
* profiled: Open source replacement version from Nokia (harmattan/nemo)
* qt4-x11-maemo: Added MeeGo libs, change compiler flags
* status-area-applet-battery: Open source replacement which works with BME hal, bq27200 hal, rx51-battery hal
* upstart: Enabled auto fsck on boot, added support for swap_opts in /etc/default/mount-opts
* Thumb2 compile clock-ui, e2fsprogs, gtkfilesystemmemory, ke-recv-extra, osso-af-utils, profiled

12.01.2014 - 21.2011.38-1Tmaemo9.1+thumb0

* fmtx-middleware: revert to 0.62, fixes US model issues

05.05.2014 - 21.2011.38-1Tmaemo9.1+thumb1

* hildon-application-manager: apt-worker performance improvements
* hildon-desktop: Fixed: BMO #12722: hildon-desktop crashes on malformed transitions.ini.
hd_render_manager_set_state clean up.
Many portrait related changes. Fixes BMO #12720: Incorrect lockscreen background.
Fixed: BMO #12725: Screenshot saving path is hardcoded
Fixed: Sometimes thumbnails are wrongly clipped.
tasknav: fix thumbnails clip and rotation while in transition
* glibc: Timezone information as of 2013(thanks to ade). Thumb2 compiled.

29.12.2014 - 21.2011.38-1Tmaemo10+thumb0

* apt: Avoid sending useless auth data via http and https
* camera-ui: Fixed HD codecs bitrate calculation and useage of unreffed
* clock-ui: Fixed alarmlist order, snooze and recurrent alarms
* dosfstools: check / clear dirty bit
* hildon-application-manager: Performance fixes, removed another PC Suite
error, red Pill option available
* ke-recv: Fixed support for upstream client, new options in
/etc/default/mount-opts, new gconf key /system/osso/mmc-preferred-volume
* microb-engine: For reading device name use file /proc/cpuinfo instead
* modest: Forward ported fixes for #11993, a crash in HTLM -> text
conversion and a few G_CRITICALS in account creation
* nokiamaps-navigation-provider: FOSS release
* osso-systemui-powerkeymenu: Add power_key_mode and power_key_menu_response
to powerkeymenu-dbus-names.h
* pulseaudio: Enabled ipv6 support, disabled useless logs
* status-area-applet-battery: Nokia BME reporting incorrect last_full property, so do not use it
* tinymail: allow TLS to alternative ports
* upstart: Use data=writeback for all ext3 and ext4 partitions (not only root)

29.12.2014 - 21.2011.38-1Tmaemo10+thumb1

* fix hildon-desktop version dependency

10.10.2015 - 21.2011.38-1Tmaemo11+thumb0

* calendar-backend: Fixed #12682 invalid iCal export
* cityinfo: Open source replacement, fixes world database
* glibc: Fix for CVE 2015-0235 (GHOST)
* ke-recv: Fixed mount script for fat parittions
* mce: Open source replacement, fixes for upstream kernel
* upstart: Fixed /etc/default/mount-opts conffile issues
* openssl: Upgrade to upstream 0.9.8zf + maemo patches
* osso-product-info: Open source replacement, fixes for upstream kernel
* pulseaudio-policy-enforcement: disable useless logs
* telepathy-gabble: Google talk fixes, do not ignore muc messages
Never fear. I is here.

720p video support on N900,SmartReflex on N900,Keyboard and mouse support on N900
Nothing is impossible - Stable thumb2 on n900

Community SSU developer
kernel-power developer and maintainer

Last edited by freemangordon; 2015-10-10 at 15:32.

The Following 336 Users Say Thank You to freemangordon For This Useful Post:
15jamie20, 412b, aanckar, AapoRantalainen, Acidspunk, acrux, ade, af7567, ahmadamaj, ajack, Alfred, Amboss, amin007110, anapospastos, AnasSyria, andil, Android_808, andyr0ck, anidel, anthonie, ArchiMark, Ariadeno, arystocration, Astaoth, azad1top, Bad_Habit, Bahador, ballfresno, bennypr0fane, bertjefred, BertvanDorp, bharathkumarst, bingomion, bitrocky, bocephus, borghal, Brian_7, Bundyo, burwat292596, bygokhan, Casanunda, caveman, celebrant, chainsawbike, chill, conred, cooldubai, Copernicus, corduroysack, cproc, crni_labud, cy8aer, D@vIcHoJD, DA5, Daneel, DaReaper, Dark_Angel85, datjomp, Deaconclgi, degtep, djdas, don_falcone, dos1, dr_frost_dk, dukenukem, dzano, ed00, eddieselamp, edgar2, ed_boner, ejasmudar, elros34, enne30, ersanpermana, Estel, evan, explit, ezameht, fasza2, fmo, foobar, Fottes, frafI, fusi, fw190, g0r, geneven, getnani, ghitly, gidzzz, glabifrons, gregoranderson, GrimyHR, Gusse, guyr, Half-Life_4_Life, handaxe, hardkorek, hardy_magnus, harry_e20000, HELLASISGREECE, hgroove, HolgerN, hrbani, HtheB, Hurrian, hxka, hyno111, ibins, iceskateclog, iDont, Il_Principe, imo, impeham, independent, int_ua, iosu, ivgalvez, ivyking, izrzdor, J4ZZ, JadeH, jcharpak, jellyroll, jendrju, Jerex, joerg_rw, Joseph9560, juiceme, jungleraver, jurgel, jurop88, juz, Kabouik, kent_autistic, kinggo, kingoddball, klinglerware, known, kolos, kornolio, kowalski, koznj, krutznikov, larsoy, LavaCroft, lbee, lenoch, lidow, Liknus, lma, luf, m@m0nt, maartenmk, MaddogG, malfunctioning, malkavian, Manatus, mankir, manojkumaru, Mara, marmistrz, Marshall Banana, MartinK, marxian, mattaustin, Megaltariak, melisa queen, Mentalist Traceur, merlin1991, MetalGearSolid, michaaa62, Mike Fila, Minhaz, MINKIN2, misiak, Mitrigol, Mohammed Muid, MONVMENTVM, mosiomm, Mr. Incredible,, mrp, mrsellout, mr_jrt, mr_pingu, munozferna, myname24, MyNokiaN900, n900_, nahci13, neboja, Netweaver, nicolai, nikname, nkirk, nman, Nobless, nodevel, noorallah, Oblomow, Obsidian, onion, OVK, pali, panjgoori, pantera1989, PanzerSajt, paranoiac, patlak, pelago, peterleinchen, phapsubongtoi, phil4444, pichlo, Pigro, pinoverclock, pirateman, pkz, praveenchand, preflex, purgiaali, pursueky, quailstorm, qwazix, Ragnar79, Raimu, ramesh.kumar, ravi_kumar, rcolistete, ReinerS, reinob, rewan, rgodinez, RiD, riv64, robotanarchy, rotoflex, RRvW, rslick, rtiangha, Russe89, safoo, sajjadsajjad, samsds, Santhan, sbock, scy, seanmcken, sEKI, shanttu, shawnjefferson, Shivu025, shubell, sifo, silviof, sim6, SirSocke, sixwheeledbeast, skanky, Skaven2k2, Skry, smartypants, Sohil876, soigreen, Sourav.dubey, sowwhatyoureap, spaak74, sperle, SSLMM, starkwiz, ste-phan, StefanL, stlpaul, StocChr, Stonik, storkus, Straycat, sunyakram, sup, sček, szopin, talou, tangent, TARIKO, te37v, techno2001, tecs, Temporal, The Wizard of Huz, thedead1440, ThomasAH, thp, Tiran, TMavica, toxaris, trx, tullamulla, tuxsavvy, udaychaitanya16, ukki, Ungoliant, uros, vetsin, Viflotre, Virtuality, visN900, Vlad_on_the_road, Wasmachinemann-NL, whisk4s, wicket, wicozani, Wikiwide, woody14619, wow23, Wreck, wumpwoast, X-J, Xagoln, xes, xman, xprism, xXxTJxXx, Yorky, zeljkobo12, Zentenario, zimon, zincholic, zlatokosi, zod, [DarkGUNMAN], [Knuckles], l hakkaa, _David_