Work on IP30
My Octane got as far as 'Calibrating delay loop... ' now. It works with ARCS graphical console, which is a Good Thing. Memory identification is correct. Caches work OK. I'm going to do the IRQs tomorrow, but I foresee it will be really hard as there is no documentation for the HEART. Well, we shall experiment.
Fortunately, the Octane has one really nice feature: the power button is hooked up to an interrupt source. It may prove quite useful for debugging.
Interesting note: the ARCS console breaks when I change KSEG0 cache coherence in the CP0_CONFIG register (in c-r4k.c). Of course, it breaks sooner or later, not exactly afterwards, unless I flush cache exactly after changing; it breaks immediately then. I don't give a hoot, because IP30 has almost no RAM in KSEG0 and the kernel runs in XKPHYS, always cached copy-on-write. But those of you with another machines might be interested.
Stanislaw Skowronek
--<=>--
Paranoid: one who is truly in touch with reality.
Quoted 7 lines · Stanislaw Skowronek
Interesting note: the ARCS console breaks when I change KSEG0 cache coherence in the
CP0_CONFIGregister (inc-r4k.c). Of course, it breaks sooner or later, not exactly afterwards, unless I flush cache exactly after changing; it breaks immediately then. I don't give a hoot, because IP30 has almost no RAM in KSEG0 and the kernel runs in XKPHYS, always cached copy-on-write. But those of you with another machines might be interested.
Most firmware breaks at some point due to Linux fiddling with it's resources. What differs is how and when it breaks. In case of IP27 the first TLB flush for example is going to kill ARC.
And remember, it's written ARC but pronounced ARGGHHHH ;)
Ralf
PATCH 1/1 gcc 3.4 drops "accum" clobber, replace with "hi" in time.c
This 2.4 patch look OK?
Regards,
Brad
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +4 -4
@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check
@@ -297,7 +297,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check
@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient; } }
@@ -353,7 +353,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" in time.c
Uh oh, with this patch:
...time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in class HI_REG' while reloading asm'
...
Regards,
Brad
----- Original Message -----
From: "Bradley D. LaRonde" <[email protected]>
To: <[email protected]>
Sent: Monday, April 12, 2004 7:42 PM
Subject: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" in time.c
Quoted 47 lines
This 2.4 patch look OK?
Regards,
Braddiff -u -r1.1.1.1
time.cmips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +4
-4@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check@@ -297,7 +297,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient; } }@@ -353,7 +353,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo", "hi"); /* * Due to possible jiffies inconsistencies, we need to check
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" in time.c
Quoted 9 lines · Bradley D. LaRonde
Uh oh, with this patch:
...
time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in classHI_REG' while reloadingasm'
...Quoted 1 line
Quoted 9 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 343
Quoted 9 lines
/*
* Due to possible jiffies inconsistencies, we need to checkmips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient;
Maybe this hunk where you use "hi" twice for the same asm statement?
-eric
Signature · 1 line
Eric Christopher <[email protected]>
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
----- Original Message -----
From: "Eric Christopher" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>
Sent: Monday, April 12, 2004 9:02 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 6 lines · Bradley D. LaRonde
Quoted 5 lines
Uh oh, with this patch:
...
time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in class `HI_REG' while
reloading
Quoted 4 lines
Quoted 4 lines
`asm'
...Quoted 1 line
Quoted 12 lines
Quoted 9 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 343
Quoted 9 lines
/*
* Due to possible jiffies inconsistencies, we need to checkmips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient;Maybe this hunk where you use "hi" twice for the same asm statement?
Yeah, that's messed up, but it fails here too:
@@ -242,7 +242,7 @@
__asm__("multu %1,%2"
: "=h" (res)
: "r" (count), "r" (sll32_usecs_per_cycle)- : "lo", "accum");
+ : "lo", "hi");
Regards,
Brad
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 36 lines · Bradley D. LaRonde
----- Original Message -----
From: "Eric Christopher" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>
Sent: Monday, April 12, 2004 9:02 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi"intime.cQuoted 6 lines · Bradley D. LaRonde
Quoted 5 lines
Uh oh, with this patch:
...
time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in class `HI_REG' whilereloading
Quoted 4 lines
Quoted 4 lines
`asm'
...Quoted 1 line
Quoted 12 lines
Quoted 9 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 343
Quoted 9 lines
/*
* Due to possible jiffies inconsistencies, we need to checkmips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient;Maybe this hunk where you use "hi" twice for the same asm statement?
Yeah, that's messed up, but it fails here too:
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 245
Quoted 5 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo", "hi");
Because the asm is outputting something in HI - see the =h?
Signature · 2 lines
Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
----- Original Message -----
From: "Daniel Jacobowitz" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>; "Eric Christopher" <[email protected]>
Sent: Monday, April 12, 2004 9:07 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 16 lines · Bradley D. LaRonde
Quoted 15 lines
----- Original Message -----
From: "Eric Christopher" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>
Sent: Monday, April 12, 2004 9:02 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi"intime.cQuoted 6 lines · Bradley D. LaRonde
Quoted 5 lines
Uh oh, with this patch:
...
time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in class `HI_REG' while
Quoted 7 lines
Quoted 7 lines
reloading
Quoted 6 lines
Quoted 6 lines
`asm'
...Quoted 3 lines
/*
* Due to possible jiffies inconsistencies, we need to
check
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Review line 340
Quoted 3 lines
(quoted diff) +0
-0@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r"
(USECS_PER_JIFFY),
Quoted 10 lines
Quoted 10 lines
Quoted 7 lines
Quoted 4 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 343
Quoted 4 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1"r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient;Maybe this hunk where you use "hi" twice for the same asm statement?
Yeah, that's messed up, but it fails here too:
Quoted 8 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 line 245
Quoted 6 lines
mips/kernel/time.c 12 Apr 2004 23:41:38 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +1
-1@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo", "hi");Because the asm is outputting something in HI - see the =h?
Oh... yeah, I guess gcc knows that the output is clobbered. :-P
So just remove the accum clobbers?
Regards,
Brad
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
OK, so this patch actually builds, and it sounds like it will do the job, since "accum" means "hi and low", "lo" is already clobbered in all cases, and either "hi" is the output and doesn't need clobbering (hunks 1, 2, and 4), or "hi" is already clobbered (hunk 3).
Regards,
Brad
mips/kernel/time.c 13 Apr 2004 01:19:15 -0000 renamed from mips/kernel/time.c 10 Nov 2003 21:06:52 -0000 1.1.1.1 +4 -4
@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check
@@ -297,7 +297,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check
@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo"); cached_quotient = quotient; } }
@@ -353,7 +353,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check
----- Original Message -----
From: "Bradley D. LaRonde" <[email protected]>
To: "Daniel Jacobowitz" <[email protected]>
Cc: <[email protected]>; "Eric Christopher" <[email protected]>
Sent: Monday, April 12, 2004 9:12 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 65 lines
----- Original Message -----
From: "Daniel Jacobowitz" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>; "Eric Christopher" <[email protected]>
Sent: Monday, April 12, 2004 9:07 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi"intime.cQuoted 16 lines · Bradley D. LaRonde
Quoted 15 lines
----- Original Message -----
From: "Eric Christopher" <[email protected]>
To: "Bradley D. LaRonde" <[email protected]>
Cc: <[email protected]>
Sent: Monday, April 12, 2004 9:02 PM
Subject: Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi"intime.cQuoted 6 lines · Bradley D. LaRonde
Quoted 5 lines
Uh oh, with this patch:
...
time.c: In function `fixed_rate_gettimeoffset':
time.c:242: error: can't find a register in class `HI_REG' whileQuoted 7 lines
Quoted 7 lines
reloading
Quoted 6 lines
Quoted 6 lines
`asm'
...Quoted 3 lines
/*
* Due to possible jiffies inconsistencies, we need tocheck
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Review line 340
Quoted 3 lines
(quoted diff) +0
-0@@ -339,7 +339,7 @@ : "r" (timerhi), "m" (timerlo), "r" (tmp), "r"(
USECS_PER_JIFFY),Quoted 10 lines
Quoted 10 lines
Quoted 7 lines
Quoted 4 lines
Review line 343
Quoted 4 lines
(quoted diff) +1
-1"r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo", "hi"); cached_quotient = quotient;Maybe this hunk where you use "hi" twice for the same asm statement?
Yeah, that's messed up, but it fails here too:
Quoted 8 lines
Review line 245
Quoted 6 lines
(quoted diff) +1
-1@@ -242,7 +242,7 @@ __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo", "hi");Because the asm is outputting something in HI - see the =h?
Oh... yeah, I guess gcc knows that the output is clobbered. :-P
So just remove the accum clobbers?
Regards,
Brad
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 4 lines · Bradley D. LaRonde
OK, so this patch actually builds, and it sounds like it will do the job, since "accum" means "hi and low", "lo" is already clobbered in all cases, and either "hi" is the output and doesn't need clobbering (hunks 1, 2, and 4), or "hi" is already clobbered (hunk 3).
There are more places this should be dealt with and I have the following
preliminary patch for this, but I'm unsure about removal of "accum" being completely safe for older compilers.
Signature · 95 lines
+ Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: [email protected], PGP key available + patch-mips-2.4.24-pre2-20040116-mips-gcc3-2 diff -up --recursive --new-file linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/time.c linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/time.c --- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/time.c 2004-01-15 03:56:58.000000000 +0000 +++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/time.c 2004-02-02 04:38:34.000000000 +0000 @@ -242,7 +242,7 @@ static unsigned long fixed_rate_gettimeo __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check @@ -297,7 +297,7 @@ static unsigned long calibrate_div32_get __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check @@ -339,7 +339,7 @@ static unsigned long calibrate_div64_get : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo"); cached_quotient = quotient; } } @@ -353,7 +353,7 @@ static unsigned long calibrate_div64_get __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check diff -up --recursive --new-file linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/cpu-probe.c linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/cpu-probe.c --- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/cpu-probe.c 2003-12-11 03:56:36.000000000 +0000 +++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/cpu-probe.c 2004-02-02 04:44:30.000000000 +0000 @@ -177,7 +177,7 @@ static inline void mult_sh_align_mod(lon ".set pop" : "=&r" (lv1), "=r" (lw) : "r" (m1), "r" (m2), "r" (s), "I" (0) - : "hi", "lo", "accum"); + : "hi", "lo"); /* We have to use single integers for m1 and m2 and a double * one for p to be sure the mulsidi3 gcc's RTL multiplication * instruction has the workaround applied. Older versions of diff -up --recursive --new-file linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/time.c linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/time.c --- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/time.c 2004-01-15 03:57:03.000000000 +0000 +++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/time.c 2004-02-02 04:39:21.000000000 +0000 @@ -242,7 +242,7 @@ static unsigned long fixed_rate_gettimeo __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (sll32_usecs_per_cycle) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check @@ -297,7 +297,7 @@ static unsigned long calibrate_div32_get __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check @@ -339,7 +339,7 @@ static unsigned long calibrate_div64_get : "r" (timerhi), "m" (timerlo), "r" (tmp), "r" (USECS_PER_JIFFY), "r" (USECS_PER_JIFFY_FRAC) - : "hi", "lo", "accum"); + : "hi", "lo"); cached_quotient = quotient; } } @@ -353,7 +353,7 @@ static unsigned long calibrate_div64_get __asm__("multu %1,%2" : "=h" (res) : "r" (count), "r" (quotient) - : "lo", "accum"); + : "lo"); /* * Due to possible jiffies inconsistencies, we need to check
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 4 lines · Maciej W. Rozycki
There are more places this should be dealt with and I have the following
preliminary patch for this, but I'm unsure about removal of "accum" being completely safe for older compilers.
Works fine for gcc-3.1.1 and my Swarm board boots just fine with this change and it seems stable. I vote for you to go ahead and commit the fixes to CVS. Thanks Maciej.
-Steve
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
Quoted 3 lines · Steven J. Hill
Works fine for gcc-3.1.1 and my Swarm board boots just fine with this change and it seems stable. I vote for you to go ahead and commit the fixes to CVS. Thanks Maciej.
I'm worried more about 2.95. And even if it works now, it may stop after
some changes, if the compiler decides it's safe to keep something in "accum" across the asm.
Signature · 3 lines
+ Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: [email protected], PGP key available +
Re: [PATCH] gcc 3.4 drops "accum" clobber, replace with "hi" intime.c
In reply to Maciej W. RozyckiQuoted 9 lines · Maciej W. Rozycki
Quoted 5 lines
OK, so this patch actually builds, and it sounds like it will do the job, since "accum" means "hi and low", "lo" is already clobbered in all cases, and either "hi" is the output and doesn't need clobbering (hunks 1, 2, and 4), or "hi" is already clobbered (hunk 3).
There are more places this should be dealt with and I have the following
preliminary patch for this, but I'm unsure about removal of "accum" being completely safe for older compilers.