精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RK3588編解碼盒子之RTL8211FS-CG光口調試

jf_30051736 ? 來源:jf_30051736 ? 作者:jf_30051736 ? 2023-06-10 09:00 ? 次閱讀

?

1. 簡介

  • 本文是基于RK3588平臺,SDK版本:RK3588_ANDROID12.0 RTL8211FS-CG光口調試總結。
  • 視頻橋接芯片:RTL8211FS-CG
  • 驅動代碼:"kernel/drivers/net/phy/realtek.c"
  • 本次調試的方案功能:RK3588 調試RTL8211FS-CG 轉接出光口

2. 硬件部分

硬件工程師參考RTL8211FS-CG發布的設計圖設計

以下為部分截圖

在設計過程中參考realtek發過的參考設計,建議咨詢一下phy廠家,看有哪些注意地方

注意: 8211FS使用外部3.3V,電平要與主控GMAC1相匹配;

使用UTP<->RGMII的接法,且CFG_MODE2:0=010兼容光口和電口;

3. 軟件部分

建議先調電口RJ45,調通后再接光口,可能更容易;調電口時先插百兆網線調百兆,成功后再換千兆網線

3.1 代碼

3.1.1 Realtek phy的內核配置

在kernel下輸入make menuconfig

Device Drivers  --- >

[*] Network device support  --- >

-*-   PHY Device support and infrastructure  --- >

 -*-   Realtek PHYs

這樣realtek.c就可以編譯到kernel了

3.1.2 dts配置

&gmac1 {
    /* Use rgmii-rxid mode to disable rx delay inside Soc */
    phy-mode = "rgmii-rxid";
    clock_in_out = "output";

    snps,reset-gpio = < &gpio3 RK_PB7 GPIO_ACTIVE_LOW >;
    snps,reset-active-low;
    /* Reset time is 20ms, 100ms for rtl8211f */
    snps,reset-delays-us = < 0 20000 100000 >;

    pinctrl-names = "default";
    pinctrl-0 = < &gmac1_miim
             &gmac1_tx_bus2
             &gmac1_rx_bus2
             &gmac1_rgmii_clk
             &gmac1_rgmii_bus
             &gmac1_clkinout >;

    tx_delay = < 0x43 >;
    /* rx_delay = < 0x4f >; */

    phy-handle = < &rgmii_phy1 >;
    status = "okay";
};

&mdio1 {
    rgmii_phy1: phy@1 {
        compatible = "ethernet-phy-ieee802.3-c22";
        reg = < 0x1 >;
    };
};

3.1.3 代碼驗證

插千兆網線有相關打印且可以ping通百度

此時插光口沒有分配IP地址

3.1.4 調試

打開IO調試命令

CONFIG_DEVMEM=y

3.1.5 操作寄存器

find /sys -name phy_registers //先找到以太網寄存器的配置節點并進入所在目錄

echo 31 0xdc0 >phy_registers //切換到PHY的PAGE 0xdc0

cat phy_registers //讀取當前PAGE寄存器的值,核對PHYID1,PHYID2是否正確來確認寄存器是否正確

echo 0 0x value >phy_registers //改寫PAGE00個寄存器的值為需要的value

cat phy_registers //讀取值檢查是否修改成功

echo 31 0 > phy_registers //切回到PAGE0寄存器!!!!重要,一定寫完要切回來才會生效

如果修改無效,參閱PHY規格書的8.5章節修改

3.1.6 將芯片強制固定光口模式

setup_fiber_mode

