any chance to use a modern linux kernel on Pegasos1 G3 ?

12 messages, 7 authors, 2011-03-16 · open the first message on its own page

any chance to use a modern linux kernel on Pegasos1 G3 ?

From: nello martuscielli <hidden>
Date: 2011-03-12 19:05:15

hallo dear linuxppc kernel developers,

i'm looking for some tips to use a modern linux kernel on my old
Pegasos1 G3 600MHz (IBM PowerPC 750Cxe).
The last working one is 2.6.16.x with arch=ppc.

a picture of the screen when it freezes loading a modern kernel:
http://i52.tinypic.com/33uzgc8.jpg


thank you,
Nel
--
Power Mac G4 AGP 450MHz - CRUX PPC (32bit) 2.7

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: kevin diggs <hidden>
Date: 2011-03-12 19:38:14

Hi,

For what it is worth, I can boot 2.6.36 on a PowerMac 8600 with a
750GX processor in it. I have to compile the kernel with gcc 4.1.2.
Figuring out why 4.3.5 won't work is ... a work in progress (maybe an
exorcism will help?).

kevin

On Sat, Mar 12, 2011 at 1:05 PM, nello martuscielli [off-list ref] wrote:
hallo dear linuxppc kernel developers,

i'm looking for some tips to use a modern linux kernel on my old
Pegasos1 G3 600MHz (IBM PowerPC 750Cxe).
The last working one is 2.6.16.x with arch=ppc.

a picture of the screen when it freezes loading a modern kernel:
http://i52.tinypic.com/33uzgc8.jpg


thank you,
Nel
--
Power Mac G4 AGP 450MHz - CRUX PPC (32bit) 2.7
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: nello martuscielli <hidden>
Date: 2011-03-14 12:39:07

On Sat, Mar 12, 2011 at 8:38 PM, kevin diggs [off-list ref] wrote:
Hi,

For what it is worth, I can boot 2.6.36 on a PowerMac 8600 with a
750GX processor in it. I have to compile the kernel with gcc 4.1.2.
Figuring out why 4.3.5 won't work is ... a work in progress (maybe an
exorcism will help?).
hi Kevin,
thanks for your suggestion. I just tried but it doesn't work for me.
I've the same freeze also compiling with the old gcc-4.1.2.


Nel
--
Power Mac G4 AGP 450MHz - CRUX PPC (32bit) 2.7

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: nello martuscielli <hidden>
Date: 2011-03-15 16:44:53

ok, it seems that no one is interested to fix Pegasos1 G3 600MHz support.

