uboot/drivers/net/ldpaa_eth/ldpaa_wriop.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2015 Freescale Semiconductor
   3 *
   4 * SPDX-License-Identifier:     GPL-2.0+
   5 */
   6
   7#include <common.h>
   8#include <asm/io.h>
   9#include <asm/types.h>
  10#include <malloc.h>
  11#include <net.h>
  12#include <linux/compat.h>
  13#include <asm/arch/fsl_serdes.h>
  14#include <fsl-mc/ldpaa_wriop.h>
  15
  16struct wriop_dpmac_info dpmac_info[NUM_WRIOP_PORTS];
  17
  18__weak phy_interface_t wriop_dpmac_enet_if(int dpmac_id, int lane_prtc)
  19{
  20        return PHY_INTERFACE_MODE_NONE;
  21}
  22
  23void wriop_init_dpmac(int sd, int dpmac_id, int lane_prtcl)
  24{
  25        phy_interface_t enet_if;
  26
  27        dpmac_info[dpmac_id].enabled = 0;
  28        dpmac_info[dpmac_id].id = 0;
  29        dpmac_info[dpmac_id].phy_addr = -1;
  30        dpmac_info[dpmac_id].enet_if = PHY_INTERFACE_MODE_NONE;
  31
  32        enet_if = wriop_dpmac_enet_if(dpmac_id, lane_prtcl);
  33        if (enet_if != PHY_INTERFACE_MODE_NONE) {
  34                dpmac_info[dpmac_id].enabled = 1;
  35                dpmac_info[dpmac_id].id = dpmac_id;
  36                dpmac_info[dpmac_id].enet_if = enet_if;
  37        }
  38}
  39
  40/*TODO what it do */
  41static int wriop_dpmac_to_index(int dpmac_id)
  42{
  43        int i;
  44
  45        for (i = WRIOP1_DPMAC1; i < NUM_WRIOP_PORTS; i++) {
  46                if (dpmac_info[i].id == dpmac_id)
  47                        return i;
  48        }
  49
  50        return -1;
  51}
  52
  53void wriop_disable_dpmac(int dpmac_id)
  54{
  55        int i = wriop_dpmac_to_index(dpmac_id);
  56
  57        if (i == -1)
  58                return;
  59
  60        dpmac_info[i].enabled = 0;
  61        wriop_dpmac_disable(dpmac_id);
  62}
  63
  64void wriop_enable_dpmac(int dpmac_id)
  65{
  66        int i = wriop_dpmac_to_index(dpmac_id);
  67
  68        if (i == -1)
  69                return;
  70
  71        dpmac_info[i].enabled = 1;
  72        wriop_dpmac_enable(dpmac_id);
  73}
  74
  75u8 wriop_is_enabled_dpmac(int dpmac_id)
  76{
  77        int i = wriop_dpmac_to_index(dpmac_id);
  78
  79        if (i == -1)
  80                return -1;
  81
  82        return dpmac_info[i].enabled;
  83}
  84
  85
  86void wriop_set_mdio(int dpmac_id, struct mii_dev *bus)
  87{
  88        int i = wriop_dpmac_to_index(dpmac_id);
  89
  90        if (i == -1)
  91                return;
  92
  93        dpmac_info[i].bus = bus;
  94}
  95
  96struct mii_dev *wriop_get_mdio(int dpmac_id)
  97{
  98        int i = wriop_dpmac_to_index(dpmac_id);
  99
 100        if (i == -1)
 101                return NULL;
 102
 103        return dpmac_info[i].bus;
 104}
 105
 106void wriop_set_phy_address(int dpmac_id, int address)
 107{
 108        int i = wriop_dpmac_to_index(dpmac_id);
 109
 110        if (i == -1)
 111                return;
 112
 113        dpmac_info[i].phy_addr = address;
 114}
 115
 116int wriop_get_phy_address(int dpmac_id)
 117{
 118        int i = wriop_dpmac_to_index(dpmac_id);
 119
 120        if (i == -1)
 121                return -1;
 122
 123        return dpmac_info[i].phy_addr;
 124}
 125
 126void wriop_set_phy_dev(int dpmac_id, struct phy_device *phydev)
 127{
 128        int i = wriop_dpmac_to_index(dpmac_id);
 129
 130        if (i == -1)
 131                return;
 132
 133        dpmac_info[i].phydev = phydev;
 134}
 135
 136struct phy_device *wriop_get_phy_dev(int dpmac_id)
 137{
 138        int i = wriop_dpmac_to_index(dpmac_id);
 139
 140        if (i == -1)
 141                return NULL;
 142
 143        return dpmac_info[i].phydev;
 144}
 145
 146phy_interface_t wriop_get_enet_if(int dpmac_id)
 147{
 148        int i = wriop_dpmac_to_index(dpmac_id);
 149
 150        if (i == -1)
 151                return PHY_INTERFACE_MODE_NONE;
 152
 153        if (dpmac_info[i].enabled)
 154                return dpmac_info[i].enet_if;
 155
 156        return PHY_INTERFACE_MODE_NONE;
 157}
 158