bewareofgeek (bewareofgeek) wrote,
bewareofgeek
bewareofgeek

  • Mood:
  • Music:

gnu/linux on lenovo s12 via nano

I bought lenovo s12 via nano. It comes with win xp and lenovo quick start (linux) with no linux option :-(. To boot in lenovo quick start you need to press QS button instead of power on (lenovo quick start is also ugly piece of shit with no ability to add software or do any extension. it's based on linux, meant to be bios extension [see coreboot], but there is just old stinky buggy [you need bios update to version 23 to support memory upgrade up to 3Gb] phenix bios in lenovo s12). I had spare wd scorpio black 320gb 7200, so first thing I did, I replace standard wd scorpio blue 160Gb 5400 with it. And upgraded up to 3Gb memory.
There are plenty of general reviews out there. Here is a walk-through for driver problems (I did it for 2.6.30.5 stable kernel x86_64).

First of all I liked this netbook for it's CPU. VIA Nano U2250 is great, check this out:
# cat /proc/cpuinfo
processor    : 0
vendor_id    : CentaurHauls
cpu family    : 6
model        : 15
model name    : VIA Nano processor U2250 (1.6GHz Capable)
stepping    : 3
cpu MHz        : 1596.022
cache size    : 1024 KB
fpu        : yes
fpu_exception    : yes
cpuid level    : 10
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush acpi mmx fxsr sse sse2 ss tm pbe syscall nx lm constant_tsc rep_good pni monitor vmx est tm2 ssse3 cx16 xtpr rng rng_en ace ace_en ace2 phe phe_en lahf_lm
bogomips    : 3192.04
clflush size    : 64
cache_alignment    : 128
address sizes    : 36 bits physical, 48 bits virtual
power management:

It has x86_64 extension, hardware virtualization support (note flag vmx), hardware crypto - via padlock (ace ace_en ace2), hardware random number generator (rng rng_en), multimedia extension like sse2 and ssse3 - quite a nice list for netbook, huh? That forced me to buy this thing as I like to play with kvm and test my software on both 32 and 64-bit platforms. Hardware encryption let me use dm-crypt without pain like on desktop (actually better, as my primary core 2 duo system doesn't have any hardware crypto).
All that via nano processor features are supported by linux kernel. For x86 it's been for a long time in kernel, but for x86_64 it's new (as via 64 bit extensions are new enough). So to get it one can use 2.6.31 branch kernel (that is rc for the time I'm writing this) or take stable one (2.6.30.5 for me at the moment) and pick couple of small changes from 2.6.31 (that's what I did).
Firstly select Centaur processor type:
 Symbol: CPU_SUP_CENTAUR [=y]                                 
 Prompt: Support Centaur processors                           
   Defined at arch/x86/Kconfig.cpu:459                        
   Depends on: PROCESSOR_SELECT                               
   Location:                                                  
     -> Processor type and features                           
       -> Supported processor vendors (PROCESSOR_SELECT [=y]) 

To get via padlock unmasked in menuconfig I pick this changes from 2.6.31:
drivers/crypto/padlock-aes.c and linux-2.6.30.5/drivers/crypto/Kconfig
Then activate it:
 Symbol: CRYPTO_DEV_PADLOCK [=y]                                  
 Prompt: Support for VIA PadLock ACE                              
   Defined at drivers/crypto/Kconfig:13                           
   Depends on: CRYPTO && CRYPTO_HW && X86 && !UML                 
   Location:                                                      
     -> Cryptographic API (CRYPTO [=y])                           
       -> Hardware crypto devices (CRYPTO_HW [=y])                
   Selects: CRYPTO_ALGAPI                                         

 Symbol: CRYPTO_DEV_PADLOCK_AES [=y]                              
 Prompt: PadLock driver for AES algorithm                         
   Defined at drivers/crypto/Kconfig:26                           
   Depends on: CRYPTO && CRYPTO_HW && CRYPTO_DEV_PADLOCK          
   Location:                                                      
     -> Cryptographic API (CRYPTO [=y])                           
       -> Hardware crypto devices (CRYPTO_HW [=y])                
         -> Support for VIA PadLock ACE (CRYPTO_DEV_PADLOCK [=y]) 
   Selects: CRYPTO_BLKCIPHER && CRYPTO_AES                        

 Symbol: CRYPTO_DEV_PADLOCK_SHA [=y]                              
 Prompt: PadLock driver for SHA1 and SHA256 algorithms            
   Defined at drivers/crypto/Kconfig:39                           
   Depends on: CRYPTO && CRYPTO_HW && CRYPTO_DEV_PADLOCK          
   Location:                                                      
     -> Cryptographic API (CRYPTO [=y])                           
       -> Hardware crypto devices (CRYPTO_HW [=y])                
         -> Support for VIA PadLock ACE (CRYPTO_DEV_PADLOCK [=y]) 
   Selects: CRYPTO_SHA1 && CRYPTO_SHA256                          

If done right you will see this in dmesg:
[    1.160612] padlock: Using VIA PadLock ACE for AES algorithm.
[    1.160733] padlock: Using VIA PadLock ACE for SHA1/SHA256 algorithms.

And:
$ cat /proc/crypto
name         : cbc(aes)
driver       : cbc-aes-padlock
module       : kernel
priority     : 400
refcnt       : 2
selftest     : passed
type         : givcipher
async        : yes
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : chainiv

name         : sha256
driver       : sha256-padlock
module       : kernel
priority     : 300
refcnt       : 1
selftest     : passed
type         : digest
blocksize    : 64
digestsize   : 32

name         : sha1
driver       : sha1-padlock
module       : kernel
priority     : 300
refcnt       : 1
selftest     : passed
type         : digest
blocksize    : 64
digestsize   : 20

name         : cbc(aes)
driver       : cbc-aes-padlock
module       : kernel
priority     : 400
refcnt       : 2
selftest     : passed
type         : blkcipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : <default>

name         : ecb(aes)
driver       : ecb-aes-padlock
module       : kernel
priority     : 400
refcnt       : 1
selftest     : passed
type         : blkcipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 0
geniv        : <default>

name         : aes
driver       : aes-padlock
module       : kernel
priority     : 300
refcnt       : 2
selftest     : passed
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32

This will give you marvellous performance with dm-crypt. There is not need for special tests. I've got 100% cpu load and 15MB/s on coping from dm-crypted partion to dm-crypted partion _without_ padlock. And ordinal average load not more than 30% without a noticeable penalty coping from dm-crypted partion to dm-crypted partion _with_ padlock at speed 45MB/s! (remember I replaced stock hard drive with faster one).
More than that here is a link with patches for openssl and other userspace software for padlock usage: http://www.logix.cz/michal/devel/padlock/index.xp

For hardware random generator I pull drivers/char/hw_random/via-rng.c and drivers/char/hw_random/Kconfig 2.6.31 changes for via

 Symbol: HW_RANDOM_VIA [=y]                                                
 Prompt: VIA HW Random Number Generator support                            
   Defined at drivers/char/hw_random/Kconfig:89                            
   Depends on: HW_RANDOM && X86                                            
   Location:                                                               
     -> Device Drivers                                                     
       -> Character devices                                                
         -> Hardware Random Number Generator Core support (HW_RANDOM [=y])

You will got:
 crw-rw---- 1 root root 10, 183 2009-08-23 12:28 /dev/hwrng

and can use something like rngd to benefit from it.

Other hardware:
-[0000:00]-+-00.0  VIA Technologies, Inc. VX800 Host Bridge [1106:0353]
           +-00.1  VIA Technologies, Inc. VX800/VX820 Error Reporting [1106:1353]
           +-00.2  VIA Technologies, Inc. VX800/VX820 Host Bus Control [1106:2353]
           +-00.3  VIA Technologies, Inc. VX800 PCI to PCI Bridge [1106:3353]
           +-00.4  VIA Technologies, Inc. VX800/VX820 Power Management Control [1106:4353]
           +-00.5  VIA Technologies, Inc. VX800/VX820 APIC and Central Traffic Control [1106:5353]
           +-00.6  VIA Technologies, Inc. VX800/VX820 Scratch Registers [1106:6353]
           +-00.7  VIA Technologies, Inc. VX800/VX820 North-South Module Interface Control [1106:7353]
           +-01.0  VIA Technologies, Inc. Device [1106:1122]
           +-02.0-[0000:01]----00.0  Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express [14e4:1713]
           +-03.0-[0000:02]----00.0  Broadcom Corporation BCM4312 802.11b/g [14e4:4315]
           +-03.1-[0000:03-05]--
           +-0d.0  VIA Technologies, Inc. Secure Digital Memory Card Controller [1106:9530]
           +-0f.0  VIA Technologies, Inc. VX800 Serial ATA and EIDE Controller [1106:5324]
           +-10.0  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
           +-10.1  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
           +-10.2  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
           +-10.4  VIA Technologies, Inc. USB 2.0 [1106:3104]
           +-11.0  VIA Technologies, Inc. VX800/VX820 Bus Control and Power Management [1106:8353]
           +-11.7  VIA Technologies, Inc. VX800/VX820 South-North Module Interface Control [1106:a353]
           +-13.0-[0000:06]--
           \-14.0  VIA Technologies, Inc. VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) [1106:3288]

NetLink BCM5906M Fast Ethernet PCI Express [14e4:1713] works fine with
 Symbol: TIGON3 [=y]                               
 Prompt: Broadcom Tigon3 support                   
   Defined at drivers/net/Kconfig:2246             
   Depends on: NETDEVICES && NETDEV_1000 && PCI    
   Location:                                       
     -> Device Drivers                             
       -> Network device support (NETDEVICES [=y]) 
         -> Ethernet (1000 Mbit) (NETDEV_1000 [=y])
   Selects: PHYLIB                                 

Broadcom Corporation BCM4312 802.11b/g [14e4:4315] works fine with
 Symbol: LIB80211 [=m]                         
 Prompt: Common routines for IEEE802.11 drivers
   Defined at net/wireless/Kconfig:55          
   Depends on: NET && WIRELESS                 
   Location:                                   
     -> Networking support (NET [=y])          
       -> Wireless (WIRELESS [=y])             
   Selected by: LIBERTAS && NETDEVICES && ...

And half opened Brodcom corp. driver (no opensource driver yet). I take ubuntu package "bcmwl-kernel-source_5.10.91.9+bdcom-0ubuntu4_amd64.deb" (http://packages.ubuntu.com/karmic/bcmwl-kernel-source) as it contains patches for new kernel versions. Driver works pretty well, gives full 54 Mb/s no problems was encountered.

Secure Digital Memory Card Controller [1106:9530] works fine (very good performance) with
stock kernel driver from 2.6.31
I pull changes from this files: linux/drivers/mmc/host/via-sdmmc.c and linux/drivers/mmc/host/Kconfig, linux/drivers/mmc/host/Makefile for via
 Symbol: MMC_VIA_SDMMC [=m]                 
 Prompt: VIA SD/MMC Card Reader Driver      
   Defined at drivers/mmc/host/Kconfig:245  
   Depends on: MMC && PCI                   
   Location:                                
     -> Device Drivers                      
       -> MMC/SD/SDIO card support (MMC [=y])

VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) [1106:3288] works fine with
 Symbol: SND_HDA_CODEC_REALTEK [=y]                              
 Prompt: Build Realtek HD-audio codec support                    
   Defined at sound/pci/hda/Kconfig:42                           
   Depends on: SOUND && !M68K && SND && SND_PCI && SND_HDA_INTEL 
   Location:                                                     
     -> Device Drivers                                           
       -> Sound card support (SOUND [=m])                        
         -> Advanced Linux Sound Architecture (SND [=m])         
           -> PCI sound devices (SND_PCI [=y])                   
             -> Intel HD Audio (SND_HDA_INTEL [=m])              

 Symbol: SND_HDA_CODEC_ANALOG [=y]                               
 Prompt: Build Analog Device HD-audio codec support              
   Defined at sound/pci/hda/Kconfig:54                           
   Depends on: SOUND && !M68K && SND && SND_PCI && SND_HDA_INTEL 
   Location:                                                     
     -> Device Drivers                                           
       -> Sound card support (SOUND [=m])                        
         -> Advanced Linux Sound Architecture (SND [=m])         
           -> PCI sound devices (SND_PCI [=y])                   
             -> Intel HD Audio (SND_HDA_INTEL [=m])              

and generic HD-audio codec parser

As for usb devices:

BCM2046 Bluetooth Device
Bus 004 Device 002: ID 0a5c:2150 Broadcom Corp. works fine with stock kernel drivers

webcam (Lenovo EasyCamera)
Bus 001 Device 003: ID 04f2:b090 Chicony Electronics Co., Ltd works fine with stock kernel drivers

And for desert graphic card (VIA VX800 VIA Chrome 9 HC3):
lspci -s 00:01.0 -vnn
00:01.0 VGA compatible controller [0300]: VIA Technologies, Inc. Device [1106:1122] (rev 11)
    Subsystem: Lenovo Device [17aa:388c]
    Flags: bus master, fast devsel, latency 32, IRQ 10
    Memory at d0000000 (32-bit, prefetchable) [size=256M]
    Memory at f4000000 (32-bit, non-prefetchable) [size=16M]
    Memory at f0000000 (32-bit, non-prefetchable) [size=64M]
    [virtual] Expansion ROM at 50000000 [disabled] [size=64K]
    Capabilities: [60] Power Management version 2
    Capabilities: [90] Message Signalled Interrupts: Mask- 64bit- Queue=0/0 Enable-

It's pain. At the moment no working 3D as far as I know. Please let me know if you got it!
You will buy lenovo s12 you gonna be frequent guest of openchrome.org - there are lot of info how to get this card working. I use svn version of openchrome driver. It's working fine in EXA mode and give 2D acceleration (it's fine for watching movies, not hdv). Specs are mostly open and there is work going hard to make drivers better and support major features like 3D and hardware mpeg4.
At the moment there is nothing about Lenovo S12 in driver. So to eliminate xorg error message you can add this line:
[UPDATE: openchrome guys work quickly, line is already commited in trunk]:

--- src/via_id.c    2009-08-22 22:29:51.618098173 +0400
***************
*** 223,228 ****
--- 223,229 ----
      {"Samsung NC20",                          VIA_VX800,   0x144d, 0xc04e, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
      {"Quanta DreamBook Light IL1",            VIA_VX800,   0x152d, 0x0771, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
      {"VIA OpenBook",                          VIA_VX800,   0x1170, 0x0311, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, /* VIA OpenBook eNote VBE8910 */
+     {"Lenovo S12",                            VIA_VX800,   0x17aa, 0x388c, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
 
      /*** VX855 ***/
      {"VIA VT8562C",                           VIA_VX855,   0x1106, 0x5122, VIA_DEVICE_CRT},

mine xorg.conf (tested with X.Org X Server 1.6.0):
# xorg.conf (X.Org X Window System server configuration file)

Section "Module"
    Load    "bitmap"
    Load    "extmod"
    Load    "int10"
    Load    "vbe"
    Load    "dri"
    Load    "glx"
    Load    "dbe"
    Load    "v4l"
    Load    "synaptics"
EndSection

Section "Monitor"
    Identifier    "LCD-Panel"
    Option        "DPMS"
    HorizSync    60
    VertRefresh    31.5-90
    modeline  "1280x800@60" 83.46 1280 1344 1480 1680 800 801 804 828 -hsync +vsync
EndSection

Section "Device"
    Identifier    "VX800"
    BusID        "PCI:00:01:0"
    BoardName    "VIA Chrome9 HC3"
    VendorName    "VIA Tech"
    Driver        "openchrome"
    Option        "AccelMethod"    "EXA"
    Option        "ExaScratchSize"    "8192"
    Option        "ExaNoComposite"    "On"
    Option        "MigrationHeuristic"    "greedy"
    Option        "HWCursor"    "on"
EndSection

Section "Screen"
    Identifier    "Screen0"
    Device        "VX800"
    Monitor        "LCD-Panel"
    DefaultDepth    24
    SubSection "Display"
        Modes    "1280x800"
        Viewport    0 0
        Depth    24
    EndSubSection
EndSection

Section "DRI"
    Mode 0666
EndSection

That's all folks. I like my lenovo s12 for it's cpu features and price (about $406 in russia). All devices except graphics adapter works fine (all features will be in stock 2.6.31 kernel).
Couple of thing I dislike are:
- win xp (why should I sponsor ms?)
- glossy screen
- no 3d for graphics adapter yet

Update: If you plan to upgrade RAM to 3Gb you need bios version >=23. Don't forget to update bios before you throw win xp into rubbish bin (where is its place), because lenovo offer bios update software for win xp only (no bare binary image). :-(
Tags: driver problems, lenovo s12, linux, via nano
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 12 comments