[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: get GIC addresses from DT
On 30/11/12 12:25, Stefano Stabellini wrote: > On Fri, 30 Nov 2012, David Vrabel wrote: >> On 23/11/12 15:21, Stefano Stabellini wrote: >>> Get the address of the GIC distributor, cpu, virtual and virtual cpu >>> interfaces registers from device tree. >> >> The original intention of the early DTB parsing was to get the minimum >> of info needed before the DTB could be translated into a more useful >> form (similar to what Linux does). >> >> Is this something that is still being considered in the long term? If >> so, should the GIC be initialized from this translated form, instead of >> using the early parsing? > > Regardless of the final form of DT parsing in Xen, I think that CPU, > memory and GIC are the three things that should be parsed early. Ok. >>> +bool_t device_tree_node_compatible(const void *fdt, int node, const char >>> *match) >>> +{ >>> + int len, l; >>> + const void *prop; >>> + >>> + prop = fdt_getprop(fdt, node, "compatible", &len); >>> + if ( prop == NULL ) >>> + return 0; >>> + >>> + while ( len > 0 ) { >>> + if ( !strncmp(prop, match, strlen(match)) ) >>> + return 1; >>> + l = strlen(prop) + 1; >>> + prop += l; >>> + len -= l; >>> + } >> >> This doesn't look right. Don't you need to split the prop string on >> comma boundaries? > > Nope, the compatible string to match is, for example, the entirety of > "arm,cortex-a15-gic", or alternatively "arm,cortex-a9-gic". Trying to > match just "cortex-a15-gic" would be incorrect. > This is what Linux does too. Yes, you're right. I was misrembering the format. >>> + cell = (const u32 *)prop->data; >>> + device_tree_get_reg(&cell, address_cells, size_cells, &start, &size); >> >> Is this needed? This cell is reread below. > > Yes, because device_tree_get_reg increments the cell pointer Perhaps I wasn't clear. The result of this device_tree_get_reg() is not used anywhere, and the side effect of advancing cell is also not used. >>> + >>> + cell = (const u32 *)prop->data; >>> + reg_cells = address_cells + size_cells; >>> + interfaces = fdt32_to_cpu(prop->len) / (reg_cells * sizeof(u32)); David _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |