On Thu, Sep 09, 2010 at 06:20:32PM +0800, Roy Zang wrote:
[...]
>  /**
> + * fsl_lbc_addr - convert the base address
> + * @addr_base:       base address of the memory bank
> + *
> + * This function converts a base address of lbc into the right format for 
> the BR
> + * registers. If the SOC has eLBC then it returns 32bit physical address else
> + * it returns 34bit physical address for local bus(Example: MPC8641).
> + */

It returns 34bit physical address encoded in a 32 bit word,
right? Because, IIRC, 'unsigned int' is always 32 bit.

Worth mentioning this fact.

> +unsigned int fsl_lbc_addr(phys_addr_t addr_base)
> +{
> +     void *dev;

struct device_node *np;

> +     int compatible;
> +
> +     dev = fsl_lbc_ctrl_dev->dev->of_node;
> +     compatible = of_device_is_compatible(dev, "fsl,elbc");
> +
> +     if (compatible)
> +             return addr_base & 0xffff8000;
> +     else
> +             return (addr_base & 0x0ffff8000ull)
> +                     | ((addr_base & 0x300000000ull) >> 19);
> +}
> +EXPORT_SYMBOL(fsl_lbc_addr);

Almost perfect. I'm not sure if 'unsigned int' is technically
correct return type for this function though. I guess it should
be u32.

Also, the function may be a bit more understandable and shorter:

u32 fsl_lbc_addr(phys_addr_t addr)
{
        struct device_node *np = fsl_lbc_ctrl_dev->dev->of_node;
        u32 addrl = addr & 0xffff8000;

        if (of_device_is_compatible(np, "fsl,elbc"))
                return addrl;

        return addrl | ((addr & 0x300000000ull) >> 19);
}
EXPORT_SYMBOL(fsl_lbc_addr);

Thanks,

-- 
Anton Vorontsov
email: cbouatmai...@gmail.com
irc://irc.freenode.net/bd2
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to