REG_FIELD(WIZ_LANECTL(3), 24, 25),
 };
 
+static const struct reg_field p0_fullrt_div[WIZ_MAX_LANES] = {
+       REG_FIELD(WIZ_LANECTL(0), 22, 23),
+       REG_FIELD(WIZ_LANECTL(1), 22, 23),
+       REG_FIELD(WIZ_LANECTL(2), 22, 23),
+       REG_FIELD(WIZ_LANECTL(3), 22, 23),
+};
+
 static const struct reg_field typec_ln10_swap =
                                        REG_FIELD(WIZ_SERDES_TYPEC, 30, 30);
 
 enum wiz_type {
        J721E_WIZ_16G,
        J721E_WIZ_10G,
+       AM64_WIZ_10G,
 };
 
 #define WIZ_TYPEC_DIR_DEBOUNCE_MIN     100     /* ms */
        struct regmap_field     *p_align[WIZ_MAX_LANES];
        struct regmap_field     *p_raw_auto_start[WIZ_MAX_LANES];
        struct regmap_field     *p_standard_mode[WIZ_MAX_LANES];
+       struct regmap_field     *p0_fullrt_div[WIZ_MAX_LANES];
        struct regmap_field     *pma_cmn_refclk_int_mode;
        struct regmap_field     *pma_cmn_refclk_mode;
        struct regmap_field     *pma_cmn_refclk_dig_div;
                return PTR_ERR(wiz->mux_sel_field[PLL1_REFCLK]);
        }
 
-       if (wiz->type == J721E_WIZ_10G)
+       if (wiz->type == J721E_WIZ_10G || wiz->type == AM64_WIZ_10G)
                wiz->mux_sel_field[REFCLK_DIG] =
                        devm_regmap_field_alloc(dev, regmap,
                                                refclk_dig_sel_10g);
                                i);
                        return PTR_ERR(wiz->p_standard_mode[i]);
                }
+
+               wiz->p0_fullrt_div[i] = devm_regmap_field_alloc(dev, regmap, p0_fullrt_div[i]);
+               if (IS_ERR(wiz->p0_fullrt_div[i])) {
+                       dev_err(dev, "P%d_FULLRT_DIV reg field init failed\n", i);
+                       return PTR_ERR(wiz->p0_fullrt_div[i]);
+               }
        }
 
        wiz->typec_ln10_swap = devm_regmap_field_alloc(dev, regmap,
        return ret;
 }
 
+static int wiz_phy_fullrt_div(struct wiz *wiz, int lane)
+{
+       if (wiz->type != AM64_WIZ_10G)
+               return 0;
+
+       if (wiz->lane_phy_type[lane] == PHY_TYPE_PCIE)
+               return regmap_field_write(wiz->p0_fullrt_div[lane], 0x1);
+
+       return 0;
+}
+
 static int wiz_phy_reset_deassert(struct reset_controller_dev *rcdev,
                                  unsigned long id)
 {
                return ret;
        }
 
+       ret = wiz_phy_fullrt_div(wiz, id - 1);
+       if (ret)
+               return ret;
+
        if (wiz->lane_phy_type[id - 1] == PHY_TYPE_DP)
                ret = regmap_field_write(wiz->p_enable[id - 1], P_ENABLE);
        else
        {
                .compatible = "ti,j721e-wiz-10g", .data = (void *)J721E_WIZ_10G
        },
+       {
+               .compatible = "ti,am64-wiz-10g", .data = (void *)AM64_WIZ_10G
+       },
        {}
 };
 MODULE_DEVICE_TABLE(of, wiz_id_table);
        wiz->dev = dev;
        wiz->regmap = regmap;
        wiz->num_lanes = num_lanes;
-       if (wiz->type == J721E_WIZ_10G)
+       if (wiz->type == J721E_WIZ_10G || wiz->type == AM64_WIZ_10G)
                wiz->clk_mux_sel = clk_mux_sel_10g;
        else
                wiz->clk_mux_sel = clk_mux_sel_16g;
 
        wiz->clk_div_sel = clk_div_sel;
 
-       if (wiz->type == J721E_WIZ_10G)
+       if (wiz->type == J721E_WIZ_10G || wiz->type == AM64_WIZ_10G)
                wiz->clk_div_sel_num = WIZ_DIV_NUM_CLOCKS_10G;
        else
                wiz->clk_div_sel_num = WIZ_DIV_NUM_CLOCKS_16G;