* [U-Boot-Users] The i386 patch
@ 2002-11-13 8:44 Daniel Engström
2002-11-18 0:15 ` [U-Boot-Users] " Wolfgang Denk
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Engström @ 2002-11-13 8:44 UTC (permalink / raw)
To: u-boot
Hello all
I realize that I threw the figure around yesterdag it was 83kb rather than
38...
Todays, cleanup version measure in at 62kb.
I hope you'll like it :)
Wolfgang:
This patch touch common code in a few places, nothing to controversion, I
hope.
/Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ppcboot-i386-021113.diff.gz
Type: application/x-gzip
Size: 62748 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20021113/472f40ae/attachment.bin
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-13 8:44 [U-Boot-Users] The i386 patch Daniel Engström
@ 2002-11-18 0:15 ` Wolfgang Denk
2002-11-18 10:31 ` Daniel Engström
0 siblings, 1 reply; 9+ messages in thread
From: Wolfgang Denk @ 2002-11-18 0:15 UTC (permalink / raw)
To: u-boot
Dear Daniel,
in message <20021113094454.G22221@jupiter.omicron.se> you wrote:
>
> I realize that I threw the figure around yesterdag it was 83kb rather than
> 38...
> Todays, cleanup version measure in at 62kb.
>
> I hope you'll like it :)
Thanks again for the patch.
> Wolfgang:
> This patch touch common code in a few places, nothing to controversion, I
> hope.
I tried to merge your patch with the current U-Boot code; I still get
a _LOT_ of warnings, and unresolved references from the strings
functions, but I think you can pick up here...
A few comments:
* Please, do not add trailing white space to existing code!
* Always make sure to run the MAKEALL script; this catches errors
like this one:
- void *to = (void *)ntohl(hdr->ih_load);
+ void *to = (void *)ntohl(hdr->ih_load));
* Do not use C++ style comments
Comments on specific parts of the patch:
common/cmd_bootm.c:
x86 should _not_ need any special code here. Do you think it
is possible to add support for "standard" mkimage format and
get rid of your new #ifdef's?
Added with minor modifications:
@@ -145,10 +163,11 @@
SHOW_BOOT_PROGRESS (-2);
return 1;
}
+ hdr->ih_hcrc = htonl(checksum);
SHOW_BOOT_PROGRESS (3);
I don't understand why this could be needed; omitted.
common/cmd_ide.c:
+#ifdef __PPC__
#define ATA_CURR_BASE(dev) (CFG_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev
)])
+#endif
...
+#ifdef __PPC__
static void input_swap_data(int dev, ulong *sect_buf, int words);
+#endif
Are you sure this is PPC only?
ppcboot/examples/syscall.S:
Are you sure there is only a "ret" needed?
include/asm-arm/string.h:
lib_generic/string.c:
Why do you modify ARM and generic files? I want to keep this
file as close as possible in sync with standard Linux code.
*** NOT accepted ***
This breaks include/asm-i386/string.h - can you please try to
fix this instead?
I've checked the current state in on the U-Boot CVS server. The tag
is LABEL_2002_11_18_0115 . Can you please have a look at it and help
to clean it up?
TIA!
Best regards,
Wolfgang Denk
--
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de
Severe culture shock results when experts from another protocol suite
[...] try to read OSI documents. The term "osified" is used to refer
to such documents. [...] Any relationship to the word "ossified" is
purely intentional. - Marshall T. Rose
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-18 0:15 ` [U-Boot-Users] " Wolfgang Denk
@ 2002-11-18 10:31 ` Daniel Engström
2002-11-19 21:19 ` Wolfgang Denk
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Engström @ 2002-11-18 10:31 UTC (permalink / raw)
To: u-boot
Wolfgang,
On 2002.11.18 01:15 Wolfgang Denk wrote:
> Comments on specific parts of the patch:
>
> common/cmd_bootm.c:
>
> x86 should _not_ need any special code here. Do you think it
> is possible to add support for "standard" mkimage format and
> get rid of your new #ifdef's?
The "standard" mkimage format IS supported, this code add support for Linux
images without the mkimage header as well.
If you do not need any of the features in the image header the header it
slef is just
an extra source of problems, for example the load address is bogus for
i386 I would like
to have an option to ignore it completly for Linux image and always load
at a safe place.
This is currently what happens if you boot a kernel with out the image
header.
Or better yet not load the kernel at all if the kernel resides in flash,
just give do_bootm_linux() a pointer to where the kernel is located.
Right now do_bootm() loads the kernel from flash and do_bootm_linux()
moves it to the correct
location.
The fisrt part, setup should be loaded at 0x90000 (size may vary between
2.5k and 32k), the rest of the kernel should be loaded at 0x10000 if it is
a zImage or 0x100000 if it
is a bzImage.
0xa0000-0xfffff is ROM and memory mapped I/O area, so loading the entire
thing at
0x90000 will fail as well.
> Added with minor modifications:
>
> @@ -145,10 +163,11 @@
> SHOW_BOOT_PROGRESS (-2);
> return 1;
> }
> + hdr->ih_hcrc = htonl(checksum);
> SHOW_BOOT_PROGRESS (3);
>
> I don't understand why this could be needed; omitted.
OK, I saw that it was referenced below in the function, but it seems to be
when
the ramdisk-image gets loaded, so that would be another header.
> common/cmd_ide.c:
> +#ifdef __PPC__
> Are you sure this is PPC only?
No, I thought that ide was only used by ppc before, but I se now that IDE
is used
by the ARM as well.
Should perhaps be #ifdef __BIG_ENDIAN ?
>
> ppcboot/examples/syscall.S:
>
> Are you sure there is only a "ret" needed?
Its a place holder, syscalls are not functional yet.
I think it will be a problem that printf is defined as a
syscall because it is a variable argument list function.
How do I know how much of the stack to copy when I enter
the firmware?
/Daniel
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-18 10:31 ` Daniel Engström
@ 2002-11-19 21:19 ` Wolfgang Denk
2002-11-20 12:22 ` Robert Kaiser
0 siblings, 1 reply; 9+ messages in thread
From: Wolfgang Denk @ 2002-11-19 21:19 UTC (permalink / raw)
To: u-boot
Dear Daniel,
in message <20021118113139.E892@jupiter.omicron.se> you wrote:
>
> > x86 should _not_ need any special code here. Do you think it
> > is possible to add support for "standard" mkimage format and
> > get rid of your new #ifdef's?
> The "standard" mkimage format IS supported, this code add support for Linux
> images without the mkimage header as well.
I see.
> Or better yet not load the kernel at all if the kernel resides in flash,
> just give do_bootm_linux() a pointer to where the kernel is located.
Right. This is something which I probably should fix on PPC, too
(fixed on ARM some time ago).
> > common/cmd_ide.c:
> > +#ifdef __PPC__
> > Are you sure this is PPC only?
> No, I thought that ide was only used by ppc before, but I se now that IDE
> is used
> by the ARM as well.
> Should perhaps be #ifdef __BIG_ENDIAN ?
But ARM is little endian!
> > ppcboot/examples/syscall.S:
> >
> > Are you sure there is only a "ret" needed?
> Its a place holder, syscalls are not functional yet.
Then we should rather have a #warning similar to the current styate
in ARM.
> I think it will be a problem that printf is defined as a
> syscall because it is a variable argument list function.
>
> How do I know how much of the stack to copy when I enter
> the firmware?
What do you mean with "stack to copy"? You are running in the U-Boot
environment, accessing the U-Boot stack directly. No need to copy
anything...
Best regards,
Wolfgang Denk
--
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de
The high cost of living hasn't affected its popularity.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-19 21:19 ` Wolfgang Denk
@ 2002-11-20 12:22 ` Robert Kaiser
2002-11-20 14:06 ` Wolfgang Denk
0 siblings, 1 reply; 9+ messages in thread
From: Robert Kaiser @ 2002-11-20 12:22 UTC (permalink / raw)
To: u-boot
Am Dienstag, 19. November 2002 22:19 schrieb Wolfgang Denk:
> > I think it will be a problem that printf is defined as a
> > syscall because it is a variable argument list function.
> >
> > How do I know how much of the stack to copy when I enter
> > the firmware?
>
> What do you mean with "stack to copy"?
The standard method for the x86 to implement a syscall is through a
"gate", which is also a mechanism to switch to a higher protection level.
Since caller and callee run at different protection levels, they use
different stacks and since the x86 passes arguments on the stack, it is
possible to specify (in the corresponding gate structure) the amount of bytes
to be copied from the caller's stack to the callee's stack.
> You are running in the U-Boot
> environment, accessing the U-Boot stack directly. No need to copy
> anything...
Does that mean that the caller always runs at the same protection level as
U-Boot?
If so, then I think that a syscall mechanism for the x86 through gates would
be overkill. But then, OTOH, why use syscalls at all ? A simple jump table
could do the same thing, and do it portably.
Rob
----------------------------------------------------------------
Robert Kaiser email: rkaiser at sysgo.de
SYSGO AG
Am Pfaffenstein 14 phone: (49) 6136 9948-762
D-55270 Klein-Winternheim / Germany fax: (49) 6136 9948-10
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-20 12:22 ` Robert Kaiser
@ 2002-11-20 14:06 ` Wolfgang Denk
2002-11-20 14:18 ` Daniel Engström
2002-11-20 16:45 ` Robert Kaiser
0 siblings, 2 replies; 9+ messages in thread
From: Wolfgang Denk @ 2002-11-20 14:06 UTC (permalink / raw)
To: u-boot
In message <200211201114.gAKBEss01326@dagobert.svc.sysgo.de> you wrote:
>
> > What do you mean with "stack to copy"?
>
> The standard method for the x86 to implement a syscall is through a
> "gate", which is also a mechanism to switch to a higher protection level.
> Since caller and callee run at different protection levels, they use
OK, understood.
But this is not what U-Boot needs.
> Does that mean that the caller always runs at the same protection level as
> U-Boot?
Right.
> If so, then I think that a syscall mechanism for the x86 through gates would
> be overkill. But then, OTOH, why use syscalls at all ? A simple jump table
> could do the same thing, and do it portably.
You may remember that we used a jump table attached to the global
data in early versions of PPCBoot. I didn't like this. The nice thing
about the syscall trap on PPC is that you can easily put a "jump
table" at a well-known location, so that a standalone application can
access certain services (those explicitely exported by U-Boot using
the syscall interface) without depending on a special software
version.
I have to admit that I did not think about other architectures at the
time we implemented this.
Best regards,
Wolfgang Denk
--
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de
Remember that Beethoven wrote his first symphony in C ...
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-20 14:06 ` Wolfgang Denk
@ 2002-11-20 14:18 ` Daniel Engström
2002-11-20 16:51 ` Robert Kaiser
2002-11-20 16:45 ` Robert Kaiser
1 sibling, 1 reply; 9+ messages in thread
From: Daniel Engström @ 2002-11-20 14:18 UTC (permalink / raw)
To: u-boot
On 2002.11.20 15:06 Wolfgang Denk wrote:
> In message <200211201114.gAKBEss01326@dagobert.svc.sysgo.de> you wrote:
> You may remember that we used a jump table attached to the global
> data in early versions of PPCBoot. I didn't like this. The nice thing
> about the syscall trap on PPC is that you can easily put a "jump
> table" at a well-known location, so that a standalone application can
> access certain services (those explicitely exported by U-Boot using
> the syscall interface) without depending on a special software
> version.
>
> I have to admit that I did not think about other architectures at the
> time we implemented this.
The i386 can do indirect calls on the ebp register. So we could let the
application know the location of the syscall table by providing it in a
register on entry. The applications initialization code can then store
it in a suitable location (called syscall_table below).
The syscall would than be done like this:
movl $SYSCALL_NR, %eax
movl syscall_table, %ebp
shll $2, %eax
addl %eax, %ebp
call *%ebp
ret
/Daniel
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-20 14:06 ` Wolfgang Denk
2002-11-20 14:18 ` Daniel Engström
@ 2002-11-20 16:45 ` Robert Kaiser
1 sibling, 0 replies; 9+ messages in thread
From: Robert Kaiser @ 2002-11-20 16:45 UTC (permalink / raw)
To: u-boot
Am Mittwoch, 20. November 2002 15:06 schrieben Sie:
> In message <200211201114.gAKBEss01326@dagobert.svc.sysgo.de> you wrote:
>
> [explanation of x86 gate mechanism ..]
>
> But this is not what U-Boot needs.
I thought so :-)
> You may remember that we used a jump table attached to the global
> data in early versions of PPCBoot. I didn't like this. The nice thing
> about the syscall trap on PPC is that you can easily put a "jump
> table" at a well-known location, so that a standalone application can
> access certain services (those explicitely exported by U-Boot using
> the syscall interface) without depending on a special software
> version.
So, essentially, the syscall mechanism in U-Boot/PPC is just a jump table at
a well known location, where that location is defined by the architecture,
right ?
This surely makes sense, but I'm not sure wether it should be adopted as a
model for the other architectures.
Why not do it as the good old OS-9 or pSOS did: identify one absolute address
that is otherwise unused (every architecture has this in some form: an unused
trap vector, unused word in space reserved for first level exception handler,
etc.). In that location, have U-boot publish the address of the jump table at
startup time (by storing a pointer to it). This is actually no different from
the trap mechanism used by the PPC, except that the "well-known location" is
defined by convention rather than by the hardware. And this could be done
portably.
Rob
----------------------------------------------------------------
Robert Kaiser email: rkaiser at sysgo.de
SYSGO AG
Am Pfaffenstein 14 phone: (49) 6136 9948-762
D-55270 Klein-Winternheim / Germany fax: (49) 6136 9948-10
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot-Users] Re: The i386 patch
2002-11-20 14:18 ` Daniel Engström
@ 2002-11-20 16:51 ` Robert Kaiser
0 siblings, 0 replies; 9+ messages in thread
From: Robert Kaiser @ 2002-11-20 16:51 UTC (permalink / raw)
To: u-boot
Am Mittwoch, 20. November 2002 15:18 schrieb Daniel Engstr?m:
>
> The i386 can do indirect calls on the ebp register. So we could let the
> application know the location of the syscall table by providing it in a
> register on entry. The applications initialization code can then store
> it in a suitable location (called syscall_table below).
>
> The syscall would than be done like this:
>
> movl $SYSCALL_NR, %eax
> movl syscall_table, %ebp
> shll $2, %eax
> addl %eax, %ebp
> call *%ebp
> ret
>
Exactly, except that I would do it in C:
---------------------------- cut here ----------------------------
/*
** The U-Boot's anchor :-)
** This is an absolute address that is otherwise unused.
** U-boot sets it to contain the address of the syscall
** jumptable, so clients can make calls into U-boot.
*/
#define UBOOT_ANCHOR 0x.....
struct syscall_jmptbl {
int (*j_mon_getc)(void);
int (*j_mon_tstc)(void);
void (*j_mon_putc)(const char);
void (*j_mon_puts)(const char*);
void (*j_mon_printf)(const char* fmt, ...);
void (*j_mon_install_hdlr)(int, interrupt_handler_t*, void*);
void (*j_mon_free_hdlr)(int);
void *(*j_mon_malloc)(size_t);
void (*j_mon_free)(void*);
void (*j_mon_udelay)(unsigned long);
unsigned long (*j_mon_get_timer)(unsigned long);
};
... in U-BOOT startup:
static struct syscall_jmptbl jmptable;
...
jmptable.j_mon_getc = mon_getc;
jmptable.j_mon_tstc = mon_tstc;
jmptable.j_mon_putc = mon_putc;
jmptable.j_mon_puts = mon_puts;
jmptable.j_mon_printf = mon_printf;
jmptable.j_mon_install_hdlr = mon_install_hdlr;
jmptable.j_mon_free_hdlr = mon_free_hdlr;
jmptable.j_mon_malloc = mon_malloc;
jmptable.j_mon_free = mon_free;
jmptable.j_mon_udelay = mon_udelay;
jmptable.j_mon_get_timer= mon_get_timer;
/* publish location of jump table */
*((struct syscall_jmptbl**)UBOOT_ANCHOR) = &jmptable;
....
in client:
struct syscall_jmptbl *tbl;
tbl = *((struct syscall_jmptbl**)UBOOT_ANCHOR);
tbl->j_mon_printf("Hello\n");
...
---------------------------- cut here ----------------------------
This would essentially do the same thing, but it should work on all platforms.
Rob
----------------------------------------------------------------
Robert Kaiser email: rkaiser at sysgo.de
SYSGO AG
Am Pfaffenstein 14 phone: (49) 6136 9948-762
D-55270 Klein-Winternheim / Germany fax: (49) 6136 9948-10
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2002-11-20 16:51 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-11-13 8:44 [U-Boot-Users] The i386 patch Daniel Engström
2002-11-18 0:15 ` [U-Boot-Users] " Wolfgang Denk
2002-11-18 10:31 ` Daniel Engström
2002-11-19 21:19 ` Wolfgang Denk
2002-11-20 12:22 ` Robert Kaiser
2002-11-20 14:06 ` Wolfgang Denk
2002-11-20 14:18 ` Daniel Engström
2002-11-20 16:51 ` Robert Kaiser
2002-11-20 16:45 ` Robert Kaiser
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox