Elbc device driver
Mercier Ivan
ivan.mercier at gmail.com
Sat Oct 12 02:03:30 EST 2013
Hi,
this should be correct (I'm using chip select 3 for this device)
lbc: localbus at ffe124000 {
reg = <0xf 0xfe124000 0 0x1000>;
ranges = <3 0 0xf 0xe0000000 0x08000000>;
a3p400{
#address-cells = <1>;
#size-cells = <1>;
compatible = "my_a3p_driver";
reg = <0x0 0x0 0x800000>;
};
};
yeah, I'm including p3041-post.dtsi.
so it I get it, I should code my driver doing basically:
{
static u8 __iomem * a3p
struct device_node *np;
np = of_find_compatible_node(NULL, NULL, "my_a3p_driver");
if (!np) {
printk(KERN_CRIT "Could not find my_a3p_driver node\n");
return;
}
a3p_bcsr = of_iomap(np, 0);
of_node_put(np);
if (!a3p_bcsr) {
printk(KERN_CRIT "Could not remap BCSR\n");
return;
}
}
Thanks for your help Scott
2013/10/10 Scott Wood <scottwood at freescale.com>:
> On Thu, 2013-10-10 at 16:54 +0200, Mercier Ivan wrote:
>> Hi,
>> I've got a KERN_INFO msg: "fsl-lbc a3p400.11: failed to get memory
>> region" corresponding to my elbc device that I try to map.
>> a3p400 at 3,0 {
>> compatible = "fsl,elbc";
>> reg = <0 0xe0000000 0x1000000>;
>> };
>
> The node name and unit address do not match the contents of the node.
> The former describes a device that sits on the localbus, while the
> latter has a compatible describes the localbus itself. I don't know
> what that reg is, but it doesn't match the unit address.
>
>> The corresponding law on ELBC is 0xe0000000 ->0xf0000000.
>> I want to map my device on 0xe0000000 ->0xe8000000 as it has 16 adress bits.
>>
>> Now the controler registers are properly set,but how do I map the device?
>
> Your eLBC node should look something like this (I'm assuming CCSR is at
> 0xffe000000, and that you actually meant 0x0e0000000 and not
> 0xfe0000000, though probably one of those assumptions is wrong):
>
> localbus at ffe124000 {
> compatible = "fsl,elbc", "simple-bus";
> reg = <0xf 0xfe124000 0 0x1000>;
> interrupts = <25 2 0 0>;
> #address-cells = <2>;
> #size-cells = <1>;
>
> ranges = <3 0 0 0xe0000000 0x08000000>;
>
> /* If at all possible, replace "a3p400" in the node name with
> something generic */
> a3p400 at 3,0 {
> compatible = "something appropriate here";
> reg = <3 0 0x08000000>;
> };
> };
>
> Note that at the dts level, you should be including
> arch/powerpc/boot/dts/fsl/p3041-post.dtsi and thus your board dts would
> only need to supply reg, ranges, and the a3p400 node (see
> arch/powerpc/boot/dts/p3041ds.dts for an example).
>
> -Scott
>
>
>
More information about the Linuxppc-dev
mailing list