OpenBIOS
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1999 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1998 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1997 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1996 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1995 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1994 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1993 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1992 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1991 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1990 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1989 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1988 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1987 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1986 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1985 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1984 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1983 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1982 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1981 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1980 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1979 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1978 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1977 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1976 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1975 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1974 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1973 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1972 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1971 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1970 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1969 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1968 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1967 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1966 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1965 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1964 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1963 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1962 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1961 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1960 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1959 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1958 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1957 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1956 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1955 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1954 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1953 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1952 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1951 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1950 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1949 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1948 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1947 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1946 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1945 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1944 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1943 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1942 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1941 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1940 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1939 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1938 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1937 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1936 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1935 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1934 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1933 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1932 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1931 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1930 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1929 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1928 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1927 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1926 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1925 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1924 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1923 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1922 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1921 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1920 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1919 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1918 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1917 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1916 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1915 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1914 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1913 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1912 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1911 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1910 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1909 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1908 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1907 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1906 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1905 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1904 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
November 2007
- 5 participants
- 46 discussions
Author: blueswirl
Date: 2007-11-17 20:00:58 +0100 (Sat, 17 Nov 2007)
New Revision: 178
Modified:
openbios-devel/drivers/obio.c
Log:
Remove unused variable
Modified: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c 2007-11-17 18:56:43 UTC (rev 177)
+++ openbios-devel/drivers/obio.c 2007-11-17 19:00:58 UTC (rev 178)
@@ -687,7 +687,6 @@
unsigned int machine_id;
struct cpudef *cpu;
ohwcfg_v3_t *header;
- uint16_t crc;
ob_new_obio_device("eeprom", NULL);
1
0
Author: blueswirl
Date: 2007-11-17 19:56:43 +0100 (Sat, 17 Nov 2007)
New Revision: 177
Modified:
openbios-devel/arch/sparc32/entry.S
openbios-devel/drivers/obio.c
Log:
Reset fixes:
* recalculate CRC to avoid error message and halt after reset
* fix bug that crashed SS10/SMP when reset
Modified: openbios-devel/arch/sparc32/entry.S
===================================================================
--- openbios-devel/arch/sparc32/entry.S 2007-11-14 19:25:43 UTC (rev 176)
+++ openbios-devel/arch/sparc32/entry.S 2007-11-17 18:56:43 UTC (rev 177)
@@ -129,7 +129,7 @@
! Check if this not the first SMP CPU, if so, bypass PROM entirely
add %g3, SPARC_SMP_VALID, %g1
lduba [%g1] ASI_M_CTL, %g2
- stba %g0, [%g2] ASI_M_CTL
+ stba %g0, [%g1] ASI_M_CTL
set PHYS_SS10_EEPROM + OHW_RAM_SIZE, %g1
ldda [%g1] ASI_M_CTL, %g0
tst %g2
Modified: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c 2007-11-14 19:25:43 UTC (rev 176)
+++ openbios-devel/drivers/obio.c 2007-11-17 18:56:43 UTC (rev 177)
@@ -687,6 +687,7 @@
unsigned int machine_id;
struct cpudef *cpu;
ohwcfg_v3_t *header;
+ uint16_t crc;
ob_new_obio_device("eeprom", NULL);
@@ -721,6 +722,7 @@
header->kernel_image = 0;
header->kernel_size = 0;
header->cmdline_size = 0;
+ header->crc = OHW_compute_crc(header, 0x00, 0xF8);
boot_device = nv_info.boot_devices[0];
nographic = nv_info.graphic_flags & OHW_GF_NOGRAPHICS;
1
0
Author: wmb
Date: 2007-11-16 23:29:19 +0100 (Fri, 16 Nov 2007)
New Revision: 735
Modified:
dev/olpc/cafenand/cafenand.fth
ofw/fs/jffs2/jffs2.fth
Log:
OLPC trac #4982 - Discard cached JFFS2 scan info if the data changes
on the NAND FLASH, so JFFS2 operations work correctly after copy-nand.
Also added a couple of JFFS2 debugging tools - .dirinum and .finum ;
nothing calls them. They display the nodes for a given inum.
Modified: dev/olpc/cafenand/cafenand.fth
===================================================================
--- dev/olpc/cafenand/cafenand.fth 2007-11-16 22:02:01 UTC (rev 734)
+++ dev/olpc/cafenand/cafenand.fth 2007-11-16 22:29:19 UTC (rev 735)
@@ -129,6 +129,7 @@
\ : read-id ( -- ) 0 0 set-page read-id-cmd 0 cmd wait-cmd h# 30 cl@ ;
: dma-off ( -- ) 0 h# 40 cl! ;
+0 value #writes
: wait-write-done ( -- error? )
0 ( status )
begin ( status )
@@ -139,6 +140,7 @@
\ If the value is completely 0 I think it means write protect
1 and 0<> ( error? )
write-disable
+ #writes 1+ to #writes
;
\ Assumes that the range doesn't straddle a page boundary
Modified: ofw/fs/jffs2/jffs2.fth
===================================================================
--- ofw/fs/jffs2/jffs2.fth 2007-11-16 22:02:01 UTC (rev 734)
+++ ofw/fs/jffs2/jffs2.fth 2007-11-16 22:29:19 UTC (rev 735)
@@ -86,6 +86,7 @@
true value first-time?
-1 value partition#
+-1 value #writes
\ This is a run-time cache of the parent inums for the directory inums we
\ have seen, used for resolving "..".
@@ -512,28 +513,26 @@
dirent-offset ! ( )
;
-: c@+ ( adr -- c adr' ) dup c@ swap ca1+ ;
-: w@+ ( adr -- w adr' ) dup w@ swap wa1+ ;
-: l@+ ( adr -- l adr' ) dup l@ swap la1+ ;
+: w@+ ( adr -- w adr' ) dup wa1+ swap w@ ;
+: l@+ ( adr -- adr' l ) dup la1+ swap l@ ;
-: decode-dirent ( adr -- false | adr' offset pino true )
+: decode-dirent ( adr -- false | adr' offset true )
dup next-dirent >= if drop false exit then
dup c@ dup 1 and if ( adr c ) \ 1-byte form
2/ /l* dirent-offset +! ( adr )
ca1+ ( adr' )
dirent-offset @ ( adr offset )
- cur-pino @ ( adr offset pino )
else ( adr c ) \ Longer form
+ drop ( adr )
w@+ ?dup if ( adr' w ) \ 2-byte form
/w* dirent-offset +! ( adr )
dirent-offset @ ( adr offset )
- cur-pino @ ( adr offset pino )
else ( adr ) \ Long form
- l@+ over cur-pino ! ( pino adr' )
- l@+ over dirent-offset ! ( pino offset adr' )
- swap rot ( adr offset pino )
- then ( adr offset pino )
- then ( adr offset pino )
+ l@+ cur-pino ! ( adr' )
+ l@+ dirent-offset ! ( adr' )
+ dirent-offset @ ( adr offset )
+ then ( adr offset )
+ then ( adr offset )
true
;
@@ -618,7 +617,7 @@
4 # sp add \ clean stack
ax ax xor 0 # 0 [sp] mov \ return false
c;
-: next-pino-match ( adr -- false | pino adr' offset true )
+: next-pino-match ( adr -- false | adr' offset true )
next-dirent wd-inum cur-pino dirent-offset (next-pino-match)
;
[then]
@@ -650,11 +649,11 @@
dup c@ dup 1 and if ( adr b )
2/ /l* dirent-offset +! ( adr )
ca1+ ( adr' )
- w@+ swap ?dup if ( adr' w )
+ w@+ ?dup if ( adr' w )
/w* dirent-offset +! ( adr' )
else ( adr' )
- l@+ swap cur-pino ! ( adr' )
- l@+ swap dirent-offset ! ( adr' )
+ l@+ cur-pino ! ( adr' )
+ l@+ dirent-offset ! ( adr' )
wd-inum cur-pino @ = if ( adr' )
dirent-offset @ ( adr' offset )
true ( adr' offset true )
@@ -827,7 +826,11 @@
;
: scan-occupied ( -- )
- " partition#" $call-parent partition# = first-time? 0= and if exit then
+ " partition#" $call-parent partition# =
+ first-time? 0= and
+ " #writes" $call-parent #writes = and
+ if exit then
+
init-curvars
dirents 'next-dirent !
inodes 'next-inode !
@@ -838,6 +841,9 @@
i possible-nodes? if i scan-raw-nodes then
then
pages/eblock +loop
+
+ " partition#" $call-parent to partition#
+ " #writes" $call-parent to #writes
;
0 [if]
@@ -1195,7 +1201,37 @@
to wd-inum
false
;
+: .finum ( inum -- )
+ init-curvars
+ inodes begin next-inode curinum amatch-inode while ( inum inode' offset version )
+ drop get-node ( inum inode' adr )
+ ." Vers: " dup riversion@ . ( inum inode' len adr )
+ ." Floc: " dup rioffset@ . ( inum inode' len adr )
+ ." Dlen: " dup ridsize@ . ( inum inode' len adr )
+ ." Mode: " dup rimode@ . ( inum inode' len adr )
+ drop cr ( inum inode' len )
+ repeat ( inum )
+ drop
+;
+: .dirinum ( inum -- )
+ >r
+ dirents begin decode-dirent while ( adr' offset pino r: )
+ get-node dup rdinode@ ( adr' node-adr this-inum r: inum )
+ r@ = if
+ dup rdname$ type
+ ." Vers: " dup rdversion@ .
+ ." Pino: " dup rdpino@ .
+\ Inum is known since we searched for it, and type is always "directory"
+\ since we searched the dirent list.
+\ ." Inum: " dup rdinode@ .
+ cr
+ then ( adr' node-adr r: inum )
+ drop ( adr' r: inum )
+ repeat ( r: inum )
+ r> drop
+;
+
: $find-name ( name$ -- error? )
-1 to my-vers ( name$ )
@@ -1469,7 +1505,6 @@
scan-occupied ( )
- " partition#" $call-parent to partition#
false to first-time?
my-args " <NoFile>" $= if true exit then
1
0
Author: wmb
Date: 2007-11-16 23:02:01 +0100 (Fri, 16 Nov 2007)
New Revision: 734
Modified:
cpu/x86/pc/olpc/sdtools/sd.fth
Log:
sdkit - added some stub definitions to fix a problem that crept
in when some other files changed.
Modified: cpu/x86/pc/olpc/sdtools/sd.fth
===================================================================
--- cpu/x86/pc/olpc/sdtools/sd.fth 2007-11-16 21:57:42 UTC (rev 733)
+++ cpu/x86/pc/olpc/sdtools/sd.fth 2007-11-16 22:02:01 UTC (rev 734)
@@ -59,6 +59,7 @@
: spicmd! unimp ; : spi-cmd-wait unimp ; : power-off unimp ;
defer spi-start defer spi@ defer spi! defer spi-out defer spi-reprogrammed
1 value spi-us
+: disable-interrupts ; : ignore-power-button ;
\needs ec@ fload ecio.fth
\needs ec-range fload ecdump.fth
1
0
Author: wmb
Date: 2007-11-16 22:57:42 +0100 (Fri, 16 Nov 2007)
New Revision: 733
Modified:
cpu/x86/pc/olpc/resume.bth
Log:
OLPC trac 4981 - don't hang indefinitely if the suspend sequence fails
to power down the CPU.
Modified: cpu/x86/pc/olpc/resume.bth
===================================================================
--- cpu/x86/pc/olpc/resume.bth 2007-11-16 21:48:09 UTC (rev 732)
+++ cpu/x86/pc/olpc/resume.bth 2007-11-16 21:57:42 UTC (rev 733)
@@ -315,8 +315,16 @@
wrmsr \ Write GLD_MSR_PM to self-refresh memory
di dx mov bx ax mov ax dx out \ Write PM1_CNT to initial suspend
- begin again \ Spin in this cache line while going down
+ h# fff # cx mov begin nop loopa \ Spin in this cache line while going down
+ \ If the processor didn't really go down, perhaps because a wakeup event was
+ \ already pending, restart the memory clocks and proceed as with a wakeup
+ h# 0. h# 2000.2004 set-msr \ GLD_MSR_PM MSR number
+ h# 2000.0018 rmsr h# 5000 bitset h# 2000.0018 wmsr \ Set refresh interval
+
+ \ Increment the CMOS byte at offset 3f
+ h# 3f # al mov al h# 70 # out h# 71 # al in al inc al h# 71 # out
+
\ Resume code
here resume-entry put-branch
1
0
Author: wmb
Date: 2007-11-16 22:48:09 +0100 (Fri, 16 Nov 2007)
New Revision: 732
Modified:
cpu/x86/pc/olpc/fw.bth
cpu/x86/pc/olpc/nandstat.fth
Log:
OLPC trac 4980 - fixed scan-nand display formatting glitches, and
added rocker-up to invoke scan-nand in secure mode.
Modified: cpu/x86/pc/olpc/fw.bth
===================================================================
--- cpu/x86/pc/olpc/fw.bth 2007-11-15 02:48:56 UTC (rev 731)
+++ cpu/x86/pc/olpc/fw.bth 2007-11-16 21:48:09 UTC (rev 732)
@@ -520,6 +520,9 @@
." Tests complete - powering off" cr d# 5000 ms power-off
then
;
+: ?scan-nand ( -- )
+ rocker-up game-key? if text-on scan-nand then
+;
: ?fs-update ( -- )
button-check button-x or button-o or button-square or ( mask )
game-key-mask over and = if
@@ -562,6 +565,7 @@
['] false to interrupt-auto-boot?
probe-usb
interpreter-init
+ ?scan-nand
?diags
?fs-update
secure-startup
Modified: cpu/x86/pc/olpc/nandstat.fth
===================================================================
--- cpu/x86/pc/olpc/nandstat.fth 2007-11-15 02:48:56 UTC (rev 731)
+++ cpu/x86/pc/olpc/nandstat.fth 2007-11-16 21:48:09 UTC (rev 732)
@@ -197,7 +197,7 @@
3dup 0 1 xy+ 1 grid-h do-fill ( color x y )
1 grid-h xy+ grid-w 1 do-fill
;
-: lowlight ( block# -- ) h# ffff cell-border ;
+: lowlight ( block# -- ) h# c0 h# c0 h# c0 rgb>565 cell-border ;
: highlight ( block# -- ) 0 cell-border ;
: +block ( offset -- )
current-block + nand-block-limit mod ( new-block )
@@ -223,7 +223,7 @@
;
: examine-nand ( -- )
- 0 status-line 1+ at-xy ." Arrows, fn Arrows to move, Esc to exit" cr
+ 0 status-line 1- at-xy red-letters ." Arrows, fn Arrows to move, Esc to exit" black-letters cr
0 to current-block
current-block highlight
false to examine-done?
@@ -231,7 +231,6 @@
current-block lowlight
;
-
: scan-nand ( -- )
open-nand
nand-map 0= if
1
0
Author: wmb
Date: 2007-11-15 03:48:56 +0100 (Thu, 15 Nov 2007)
New Revision: 731
Modified:
cpu/x86/pc/olpc/parsekbd.py
Log:
OLPC - Improved parsekbd.py to handle slight variations in the overall
wiki page layout.
Modified: cpu/x86/pc/olpc/parsekbd.py
===================================================================
--- cpu/x86/pc/olpc/parsekbd.py 2007-11-14 09:53:14 UTC (rev 730)
+++ cpu/x86/pc/olpc/parsekbd.py 2007-11-15 02:48:56 UTC (rev 731)
@@ -20,7 +20,8 @@
from urllib import *
from HTMLParser import HTMLParser
-state = 0
+indent = 0
+hidseen = False
keys = 128*[0]
modifiers = 128*[0]
column = 0
@@ -110,22 +111,9 @@
keys[ascii] = keyid
modifiers[ascii] = modifier
-class MyHTMLParser(HTMLParser):
- def handle_starttag(self, tag, attrs):
- global state, column, keyid
- if tag == 'table':
- state = state + 1
- elif tag == 'tr':
- column = 0
- keyid = 0
- elif tag == 'td':
- column = column + 1;
-
- def handle_data(self, data):
- global state, column, keyid
- if state != 1:
- return
- s = data.strip()
+def do_key():
+ global column, keyid
+ s = lastdata.strip()
if column == 1: # XKB key
pass
elif column == 2: # HID
@@ -149,7 +137,45 @@
elif column == 10: # comment
pass
+class MyHTMLParser(HTMLParser):
+ def handle_starttag(self, tag, attrs):
+ global column, keyid, indent
+ #for i in range(indent):
+ # print "",
+ #print "<", tag
+ #indent = indent+2
+ if tag == 'tr':
+ column = 0
+ keyid = 0
+ elif tag == 'td':
+ column = column + 1;
+
+ def handle_endtag(self, tag):
+ global hidseen, column, keyid, indent
+ #for i in range(indent):
+ # print "",
+ #print tag,">"
+ #indent = indent - 2
+ #if indent < 0:
+ # indent = 0
+ if tag == 'table':
+ hidseen = False
+ elif ((tag == 'th') & (lastdata == "HID")):
+ hidseen = True
+ elif (tag == 'td') & hidseen:
+ do_key()
+
+ def handle_data(self, data):
+ global lastdata, indent
+ #for i in range(indent):
+ # print "",
+ #print "{", data, "}"
+ lastdata = data.strip()
+ if lastdata.startswith("There is currently no text"):
+ print "No such Wiki page"
+ raise
+
# This table converts from the IBM physical keystation number to
# the corresponding scancode value in scan set 1.
@@ -208,12 +234,16 @@
if len(argv) != 2:
print "Usage: python parsekbd.py PageName"
else:
- infile = urlopen('http://wiki.laptop.org/go/' + argv[1])
- myparser=MyHTMLParser()
- myparser.feed(infile.read())
- myparser.close()
- infile.close()
-
- outfile = open(argv[1] + '.ka', 'w')
- put_ka_format(outfile)
- outfile.close()
+ try:
+ print "Getting",'http://wiki.laptop.org/go/' + argv[1]
+ infile = urlopen('http://wiki.laptop.org/go/' + argv[1])
+ myparser=MyHTMLParser()
+ myparser.feed(infile.read())
+ myparser.close()
+ infile.close()
+ outfile = open(argv[1] + '.ka', 'w')
+ put_ka_format(outfile)
+ outfile.close()
+ print "Output at",argv[1] + '.ka'
+ except:
+ print "Failed"
1
0

r176 - in openbios-devel: arch/sparc32 arch/sparc64 drivers include/openbios
by svn@openbios.org Nov. 14, 2007
by svn@openbios.org Nov. 14, 2007
Nov. 14, 2007
Author: blueswirl
Date: 2007-11-14 20:25:43 +0100 (Wed, 14 Nov 2007)
New Revision: 176
Added:
openbios-devel/include/openbios/firmware_abi.h
Modified:
openbios-devel/arch/sparc32/entry.S
openbios-devel/arch/sparc64/boot.c
openbios-devel/arch/sparc64/boot.h
openbios-devel/arch/sparc64/entry.S
openbios-devel/arch/sparc64/openbios.c
openbios-devel/arch/sparc64/sys_info.c
openbios-devel/drivers/obio.c
openbios-devel/drivers/obio.h
Log:
Update OHW interface to version 3.
Use common ABI description file with Qemu for both Sparc32 and Sparc64.
Remove private definitions and magic constants.
Modified: openbios-devel/arch/sparc32/entry.S
===================================================================
--- openbios-devel/arch/sparc32/entry.S 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc32/entry.S 2007-11-14 19:25:43 UTC (rev 176)
@@ -10,6 +10,8 @@
#include "psr.h"
#include "asi.h"
#include "asm/crs.h"
+#define __ASSEMBLY__
+#include "openbios/firmware_abi.h"
#define PHYS_JJ_EEPROM 0x71200000 /* [2000] MK48T08 */
#define PHYS_JJ_INTR0 0x71E00000 /* CPU0 interrupt control registers */
@@ -17,8 +19,6 @@
#define PHYS_SS10_EEPROM 0xf1200000
#define PHYS_SS10_INTR0 0xf1400000
-#define SUN_MACHINE_ID 0x1fd9
-
#define WRITE_PAUSE nop; nop; nop; /* Have to do this after %wim/%psr chg */
.globl entry, _entry
@@ -56,12 +56,17 @@
! Ok, this is SS-5
mov 0x80, %y
+ ! Find architecture specific part
+ set PHYS_JJ_EEPROM + OHW_ARCH_PTR, %g1
+ lduha [%g1] ASI_M_BYPASS, %g2
+ set PHYS_JJ_EEPROM, %g1
+ add %g1, %g2, %g3
! Check if this not the first SMP CPU, if so, bypass PROM entirely
- set PHYS_JJ_EEPROM + 0x2E, %g1
+ add %g3, SPARC_SMP_VALID, %g1
lduba [%g1] ASI_M_BYPASS, %g2
stba %g0, [%g1] ASI_M_BYPASS
- set PHYS_JJ_EEPROM + 0x30, %g1
- lda [%g1] ASI_M_BYPASS, %g1
+ set PHYS_JJ_EEPROM + OHW_RAM_SIZE, %g1
+ ldda [%g1] ASI_M_BYPASS, %g0
tst %g2
bz first_cpu
nop
@@ -73,17 +78,17 @@
sta %g1, [%g2] ASI_M_BYPASS ! clear softints
add %g2, 4, %g2
sta %g0, [%g2] ASI_M_BYPASS ! clear softints
- set PHYS_JJ_EEPROM + 0x3C, %g1
+ add %g3, SPARC_SMP_CTXTBL, %g1
lda [%g1] ASI_M_BYPASS, %g2
sta %g0, [%g1] ASI_M_BYPASS
set AC_M_CTPR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set ctx table ptr
- set PHYS_JJ_EEPROM + 0x40, %g1
+ add %g3, SPARC_SMP_CTX, %g1
lda [%g1] ASI_M_BYPASS, %g2
sta %g0, [%g1] ASI_M_BYPASS
set AC_M_CXR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set context
- set PHYS_JJ_EEPROM + 0x38, %g1
+ add %g3, SPARC_SMP_ENTRY, %g1
lda [%g1] ASI_M_BYPASS, %g2
sta %g0, [%g1] ASI_M_BYPASS
set 1, %g1
@@ -113,15 +118,20 @@
bne bad_nvram
! Ok, this is SS-10 or SS-600MP
- ! Check if this not the first SMP CPU, if so, bypass PROM entirely
- set PHYS_SS10_EEPROM + SUN_MACHINE_ID, %g1
+ set PHYS_SS10_EEPROM + SPARC_MACHINE_ID, %g1
lduba [%g1] ASI_M_CTL, %g2
mov %g2, %y
- set PHYS_SS10_EEPROM + 0x2E, %g1
+ ! Find architecture specific part
+ set PHYS_SS10_EEPROM + OHW_ARCH_PTR, %g1
+ lduha [%g1] ASI_M_CTL, %g2
+ set PHYS_SS10_EEPROM, %g1
+ add %g1, %g2, %g3
+ ! Check if this not the first SMP CPU, if so, bypass PROM entirely
+ add %g3, SPARC_SMP_VALID, %g1
lduba [%g1] ASI_M_CTL, %g2
stba %g0, [%g2] ASI_M_CTL
- set PHYS_SS10_EEPROM + 0x30, %g1
- lda [%g1] ASI_M_CTL, %g1
+ set PHYS_SS10_EEPROM + OHW_RAM_SIZE, %g1
+ ldda [%g1] ASI_M_CTL, %g0
tst %g2
bz first_cpu
nop
@@ -132,17 +142,17 @@
sta %g1, [%g2] ASI_M_CTL ! clear softints
add %g2, 4, %g2
sta %g0, [%g2] ASI_M_CTL ! clear softints
- set PHYS_SS10_EEPROM + 0x3C, %g1
+ add %g3, SPARC_SMP_CTXTBL, %g1
lda [%g1] ASI_M_CTL, %g2
sta %g0, [%g1] ASI_M_CTL
set AC_M_CTPR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set ctx table ptr
- set PHYS_JJ_EEPROM + 0x40, %g1
+ add %g3, SPARC_SMP_CTX, %g1
lda [%g1] ASI_M_CTL, %g2
sta %g0, [%g1] ASI_M_CTL
set AC_M_CXR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set context
- set PHYS_SS10_EEPROM + 0x38, %g1
+ add %g3, SPARC_SMP_ENTRY, %g1
lda [%g1] ASI_M_CTL, %g2
sta %g0, [%g1] ASI_M_CTL
set 1, %g1
Modified: openbios-devel/arch/sparc64/boot.c
===================================================================
--- openbios-devel/arch/sparc64/boot.c 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc64/boot.c 2007-11-14 19:25:43 UTC (rev 176)
@@ -16,10 +16,10 @@
void boot(void);
struct sys_info sys_info;
-uint32_t kernel_image;
-uint32_t kernel_size;
-uint32_t cmdline;
-uint32_t cmdline_size;
+uint64_t kernel_image;
+uint64_t kernel_size;
+uint64_t cmdline;
+uint64_t cmdline_size;
char boot_device;
void boot(void)
Modified: openbios-devel/arch/sparc64/boot.h
===================================================================
--- openbios-devel/arch/sparc64/boot.h 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc64/boot.h 2007-11-14 19:25:43 UTC (rev 176)
@@ -12,3 +12,9 @@
unsigned int start_elf(unsigned long entry_point, unsigned long param);
+extern uint64_t kernel_image;
+extern uint64_t kernel_size;
+extern uint64_t cmdline;
+extern uint64_t cmdline_size;
+extern char boot_device;
+extern struct sys_info sys_info;
Modified: openbios-devel/arch/sparc64/entry.S
===================================================================
--- openbios-devel/arch/sparc64/entry.S 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc64/entry.S 2007-11-14 19:25:43 UTC (rev 176)
@@ -11,6 +11,8 @@
#include "asi.h"
#include "pstate.h"
#include "lsu.h"
+#define __ASSEMBLY__
+#include "openbios/firmware_abi.h"
#define PROM_ADDR 0x1fff0000000
@@ -49,7 +51,7 @@
! Get memory size from NVRAM
setx 0x1fe02000074, %g2, %g5
- mov 0x30, %g2
+ mov OHW_RAM_SIZE, %g2
stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
add %g5, 1, %g1
stba %g0, [%g1] ASI_PHYS_BYPASS_EC_E
@@ -72,6 +74,30 @@
inc %g2
stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
lduba [%g1] ASI_PHYS_BYPASS_EC_E, %g3
+ or %g3, %g4, %g4
+
+ sll %g4, 8, %g4
+ inc %g2
+ stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
+ lduba [%g1] ASI_PHYS_BYPASS_EC_E, %g3
+ or %g3, %g4, %g4
+
+ sll %g4, 8, %g4
+ inc %g2
+ stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
+ lduba [%g1] ASI_PHYS_BYPASS_EC_E, %g3
+ or %g3, %g4, %g4
+
+ sll %g4, 8, %g4
+ inc %g2
+ stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
+ lduba [%g1] ASI_PHYS_BYPASS_EC_E, %g3
+ or %g3, %g4, %g4
+
+ sll %g4, 8, %g4
+ inc %g2
+ stba %g2, [%g5] ASI_PHYS_BYPASS_EC_E
+ lduba [%g1] ASI_PHYS_BYPASS_EC_E, %g3
or %g3, %g4, %g1
! %g1 contains end of memory
Modified: openbios-devel/arch/sparc64/openbios.c
===================================================================
--- openbios-devel/arch/sparc64/openbios.c 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc64/openbios.c 2007-11-14 19:25:43 UTC (rev 176)
@@ -15,6 +15,8 @@
#include "openbios/stack.h"
#include "sys_info.h"
#include "openbios.h"
+#include "openbios/firmware_abi.h"
+#include "boot.h"
void boot(void);
@@ -23,35 +25,10 @@
// XXX
#define NVRAM_SIZE 0x2000
#define NVRAM_IDPROM 0x1fd0
-#define NVRAM_OB_OFFSET 256
-#define NVRAM_OB_SIZE ((NVRAM_IDPROM - NVRAM_OB_OFFSET) & ~15)
+#define NVRAM_OB_START (sizeof(ohwcfg_v3_t) + sizeof(struct sparc_arch_cfg))
+#define NVRAM_OB_SIZE ((NVRAM_IDPROM - NVRAM_OB_START) & ~15)
-static struct qemu_nvram_v1 {
- char id_string[16];
- uint32_t version;
- uint32_t nvram_size; // not used in Sun4m
- char unused1[8];
- char arch[12];
- char curr_cpu;
- char smp_cpus;
- char unused2;
- char nographic;
- uint32_t ram_size;
- char boot_device;
- char unused3[3];
- uint32_t kernel_image;
- uint32_t kernel_size;
- uint32_t cmdline;
- uint32_t cmdline_size;
- uint32_t initrd_image;
- uint32_t initrd_size;
- uint32_t nvram_image;
- uint16_t width;
- uint16_t height;
- uint16_t depth;
- char unused4[158];
- uint16_t crc;
-} nv_info;
+ohwcfg_v3_t nv_info;
#define OBIO_CMDLINE_MAX 256
static char obio_cmdline[OBIO_CMDLINE_MAX];
@@ -148,38 +125,44 @@
unsigned char *nvptr = &nv_info;
uint32_t size;
struct cpudef *cpu;
- extern uint32_t kernel_image;
- extern uint32_t kernel_size;
- extern uint32_t cmdline;
- extern uint32_t cmdline_size;
- extern char boot_device;
- for (i = 0; i < sizeof(struct qemu_nvram_v1); i++) {
+ for (i = 0; i < sizeof(ohwcfg_v3_t); i++) {
outb(i & 0xff, 0x74);
outb(i >> 8, 0x75);
*nvptr++ = inb(0x77);
}
+ printk("Nvram id %s, version %d\n", nv_info.struct_ident,
+ nv_info.struct_version);
+ if (strcmp(nv_info.struct_ident, "QEMU_BIOS") ||
+ nv_info.struct_version != 3 ||
+ OHW_compute_crc(&nv_info, 0x00, 0xF8) != nv_info.crc) {
+ printk("Unknown nvram, freezing!\n");
+ for (;;);
+ }
+
kernel_image = nv_info.kernel_image;
kernel_size = nv_info.kernel_size;
size = nv_info.cmdline_size;
if (size > OBIO_CMDLINE_MAX - 1)
size = OBIO_CMDLINE_MAX - 1;
- memcpy(obio_cmdline, nv_info.cmdline, size);
+ memcpy(obio_cmdline, (void *)nv_info.cmdline, size);
obio_cmdline[size] = '\0';
cmdline = obio_cmdline;
cmdline_size = size;
+ boot_device = nv_info.boot_devices[0];
+
printk("kernel addr %x size %x\n", kernel_image, kernel_size);
if (size)
printk("kernel cmdline %s\n", obio_cmdline);
for (i = 0; i < NVRAM_OB_SIZE; i++) {
- outb((i + NVRAM_OB_OFFSET) & 0xff, 0x74);
- outb((i + NVRAM_OB_OFFSET) >> 8, 0x75);
+ outb((i + NVRAM_OB_START) & 0xff, 0x74);
+ outb((i + NVRAM_OB_START) >> 8, 0x75);
data[i] = inb(0x77);
}
- printk("CPUs: %x", nv_info.smp_cpus);
+ printk("CPUs: %x", nv_info.nb_cpus);
cpu = id_cpu();
printk(" x %s\n", cpu->name);
}
@@ -189,8 +172,8 @@
unsigned short i;
for (i = 0; i < NVRAM_OB_SIZE; i++) {
- outb((i + NVRAM_OB_OFFSET) & 0xff, 0x74);
- outb((i + NVRAM_OB_OFFSET) >> 8, 0x75);
+ outb((i + NVRAM_OB_START) & 0xff, 0x74);
+ outb((i + NVRAM_OB_START) >> 8, 0x75);
outb(data[i], 0x77);
}
}
@@ -250,8 +233,6 @@
int openbios(void)
{
- extern struct sys_info sys_info;
-
#ifdef CONFIG_DEBUG_CONSOLE
#ifdef CONFIG_DEBUG_CONSOLE_SERIAL
uart_init(CONFIG_SERIAL_PORT, CONFIG_SERIAL_SPEED);
Modified: openbios-devel/arch/sparc64/sys_info.c
===================================================================
--- openbios-devel/arch/sparc64/sys_info.c 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/arch/sparc64/sys_info.c 2007-11-14 19:25:43 UTC (rev 176)
@@ -11,8 +11,8 @@
#define debug(x...)
#endif
-unsigned long qemu_mem_size;
-unsigned long va_shift;
+uint64_t qemu_mem_size;
+uint64_t va_shift;
void collect_multiboot_info(struct sys_info *);
Modified: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/drivers/obio.c 2007-11-14 19:25:43 UTC (rev 176)
@@ -19,6 +19,7 @@
#include "openbios/drivers.h"
#include "openbios/nvram.h"
#include "obio.h"
+#include "openbios/firmware_abi.h"
#define REGISTER_NAMED_NODE( name, path ) do { \
bind_new_node( name##_flags_, name##_size_, \
@@ -289,26 +290,27 @@
}
static unsigned char *nvram;
-struct qemu_nvram_v1 nv_info;
+ohwcfg_v3_t nv_info;
+#define NVRAM_OB_START (sizeof(ohwcfg_v3_t) + sizeof(struct sparc_arch_cfg))
+#define NVRAM_OB_SIZE ((NVRAM_IDPROM - NVRAM_OB_START) & ~15)
+
void
arch_nvram_get(char *data)
{
- memcpy(data, &nvram[sizeof(struct qemu_nvram_v1)],
- NVRAM_IDPROM - sizeof(struct qemu_nvram_v1));
+ memcpy(data, &nvram[NVRAM_OB_START], NVRAM_OB_SIZE);
}
void
arch_nvram_put(char *data)
{
- memcpy(&nvram[sizeof(struct qemu_nvram_v1)], data,
- NVRAM_IDPROM - sizeof(struct qemu_nvram_v1));
+ memcpy(&nvram[NVRAM_OB_START], data, NVRAM_OB_SIZE);
}
int
arch_nvram_size(void)
{
- return (NVRAM_IDPROM - sizeof(struct qemu_nvram_v1)) & ~15;
+ return NVRAM_OB_SIZE;
}
static void mb86904_init(void)
@@ -684,6 +686,7 @@
uint32_t size;
unsigned int machine_id;
struct cpudef *cpu;
+ ohwcfg_v3_t *header;
ob_new_obio_device("eeprom", NULL);
@@ -696,9 +699,11 @@
memcpy(&nv_info, nvram, sizeof(nv_info));
machine_id = (unsigned int)nvram[0x1fd9] & 0xff;
- printk("Nvram id %s, version %d, machine id 0x%2.2x\n", nv_info.id_string,
- nv_info.version, machine_id);
- if (strcmp(nv_info.id_string, "QEMU_BIOS") || nv_info.version != 1) {
+ printk("Nvram id %s, version %d, machine id 0x%2.2x\n",
+ nv_info.struct_ident, nv_info.struct_version, machine_id);
+ if (strcmp(nv_info.struct_ident, "QEMU_BIOS") ||
+ nv_info.struct_version != 3 ||
+ OHW_compute_crc(&nv_info, 0x00, 0xF8) != nv_info.crc) {
printk("Unknown nvram, freezing!\n");
for (;;);
}
@@ -712,12 +717,13 @@
obio_cmdline[size] = '\0';
cmdline = obio_cmdline;
cmdline_size = size;
- ((struct qemu_nvram_v1 *)nvram)->kernel_image = 0;
- ((struct qemu_nvram_v1 *)nvram)->kernel_size = 0;
- ((struct qemu_nvram_v1 *)nvram)->cmdline_size = 0;
+ header = (ohwcfg_v3_t *)nvram;
+ header->kernel_image = 0;
+ header->kernel_size = 0;
+ header->cmdline_size = 0;
- boot_device = nv_info.boot_device;
- nographic = nv_info.nographic;
+ boot_device = nv_info.boot_devices[0];
+ nographic = nv_info.graphic_flags & OHW_GF_NOGRAPHICS;
graphic_depth = nv_info.depth;
push_str("mk48t08");
@@ -779,10 +785,10 @@
for (;;);
}
// Add cpus
- printk("CPUs: %x", nv_info.smp_cpus);
+ printk("CPUs: %x", nv_info.nb_cpus);
cpu = id_cpu();
printk(" x %s\n", cpu->name);
- for (i = 0; i < (unsigned int)nv_info.smp_cpus; i++) {
+ for (i = 0; i < (unsigned int)nv_info.nb_cpus; i++) {
push_str("/");
fword("find-device");
@@ -1091,13 +1097,17 @@
int
start_cpu(unsigned int pc, unsigned int context_ptr, unsigned int context, int cpu)
{
+ ohwcfg_v3_t *header = (ohwcfg_v3_t *)nvram;
+ struct sparc_arch_cfg *sparc_header;
+
if (!cpu)
return -1;
- *(uint32_t *)&nvram[0x38] = pc;
- *(uint32_t *)&nvram[0x3c] = context_ptr;
- *(uint32_t *)&nvram[0x40] = context;
- nvram[0x2e] = cpu & 0xff;
+ sparc_header = &nvram[header->nvram_arch_ptr];
+ sparc_header->smp_entry = pc;
+ sparc_header->smp_ctxtbl = context_ptr;
+ sparc_header->smp_ctx = context;
+ sparc_header->valid = 1;
intregs->cpu_intregs[cpu].set = SUN4M_SOFT_INT(14);
Modified: openbios-devel/drivers/obio.h
===================================================================
--- openbios-devel/drivers/obio.h 2007-11-11 18:02:11 UTC (rev 175)
+++ openbios-devel/drivers/obio.h 2007-11-14 19:25:43 UTC (rev 176)
@@ -34,33 +34,6 @@
#define SLAVIO_SIZE 0x01000000
-struct qemu_nvram_v1 {
- char id_string[16];
- uint32_t version;
- uint32_t nvram_size; // not used in Sun4m
- char unused1[8];
- char arch[12];
- char curr_cpu;
- char smp_cpus;
- char unused2;
- char nographic;
- uint32_t ram_size;
- char boot_device;
- char unused3[3];
- uint32_t kernel_image;
- uint32_t kernel_size;
- uint32_t cmdline;
- uint32_t cmdline_size;
- uint32_t initrd_image;
- uint32_t initrd_size;
- uint32_t nvram_image;
- uint16_t width;
- uint16_t height;
- uint16_t depth;
- char unused4[158];
- uint16_t crc;
-};
-
#define SUN4M_NCPUS 16
#define PAGE_SIZE 4096
Added: openbios-devel/include/openbios/firmware_abi.h
===================================================================
--- openbios-devel/include/openbios/firmware_abi.h (rev 0)
+++ openbios-devel/include/openbios/firmware_abi.h 2007-11-14 19:25:43 UTC (rev 176)
@@ -0,0 +1,198 @@
+#ifndef FIRMWARE_ABI_H
+#define FIRMWARE_ABI_H
+
+#ifndef __ASSEMBLY__
+/* Open Hack'Ware NVRAM configuration structure */
+
+/* Version 3 */
+typedef struct ohwcfg_v3_t ohwcfg_v3_t;
+struct ohwcfg_v3_t {
+ /* 0x00: structure identifier */
+ uint8_t struct_ident[0x10];
+ /* 0x10: structure version and NVRAM description */
+ uint32_t struct_version;
+ uint16_t nvram_size;
+ uint16_t pad0;
+ uint16_t nvram_arch_ptr;
+ uint16_t nvram_arch_size;
+ uint16_t nvram_arch_crc;
+ uint8_t pad1[0x02];
+ /* 0x20: host architecture */
+ uint8_t arch[0x10];
+ /* 0x30: RAM/ROM description */
+ uint64_t RAM0_base;
+ uint64_t RAM0_size;
+ uint64_t RAM1_base;
+ uint64_t RAM1_size;
+ uint64_t RAM2_base;
+ uint64_t RAM2_size;
+ uint64_t RAM3_base;
+ uint64_t RAM3_size;
+ uint64_t ROM_base;
+ uint64_t ROM_size;
+ /* 0x80: Kernel description */
+ uint64_t kernel_image;
+ uint64_t kernel_size;
+ /* 0x90: Kernel command line */
+ uint64_t cmdline;
+ uint64_t cmdline_size;
+ /* 0xA0: Kernel boot image */
+ uint64_t initrd_image;
+ uint64_t initrd_size;
+ /* 0xB0: NVRAM image */
+ uint64_t NVRAM_image;
+ uint8_t pad2[8];
+ /* 0xC0: graphic configuration */
+ uint16_t width;
+ uint16_t height;
+ uint16_t depth;
+ uint16_t graphic_flags;
+ /* 0xC8: CPUs description */
+ uint8_t nb_cpus;
+ uint8_t boot_cpu;
+ uint8_t nboot_devices;
+ uint8_t pad3[5];
+ /* 0xD0: boot devices */
+ uint8_t boot_devices[0x10];
+ /* 0xE0 */
+ uint8_t pad4[0x1C]; /* 28 */
+ /* 0xFC: checksum */
+ uint16_t crc;
+ uint8_t pad5[0x02];
+} __attribute__ (( packed ));
+
+#define OHW_GF_NOGRAPHICS 0x0001
+
+static inline uint16_t
+OHW_crc_update (uint16_t prev, uint16_t value)
+{
+ uint16_t tmp;
+ uint16_t pd, pd1, pd2;
+
+ tmp = prev >> 8;
+ pd = prev ^ value;
+ pd1 = pd & 0x000F;
+ pd2 = ((pd >> 4) & 0x000F) ^ pd1;
+ tmp ^= (pd1 << 3) | (pd1 << 8);
+ tmp ^= pd2 | (pd2 << 7) | (pd2 << 12);
+
+ return tmp;
+}
+
+static inline uint16_t
+OHW_compute_crc (ohwcfg_v3_t *header, uint32_t start, uint32_t count)
+{
+ uint32_t i;
+ uint16_t crc = 0xFFFF;
+ uint8_t *ptr = (uint8_t *)header;
+ int odd;
+
+ odd = count & 1;
+ count &= ~1;
+ for (i = 0; i != count; i++) {
+ crc = OHW_crc_update(crc, (ptr[start + i] << 8) | ptr[start + i + 1]);
+ }
+ if (odd) {
+ crc = OHW_crc_update(crc, ptr[start + i] << 8);
+ }
+
+ return crc;
+}
+
+/* Sparc32 runtime NVRAM structure for SMP CPU boot */
+struct sparc_arch_cfg {
+ uint32_t smp_ctx;
+ uint32_t smp_ctxtbl;
+ uint32_t smp_entry;
+ uint8_t valid;
+ uint8_t unused[51];
+};
+
+/* OpenBIOS NVRAM partition */
+struct OpenBIOS_nvpart_v1 {
+ uint8_t signature;
+ uint8_t checksum;
+ uint16_t len; // BE, length divided by 16
+ char name[12];
+};
+
+#define OPENBIOS_PART_SYSTEM 0x70
+#define OPENBIOS_PART_FREE 0x7f
+
+static inline void
+OpenBIOS_finish_partition(struct OpenBIOS_nvpart_v1 *header, uint32_t size)
+{
+ unsigned int i, sum;
+ uint8_t *tmpptr;
+
+ // Length divided by 16
+ header->len = cpu_to_be16(size >> 4);
+
+ // Checksum
+ tmpptr = (uint8_t *)header;
+ sum = *tmpptr;
+ for (i = 0; i < 14; i++) {
+ sum += tmpptr[2 + i];
+ sum = (sum + ((sum & 0xff00) >> 8)) & 0xff;
+ }
+ header->checksum = sum & 0xff;
+}
+
+static inline uint32_t
+OpenBIOS_set_var(uint8_t *nvram, uint32_t addr, const unsigned char *str)
+{
+ uint32_t len;
+
+ len = strlen(str) + 1;
+ memcpy(&nvram[addr], str, len);
+
+ return addr + len;
+}
+
+/* Sun IDPROM structure at the end of NVRAM */
+struct Sun_nvram {
+ uint8_t type;
+ uint8_t machine_id;
+ uint8_t macaddr[6];
+ uint8_t unused[7];
+ uint8_t checksum;
+};
+
+static inline void
+Sun_init_header(struct Sun_nvram *header, const uint8_t *macaddr, int machine_id)
+{
+ uint8_t tmp, *tmpptr;
+ unsigned int i;
+
+ header->type = 1;
+ header->machine_id = machine_id & 0xff;
+ memcpy(&header->macaddr, macaddr, 6);
+ /* Calculate checksum */
+ tmp = 0;
+ tmpptr = (uint8_t *)header;
+ for (i = 0; i < 15; i++)
+ tmp ^= tmpptr[i];
+
+ header->checksum = tmp;
+}
+
+#else /* __ASSEMBLY__ */
+
+/* Structure offsets for asm use */
+
+/* Open Hack'Ware NVRAM configuration structure */
+#define OHW_ARCH_PTR 0x18
+#define OHW_RAM_SIZE 0x38
+#define OHW_BOOT_CPU 0xC9
+
+/* Sparc32 runtime NVRAM structure for SMP CPU boot */
+#define SPARC_SMP_CTX 0x0
+#define SPARC_SMP_CTXTBL 0x4
+#define SPARC_SMP_ENTRY 0x8
+#define SPARC_SMP_VALID 0xc
+
+/* Sun IDPROM structure at the end of NVRAM */
+#define SPARC_MACHINE_ID 0x1fd9
+
+#endif /* __ASSEMBLY__ */
+#endif /* FIRMWARE_ABI_H */
Property changes on: openbios-devel/include/openbios/firmware_abi.h
___________________________________________________________________
Name: svn:executable
+ *
1
0
Author: wmb
Date: 2007-11-14 10:53:14 +0100 (Wed, 14 Nov 2007)
New Revision: 730
Modified:
ofw/fs/jffs2/jffs2.fth
Log:
OLPC trac 4898 - fixed handling of deleted files. The problem occured
when a deletion entry occurred at a lower NAND block number than a
non-deletion entry, with a lower version number, for the same file .
The scanning code was too aggressive in discarding RAM record for
deleted files, so the file reappeared when the lower-version-number
entry was later scanned. The fix is to keep such entries, so the
highest version number record is kept regardless of the order in
which the nodes are encountered. Deletions are then noticed at a
later time, when you search for a file or enumerate a directory.
I also added the $readlink method so that "dir" will display the
referent of symlinks.
Modified: ofw/fs/jffs2/jffs2.fth
===================================================================
--- ofw/fs/jffs2/jffs2.fth 2007-11-14 07:58:39 UTC (rev 729)
+++ ofw/fs/jffs2/jffs2.fth 2007-11-14 09:53:14 UTC (rev 730)
@@ -781,12 +781,8 @@
: scan-node ( adr -- adr' )
dup wa1+ w@ case ( adr nodetype )
dirent-type of ( adr )
- dup rdinode@ if ( adr ) \ Ignore deleted entries
- debug-scan? if ." d" then
- scan-raw-dirent ( adr )
- else
- debug-scan? if ." D" then
- then ( adr )
+ debug-scan? if ." d" then
+ scan-raw-dirent ( adr )
\ false to cleanmark? ( adr )
endof ( adr nodetype )
@@ -1214,7 +1210,8 @@
2over ?update-dirent ( name$ adr )
repeat ( name$ )
2drop ( )
- my-vers 0< if true exit then ( )
+ my-vers 0< if true exit then ( ) \ Name not found
+ wf-inum 0= if true exit then ( ) \ Name was deleted
wf-type 4 = if
wd-inum wf-inum remember-parent
wf-inum to wd-inum
@@ -1222,7 +1219,6 @@
false
;
-
\ The work file is a symlink. Resolve it to a new dirent
: dir-link ( -- error? )
delimiter >r [char] / to delimiter
@@ -1315,17 +1311,13 @@
next-minode minodes ?do ( rdirent )
dup rdname$ i tdname$ $= if ( rdirent ) \ Same name
dup rdversion@ i tdversion@ > if ( rdirent ) \ New version
- dup rdinode@ if ( rdirent )
- dup i replace-tdirent ( rdirent ) \ Not unlinked
- else ( rdirent )
- i remove-tdirent ( rdirent ) \ Unlinked
- then ( rdirent )
+ dup i replace-tdirent ( rdirent )
then ( rdirent )
drop unloop exit
then ( rdirent )
i tdlen ( rdirent )
+loop ( rdirent )
- dup rdinode@ if place-tdirent else drop then ( )
+ place-tdirent
;
: prep-dirents ( -- )
@@ -1509,16 +1501,33 @@
file-size
;
+0 instance value last-tdirent
+0 instance value last-rinode
+: $readlink ( name$ -- true | expansion$ false )
+ last-tdirent tdname$ $= 0= if true exit then ( )
+ last-rinode >ridata last-rinode ridsize@ false ( expansion$ false )
+;
+
: next-file-info ( id -- false | id' s m h d m y len attributes name$ true )
dup 0= if drop prep-dirents minodes then ( tdirent )
- dup next-minode = if drop false exit then ( tdirent )
- dup >r dup tdlen + ( id' r: tdirent )
- r@ tdinum@ latest-node if ( id' r: tdirent )
-." Can't find data node" cr
+
+ \ Skip deleted nodes
+ begin
+ dup next-minode = if drop false exit then ( tdirent )
+ dup tdinum@ 0= ( tdirent deleted? )
+ while ( tdirent )
+ dup tdlen + ( tdirent' )
+ repeat ( tdirent )
+
+ dup to last-tdirent ( tdirent )
+ dup >r dup tdlen + ( id' r: tdirent )
+ r@ tdinum@ latest-node if ( id' r: tdirent )
+ ." Can't find data node" cr
0 0 0 0 0 0 ( id' s m h d m y r: tdirent )
0 ( ... len r: tdirent )
0 ( ... attributes r: tdirent )
else ( id' rinode r: tdirent )
+ dup to last-rinode
>r ( id' r: tdirent rinode )
r@ rimtime@ unix-seconds> ( id' s m h d m y r: tdirent rinode )
r@ riisize@ ( id' s m h d m y len r: tdirent rinode )
1
0
Author: wmb
Date: 2007-11-14 08:58:39 +0100 (Wed, 14 Nov 2007)
New Revision: 729
Modified:
cpu/x86/pc/olpc/resume.bth
Log:
Really fixed the problem introduced by svn 726 - a misplaced progress report killed a register.
Modified: cpu/x86/pc/olpc/resume.bth
===================================================================
--- cpu/x86/pc/olpc/resume.bth 2007-11-14 07:37:37 UTC (rev 728)
+++ cpu/x86/pc/olpc/resume.bth 2007-11-14 07:58:39 UTC (rev 729)
@@ -64,8 +64,6 @@
gs push
ss push dx pop \ SS in dx
- h# f0 resume-progress
-
here 5 + dup #) call di pop \ Virtual address of EIP in DI
( here ) asm-base - # di sub \ Virtual address of suspend-base in DI
1
0