Subject: Re: OF properties access ?

From: Benjamin Herrenschmidt <[email-masked]>
Date: Mon, 19 Jan 2004 20:04:21 +1100

>
> void pegasos_set_l2cr(void)
> {
>         struct device_node *root = find_path_device("/");
>         char *machine;
>         struct device_node *np;
>         int l2cr_value;

What about "unsigned int" above and not doing int/unsigned int
conversions and such ? (Dunno if it explains your problem at
this point but it's worth fixing anyway)

>         /* On Pegasos, enable the l2 cache if needed, as the OF forgets * it */
>         if (root == NULL) return;
>         machine = get_property(root, "model", NULL);
>         if (machine == NULL) return;
>         if (strncmp(machine, "Pegasos", 7) == 0) {
>                 /* Enable L2 cache if needed */
>                 np = find_devices ("cpus");
>                 if (np == NULL)
>                         np = find_type_devices("cpu");
>                 if (np != NULL) {
>                         unsigned int *l2cr = (unsigned int *)
>                                 get_property (np, "l2cr", NULL);
>                         if (l2cr == NULL) return;
>                         l2cr_value = *l2cr;
>                         if (!(l2cr_value & 0x80000000)) {
>                                 _set_L2CR(0);
>                                 _set_L2CR(l2cr_value | 0x80000000);
>                         }
>                 }
>         }
> }
>
> Does not die, but also does not seem to enable the l2cr thingy, but
> then, i don't know how fiable the info from /proc/sys/kernel/l2cr is :
>
> 0x00000000:  L2 disabled, no parity, no instn only, no data only,
> default replacement

The value is reliable, the text explanation of the bits isn't on this
CPU.

Ben.

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/