<div dir="ltr"><div>So, on a powerpc system this works.<br></div><br><div>static inline u64 b53_mac_array_to_u64(const u8 *u8_arr) {<br>    u64 mac = 0;<br>    u8 *cmac = (u8 *)&mac;<br>    memcpy(&cmac[2], u8_arr, 6);<br>    return mac;<br>}<br><br><div>I've done this approach initially, but there were some concerns afterwards regarding endianness.<br></div><div>On my x86_64 system it looks ok, but I'm hoping you'd validate that this is endian-correct and would work on little endian targets.<br></div><div>And then I'll move this in the port mirroring patch.<br></div></div><div><br></div><div>Thanks<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 27, 2015 at 8:36 PM, Jonas Gorski <span dir="ltr"><<a href="mailto:jogo@openwrt.org" target="_blank">jogo@openwrt.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
On Mon, Feb 23, 2015 at 3:41 PM, Alexandru Ardelean<br>
<<a href="mailto:ardeleanalex@gmail.com">ardeleanalex@gmail.com</a>> wrote:<br>
> From: Alexandru Ardelean <<a href="mailto:ardeleanalex@gmail.com">ardeleanalex@gmail.com</a>><br>
><br>
> Converts an MAC array of u8 to a u64 value.<br>
><br>
> Signed-off-by: Alexandru Ardelean <<a href="mailto:ardeleanalex@gmail.com">ardeleanalex@gmail.com</a>><br>
> ---<br>
>  target/linux/generic/files/drivers/net/phy/b53/b53_regs.h | 10 ++++++++++<br>
>  1 file changed, 10 insertions(+)<br>
><br>
> diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h<br>
> index ba50915..4379c58 100644<br>
> --- a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h<br>
> +++ b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h<br>
> @@ -20,6 +20,16 @@<br>
>  #ifndef __B53_REGS_H<br>
>  #define __B53_REGS_H<br>
><br>
> +/* Utility function for converting u8 arrays into u64 values to be written with b53_write */<br>
<br>
You only use this in b53_common.c, so why not just have it in there?<br>
And maybe merge it into the patch atually adding a user.<br>
<br>
> +static inline u64 b53_mac_array_to_u64(const u8 *u8_arr) {<br>
> +       u64 mac = (*(const u64 *)u8_arr);<br>
<br>
Also this will likely produce alignment issues on e.g. mips, which<br>
doesn't allow unaligned accesses.<br>
<br>
> +#ifdef __BIG_ENDIAN<br>
> +       return (mac >> 16);<br>
> +#else<br>
> +       return (mac << 16);<br>
> +#endif<br>
> +}<br>
> +<br>
>  /* Management Port (SMP) Page offsets */<br>
>  #define B53_CTRL_PAGE                  0x00 /* Control */<br>
>  #define B53_STAT_PAGE                  0x01 /* Status */<br>
> --<br>
<br>
Jonas<br>
</blockquote></div><br></div>