But if someone is capable (i don't have this skill) here what it
happens reading from serial debug console untill it freezes with
linux-2.6.36.4



Pegasos Boot Strap (c) 2002 bplan GmbH
Running on CPU PVR:00083311
PLL setting : 00000001
Enable L1 ICache...                                                    Done.
Setting ROM Defaults...                                                Done.
Configuring SDRAM...
08000000
10000000
Delaying...Done.
RAMSIZE = 18000000
00000004
Reading W83194 : 00FFFFFFFFFF0000                                      Done.
Setting Front Side Bus to 100MHz...                                    Done.
Releasing IDE reset ...                                                Done.
Configuring Legacy Devices
Initializing KBD...                                                    Done.
PLL setting : 00000003
10000000
Done.
FFFFFFFF
BIOS: Stage 2 entered arg(FFFC0000,00000000,18000000)
BIOS: MachineInfo at 0FFFFE68
BIOS: set MemPool limit to BAT size (old=18000000 new=10000000)
BIOS: 0F6FFFE8 bytes added to mempool
LoadFromRFS: starting
LoadFromRFS: lib module 00 has abs load adr at 00C00000
CopyModule: start
CopyModule: load address : 00C00000
CopyModule: copy module to ram...done
ModuleCopy: expanding... done
LoadFromRFS: 00000001 modules out of 00000001 loaded
InitLib: start
InitLib: call module as OF
allocated g_e=0xFD00008 (len=19232)
install_root: pkg=0xFD53B90
after init_environ e=0xFD00008
running nvramrc...
after running nvramrc
no/bad nvramrc - performing default startup script
Bus addresses:
           253@2
I/O addresses:
          7936@FE002100
Memory addresses:
          127M@88040000
          1.3G@98000000
Prefetchable memory addresses:
install_ata_disk_driver: reg=0x1000
init_drive: reset controller 0x1000/0x100E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x0 cyl_hi=0x0
init_drive: error=0x1 status=0x50 status2=0x50
init_drive: identify drive: atapi=0
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1000
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x14 cyl_hi=0xEB
init_drive: error=0x1 status=0x0 status2=0x0
init_drive: identify drive: atapi=1
atapi_cmd: cmdlen=12
atapi_cmd: inlen=8 len=65534
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1010
init_drive: reset controller 0x1010/0x101E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x20 sector=0x20 cyl_lo=0x20 cyl_hi=0x20
init_drive: error=0x20 status=0x20 status2=0x20
ATA-wait-ready: timeout: status=0x20
init_drive: failed
install_ata_disk_driver: reg=0x1010
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x30 sector=0x30 cyl_lo=0x30 cyl_hi=0x30
init_drive: error=0x30 status=0x30 status2=0x30
ATA-wait-ready: timeout: status=0x30
init_drive: failed
Bus addresses:
           254@2
I/O addresses:
             8@FE001038
          3072@FE001400
           48K@FE004000
Memory addresses:
          1792@A0000100
          1.2G@A0001000
Prefetchable memory addresses:
           12M@FD400000
F_INSTALL_CONSOLE: BEGIN
F_INSTALL_CONSOLE: ALIASING SCREEN
F_INSTALL_CONSOLE: ALIASING KBD
EMULATION INT HANDLER ENTERED WITH:
INT NO: 15

EAX=0003 EBX=1111 ECX=2222 EDX=3333 ESP=0000 EBP=5555 ESI=6666 EDI=7777
 AX=4E08  BX=C505  CX=0003  DX=202A  SP=6CAA  BP=5555  SI=5CF9  DI=7777
 DS=C000  ES=BAD0  SS=C000  CS=F000  IP=FE15   NV UP -- PL ZR NA PE NC
CS:IP = F4  C558 C000 0244 3000 0000 01B4 AC63 0200
UNHANDLED INT 10 FUNCTION 0007 WITHIN EMULATION
F_INSTALL_CONSOLE: END
auto-booting...
do_load: dev="" dlen=0 args="" alen=0
do_load: alstr=""
do_load: path doesn't start with /
do_load: <diag-device> == <eth>
do_load: no args..use the default
do_load: <diag-file> == <diag>
try_load: dev="eth" dlen=3 args="diag" alen=4
entering main read/eval loop...

[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x44FD size=0x337272 ret=no error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=3371634 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x332000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x6883C0, addr 0x632000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x632000
size 0xF9CE000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x632000
alloc_constrained: bsize[] 0xF9CE000
alloc_constrained: passed min check
alloc_constrained: addr 0x632000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check



and here giving a try with a smaller (1.9MB) linux boot kernel
[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x3CC size=0x1D8A1A ret=no error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=1935898 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x1D3000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x3AC9A0, addr 0x4D3000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x4D3000
size 0xFB2D000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x4D3000
alloc_constrained: bsize[] 0xFB2D000
alloc_constrained: passed min check
alloc_constrained: addr 0x4D3000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Baurzhan Ismagulov <hidden>
Date: 2011-03-15 17:01:47

On Tue, Mar 15, 2011 at 05:44:49PM +0100, nello martuscielli wrote:
But if someone is capable (i don't have this skill) here what it
happens reading from serial debug console untill it freezes with
linux-2.6.36.4
What is the last kernel version working on that machine? If you have a
working kernel and can build kernels, you could try bisecting to
identify the change that led to that. Perhaps then someone could have
some ideas.

With kind regards,
-- 
Baurzhan Ismagulov
http://www.kz-easy.com/

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Gerhard Pircher <hidden>
Date: 2011-03-15 17:14:55

-------- Original-Nachricht --------
Datum: Tue, 15 Mar 2011 17:44:49 +0100
Von: nello martuscielli [off-list ref]
An: 
CC: linuxppc-dev@lists.ozlabs.org, "acrux @ cruxppc" <redacted>
Betreff: Re: any chance to use a modern linux kernel on Pegasos1 G3 ?
ok, it seems that no one is interested to fix Pegasos1 G3 600MHz
support.

But if someone is capable (i don't have this skill) here what it
happens reading from serial debug console untill it freezes with
linux-2.6.36.4

Pegasos Boot Strap (c) 2002 bplan GmbH
Running on CPU PVR:00083311
PLL setting : 00000001
Enable L1 ICache...                                                   
Done.
Setting ROM Defaults...                                               
Done.
Configuring SDRAM...
08000000
10000000
Delaying...Done.
RAMSIZE = 18000000
00000004
Reading W83194 : 00FFFFFFFFFF0000                                     
Done.
Setting Front Side Bus to 100MHz...                                   
Done.
Releasing IDE reset ...                                               
Done.
Configuring Legacy Devices
Initializing KBD...                                                   
Done.
PLL setting : 00000003
10000000
Done.
FFFFFFFF
BIOS: Stage 2 entered arg(FFFC0000,00000000,18000000)
BIOS: MachineInfo at 0FFFFE68
BIOS: set MemPool limit to BAT size (old=18000000 new=10000000)
BIOS: 0F6FFFE8 bytes added to mempool
LoadFromRFS: starting
LoadFromRFS: lib module 00 has abs load adr at 00C00000
CopyModule: start
CopyModule: load address : 00C00000
CopyModule: copy module to ram...done
ModuleCopy: expanding... done
LoadFromRFS: 00000001 modules out of 00000001 loaded
InitLib: start
InitLib: call module as OF
allocated g_e=0xFD00008 (len=19232)
install_root: pkg=0xFD53B90
after init_environ e=0xFD00008
running nvramrc...
after running nvramrc
no/bad nvramrc - performing default startup script
Bus addresses:
           253@2
I/O addresses:
          7936@FE002100
Memory addresses:
          127M@88040000
          1.3G@98000000
Prefetchable memory addresses:
install_ata_disk_driver: reg=0x1000
init_drive: reset controller 0x1000/0x100E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x0 cyl_hi=0x0
init_drive: error=0x1 status=0x50 status2=0x50
init_drive: identify drive: atapi=0
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1000
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x14 cyl_hi=0xEB
init_drive: error=0x1 status=0x0 status2=0x0
init_drive: identify drive: atapi=1
atapi_cmd: cmdlen=12
atapi_cmd: inlen=8 len=65534
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1010
init_drive: reset controller 0x1010/0x101E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x20 sector=0x20 cyl_lo=0x20 cyl_hi=0x20
init_drive: error=0x20 status=0x20 status2=0x20
ATA-wait-ready: timeout: status=0x20
init_drive: failed
install_ata_disk_driver: reg=0x1010
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x30 sector=0x30 cyl_lo=0x30 cyl_hi=0x30
init_drive: error=0x30 status=0x30 status2=0x30
ATA-wait-ready: timeout: status=0x30
init_drive: failed
Bus addresses:
           254@2
I/O addresses:
             8@FE001038
          3072@FE001400
           48K@FE004000
Memory addresses:
          1792@A0000100
          1.2G@A0001000
Prefetchable memory addresses:
           12M@FD400000
F_INSTALL_CONSOLE: BEGIN
F_INSTALL_CONSOLE: ALIASING SCREEN
F_INSTALL_CONSOLE: ALIASING KBD
EMULATION INT HANDLER ENTERED WITH:
INT NO: 15

EAX=0003 EBX=1111 ECX=2222 EDX=3333 ESP=0000 EBP=5555 ESI=6666 EDI=7777
 AX=4E08  BX=C505  CX=0003  DX=202A  SP=6CAA  BP=5555  SI=5CF9  DI=7777
 DS=C000  ES=BAD0  SS=C000  CS=F000  IP=FE15   NV UP -- PL ZR NA PE NC
CS:IP = F4  C558 C000 0244 3000 0000 01B4 AC63 0200
UNHANDLED INT 10 FUNCTION 0007 WITHIN EMULATION
F_INSTALL_CONSOLE: END
auto-booting...
do_load: dev="" dlen=0 args="" alen=0
do_load: alstr=""
do_load: path doesn't start with /
do_load: <diag-device> == <eth>
do_load: no args..use the default
do_load: <diag-file> == <diag>
try_load: dev="eth" dlen=3 args="diag" alen=4
entering main read/eval loop...

[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x44FD size=0x337272 ret=no
error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=3371634 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x332000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x6883C0, addr 0x632000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x632000
size 0xF9CE000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x632000
alloc_constrained: bsize[] 0xF9CE000
alloc_constrained: passed min check
alloc_constrained: addr 0x632000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check



and here giving a try with a smaller (1.9MB) linux boot kernel
[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x3CC size=0x1D8A1A ret=no error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=1935898 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x1D3000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x3AC9A0, addr 0x4D3000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x4D3000
size 0xFB2D000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x4D3000
alloc_constrained: bsize[] 0xFB2D000
alloc_constrained: passed min check
alloc_constrained: addr 0x4D3000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
I don't know much about the Pegasos OF, but did you give GRUB2 for OF
a try? Maybe it can boot a newer Linux kernel, if it is not a device
tree related problem.

On the other side you mentioned this workaround in
arch/ppc/kernel/prom_init.c to me some time ago:

unsigned long __init prom_init(int r3, int r4, prom_entry pp) :
       node = call_prom("finddevice", 1, 1, "/");
       rc = call_prom("getprop", 4, 1, node, "model", model, sizeof(model));
       if (rc > 0 && !strncmp (model, "Pegasos", 7)
               && strncmp (model, "Pegasos2", 8)) {
               /* Pegasos 1 has a broken translate method in the OF,
                * and furthermore the BATs are mapped 1:1 so the phys
                * address calculated above is correct, so let's use
                * it directly.
                */
       } else if (offset == 0) {
               /* If we are already running at 0xc0000000, we assume we were
                * loaded by an OF bootloader which did set a BAT for us.
                * This breaks OF translate so we force phys to be 0.
                */
               prom_print("(already at 0xc0000000) phys=0\n");
               phys = 0;
       } else if (call_prom("getprop", 4, 1, prom_chosen, "mmu",
                            &prom_mmu, sizeof(prom_mmu)) <= 0) {
               prom_print(" no MMU found\n");
       } else if (call_prom_ret("call-method", 4, 4, result, "translate",
                                prom_mmu, &_stext, 1) != 0) {
               prom_print(" (translate failed)\n");
       } else {
               /* We assume the phys. address size is 3 cells */
               phys = result[2];
       }
Can anybody comment, if this "broken translate method in the OF" would
still be needed for arch/powerpc?

Gerhard

-- 
Schon gehört? GMX hat einen genialen Phishing-Filter in die
Toolbar eingebaut! http://www.gmx.net/de/go/toolbar

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Sven Luther <hidden>
Date: 2011-03-15 18:11:01

On Tue, Mar 15, 2011 at 06:14:48PM +0100, Gerhard Pircher wrote:
-------- Original-Nachricht --------
quoted
Datum: Tue, 15 Mar 2011 17:44:49 +0100
Von: nello martuscielli [off-list ref]
An: 
CC: linuxppc-dev@lists.ozlabs.org, "acrux @ cruxppc" <redacted>
Betreff: Re: any chance to use a modern linux kernel on Pegasos1 G3 ?
quoted
ok, it seems that no one is interested to fix Pegasos1 G3 600MHz
support.

But if someone is capable (i don't have this skill) here what it
happens reading from serial debug console untill it freezes with
linux-2.6.36.4

Pegasos Boot Strap (c) 2002 bplan GmbH
Running on CPU PVR:00083311
PLL setting : 00000001
Enable L1 ICache...                                                   
Done.
Setting ROM Defaults...                                               
Done.
Configuring SDRAM...
08000000
10000000
Delaying...Done.
RAMSIZE = 18000000
00000004
Reading W83194 : 00FFFFFFFFFF0000                                     
Done.
Setting Front Side Bus to 100MHz...                                   
Done.
Releasing IDE reset ...                                               
Done.
Configuring Legacy Devices
Initializing KBD...                                                   
Done.
PLL setting : 00000003
10000000
Done.
FFFFFFFF
BIOS: Stage 2 entered arg(FFFC0000,00000000,18000000)
BIOS: MachineInfo at 0FFFFE68
BIOS: set MemPool limit to BAT size (old=18000000 new=10000000)
BIOS: 0F6FFFE8 bytes added to mempool
LoadFromRFS: starting
LoadFromRFS: lib module 00 has abs load adr at 00C00000
CopyModule: start
CopyModule: load address : 00C00000
CopyModule: copy module to ram...done
ModuleCopy: expanding... done
LoadFromRFS: 00000001 modules out of 00000001 loaded
InitLib: start
InitLib: call module as OF
allocated g_e=0xFD00008 (len=19232)
install_root: pkg=0xFD53B90
after init_environ e=0xFD00008
running nvramrc...
after running nvramrc
no/bad nvramrc - performing default startup script
Bus addresses:
           253@2
I/O addresses:
          7936@FE002100
Memory addresses:
          127M@88040000
          1.3G@98000000
Prefetchable memory addresses:
install_ata_disk_driver: reg=0x1000
init_drive: reset controller 0x1000/0x100E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x0 cyl_hi=0x0
init_drive: error=0x1 status=0x50 status2=0x50
init_drive: identify drive: atapi=0
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1000
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x1 sector=0x1 cyl_lo=0x14 cyl_hi=0xEB
init_drive: error=0x1 status=0x0 status2=0x0
init_drive: identify drive: atapi=1
atapi_cmd: cmdlen=12
atapi_cmd: inlen=8 len=65534
install_ata_disk_driver: return no error (0)
install_ata_disk_driver: reg=0x1010
init_drive: reset controller 0x1010/0x101E
init_drive: allow 4-bits for heads
init_drive: select drive 0
init_drive: seccnt=0x20 sector=0x20 cyl_lo=0x20 cyl_hi=0x20
init_drive: error=0x20 status=0x20 status2=0x20
ATA-wait-ready: timeout: status=0x20
init_drive: failed
install_ata_disk_driver: reg=0x1010
init_drive: allow 4-bits for heads
init_drive: select drive 1
init_drive: seccnt=0x30 sector=0x30 cyl_lo=0x30 cyl_hi=0x30
init_drive: error=0x30 status=0x30 status2=0x30
ATA-wait-ready: timeout: status=0x30
init_drive: failed
Bus addresses:
           254@2
I/O addresses:
             8@FE001038
          3072@FE001400
           48K@FE004000
Memory addresses:
          1792@A0000100
          1.2G@A0001000
Prefetchable memory addresses:
           12M@FD400000
F_INSTALL_CONSOLE: BEGIN
F_INSTALL_CONSOLE: ALIASING SCREEN
F_INSTALL_CONSOLE: ALIASING KBD
EMULATION INT HANDLER ENTERED WITH:
INT NO: 15

EAX=0003 EBX=1111 ECX=2222 EDX=3333 ESP=0000 EBP=5555 ESI=6666 EDI=7777
 AX=4E08  BX=C505  CX=0003  DX=202A  SP=6CAA  BP=5555  SI=5CF9  DI=7777
 DS=C000  ES=BAD0  SS=C000  CS=F000  IP=FE15   NV UP -- PL ZR NA PE NC
CS:IP = F4  C558 C000 0244 3000 0000 01B4 AC63 0200
UNHANDLED INT 10 FUNCTION 0007 WITHIN EMULATION
F_INSTALL_CONSOLE: END
auto-booting...
do_load: dev="" dlen=0 args="" alen=0
do_load: alstr=""
do_load: path doesn't start with /
do_load: <diag-device> == <eth>
do_load: no args..use the default
do_load: <diag-file> == <diag>
try_load: dev="eth" dlen=3 args="diag" alen=4
entering main read/eval loop...

[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x44FD size=0x337272 ret=no
error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=3371634 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=3371634
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x332000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x6883C0, addr 0x632000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x632000
size 0xF9CE000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x632000
alloc_constrained: bsize[] 0xF9CE000
alloc_constrained: passed min check
alloc_constrained: addr 0x632000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check



and here giving a try with a smaller (1.9MB) linux boot kernel
[...]
atapi_cmd: cmdlen=12
atapi_cmd: inlen=2048 len=2048
iso_walk: read: name="zImage.chrp" extent=0x3CC size=0x1D8A1A ret=no error
iso9660: return R_END
file_system: return end (-4089)
disk-label return len=1935898 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1935898
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x1D3000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x3AC9A0, addr 0x4D3000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x4D3000
size 0xFB2D000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x4D3000
alloc_constrained: bsize[] 0xFB2D000
alloc_constrained: passed min check
alloc_constrained: addr 0x4D3000, align 0xFFF, off 0x0
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check
I don't know much about the Pegasos OF, but did you give GRUB2 for OF
a try? Maybe it can boot a newer Linux kernel, if it is not a device
tree related problem.

On the other side you mentioned this workaround in
arch/ppc/kernel/prom_init.c to me some time ago:

unsigned long __init prom_init(int r3, int r4, prom_entry pp) :
quoted
       node = call_prom("finddevice", 1, 1, "/");
       rc = call_prom("getprop", 4, 1, node, "model", model, sizeof(model));
       if (rc > 0 && !strncmp (model, "Pegasos", 7)
               && strncmp (model, "Pegasos2", 8)) {
               /* Pegasos 1 has a broken translate method in the OF,
                * and furthermore the BATs are mapped 1:1 so the phys
                * address calculated above is correct, so let's use
                * it directly.
                */
       } else if (offset == 0) {
               /* If we are already running at 0xc0000000, we assume we were
                * loaded by an OF bootloader which did set a BAT for us.
                * This breaks OF translate so we force phys to be 0.
                */
               prom_print("(already at 0xc0000000) phys=0\n");
               phys = 0;
       } else if (call_prom("getprop", 4, 1, prom_chosen, "mmu",
                            &prom_mmu, sizeof(prom_mmu)) <= 0) {
               prom_print(" no MMU found\n");
       } else if (call_prom_ret("call-method", 4, 4, result, "translate",
                                prom_mmu, &_stext, 1) != 0) {
               prom_print(" (translate failed)\n");
       } else {
               /* We assume the phys. address size is 3 cells */
               phys = result[2];
       }
Can anybody comment, if this "broken translate method in the OF" would
still be needed for arch/powerpc?
Well, since this is long dead hardware not produced anymore, i don't see how the 
OF could have unbroken itself by moving to powerpc.

It has been age since i looked into this, but to the best of my knowledge (and i
wrote the above code or at least the earlier versions) it should be still broken.

But YMMV, ...

Friendly,

Sven Luther

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Gerhard Pircher <hidden>
Date: 2011-03-15 20:09:00

-------- Original-Nachricht --------
Datum: Tue, 15 Mar 2011 18:49:24 +0100
Von: Sven Luther [off-list ref]
An: Gerhard Pircher [off-list ref]
CC: nello martuscielli <redacted>, linuxppc-dev@lists.ozlabs.org, acrux_it@libero.it
Betreff: Re: any chance to use a modern linux kernel on Pegasos1 G3 ?
On Tue, Mar 15, 2011 at 06:14:48PM +0100, Gerhard Pircher wrote:
[...]
quoted
On the other side you mentioned this workaround in
arch/ppc/kernel/prom_init.c to me some time ago:

unsigned long __init prom_init(int r3, int r4, prom_entry pp) :
quoted
       node = call_prom("finddevice", 1, 1, "/");
       rc = call_prom("getprop", 4, 1, node, "model", model,
sizeof(model));
quoted
quoted
       if (rc > 0 && !strncmp (model, "Pegasos", 7)
               && strncmp (model, "Pegasos2", 8)) {
               /* Pegasos 1 has a broken translate method in the OF,
                * and furthermore the BATs are mapped 1:1 so the phys
                * address calculated above is correct, so let's use
                * it directly.
                */
       } else if (offset == 0) {
               /* If we are already running at 0xc0000000, we assume
we were
quoted
quoted
                * loaded by an OF bootloader which did set a BAT for
us.
quoted
quoted
                * This breaks OF translate so we force phys to be 0.
                */
               prom_print("(already at 0xc0000000) phys=0\n");
               phys = 0;
       } else if (call_prom("getprop", 4, 1, prom_chosen, "mmu",
                            &prom_mmu, sizeof(prom_mmu)) <= 0) {
               prom_print(" no MMU found\n");
       } else if (call_prom_ret("call-method", 4, 4, result,
"translate",
quoted
quoted
                                prom_mmu, &_stext, 1) != 0) {
               prom_print(" (translate failed)\n");
       } else {
               /* We assume the phys. address size is 3 cells */
               phys = result[2];
       }
Can anybody comment, if this "broken translate method in the OF" would
still be needed for arch/powerpc?
Well, since this is long dead hardware not produced anymore, i don't see
how the OF could have unbroken itself by moving to powerpc.

It has been age since i looked into this, but to the best of my knowledge
(and i wrote the above code or at least the earlier versions) it should
be still broken.
Any idea then, how the workaround can be ported to arch/powerpc/ or if
there is a better one available?

regards,
Gerhard
-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Sven Luther <hidden>
Date: 2011-03-15 21:41:51

On Tue, Mar 15, 2011 at 09:08:55PM +0100, Gerhard Pircher wrote:
quoted
Well, since this is long dead hardware not produced anymore, i don't see
how the OF could have unbroken itself by moving to powerpc.

It has been age since i looked into this, but to the best of my knowledge
(and i wrote the above code or at least the earlier versions) it should
be still broken.
Any idea then, how the workaround can be ported to arch/powerpc/ or if
there is a better one available?
Sorry, it has been years since i looked these parts of the linux kernel, so i don't really
know how the arch/powerpc code handles this differently. Your best guess is to hunt for the
code yourself, and find the place. I don't remember though if debugging at that time is 
easily possible though.

Friendly,

Sven Luther

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: acrux <hidden>
Date: 2011-03-16 00:23:29

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 15 Mar 2011 22:41:49 +0100
Sven Luther [off-list ref] wrote:
On Tue, Mar 15, 2011 at 09:08:55PM +0100, Gerhard Pircher wrote:
quoted
quoted
Well, since this is long dead hardware not produced anymore, i
don't see how the OF could have unbroken itself by moving to
powerpc.

It has been age since i looked into this, but to the best of my
knowledge (and i wrote the above code or at least the earlier
versions) it should be still broken.
Any idea then, how the workaround can be ported to arch/powerpc/ or
if there is a better one available?
Sorry, it has been years since i looked these parts of the linux
kernel, so i don't really know how the arch/powerpc code handles this
differently. Your best guess is to hunt for the code yourself, and
find the place. I don't remember though if debugging at that time is
easily possible though.
if chrp support doesn't anymore include Pegasos1 it could be nice to
remove all that dead code. Albeit it's fun that nobody cared about for
it during the  ppc=>powerpc switch as Pegasos1 was retired in 2003
and linux-2.6.17 was released in 2006... about three years.


my regards,
Nico
- -- 
GNU/Linux on Power Architecture
CRUX PPC - http://cruxppc.org/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)

iEYEARECAAYFAk2AAvwACgkQxq34tDeO7LiAMgCfSOueU5IE+CGJQFm56C2vIQdl
WpUAn1MsjAZb/nt1SFtfiB1gLdx79lwX
=LULL
-----END PGP SIGNATURE-----

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: Sven Luther <hidden>
Date: 2011-03-16 08:14:05

On Wed, Mar 16, 2011 at 01:23:19AM +0100, acrux wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 15 Mar 2011 22:41:49 +0100
Sven Luther [off-list ref] wrote:
quoted
On Tue, Mar 15, 2011 at 09:08:55PM +0100, Gerhard Pircher wrote:
quoted
quoted
Well, since this is long dead hardware not produced anymore, i
don't see how the OF could have unbroken itself by moving to
powerpc.

It has been age since i looked into this, but to the best of my
knowledge (and i wrote the above code or at least the earlier
versions) it should be still broken.
Any idea then, how the workaround can be ported to arch/powerpc/ or
if there is a better one available?
Sorry, it has been years since i looked these parts of the linux
kernel, so i don't really know how the arch/powerpc code handles this
differently. Your best guess is to hunt for the code yourself, and
find the place. I don't remember though if debugging at that time is
easily possible though.
if chrp support doesn't anymore include Pegasos1 it could be nice to
remove all that dead code. Albeit it's fun that nobody cared about for
it during the  ppc=>powerpc switch as Pegasos1 was retired in 2003
and linux-2.6.17 was released in 2006... about three years.
Also, the Pegasos2 OF implementation corrected these issues.

Notice that 2006 was also the year that debian sabotaged all powerpc work, 
and had me expulsed because some people in the debian-installer team didn't 
support technical critics and had more political pull inside debian than
myself. This happening after almost a decade of me giving my time to debian, 
i kind of lost interest at that point, and nobody stepped up to take over my 
work.

And on top of that, Franz Pop commited suicide last year, which could possibly
have been avoided if debian's leadership would have showed more maturity and
responsability back then. 

Sorry for the off topic rant, but this is something which did take a really
long time for me to get over, and i believe that the debian folk are still not
ready to let it go. I am still censored on debian mailing lists today and probably
banned from irc channels.

Sadly,

Sven Luther

Re: any chance to use a modern linux kernel on Pegasos1 G3 ?

From: nello martuscielli <hidden>
Date: 2011-03-16 23:39:04

hi all,

here instead the log from serial debug console booting the last
working kernel i.e. linux-2.16.62 compiled with arch=ppc .


[...]
do_load: dev="/ide/disk:0" dlen=11 args="CRUX root=/dev/hdb
video=radeonfb:800x600" alen=41
do_load: alstr=""
try_load: dev="/ide/disk:0" dlen=11 args="CRUX root=/dev/hdb
video=radeonfb:800x600" alen=41
create_well_formed_chain: pkg=0xFD57D58 parent=0xFD53B90
currpkg=0xFD53B90 inst=0xFE6EE50
        pkg=/pci@80000000 parent=/ currpkg=/ currinst=/
create_well_formed_chain: pkg=0xFD53B90 parent=0x0 currpkg=0xFD53B90
inst=0xFE6EE50
        pkg=/ parent= currpkg=/ currinst=/
        pkg=0xFD57D58:/pci@80000000 parent=0xFE6EE50:/
inst=0xFE6EEA8:/pci@80000000 instparent=0xFE6EE50
ata_disk_open: pkg=0xFD5B870 parent=0xFD5B2C8
ata_disk_open: CTLR=0x0 ID=0x0
ata_disk_open: args="0"
deblocker open
ata_disk_max_transfer: 512
deblocker open: block-size=0x200 max-transfer=0x200
deblocker open: return 0
open-package: ret=0:no error r=-1
ata_disk_open: $open-package deblocker ret=0
ata_disk_open: deblocker=0xFE6EFC8
disk-label open
disk-label open: self=0xFE702B0 s->buf=0xFE71000
disk-label open: return 0
open-package: ret=0:no error r=-1
ata_disk_open: $open-package disk-label ret=0
ata_disk_open: disklabel=0xFE70258
disk-label load: addr=0x400000 loadargs=CRUX root=/dev/hdb
video=radeonfb:800x600 args=0,CRUX root=/dev/hdb
video=radeonfb:800x600
file_system: e=0xFD00008 disk=0xFE6EF58 loc=0x0 start=0x0
path=0xFE703C0 buf=0xFE71000 size=512
file_system: probing filesys dos-partition

dos_partition: enter
dos-partition: boot_sect_sig0/1=0x55.0xAA jump=0x0 boot_signature=0x0
drive_number=0x0
dos_partition: partition=0 size=0x32F8E start=0x3F typ=0x6
        flag=0x80 shd=0x1 ssect=0x1 scyl=0x0 ehd=0xFE esect=0x3F ecyl=0xC
file_system: e=0xFD00008 disk=0xFE6EF58 loc=0x7E00 start=0x3F
path=0xFE703C2 buf=0xFE71000 size=512
file_system: probing filesys dos-partition
file_system: probing filesys dos-fat
file_system: return end (-4089)
file_system: return end (-4089)
disk-label return len=1782093 ret=end (-4089)
ata_disk_close
disk-label close:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1782093
checking exec type Forth
checking exec type ELF
f_go:
checking exec type Fcode
fcode_is_exec: load=0x400000 loadlen=1782093
checking exec type Forth
checking exec type ELF
alloc_aligned: a 0xFD548E8 align 0xFD5491C size 0xFD54918 addr 0xFD54914
alloc_constrained: min 0x0, max 0xFFFFFFFF, align 0x1000, mask
0xFFFFFFFF, size 0x7E0000, addr 0x300000
alloc_constrained: acells 0x1 scells 0x1 t1 0xC t2 0xFD5490C u1
0xFD54910 u2 0xFD54914 u3 0xFD54918
alloc_constrained: allocator_block 0xFD54930, next 0x0 addr 0x300000
size 0xFD00000
alloc_constrained: fsblock 0x0
alloc_constrained: addr[] 0x300000
alloc_constrained: bsize[] 0xFD00000
alloc_constrained: passed min check
alloc_constrained: addr 0x300000, align 0xFFF, off 0x69696969
sum 0x0
alloc_constrained: passed align check
alloc_constrained: passed max check
alloc_constrained: passed mask check
alloc_constrained: passed full size check
alloc_constrained: passed size check


i'm not an expert but from a quick logs comparison I saw two times the
alloc_aligned,alloc_constrained section instead in the working one i
see it only one time.
Maybe it's an usefull observation.


cheers,
Nell
--
1861 - 2011: 150 years of Italian Unity
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help