On Tue, Oct 02, 2012 at 12:30:54PM +0300, Riku Voipio wrote:
On 1 October 2012 19:33, Dave Martin dave.martin@linaro.org wrote:
On Thu, Sep 27, 2012 at 07:06:20PM +0100, Jon Medhurst (Tixy) wrote:
/* Turn on CCI snoops and DVM messages */
io32(cci+0x4000) = 0x3; /* A15 cluster */
io32(cci+0x5000) = 0x3; /* A7 cluster */
Ultimately, CCI slave port assignments will be deducible from the DT topology, but we don't have this yet, so I guess this is OK for now.
For the intergrated switcher work we can have a simple local patch for this until/unless this (or the switcher) becomes more generic.
Would the local patch be for the bootwrapper or the integrated switcher kernel? The latter would be nice, as it would allow "one bootwrapper for everything". With the former we could still have an ifdef and build both bootwrappers from same source.
I think we are actually now not far away from the main bootwrapper being usable for IKS.
We need to be able to boot Linux in the Secure world (that can be a generic command-line option), and we need the initial CCI configuration to match the way the model was started (i.e., which CPUs were held in reset initially). The latter may be a bit of a hack, for now.
If the "local patch" can be put in a sufficiently non-invasive form, I don't see why we couldn't merge it and drop the IKS bootwrapper. I haven't had a lot of time to play with this though...
Cheers ---Dave
/* Wait while change pending bit of status register is set */
while(io32(cci+0xc) & 0x1)
{}
+}
+static void configure_from_fdt(struct loader_info *info) +{
void *fdt = (void *)info->fdt_start;
uint32_t const *p;
int addrcells, sizecells;
int offset, len;
if(!fdt)
return;
_fdt_address_and_size_cells(fdt, &addrcells, &sizecells);
/* See if there is a CCI device to initialise */
offset = fdt_node_offset_by_compatible(fdt, 0, "arm,cci");
I'm guessing this binding isn't official yet, but it'll do for now...
if (offset >= 0) {
p = fdt_getprop(fdt, offset, "reg", &len);
if(len != (addrcells + sizecells) * 4)
info("Failed parsing device-tree node for CCI\n");
else
init_cci(fdt32_to_cpu(p[addrcells - 1]));
I think this is worth a comment. I presume you're trying to get the low 32 bits of the address here (and assuming that the high 32 bits are zero).
Cheers ---Dave
}
return;
+}
static int is_space(char c) { return c == ' '; @@ -598,4 +646,6 @@ args_done: atag_append(&atagp, ATAG_NONE, 0, 0);
update_fdt(&phys, info);
configure_from_fdt(info);
}
1.7.10.4
linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev