Lines Matching full:etha

131 	/* For enabled ETHA ports, setup port based forwarding */  in rswitch_fwd_init()
465 desc->info1 = cpu_to_le64(INFO1_SPN(rdev->etha->index)); in rswitch_gwca_queue_ext_ts_fill()
1085 /* Ethernet TSN Agent block (ETHA) and Ethernet MAC IP block (RMAC) */
1086 static int rswitch_etha_change_mode(struct rswitch_etha *etha, in rswitch_etha_change_mode() argument
1091 if (!rswitch_agent_clock_is_enabled(etha->coma_addr, etha->index)) in rswitch_etha_change_mode()
1092 rswitch_agent_clock_ctrl(etha->coma_addr, etha->index, 1); in rswitch_etha_change_mode()
1094 iowrite32(mode, etha->addr + EAMC); in rswitch_etha_change_mode()
1096 ret = rswitch_reg_wait(etha->addr, EAMS, EAMS_OPS_MASK, mode); in rswitch_etha_change_mode()
1099 rswitch_agent_clock_ctrl(etha->coma_addr, etha->index, 0); in rswitch_etha_change_mode()
1104 static void rswitch_etha_read_mac_address(struct rswitch_etha *etha) in rswitch_etha_read_mac_address() argument
1106 u32 mrmac0 = ioread32(etha->addr + MRMAC0); in rswitch_etha_read_mac_address()
1107 u32 mrmac1 = ioread32(etha->addr + MRMAC1); in rswitch_etha_read_mac_address()
1108 u8 *mac = &etha->mac_addr[0]; in rswitch_etha_read_mac_address()
1118 static void rswitch_etha_write_mac_address(struct rswitch_etha *etha, const u8 *mac) in rswitch_etha_write_mac_address() argument
1120 iowrite32((mac[0] << 8) | mac[1], etha->addr + MRMAC0); in rswitch_etha_write_mac_address()
1122 etha->addr + MRMAC1); in rswitch_etha_write_mac_address()
1125 static int rswitch_etha_wait_link_verification(struct rswitch_etha *etha) in rswitch_etha_wait_link_verification() argument
1127 iowrite32(MLVC_PLV, etha->addr + MLVC); in rswitch_etha_wait_link_verification()
1129 return rswitch_reg_wait(etha->addr, MLVC, MLVC_PLV, 0); in rswitch_etha_wait_link_verification()
1132 static void rswitch_rmac_setting(struct rswitch_etha *etha, const u8 *mac) in rswitch_rmac_setting() argument
1136 rswitch_etha_write_mac_address(etha, mac); in rswitch_rmac_setting()
1138 switch (etha->phy_interface) { in rswitch_rmac_setting()
1147 pis = FIELD_GET(MPIC_PIS, ioread32(etha->addr + MPIC)); in rswitch_rmac_setting()
1151 switch (etha->speed) { in rswitch_rmac_setting()
1162 lsc = FIELD_GET(MPIC_LSC, ioread32(etha->addr + MPIC)); in rswitch_rmac_setting()
1166 rswitch_modify(etha->addr, MPIC, MPIC_PIS | MPIC_LSC, in rswitch_rmac_setting()
1170 static void rswitch_etha_enable_mii(struct rswitch_etha *etha) in rswitch_etha_enable_mii() argument
1172 rswitch_modify(etha->addr, MPIC, MPIC_PSMCS | MPIC_PSMHT, in rswitch_etha_enable_mii()
1173 FIELD_PREP(MPIC_PSMCS, etha->psmcs) | in rswitch_etha_enable_mii()
1177 static int rswitch_etha_hw_init(struct rswitch_etha *etha, const u8 *mac) in rswitch_etha_hw_init() argument
1181 err = rswitch_etha_change_mode(etha, EAMC_OPC_DISABLE); in rswitch_etha_hw_init()
1184 err = rswitch_etha_change_mode(etha, EAMC_OPC_CONFIG); in rswitch_etha_hw_init()
1188 iowrite32(EAVCC_VEM_SC_TAG, etha->addr + EAVCC); in rswitch_etha_hw_init()
1189 rswitch_rmac_setting(etha, mac); in rswitch_etha_hw_init()
1190 rswitch_etha_enable_mii(etha); in rswitch_etha_hw_init()
1192 err = rswitch_etha_wait_link_verification(etha); in rswitch_etha_hw_init()
1196 err = rswitch_etha_change_mode(etha, EAMC_OPC_DISABLE); in rswitch_etha_hw_init()
1200 return rswitch_etha_change_mode(etha, EAMC_OPC_OPERATION); in rswitch_etha_hw_init()
1203 static int rswitch_etha_mpsm_op(struct rswitch_etha *etha, bool read, in rswitch_etha_mpsm_op() argument
1217 iowrite32(val, etha->addr + MPSM); in rswitch_etha_mpsm_op()
1219 ret = rswitch_reg_wait(etha->addr, MPSM, MPSM_PSME, 0); in rswitch_etha_mpsm_op()
1224 val = ioread32(etha->addr + MPSM); in rswitch_etha_mpsm_op()
1234 struct rswitch_etha *etha = bus->priv; in rswitch_etha_mii_read_c45() local
1237 ret = rswitch_etha_mpsm_op(etha, false, MPSM_MMF_C45, addr, devad, in rswitch_etha_mii_read_c45()
1242 return rswitch_etha_mpsm_op(etha, true, MPSM_MMF_C45, addr, devad, in rswitch_etha_mii_read_c45()
1249 struct rswitch_etha *etha = bus->priv; in rswitch_etha_mii_write_c45() local
1252 ret = rswitch_etha_mpsm_op(etha, false, MPSM_MMF_C45, addr, devad, in rswitch_etha_mii_write_c45()
1257 return rswitch_etha_mpsm_op(etha, false, MPSM_MMF_C45, addr, devad, in rswitch_etha_mii_write_c45()
1263 struct rswitch_etha *etha = bus->priv; in rswitch_etha_mii_read_c22() local
1265 return rswitch_etha_mpsm_op(etha, true, MPSM_MMF_C22, phyad, regad, in rswitch_etha_mii_read_c22()
1272 struct rswitch_etha *etha = bus->priv; in rswitch_etha_mii_write_c22() local
1274 return rswitch_etha_mpsm_op(etha, false, MPSM_MMF_C22, phyad, regad, in rswitch_etha_mii_write_c22()
1296 if (index == rdev->etha->index) { in rswitch_get_port_node()
1317 err = of_get_phy_mode(rdev->np_port, &rdev->etha->phy_interface); in rswitch_etha_get_params()
1323 rdev->etha->speed = max_speed; in rswitch_etha_get_params()
1328 switch (rdev->etha->phy_interface) { in rswitch_etha_get_params()
1330 rdev->etha->speed = SPEED_100; in rswitch_etha_get_params()
1333 rdev->etha->speed = SPEED_1000; in rswitch_etha_get_params()
1336 rdev->etha->speed = SPEED_2500; in rswitch_etha_get_params()
1356 sprintf(mii_bus->id, "etha%d", rdev->etha->index); in rswitch_mii_register()
1357 mii_bus->priv = rdev->etha; in rswitch_mii_register()
1371 rdev->etha->mii = mii_bus; in rswitch_mii_register()
1381 if (rdev->etha->mii) { in rswitch_mii_unregister()
1382 mdiobus_unregister(rdev->etha->mii); in rswitch_mii_unregister()
1383 mdiobus_free(rdev->etha->mii); in rswitch_mii_unregister()
1384 rdev->etha->mii = NULL; in rswitch_mii_unregister()
1393 if (phydev->link != rdev->etha->link) { in rswitch_adjust_link()
1400 rdev->etha->link = phydev->link; in rswitch_adjust_link()
1403 phydev->speed != rdev->etha->speed) { in rswitch_adjust_link()
1404 rdev->etha->speed = phydev->speed; in rswitch_adjust_link()
1406 rswitch_etha_hw_init(rdev->etha, rdev->ndev->dev_addr); in rswitch_adjust_link()
1407 phy_set_speed(rdev->serdes, rdev->etha->speed); in rswitch_adjust_link()
1418 switch (rdev->etha->speed) { in rswitch_phy_remove_link_mode()
1435 phy_set_max_speed(phydev, rdev->etha->speed); in rswitch_phy_remove_link_mode()
1457 __set_bit(rdev->etha->phy_interface, phydev->host_interfaces); in rswitch_phy_device_init()
1461 rdev->etha->phy_interface); in rswitch_phy_device_init()
1492 rdev->etha->phy_interface); in rswitch_serdes_set_params()
1496 return phy_set_speed(rdev->serdes, rdev->etha->speed); in rswitch_serdes_set_params()
1503 if (!rdev->etha->operated) { in rswitch_ether_port_init_one()
1504 err = rswitch_etha_hw_init(rdev->etha, rdev->ndev->dev_addr); in rswitch_ether_port_init_one()
1508 rdev->etha->operated = true; in rswitch_ether_port_init_one()
1649 desc->info1 = cpu_to_le64(INFO1_DV(BIT(rdev->etha->index)) | in rswitch_ext_desc_set_info1()
1895 struct rswitch_etha *etha = &priv->etha[index]; in rswitch_etha_init() local
1897 memset(etha, 0, sizeof(*etha)); in rswitch_etha_init()
1898 etha->index = index; in rswitch_etha_init()
1899 etha->addr = priv->addr + RSWITCH_ETHA_OFFSET + index * RSWITCH_ETHA_SIZE; in rswitch_etha_init()
1900 etha->coma_addr = priv->addr; in rswitch_etha_init()
1906 etha->psmcs = clk_get_rate(priv->clk) / 100000 / (25 * 2) - 1; in rswitch_etha_init()
1931 rdev->etha = &priv->etha[index]; in rswitch_device_alloc()
1947 if (is_valid_ether_addr(rdev->etha->mac_addr)) in rswitch_device_alloc()
1948 eth_hw_addr_set(ndev, rdev->etha->mac_addr); in rswitch_device_alloc()
2001 rswitch_etha_read_mac_address(&priv->etha[i]); in rswitch_init()