|
@@ -107,6 +107,31 @@ static void hns_xgmac_rx_enable(struct mac_driver *drv, u32 value)
|
|
|
dsaf_set_dev_bit(drv, XGMAC_MAC_ENABLE_REG, XGMAC_ENABLE_RX_B, !!value);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * hns_xgmac_tx_lf_rf_insert - insert lf rf control about xgmac
|
|
|
+ * @mac_drv: mac driver
|
|
|
+ * @mode: inserf rf or lf
|
|
|
+ */
|
|
|
+static void hns_xgmac_lf_rf_insert(struct mac_driver *mac_drv, u32 mode)
|
|
|
+{
|
|
|
+ dsaf_set_dev_field(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG,
|
|
|
+ XGMAC_LF_RF_INSERT_M, XGMAC_LF_RF_INSERT_S, mode);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * hns_xgmac__lf_rf_control_init - initial the lf rf control register
|
|
|
+ * @mac_drv: mac driver
|
|
|
+ */
|
|
|
+static void hns_xgmac_lf_rf_control_init(struct mac_driver *mac_drv)
|
|
|
+{
|
|
|
+ u32 val = 0;
|
|
|
+
|
|
|
+ dsaf_set_bit(val, XGMAC_UNIDIR_EN_B, 0);
|
|
|
+ dsaf_set_bit(val, XGMAC_RF_TX_EN_B, 1);
|
|
|
+ dsaf_set_field(val, XGMAC_LF_RF_INSERT_M, XGMAC_LF_RF_INSERT_S, 0);
|
|
|
+ dsaf_write_reg(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG, val);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
*hns_xgmac_enable - enable xgmac port
|
|
|
*@drv: mac driver
|
|
@@ -115,12 +140,8 @@ static void hns_xgmac_rx_enable(struct mac_driver *drv, u32 value)
|
|
|
static void hns_xgmac_enable(void *mac_drv, enum mac_commom_mode mode)
|
|
|
{
|
|
|
struct mac_driver *drv = (struct mac_driver *)mac_drv;
|
|
|
- struct dsaf_device *dsaf_dev
|
|
|
- = (struct dsaf_device *)dev_get_drvdata(drv->dev);
|
|
|
- u32 port = drv->mac_id;
|
|
|
|
|
|
- dsaf_dev->misc_op->xge_core_srst(dsaf_dev, port, 1);
|
|
|
- mdelay(10);
|
|
|
+ hns_xgmac_lf_rf_insert(drv, HNS_XGMAC_NO_LF_RF_INSERT);
|
|
|
|
|
|
/*enable XGE rX/tX */
|
|
|
if (mode == MAC_COMM_MODE_TX) {
|
|
@@ -143,9 +164,6 @@ static void hns_xgmac_enable(void *mac_drv, enum mac_commom_mode mode)
|
|
|
static void hns_xgmac_disable(void *mac_drv, enum mac_commom_mode mode)
|
|
|
{
|
|
|
struct mac_driver *drv = (struct mac_driver *)mac_drv;
|
|
|
- struct dsaf_device *dsaf_dev
|
|
|
- = (struct dsaf_device *)dev_get_drvdata(drv->dev);
|
|
|
- u32 port = drv->mac_id;
|
|
|
|
|
|
if (mode == MAC_COMM_MODE_TX) {
|
|
|
hns_xgmac_tx_enable(drv, 0);
|
|
@@ -155,9 +173,7 @@ static void hns_xgmac_disable(void *mac_drv, enum mac_commom_mode mode)
|
|
|
hns_xgmac_tx_enable(drv, 0);
|
|
|
hns_xgmac_rx_enable(drv, 0);
|
|
|
}
|
|
|
-
|
|
|
- mdelay(10);
|
|
|
- dsaf_dev->misc_op->xge_core_srst(dsaf_dev, port, 0);
|
|
|
+ hns_xgmac_lf_rf_insert(drv, HNS_XGMAC_LF_INSERT);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -203,6 +219,7 @@ static void hns_xgmac_init(void *mac_drv)
|
|
|
dsaf_dev->misc_op->xge_srst(dsaf_dev, port, 1);
|
|
|
|
|
|
mdelay(100);
|
|
|
+ hns_xgmac_lf_rf_control_init(drv);
|
|
|
hns_xgmac_exc_irq_en(drv, 0);
|
|
|
|
|
|
hns_xgmac_pma_fec_enable(drv, 0x0, 0x0);
|
|
@@ -788,7 +805,7 @@ static int hns_xgmac_get_sset_count(int stringset)
|
|
|
*/
|
|
|
static int hns_xgmac_get_regs_count(void)
|
|
|
{
|
|
|
- return ETH_XGMAC_DUMP_NUM;
|
|
|
+ return HNS_XGMAC_DUMP_NUM;
|
|
|
}
|
|
|
|
|
|
void *hns_xgmac_config(struct hns_mac_cb *mac_cb, struct mac_params *mac_param)
|