#endif
+static int phy_8211fS_fiber_mode_fixup(struct phy_device *phydev)
+{	int i;
+	printk("%s in\\\\n", __func__);
+	phy_write(phydev, 31, 0xdc0 );
+   phy_write(phydev, 16, 0x79ad );
+   //phy_write(phydev, 20, 0x79ad );
+	printk("page 0xdc0 register\\\\n");
+	for(i =0; i< 8,i++)
+		printk("%d: %x\\\\n",i,phy_read(phydev,i));
+    phy_write(phydev, 31, 0xdc1 );
+   printk("23: %x\\\\n", phy_read(phydev,23));
+   phy_write(phydev, 31, 0x0 );
+   printk("page 0 register\\\\n");
+	for(i =0; i< 32,i++)
+		printk("%d: %x\\\\n",i,phy_read(phydev,i));
+	
+	return 0;
+}
/**
 * stmmac_dvr_probe
 * @device: device pointer
#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
	INIT_DELAYED_WORK(&priv- >scan_dwork, stmmac_scan_delayline_dwork);
#endif
+	ret = phy_register_fixup_for_uid(RTL_8211FS_PHY_ID, 0xffffffff, +phy_8211fS_fiber_mode_fixup);
+	if (ret)
+		pr_warn("Cannot register PHY board fixup.\\\\n");
	return ret;
error_netdev_register:

編譯燒寫之后網口燈狀態已經變為光口模式了,此時插入光口還是無法分配IP地址

3.1.7 補丁

--- a/kernel/drivers/net/phy/realtek.c
+++ b/kernel/drivers/net/phy/realtek.c
@@ -46,6 +46,11 @@
 #define RTL8366RB_POWER_SAVE			0x15
 #define RTL8366RB_POWER_SAVE_ON			BIT(12)
 
+#define RTL8211FS_FIBER_ESR			0x0F
+#define RTL8211FS_MODE_MASK			0xC000
+#define RTL8211F_MODE_COPPER		0
+#define RTL8211FS_MODE_FIBER		1
+
 #define RTL_SUPPORTS_5000FULL			BIT(14)
 #define RTL_SUPPORTS_2500FULL			BIT(13)
 #define RTL_SUPPORTS_10000FULL			BIT(0)
@@ -58,6 +63,10 @@
 
 #define RTL_GENERIC_PHYID			0x001cc800
 
+struct rtl8211f_priv {
+	int lastmode;
+};
+
 MODULE_DESCRIPTION("Realtek PHY driver");
 MODULE_AUTHOR("Johnson Leung");
 MODULE_LICENSE("GPL");
@@ -93,7 +102,6 @@ static int rtl821x_ack_interrupt(struct phy_device *phydev)
 static int rtl8211f_ack_interrupt(struct phy_device *phydev)
 {
 	int err;
-
 	err = phy_read_paged(phydev, 0xa43, RTL8211F_INSR);
 
 	return (err < 0) ? err : 0;
@@ -140,7 +148,6 @@ static int rtl8211e_config_intr(struct phy_device *phydev)
 static int rtl8211f_config_intr(struct phy_device *phydev)
 {
 	u16 val;
-
 	if (phydev- >interrupts == PHY_INTERRUPT_ENABLED)
 		val = RTL8211F_INER_LINK_STATUS;
 	else
@@ -242,7 +249,7 @@ static int rtl8211f_config_init(struct phy_device *phydev)
 			"2ns RX delay was already %s (by pin-strapping RXD0 or bootloader configuration)\\\\n",
 			val_rxdly ? "enabled" : "disabled");
 	}
-
+	
 	return 0;
 }
 
@@ -560,6 +567,89 @@ static int rtlgen_resume(struct phy_device *phydev)
 	return ret;
 }
 
+static int rtl8211f_probe(struct phy_device *phydev)
+{
+	struct device *dev = &phydev- >mdio.dev;
+	struct rtl8211f_priv *priv;
+
+	priv = devm_kzalloc(dev, sizeof(struct rtl8211f_priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+	
+	phydev- >priv = priv;
+
+	return 0;
+}
+
+static void rtl8211f_remove(struct phy_device *phydev)
+{
+	struct device *dev = &phydev- >mdio.dev;
+	struct rtl8211f_priv *priv = phydev- >priv;
+
+	if (priv)
+		devm_kfree(dev, priv);
+}
+
+static int rtl8211f_mode(struct phy_device *phydev)
+{
+	u16 val;
+
+	val = phy_read(phydev, RTL8211FS_FIBER_ESR);
+	val &= RTL8211FS_MODE_MASK;
+
+	if(val)
+		return RTL8211FS_MODE_FIBER;
+	else
+		return RTL8211F_MODE_COPPER;
+}
+
+static int rtl8211f_config_aneg(struct phy_device *phydev)
+{
+	int ret;
+
+	struct rtl8211f_priv *priv = phydev- >priv;
+
+	ret = genphy_read_abilities(phydev);
+	if(ret < 0)
+		return ret;
+
+	linkmode_copy(phydev- >advertising, phydev- >supported);
+
+	if (rtl8211f_mode(phydev) == RTL8211FS_MODE_FIBER) {
+		dev_info(&phydev- >mdio.dev, "Fiber Mode");
+		priv- >lastmode = RTL8211FS_MODE_FIBER;
+		return genphy_c37_config_aneg(phydev);
+	}
+
+	dev_info(&phydev- >mdio.dev, "Copper Mode");
+
+	priv- >lastmode = RTL8211F_MODE_COPPER;
+
+	return genphy_config_aneg(phydev);
+}
+
+static int rtl8211f_read_status(struct phy_device *phydev)
+{
+	int ret;
+	struct rtl8211f_priv *priv = phydev- >priv;
+
+	if(rtl8211f_mode(phydev) != priv- >lastmode) {
+		ret = rtl8211f_config_aneg(phydev);
+		if(ret < 0)
+			return ret;
+
+		ret = genphy_restart_aneg(phydev);
+		if(ret < 0)
+			return ret;
+	}
+
+	if (rtl8211f_mode(phydev) == RTL8211FS_MODE_FIBER)
+		return genphy_c37_read_status(phydev);
+
+	return genphy_read_status(phydev);
+}
+
+
 static struct phy_driver realtek_drvs[] = {
 	{
 		PHY_ID_MATCH_EXACT(0x00008201),
@@ -632,10 +722,15 @@ static struct phy_driver realtek_drvs[] = {
 		.write_page	= rtl821x_write_page,
 	}, {
 		PHY_ID_MATCH_EXACT(0x001cc916),
-		.name		= "RTL8211F Gigabit Ethernet",
+		// .name		= "RTL8211F Gigabit Ethernet",
+		.name		= "RTL8211F(S) Gigabit Ethernet",
+		.probe		= rtl8211f_probe,
+		.remove		= rtl8211f_remove,		
 		.config_init	= &rtl8211f_config_init,
 		.ack_interrupt	= &rtl8211f_ack_interrupt,
 		.config_intr	= &rtl8211f_config_intr,
+		.config_aneg	= rtl8211f_config_aneg,
+		.read_status	= rtl8211f_read_status,		
 		.suspend	= genphy_suspend,
 		.resume		= rtl821x_resume,
 		.read_page	= rtl821x_read_page,

將補丁加進去

上電之后再復位reset腳一次可以識別到光口了

3.1.7 phy reset

io -4 0xFEC40000 0x80000000 拉低

sleep 0.1

io -4 0xFEC40000 0x80008000 拉高

RTL8211F(S) Gigabit Ethernet stmmac-1:01: Copper Mode

總結

RTL8211FS,只要硬件線路配置為RGMII to Fiber 等涉及到Fiber的模式,即可工作。Fiber相關的模式設定可參考RTL8211FS數據手冊中寄存器描述,公司推動 realtek 跟進解決。

在這里插入圖片描述

?
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電路板
    +關注

    關注

    140

    文章

    4905

    瀏覽量

    97407
  • 調試
    +關注

    關注

    7

    文章

    572

    瀏覽量

    33897
  • 編解碼
    +關注

    關注

    1

    文章

    140

    瀏覽量

    19597
  • RK3588
    +關注

    關注

    6

    文章

    312

    瀏覽量

    4221
收藏 人收藏

    評論

    相關推薦

    瑞芯微RK3588開發板RK3588 EVB和RK3588S EVB解讀

    瑞芯微RK3588開發板RK3588 EVB和RK3588S EVB解讀 瑞芯微旗艦芯RK3588系列開發板受到廣大開發者伙伴的關注和問詢。針對相關的開發板功能、操作指南等問題,我們一
    的頭像 發表于 09-22 15:54 ?1.7w次閱讀
    瑞芯微<b class='flag-5'>RK3588</b>開發板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解讀

    RK3588-Camera:MIPI-CSI調試通路解析

    RK3588-Camera:MIPI-CSI調試通路解析
    的頭像 發表于 06-10 10:29 ?4976次閱讀
    <b class='flag-5'>RK3588</b>-Camera:MIPI-CSI<b class='flag-5'>調試</b><b class='flag-5'>之</b>通路解析

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSILCD上電初始化時序

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSILCD上電初始化時序
    的頭像 發表于 06-10 10:32 ?4294次閱讀

    RK3588-WIF/BT調試AP6256

    RK3588-WIF/BT調試AP6256
    的頭像 發表于 06-10 10:33 ?3523次閱讀
    <b class='flag-5'>RK3588</b>-WIF/BT<b class='flag-5'>調試</b><b class='flag-5'>之</b>AP6256

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSI屏參配置

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSI屏參配置
    的頭像 發表于 06-10 10:36 ?2131次閱讀
    <b class='flag-5'>RK3588</b>-MIPI屏幕<b class='flag-5'>調試</b>筆記:<b class='flag-5'>RK3588</b>-MIPI-DSI<b class='flag-5'>之</b>屏參配置

    RK3588芯片支持8K視頻的硬編解碼

    RK3588芯片的性能輸出。RK3588在視頻編解碼方面也十分突出,支持8K視頻的硬編硬解,非常適合VR(虛擬現實)、AR(增強現實)、MR(混合現實)和XR(拓展現實)類的產品,可滿足高端娛樂
    發表于 07-28 15:59

    RTL8211F-CGRTL8211D-CG芯片規格書pdf下載

    RTL8211F-CGRTL8211D-CG芯片規格書
    發表于 03-08 11:49 ?105次下載

    RK3588RK3588S之間的區別是什么

    的通用型ARM SoC芯片,芯片性能也十分均衡,視頻解碼能力十分突出,在影音領域將會有廣泛的應用,豐富的接口也十分適合行業客戶的定制開發。因此,RK3588是面向高端的行業應用,而RK3588S框架
    發表于 03-10 19:22 ?2.7w次閱讀

    RTL8211FS以太網光電精密收發器手冊

    Realtek RTL8211FS-CG/RTL8211FS-VS-CG/RTL8211FSI-CG/RTL8211FSI-VS-CG是一款高度可靠的產品符合10Base-T、100B
    發表于 05-11 14:22 ?81次下載

    RTL8211英文完整手冊

    Realtek RTL8211FS-CG/RTL8211FS-VS-CG/RTL8211FSI-CG/RTL8211FSI-VS-CG是高度符合10Base-T、100Base-TX
    發表于 05-23 17:49 ?59次下載

    瑞昱RTL8211FS集成10/100/1000M以太網精密收發器

    ReaLTEk RTL8211FS-CG/RTL8211FS-VS-CG/RTL8211FSI-CG/RTL8211FSI-VS-CG是一款高度集成的以太網收發器,兼容10ba
    發表于 06-15 14:36 ?29次下載

    RTL8211F(I)-CG_RTL8211FD(I)-CG.P以太網收發器

    Realtek RTL8211F-CG/RTL8211D-CG/RTL 8211FI-CG/RTL8211FDI-CG是一款高度集成的符合1
    發表于 05-15 10:16 ?65次下載

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSI

    RK3588-MIPI屏幕調試筆記:RK3588-MIPI-DSI
    的頭像 發表于 06-10 10:31 ?3653次閱讀
    <b class='flag-5'>RK3588</b>-MIPI屏幕<b class='flag-5'>調試</b>筆記:<b class='flag-5'>RK3588</b>-MIPI-DSI

    rk3588rk3588s的區別

    rk3588rk3588s的區別 Rockchip是一家專業的半導體公司,成立于2001年,總部位于中國深圳,主要從事集成電路的設計、開發和銷售。他們的熱門產品RK3588RK3588
    的頭像 發表于 08-15 16:44 ?1.4w次閱讀

    RK3588-MPP解碼詳解

    一.簡介[RK3588從入門到精通]專欄總目錄本篇文章進行RK3588-MPP解碼的詳細解析二.環境介紹硬件環境:ArmSoM-W3RK3588開發板軟件版本:OS
    的頭像 發表于 11-21 11:04 ?1571次閱讀
    <b class='flag-5'>RK3588</b>-MPP<b class='flag-5'>解碼</b>詳解