[OpenWrt-Devel] [PATCH 14/17] atheros[ar231x-eth]: pass PHY I/O memory via device resources

Felix Fietkau nbd at openwrt.org
Sat Jul 12 11:25:06 EDT 2014


On 2014-07-12 17:16, Sergey Ryazanov wrote:
> 2014-07-12 18:37 GMT+04:00 Felix Fietkau <nbd at openwrt.org>:
>> On 2014-07-12 15:33, Sergey Ryazanov wrote:
>>> Pass PHY I/O memory region via platform resources and remap them
>>> unconditionally.
>>>
>>> Signed-off-by: Sergey Ryazanov <ryazanov.s.a at gmail.com>
>>
>>> diff --git a/target/linux/atheros/patches-3.10/110-ar2313_ethernet.patch b/target/linux/atheros/patches-3.10/110-ar2313_ethernet.patch
>>> index 0e158d4..a9dcab2 100644
>>> --- a/target/linux/atheros/patches-3.10/110-ar2313_ethernet.patch
>>> +++ b/target/linux/atheros/patches-3.10/110-ar2313_ethernet.patch
>>> @@ -266,17 +266,19 @@
>>>  +    /**
>>>  +     * When there's only one MAC, PHY regs are typically on ENET0,
>>>  +     * even though the MAC might be on ENET1.
>>> -+     * Needto remap PHY regs separately in this case
>>> ++     * So remap PHY regs separately.
>>>  +     */
>>> -+    if (ar_eth_base == sp->cfg->phy_base)
>>> -+            sp->phy_regs = sp->eth_regs;
>>> -+    else {
>>> -+            sp->phy_regs = ioremap_nocache(sp->cfg->phy_base,
>>> -+                                           sizeof(*sp->phy_regs));
>>> -+            if (!sp->phy_regs) {
>>> -+                    printk("Can't remap phy registers\n");
>>> -+                    return -ENXIO;
>>> -+            }
>>> ++    res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "eth0_mii");
>>> ++    if (!res) {
>>> ++            res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
>>> ++                                               "eth1_mii");
>>> ++            if (!res)
>>> ++                    return -ENODEV;
>> Wouldn't it be better to remove the eth0_/eth1_ prefix from the resource
>> names instead of making the driver search for both?
>>
> Yes, I know this code is ugly, but I can't find better solution and
> prefer to keep this one for two reasons.
> 
> First, AR5312 SoC have two ethernet blocks and arch code register
> devices for each of them, so we need different names.
> 
> Second reason is nicer /proc/iomem look:
> 
>  * for ar2315 based board:
> root at OpenWrt:~# cat /proc/iomem | grep eth
> 10500000-10501fff : eth0_membase
>   10500014-1050001b : eth0_mii
> 
>  * for ar2313 based board:
> root at OpenWrt:~# cat /proc/iomem | grep eth
> 18100014-1810001b : eth0_mii
> 18200000-18201fff : eth1_membase
Makes sense, thanks for the explanation.

- Felix
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list