【无标题】华硕tinkerboard 2s uboot下网络及emmc问题
1、uboot源码下载:
https://github.com/TinkerBoard2/u-boot
tinkerboard 2s相关资料汇总:
https://smartfire.cn/forum.php?mod=viewthread&tid=5240&highlight=tinker%2Bboard%2Bs
2、uboot下tftp 网络不通
原因为网络GMAC的时钟由CPU提供,dts配置按照输入配置,其次时钟频率配置并非125M,具体修改如下:
diff --git a/arch/arm/dts/rk3399-evb.dts b/arch/arm/dts/rk3399-evb.dts
index 7bb0688..abc2748 100644
--- a/arch/arm/dts/rk3399-evb.dts
+++ b/arch/arm/dts/rk3399-evb.dts
@@ -364,18 +364,19 @@
};
&gmac {
- phy-supply = <&vcc_phy>;
+ phy-supply = <&vcc3v3_sys>;
phy-mode = "rgmii";
- clock_in_out = "input";
+ clock_in_out = "output";
+ assigned-clock-rates = <125000000>;
snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 50000>;
assigned-clocks = <&cru SCLK_RMII_SRC>;
- assigned-clock-parents = <&clkin_gmac>;
+ assigned-clock-parents = <&cru SCLK_MAC>;
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
- tx_delay = <0x28>;
- rx_delay = <0x11>;
+ tx_delay = <0x25>;
+ rx_delay = <0x20>;
status = "okay";
};
diff --git a/arch/arm/include/asm/arch-rockchip/cru_rk3399.h b/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
index 55d09af..4d60bc5 100644
--- a/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
+++ b/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
@@ -81,7 +81,7 @@ check_member(rk3399_cru, sdio1_con[1], 0x594);
#define APLL_HZ (600*MHz)
#define GPLL_HZ (800 * MHz)
#define CPLL_HZ (384*MHz)
-#define NPLL_HZ (600 * MHz)
+#define NPLL_HZ (625 * MHz)
#define PPLL_HZ (676*MHz)
#define PMU_PCLK_HZ (48*MHz)
diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
index 3e59105..a78ee1d 100644
--- a/arch/arm/mach-rockchip/Kconfig
+++ b/arch/arm/mach-rockchip/Kconfig
@@ -722,7 +722,7 @@ config ROCKCHIP_VENDOR_PARTITION
config USING_KERNEL_DTB
bool "Using dtb from Kernel/resource for U-Boot"
depends on RKIMG_BOOTLOADER && OF_LIVE
- default y
+ default n
help
This enable support to read dtb from resource and use it for U-Boot,
the uart and emmc will still using U-Boot dtb, but other devices like
diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c
index cce0b48..284c96c 100644
--- a/drivers/clk/rockchip/clk_rk3399.c
+++ b/drivers/clk/rockchip/clk_rk3399.c
@@ -171,6 +171,15 @@ enum {
ACLK_PERIHP_DIV_CON_SHIFT = 0,
ACLK_PERIHP_DIV_CON_MASK = 0x1f,
+ /* CLKSEL_CON20 */
+ GMAC_PLL_SHIFT = 14,
+ GMAC_PLL_MASK = 0x3,
+ GMAC_PLL_SELECT_CPLL = 0x0,
+ GMAC_PLL_SELECT_GPLL = 0x1,
+ GMAC_PLL_SELECT_NPLL = 0x2,
+ GMAC_DIV_CON_MASK = GENMASK(12, 8),
+ GMAC_DIV_CON_SHIFT = 0x8,
+
/* CLKSEL_CON21 */
ACLK_EMMC_PLL_SEL_SHIFT = 7,
ACLK_EMMC_PLL_SEL_MASK = 0x1 << ACLK_EMMC_PLL_SEL_SHIFT,
@@ -897,8 +906,47 @@ static ulong rk3399_gmac_set_clk(struct rk3399_cru *cru, ulong rate)
* Implement this once it becomes necessary and print an error
* if someone tries to use it (while it remains unimplemented).
*/
- pr_err("%s: internal clock is UNIMPLEMENTED\n", __func__);
- ret = 0;
+ pr_err("go %s: internal clock is UNIMPLEMENTED\n", __func__);
+
+
+ u32 con = readl(&cru->clksel_con[20]);
+ ulong pll_rate;
+ u8 div;
+
+ if (((con >> GMAC_PLL_SHIFT) & GMAC_PLL_MASK) ==
+ GMAC_PLL_SELECT_CPLL){
+ printf("zeng CPLL\n");
+ pll_rate = CPLL_HZ;
+ }
+ else if (((con >> GMAC_PLL_SHIFT) & GMAC_PLL_MASK) ==
+ GMAC_PLL_SELECT_GPLL){
+ printf("zeng GPLL\n");
+ pll_rate = GPLL_HZ;
+ }
+ else if (((con >> GMAC_PLL_SHIFT) & GMAC_PLL_MASK) ==
+ GMAC_PLL_SELECT_NPLL){
+ printf("zeng NPLL\n");
+ pll_rate = NPLL_HZ;
+ }
+ else if (((con >> GMAC_PLL_SHIFT) & 0x3) ==
+ GMAC_PLL_SELECT_NPLL){
+ printf("zeng NPLL\n");
+ pll_rate = NPLL_HZ;
+ }
+ else /* CPLL is not set */{
+ printf("zeng error!\n");
+ return -EPERM;
+ }
+
+ div = DIV_ROUND_UP(pll_rate, rate) - 1;
+ printf("zeng:div=%x\n",div);
+ if (div <= 0x1f)
+ rk_clrsetreg(&cru->clksel_con[20], GMAC_DIV_CON_MASK,
+ div << GMAC_DIV_CON_SHIFT);
+ else
+ debug("Unsupported div for gmac:%d\n", div);
+
+ return DIV_TO_RATE(pll_rate, div);
}
return ret;
@@ -1002,6 +1050,7 @@ static ulong rk3399_tsadc_set_clk(struct rk3399_cru *cru, uint hz)
return rk3399_tsadc_get_clk(cru);
}
3、uboot下mmc命令写emmc报错:
Writing to MMC(0)... sdhci_transfer_data: Error detected in status(0x608000)!
MMC error: The cmd index is 25, ret is -70
mmc write failed
原因驱动没有对emmc的phy进行初始化设置,修改如下:
diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
index 378eb97..ceddd00 100644
--- a/drivers/mmc/rockchip_sdhci.c
+++ b/drivers/mmc/rockchip_sdhci.c
@@ -91,6 +91,11 @@ struct sdhci_data {
static int rk3399_emmc_phy_init(struct udevice *dev)
{
+ struct rockchip_sdhc *priv = dev_get_priv(dev);
+
+ writel(0xFFFF3B00, &priv->phy->emmcphy_con[0]);
+ writel(0xFFFF03FF, &priv->phy->emmcphy_con[2]);
+ writel(0xFFFF01FF, &priv->phy->emmcphy_con[3]);
return 0;
}
--
【无标题】华硕tinkerboard 2s uboot下网络及emmc问题相关推荐
- 华硕tinkerboard 2s Android11系列-bootloader部分的编译
前一篇<第一款能运行Android11 的RK3399开发板tinkerboard2>已经对tinkerboard2的Android 11有个大致的介绍,这一期来聊聊tinkerboard ...
- t4240 uboot下网络调试(88e1111)
目前有两个网口,分别从t4240的EC1, EC2出来连接的88e1111 phy芯片.其中一个phy接rj45从板子直出,另一个是过背板的(后面再说). marvell的phy驱动在uboot下dr ...
- uboot下tftp下载文件失败的排查步骤
1.排查步骤 (1)网线是否已经插上单板并连接正常; (2)可以先把网线插到其他设备上,确认网线是否可以正常工作; (3)确认单板与PC之间是否是网络直连:如果不是网络直连,则要先尝试去ping网关地 ...
- mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法
步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...
- linux网络驱动rtl8211f,RTL8211F在uboot下使用mii工具配置RJ45网口灯详解
RTL8211F在uboot下使用mii工具配置RJ45网口灯详解. 首先要明确使用这个工具的目的,类似于i2c-test工具测试i2c,使用这个工具验证测试网口灯的配置.然后再通过软件或者驱动来实现 ...
- Linux下网络流量实时监控工具 大全
Linux下网络流量实时监控工具 大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且 有时候打开监控 ...
- Linux下网络流量实时监控工具大全
Linux下网络流量实时监控工具 大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且有时候打开监控页 ...
- Android 无标题 全屏设置
Android 无标题 全屏设置 标题栏和状态栏 Android程序默认情况下是包含状态栏和标题栏的. 在Eclipse中新建一个Android程序,运行后显示如下: 图中标出了状态栏(显示时间.电池 ...
- 03 TI OMAPL138E Linux移植 (Davinci) (资源获取+从串口启动UBoot+从网络启动Linux与文件系统)
Date: 2018-02-08 [1.从实际硬件上获取主芯片型号为TI的OMAPL138E ],所属系列为OMAPL1,编译默认配置为davinci或者da850. <以下内容失效>&l ...
最新文章
- 计算机虚拟网络毕业论文,计算机毕业论文——基于WEB的虚拟计算机网络实验平台.doc...
- 2022秋招算法岗卷成人间地狱!高薪惹眼,招录比100:1
- 人工智能电磁车模如何入手?
- Keil5报错:error: more than one instance overload function “xx“ has C linkage
- invalid argument 0: Sizes of tensors must match except in dimension 0. Got 1
- 使用String.format简化代码
- 调用 GetProcAddress 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET...
- 网友爆料乘顺风车被司机拿刀砍伤:或面临截肢危险...
- java回收内存_JAVA之内存回收
- 机器人学中的状态估计 中文版_机器人学——学习笔记18(Minpulator Traj Planning Example)...
- 国外手机短信验证码接收神器(转自美国华人网FuninUSA)
- 软件工程7条基本原理
- 快速实现win11恢复win10系统 分享无损恢复win10系统
- MT4 DDE数据交换
- 打开新材料世界的大门:拓扑电子材料目录问世
- Pingouin: 基于pandas和numpy的统计包
- Android程序员必看,资深Android面试题
- 计算机无法连接到手机热点,电脑搜不到手机的热点是为什么_电脑无法发现手机热点的处理方法...
- android_图片转视频_image2video
- mip-NeRF代码debug