* [U-Boot-Users] bd_info vs. global_data @ 2006-11-09 23:13 Timur Tabi 2006-11-10 0:29 ` Wolfgang Denk 0 siblings, 1 reply; 6+ messages in thread From: Timur Tabi @ 2006-11-09 23:13 UTC (permalink / raw) To: u-boot In looking at OF_TBCLK-related code, I noticed that U-Boot has what is basically two structures that contain a variety of "global" data, global_data and bd_info. There are a number of fields in bd_info that also exist in global_data and contain the same value. For instance, we have this in board_init_f(): bd->bi_inpfreq = gd->inp_clk; bd->bi_pcifreq = gd->pci_clk; bd->bi_vcofreq = gd->vco_clk; bd->bi_pevfreq = gd->pev_clk; bd->bi_flbfreq = gd->flb_clk; From my understanding, the bd_info structure is passed to the kernel as a binary blob, whereas the the global_data structure is used internally by U-Boot to store global data. Obviously, we can't get rid of one or the other. Wouldn't it be better if the bd_info structure were created and initialized only when Linux is about to be booted? Currently, we have some code that uses bd->xxx and other code that uses gd->xxx, with no real consistence. I think the bd_info structure should be local to cmd_bootm.c, and should be allocated and initialized only if we're booting a non-OF version of Linux. This would eliminate using bd-> for anything other than booting non-OF Linux. Comments? -- Timur Tabi Linux Kernel Developer @ Freescale ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] bd_info vs. global_data 2006-11-09 23:13 [U-Boot-Users] bd_info vs. global_data Timur Tabi @ 2006-11-10 0:29 ` Wolfgang Denk 2006-11-10 2:15 ` Timur Tabi 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Denk @ 2006-11-10 0:29 UTC (permalink / raw) To: u-boot In message <4553B60D.3030901@freescale.com> you wrote: > In looking at OF_TBCLK-related code, I noticed that U-Boot has what is > basically two structures that contain a variety of "global" data, global_data > and bd_info. There are a number of fields in bd_info that also exist in > global_data and contain the same value. For instance, we have this in > board_init_f(): Right. Historically, we started with bd_info, and gd was added later when we needed to find a way to pass "global data" around in U-Boot. This was mostly a code size optimization - before, we had to pass all this stuff in long argument lists - if any low level function needed such data, we had to pass it though all callers. > From my understanding, the bd_info structure is passed to the kernel as a > binary blob, whereas the the global_data structure is used internally by > U-Boot to store global data. Obviously, we can't get rid of one or the other. Correct. > Wouldn't it be better if the bd_info structure were created and initialized > only when Linux is about to be booted? Currently, we have some code that uses Yes, but IIRC also contains information that is noit available in gd, and I don't want to extend gd if it can be avoided, a this is taken from very scarce resources. > bd->xxx and other code that uses gd->xxx, with no real consistence. I think Actually, in most cases it makes some sense if you think longer about it. But I agree, it's not nice. > the bd_info structure should be local to cmd_bootm.c, and should be allocated > and initialized only if we're booting a non-OF version of Linux. This would > eliminate using bd-> for anything other than booting non-OF Linux. > > Comments? Did you try to implement this? Keep in mind that not all the world is a VAX ... oops, wrong decade, a PowerPC. You won't find OFT implementations on ARM, MIPS, NIOS, BF, CF, ... Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Some people march to the beat of a different drummer. And some people tango! ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] bd_info vs. global_data 2006-11-10 0:29 ` Wolfgang Denk @ 2006-11-10 2:15 ` Timur Tabi 2006-11-10 14:33 ` Wolfgang Denk 0 siblings, 1 reply; 6+ messages in thread From: Timur Tabi @ 2006-11-10 2:15 UTC (permalink / raw) To: u-boot Wolfgang Denk wrote: > Yes, but IIRC also contains information that is noit available in gd, > and I don't want to extend gd if it can be avoided, a this is taken > from very scarce resources. Is the bd located immediately after the gd in memory? >> bd->xxx and other code that uses gd->xxx, with no real consistence. I think > > Actually, in most cases it makes some sense if you think longer about > it. But I agree, it's not nice. How about a rule that any function can write to bd_info (to initialize its contents), but only the do_bootm_xxx functions can read from it, and only to prepare it for passing to Linux. This would eliminate code like this: #define OF_TBCLK (bd->bi_busfreq / 4) and hopefully stuff like this: if ((s = getenv ("clocks_in_mhz")) != NULL) { /* convert all clock information to MHz */ kbd->bi_intfreq /= 1000000L; kbd->bi_busfreq /= 1000000L; #if defined(CONFIG_MPC8220) kbd->bi_inpfreq /= 1000000L; kbd->bi_pcifreq /= 1000000L; kbd->bi_pevfreq /= 1000000L; kbd->bi_flbfreq /= 1000000L; kbd->bi_vcofreq /= 1000000L; #endif #if defined(CONFIG_CPM2) kbd->bi_cpmfreq /= 1000000L; kbd->bi_brgfreq /= 1000000L; kbd->bi_sccfreq /= 1000000L; kbd->bi_vco /= 1000000L; #endif In this case, I don't understand the clocks_in_mhz environment variable. Is this something that we really want to be run-time configurable? >> the bd_info structure should be local to cmd_bootm.c, and should be allocated >> and initialized only if we're booting a non-OF version of Linux. This would >> eliminate using bd-> for anything other than booting non-OF Linux. >> >> Comments? > > Did you try to implement this? No, it's just something that occurred to me today while trying to resolve the OF_TBCLK problem. -- Timur Tabi Linux Kernel Developer @ Freescale ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] bd_info vs. global_data 2006-11-10 2:15 ` Timur Tabi @ 2006-11-10 14:33 ` Wolfgang Denk 2006-11-10 16:38 ` Timur Tabi 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Denk @ 2006-11-10 14:33 UTC (permalink / raw) To: u-boot In message <4553E0C4.4010207@freescale.com> you wrote: > > Is the bd located immediately after the gd in memory? No, not at all. Actually we start with the gd, and space fopr the bd becomes only available after relocation to RAM. > How about a rule that any function can write to bd_info (to initialize its > contents), but only the do_bootm_xxx functions can read from it, and only to > prepare it for passing to Linux. This would eliminate code like this: > > #define OF_TBCLK (bd->bi_busfreq / 4) I don't see how such a rule would actually prevent such code... > and hopefully stuff like this: No, this is perfectly reasonable and necessary. > In this case, I don't understand the clocks_in_mhz environment variable. Is RTFM. > this something that we really want to be run-time configurable? Yes, of course we de. We certainly *do* want to be able to boot both old and new Linux kernels and to switch between their different interfaces in runtime. Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Fantasy is like alcohol - too much is bad for you, a little bit makes the world a better place. Like an exercise bicycle it takes you nowhere, but it just might tone up the muscles that will. Daydreaming got us where we are today; early in our evolution we learned to let our minds wander so well that they started coming back with souve- nirs. - Terry Pratchett & Stephen Briggs, _The Discworld Companion_ ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] bd_info vs. global_data 2006-11-10 14:33 ` Wolfgang Denk @ 2006-11-10 16:38 ` Timur Tabi 2006-11-10 23:03 ` Wolfgang Denk 0 siblings, 1 reply; 6+ messages in thread From: Timur Tabi @ 2006-11-10 16:38 UTC (permalink / raw) To: u-boot Wolfgang Denk wrote: > In message <4553E0C4.4010207@freescale.com> you wrote: >> Is the bd located immediately after the gd in memory? > > No, not at all. Actually we start with the gd, and space fopr the bd > becomes only available after relocation to RAM. So gd initially lives in cache? I don't see in the README where it says where gd_t is initially allocated, but I do see this in the code: gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET); That value is equal to 0xFD000F00. I can't really tell from the code or documentation, but I'm guessing U-Boot has set up a 4KB block of cache-as-RAM at FD000000. Either that or it's some kind of on-chip RAM, but I can't find any reference to that in any of my manuals. I have an 8349. >> How about a rule that any function can write to bd_info (to initialize its >> contents), but only the do_bootm_xxx functions can read from it, and only to >> prepare it for passing to Linux. This would eliminate code like this: >> >> #define OF_TBCLK (bd->bi_busfreq / 4) > > I don't see how such a rule would actually prevent such code... Well, in this case, the above line would change to "(gd->bus_clk / 4)" to conform with that rule. >> In this case, I don't understand the clocks_in_mhz environment variable. Is > > RTFM. Wow, look at that! It's clearly explained in the README! Sorry. :-[ However, it looks like there's some redundancy in this. Couldn't the variable disable_of perform the same function? Or even better, couldn't we just check whether a pointer to an OF tree is passed to the bootm parameter? If the user includes an OF tree on the bootm command line, then boot an OF kernel. Otherwise, convert the frequency values to MHZ and boot a traditional kernel. Speaking of do_bootm_linux(), why is the PPC version of this function in cmd_bootm.c instead of lib_ppc/ppc_linux.c? -- Timur Tabi Linux Kernel Developer @ Freescale ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] bd_info vs. global_data 2006-11-10 16:38 ` Timur Tabi @ 2006-11-10 23:03 ` Wolfgang Denk 0 siblings, 0 replies; 6+ messages in thread From: Wolfgang Denk @ 2006-11-10 23:03 UTC (permalink / raw) To: u-boot In message <4554AB0E.7000805@freescale.com> you wrote: > > So gd initially lives in cache? I don't see in the README where it says where > gd_t is initially allocated, but I do see this in the code: This depends on the architecture. It may be cache, or some on-chip memory, or some SRAM, or whatever is available on a board that works as RAM without specific initialization. > However, it looks like there's some redundancy in this. Couldn't the variable > disable_of perform the same function? Or even better, couldn't we just check No, it cannot. Because the change was done a long time ago in the 2.4 kernel tree, somewhere around 2.4.5-pre5. Using a 2.4.4 kernel or a 2.4.5 kernel require different clock encoding (one in MHz, the other in Hz). This does not depend on any OF stuff at all. > whether a pointer to an OF tree is passed to the bootm parameter? If the user > includes an OF tree on the bootm command line, then boot an OF kernel. > Otherwise, convert the frequency values to MHZ and boot a traditional kernel. It seems you did not read much of the documentation. > Speaking of do_bootm_linux(), why is the PPC version of this function in > cmd_bootm.c instead of lib_ppc/ppc_linux.c? For historical reasons. We started with PPC only, so it was natural to have this in cmd_bootm.c. Other architectures placed theit code somewhere else, but nobody changed the PPC code. Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de GUIs are virtually useless. Learn tools. They're configurable, scriptable, automatable, cron-able, interoperable, etc. We don't need no brain-dead winslurping monolithic claptrap. -- Tom Christiansen in 371140df at csnews ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-11-10 23:03 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-11-09 23:13 [U-Boot-Users] bd_info vs. global_data Timur Tabi 2006-11-10 0:29 ` Wolfgang Denk 2006-11-10 2:15 ` Timur Tabi 2006-11-10 14:33 ` Wolfgang Denk 2006-11-10 16:38 ` Timur Tabi 2006-11-10 23:03 ` Wolfgang Denk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox