|
@@ -32,6 +32,7 @@
|
|
|
#define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII 0x2
|
|
|
#define SYSMGR_EMACGRP_CTRL_PHYSEL_WIDTH 2
|
|
|
#define SYSMGR_EMACGRP_CTRL_PHYSEL_MASK 0x00000003
|
|
|
+#define SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK 0x00000010
|
|
|
|
|
|
#define EMAC_SPLITTER_CTRL_REG 0x0
|
|
|
#define EMAC_SPLITTER_CTRL_SPEED_MASK 0x3
|
|
@@ -47,6 +48,7 @@ struct socfpga_dwmac {
|
|
|
struct regmap *sys_mgr_base_addr;
|
|
|
struct reset_control *stmmac_rst;
|
|
|
void __iomem *splitter_base;
|
|
|
+ bool f2h_ptp_ref_clk;
|
|
|
};
|
|
|
|
|
|
static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed)
|
|
@@ -116,6 +118,8 @@ static int socfpga_dwmac_parse_data(struct socfpga_dwmac *dwmac, struct device *
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ dwmac->f2h_ptp_ref_clk = of_property_read_bool(np, "altr,f2h_ptp_ref_clk");
|
|
|
+
|
|
|
np_splitter = of_parse_phandle(np, "altr,emac-splitter", 0);
|
|
|
if (np_splitter) {
|
|
|
if (of_address_to_resource(np_splitter, 0, &res_splitter)) {
|
|
@@ -171,6 +175,11 @@ static int socfpga_dwmac_setup(struct socfpga_dwmac *dwmac)
|
|
|
ctrl &= ~(SYSMGR_EMACGRP_CTRL_PHYSEL_MASK << reg_shift);
|
|
|
ctrl |= val << reg_shift;
|
|
|
|
|
|
+ if (dwmac->f2h_ptp_ref_clk)
|
|
|
+ ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
|
|
|
+ else
|
|
|
+ ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2));
|
|
|
+
|
|
|
regmap_write(sys_mgr_base_addr, reg_offset, ctrl);
|
|
|
return 0;
|
|
|
}
|