1
0
Fork 0

Added CONFIG_ options for bd_t and env in flat dev tree

CONFIG_OF_HAS_BD_T will put a copy of the bd_t
      into the resulting flat device tree.

      CONFIG_OF_HAS_UBOOT_ENV will copy the environment
      variables from u-boot into the flat device tree

Patch by Kumar Gala 11 Jan 2006
utp
Kumar Gala 2006-01-11 13:49:31 -06:00
parent c7428d49ac
commit e4f880eddd
4 changed files with 45 additions and 7 deletions

View File

@ -2,6 +2,16 @@
Changes since U-Boot 1.1.4: Changes since U-Boot 1.1.4:
====================================================================== ======================================================================
* Added CONFIG_ options for bd_t and env in flat dev tree
CONFIG_OF_HAS_BD_T will put a copy of the bd_t
into the resulting flat device tree.
CONFIG_OF_HAS_UBOOT_ENV will copy the environment
variables from u-boot into the flat device tree
Patch by Kumar Gala 11 Jan 2006
* Add support for 28F256J3A flah (=> 64 MB) on PM520 board * Add support for 28F256J3A flah (=> 64 MB) on PM520 board
* Fix compiler problem with at91rm9200dk board. * Fix compiler problem with at91rm9200dk board.

10
README
View File

@ -413,6 +413,16 @@ The following options need to be configured:
OF_CPU - The proper name of the cpus node. OF_CPU - The proper name of the cpus node.
OF_TBCLK - The timebase frequency. OF_TBCLK - The timebase frequency.
CONFIG_OF_HAS_BD_T
The resulting flat device tree will have a copy of the bd_t.
Space should be pre-allocated in the dts for the bd_t.
CONFIG_OF_HAS_UBOOT_ENV
The resulting flat device tree will have a copy of u-boot's
environment variables
- Serial Ports: - Serial Ports:
CFG_PL010_SERIAL CFG_PL010_SERIAL

View File

@ -529,6 +529,7 @@ extern uchar(*env_get_char) (int);
#define BDM(x) { .name = #x, .offset = offsetof(bd_t, bi_ ##x ) } #define BDM(x) { .name = #x, .offset = offsetof(bd_t, bi_ ##x ) }
#ifdef CONFIG_OF_HAS_BD_T
static const struct { static const struct {
const char *name; const char *name;
int offset; int offset;
@ -574,19 +575,24 @@ static const struct {
#endif #endif
BDM(baudrate), BDM(baudrate),
}; };
#endif
void ft_setup(void *blob, int size, bd_t * bd) void ft_setup(void *blob, int size, bd_t * bd)
{ {
DECLARE_GLOBAL_DATA_PTR;
u8 *end;
u32 *p; u32 *p;
int len; int len;
struct ft_cxt cxt; struct ft_cxt cxt;
int i, k, nxt;
static char tmpenv[256];
char *s, *lval, *rval;
ulong clock; ulong clock;
uint32_t v; #if defined(CONFIG_OF_HAS_UBOOT_ENV)
int k, nxt;
#endif
#if defined(CONFIG_OF_HAS_BD_T)
u8 *end;
#endif
#if defined(CONFIG_OF_HAS_UBOOT_ENV) || defined(CONFIG_OF_HAS_BD_T)
int i;
static char tmpenv[256];
#endif
/* disable OF tree; booting old kernel */ /* disable OF tree; booting old kernel */
if (getenv("disable_of") != NULL) { if (getenv("disable_of") != NULL) {
@ -610,9 +616,12 @@ void ft_setup(void *blob, int size, bd_t * bd)
/* back into root */ /* back into root */
ft_backtrack_node(&cxt); ft_backtrack_node(&cxt);
#ifdef CONFIG_OF_HAS_UBOOT_ENV
ft_begin_node(&cxt, "u-boot-env"); ft_begin_node(&cxt, "u-boot-env");
for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) { for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) {
char *s, *lval, *rval;
for (nxt = i; env_get_char(nxt) != '\0'; ++nxt) ; for (nxt = i; env_get_char(nxt) != '\0'; ++nxt) ;
s = tmpenv; s = tmpenv;
for (k = i; k < nxt && s < &tmpenv[sizeof(tmpenv) - 1]; ++k) for (k = i; k < nxt && s < &tmpenv[sizeof(tmpenv) - 1]; ++k)
@ -629,6 +638,7 @@ void ft_setup(void *blob, int size, bd_t * bd)
} }
ft_end_node(&cxt); ft_end_node(&cxt);
#endif
ft_begin_node(&cxt, "chosen"); ft_begin_node(&cxt, "chosen");
@ -647,14 +657,19 @@ void ft_setup(void *blob, int size, bd_t * bd)
ft_dump_blob(blob); ft_dump_blob(blob);
*/ */
#ifdef CONFIG_OF_HAS_BD_T
/* paste the bd_t at the end of the flat tree */ /* paste the bd_t at the end of the flat tree */
end = (char *)blob + end = (char *)blob +
be32_to_cpu(((struct boot_param_header *)blob)->totalsize); be32_to_cpu(((struct boot_param_header *)blob)->totalsize);
memcpy(end, bd, sizeof(*bd)); memcpy(end, bd, sizeof(*bd));
#endif
#ifdef CONFIG_PPC #ifdef CONFIG_PPC
#ifdef CONFIG_OF_HAS_BD_T
for (i = 0; i < sizeof(bd_map)/sizeof(bd_map[0]); i++) { for (i = 0; i < sizeof(bd_map)/sizeof(bd_map[0]); i++) {
uint32_t v;
sprintf(tmpenv, "/bd_t/%s", bd_map[i].name); sprintf(tmpenv, "/bd_t/%s", bd_map[i].name);
v = *(uint32_t *)((char *)bd + bd_map[i].offset); v = *(uint32_t *)((char *)bd + bd_map[i].offset);
@ -670,6 +685,7 @@ void ft_setup(void *blob, int size, bd_t * bd)
p = ft_get_prop(blob, "/bd_t/ethspeed", &len); p = ft_get_prop(blob, "/bd_t/ethspeed", &len);
if (p != NULL) if (p != NULL)
*p = cpu_to_be32((uint32_t) bd->bi_ethspeed); *p = cpu_to_be32((uint32_t) bd->bi_ethspeed);
#endif
clock = bd->bi_intfreq; clock = bd->bi_intfreq;
p = ft_get_prop(blob, "/cpus/" OF_CPU "/clock-frequency", &len); p = ft_get_prop(blob, "/cpus/" OF_CPU "/clock-frequency", &len);
@ -680,7 +696,7 @@ void ft_setup(void *blob, int size, bd_t * bd)
clock = OF_TBCLK; clock = OF_TBCLK;
p = ft_get_prop(blob, "/cpus/" OF_CPU "/timebase-frequency", &len); p = ft_get_prop(blob, "/cpus/" OF_CPU "/timebase-frequency", &len);
if (p != NULL) if (p != NULL)
*p = cpu_to_be32(OF_TBCLK); *p = cpu_to_be32(clock);
#endif #endif
#endif /* __powerpc__ */ #endif /* __powerpc__ */

View File

@ -584,5 +584,7 @@ typedef unsigned int led_id_t;
#define OF_CPU "PowerPC,MPC870@0" #define OF_CPU "PowerPC,MPC870@0"
#define OF_TBCLK (MPC8XX_HZ / 16) #define OF_TBCLK (MPC8XX_HZ / 16)
#define CONFIG_OF_HAS_BD_T 1
#define CONFIG_OF_HAS_UBOOT_ENV 1
#endif /* __CONFIG_H */ #endif /* __CONFIG_H */