EQoS を内部 50MHz 基準クロックで RMII モードに動作させるには何が必要ですか?
u-bootのボードinit機能:
static int setup_eqos_rmii(void)
{
struct blk_ctrl_wakeupmix_regs *bctrl =
(struct blk_ctrl_wakeupmix_regs *)BLK_CTRL_WAKEUPMIX_BASE_ADDR;
clrsetbits_le32(&bctrl->eqos_gpr,
BCTRL_GPR_ENET_QOS_INTF_MODE_MASK,
BCTRL_GPR_ENET_QOS_INTF_SEL_RMII | BCTRL_GPR_ENET_QOS_CLK_GEN_EN);
return set_clk_eqos(ENET_50MHZ);
}関連する Linux dts パーツ imx93-14x14-evk-tja1103.dts は、この設定の基礎として使用されます。
&eqos {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_eqos_rmii>;
phy-mode = "rmii";
phy-handle = <&eqosphy>;
phy-reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
phy-reset-duration = <10>;
assigned-clocks = <&clk IMX93_CLK_ENET_TIMER2>,
<&clk IMX93_CLK_ENET>;
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
assigned-clock-rates = <100000000>, <50000000>;
clk_csr = <5>;
status = "okay";
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <2500000>;
eqosphy: ethernet-phy@0 {
reg = <0>;
compatible = "ethernet-phy-id0007.c0f0", "ethernet-phy-ieee802.3-c22";
smsc,disable-energy-detect;
};
};
};
...
&iomuxc {
pinctrl_eqos_rmii: eqosrmiigrp {
fsl,pins = <
MX93_PAD_ENET1_TD2__CCM_ENET_QOS_CLOCK_GENERATE_REF_CLK 0x4000057e
MX93_PAD_ENET1_MDC__ENET_QOS_MDC 0x57e
MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO 0x57e
MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0 0x57e
MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1 0x57e
MX93_PAD_ENET1_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x57e
MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x57e
MX93_PAD_ENET1_TD1__ENET_QOS_RGMII_TD1 0x57e
MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0 0x57e
MX93_PAD_ENET2_TD2__GPIO4_IO17 0x31e
>;
};
...上記の設定では、ethernet init が imx-dwmac 428a0000 で失敗します。ethernet: dma のリセットに失敗しました
私が欠けているものについて何かヒントはありますか?
小さなアップデート。DTS ファイルをこのように変更して、50MHz クロックを生成する必要があります。
assigned-clock-rates = <100000000>, <50000000>;