|
|
@@ -34,6 +34,9 @@
|
|
|
#define SYSMGR_EMACGRP_CTRL_PHYSEL_MASK 0x00000003
|
|
|
#define SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK 0x00000010
|
|
|
|
|
|
+#define SYSMGR_FPGAGRP_MODULE_REG 0x00000028
|
|
|
+#define SYSMGR_FPGAGRP_MODULE_EMAC 0x00000004
|
|
|
+
|
|
|
#define EMAC_SPLITTER_CTRL_REG 0x0
|
|
|
#define EMAC_SPLITTER_CTRL_SPEED_MASK 0x3
|
|
|
#define EMAC_SPLITTER_CTRL_SPEED_10 0x2
|
|
|
@@ -148,7 +151,7 @@ static int socfpga_dwmac_setup(struct socfpga_dwmac *dwmac)
|
|
|
int phymode = dwmac->interface;
|
|
|
u32 reg_offset = dwmac->reg_offset;
|
|
|
u32 reg_shift = dwmac->reg_shift;
|
|
|
- u32 ctrl, val;
|
|
|
+ u32 ctrl, val, module;
|
|
|
|
|
|
switch (phymode) {
|
|
|
case PHY_INTERFACE_MODE_RGMII:
|
|
|
@@ -175,12 +178,19 @@ 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)
|
|
|
+ if (dwmac->f2h_ptp_ref_clk) {
|
|
|
ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
|
|
|
- else
|
|
|
+ regmap_read(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
|
|
|
+ &module);
|
|
|
+ module |= (SYSMGR_FPGAGRP_MODULE_EMAC << (reg_shift / 2));
|
|
|
+ regmap_write(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
|
|
|
+ module);
|
|
|
+ } else {
|
|
|
ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2));
|
|
|
+ }
|
|
|
|
|
|
regmap_write(sys_mgr_base_addr, reg_offset, ctrl);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|