[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH v5 3/7] hw/mdio: Generalize phy initi
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH v5 3/7] hw/mdio: Generalize phy initialization routine |
Date: |
Mon, 28 May 2018 00:09:34 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
Hi Alistair,
On 02/27/2018 07:33 PM, Alistair Francis wrote:
> On Fri, Sep 22, 2017 at 10:13 AM, Philippe Mathieu-Daudé
> <address@hidden> wrote:
>> From: Grant Likely <address@hidden>
>>
>> There really isn't anything tdk-specific about tdk_init() other than the
>> phy id registers. The function should instead be generalized for any
>> phy, at least as far as the ID registers are concerned. For the most
>> part the read/write behaviour should be very similar across PHYs.
>>
>> This patch renames tdk_{read,write,init}() to mdio_phy_*() so it can be
>> used for any PHY.
>>
>> More work definitely needs to be done here to make it easy to override
>> the default behaviour for specific PHYs, but this at least is a
>> reasonable start.
>>
>> Signed-off-by: Grant Likely <address@hidden>
>> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
>> [PMD: just rebased]
>> ---
>> include/hw/net/mdio.h | 2 +-
>> hw/net/etraxfs_eth.c | 2 +-
>> hw/net/mdio.c | 14 +++++++-------
>> hw/net/xilinx_axienet.c | 2 +-
>> 4 files changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/include/hw/net/mdio.h b/include/hw/net/mdio.h
>> index 7ffa4389b9..b3b4f497c0 100644
>> --- a/include/hw/net/mdio.h
>> +++ b/include/hw/net/mdio.h
>> @@ -86,7 +86,7 @@ struct qemu_mdio {
>> struct qemu_phy *devs[32];
>> };
>>
>> -void tdk_init(struct qemu_phy *phy);
>> +void mdio_phy_init(struct qemu_phy *phy, uint16_t id1, uint16_t id2);
>> void mdio_attach(struct qemu_mdio *bus, struct qemu_phy *phy,
>> unsigned int addr);
>> uint16_t mdio_read_req(struct qemu_mdio *bus, uint8_t addr, uint8_t req);
>> diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c
>> index f8d8f8441d..4c5415771f 100644
>> --- a/hw/net/etraxfs_eth.c
>> +++ b/hw/net/etraxfs_eth.c
>> @@ -333,7 +333,7 @@ static int fs_eth_init(SysBusDevice *sbd)
>> qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
>>
>>
>> - tdk_init(&s->phy);
>> + mdio_phy_init(&s->phy, 0x0300, 0xe400);
>> mdio_attach(&s->mdio_bus, &s->phy, s->phyaddr);
>> return 0;
>> }
>> diff --git a/hw/net/mdio.c b/hw/net/mdio.c
>> index 3d70d99077..33bfbb4623 100644
>> --- a/hw/net/mdio.c
>> +++ b/hw/net/mdio.c
>> @@ -43,7 +43,7 @@
>> * linux driver (PHYID and Diagnostics reg).
>> * TODO: Add friendly names for the register nums.
>> */
>> -static unsigned int tdk_read(struct qemu_phy *phy, unsigned int req)
>> +static unsigned int mdio_phy_read(struct qemu_phy *phy, unsigned int req)
>> {
>> int regnum;
>> unsigned r = 0;
>> @@ -107,7 +107,7 @@ static unsigned int tdk_read(struct qemu_phy *phy,
>> unsigned int req)
>> return r;
>> }
>>
>> -static void tdk_write(struct qemu_phy *phy, unsigned int req, unsigned int
>> data)
>> +static void mdio_phy_write(struct qemu_phy *phy, unsigned int req, unsigned
>> int data)
>> {
>> int regnum;
>>
>> @@ -120,18 +120,18 @@ static void tdk_write(struct qemu_phy *phy, unsigned
>> int req, unsigned int data)
>> }
>> }
>>
>> -void tdk_init(struct qemu_phy *phy)
>> +void mdio_phy_init(struct qemu_phy *phy, uint16_t id1, uint16_t id2)
>> {
>> phy->regs[PHY_CTRL] = 0x3100;
>> /* PHY Id. */
>> - phy->regs[PHY_ID1] = 0x0300;
>> - phy->regs[PHY_ID2] = 0xe400;
>> + phy->regs[PHY_ID1] = id1;
>> + phy->regs[PHY_ID2] = id2;
>
> These should be set by QEMU properties instead of values to the init()
> function.
I agree, but this is not (yet) a QOM'ified device.
I believe if I start to QOM'ify it this series will finish in 1 more
year. This is however a nice cleanup so far, and the QOM device can come
in a follow up series.
>
> Alistair
>
>> /* Autonegotiation advertisement reg. */
>> phy->regs[PHY_AUTONEG_ADV] = 0x01e1;
>> phy->link = 1;
>>
>> - phy->read = tdk_read;
>> - phy->write = tdk_write;
>> + phy->read = mdio_phy_read;
>> + phy->write = mdio_phy_write;
>> }
>>
>> void mdio_attach(struct qemu_mdio *bus, struct qemu_phy *phy, unsigned int
>> addr)
>> diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
>> index 1e859fdaae..408cd6e675 100644
>> --- a/hw/net/xilinx_axienet.c
>> +++ b/hw/net/xilinx_axienet.c
>> @@ -791,7 +791,7 @@ static void xilinx_enet_realize(DeviceState *dev, Error
>> **errp)
>> object_get_typename(OBJECT(dev)), dev->id, s);
>> qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
>>
>> - tdk_init(&s->TEMAC.phy);
>> + mdio_phy_init(&s->TEMAC.phy, 0x0300, 0xe400);
>> mdio_attach(&s->TEMAC.mdio_bus, &s->TEMAC.phy, s->c_phyaddr);
>>
>> s->TEMAC.parent = s;
>> --
>> 2.14.1
>>
>>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-arm] [Qemu-devel] [PATCH v5 3/7] hw/mdio: Generalize phy initialization routine,
Philippe Mathieu-Daudé <=