From 1c055e55a242a33e574e48be530e06770a210dcd Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 19 Feb 2024 03:26:26 +0000
Subject: [PATCH] add r8169 read mac form eeprom
---
kernel/drivers/devfreq/rockchip_dmc_dbg.c | 304 ++++++++++++++++++++++----------------------------
1 files changed, 133 insertions(+), 171 deletions(-)
diff --git a/kernel/drivers/devfreq/rockchip_dmc_dbg.c b/kernel/drivers/devfreq/rockchip_dmc_dbg.c
index ec9fa3f..80b25e9 100644
--- a/kernel/drivers/devfreq/rockchip_dmc_dbg.c
+++ b/kernel/drivers/devfreq/rockchip_dmc_dbg.c
@@ -74,11 +74,10 @@
struct dram_info {
unsigned int version;
- char dramtype[12];
+ char dramtype[10];
unsigned int dramfreq;
unsigned int channel_num;
struct dram_cap_info ch[2];
- unsigned int dramid[3];
};
static const char * const power_save_msg[] = {
@@ -193,9 +192,9 @@
{
struct arm_smccc_res res;
struct dram_info *p_dram_info;
- struct file *fp = NULL;
- char cur_freq[20] = { 0 };
- char governor[20] = { 0 };
+ struct file *fp = NULL;
+ char cur_freq[20] = {0};
+ char governor[20] = {0};
loff_t pos;
u32 i;
@@ -206,11 +205,6 @@
res.a0);
return -ENOMEM;
}
- if (res.a1) {
- seq_printf(m, "ddrdbg function get dram info error:%lx\n",
- res.a1);
- return -EPERM;
- }
if (!dmcdbg_data.inited_flag) {
seq_puts(m, "dmcdbg_data no int\n");
@@ -219,27 +213,25 @@
p_dram_info = (struct dram_info *)dmcdbg_data.share_memory;
/* dram type information */
- seq_printf(m, "DramType: %s\n", p_dram_info->dramtype);
- if (p_dram_info->version >= 0x2) {
- if ((strcmp(p_dram_info->dramtype, "LPDDR2") == 0) ||
- (strcmp(p_dram_info->dramtype, "LPDDR3") == 0) ||
- (strcmp(p_dram_info->dramtype, "LPDDR4") == 0) ||
- (strcmp(p_dram_info->dramtype, "LPDDR4X") == 0))
- seq_printf(m,
- "Dram ID: MR5=0x%x,MR6=0x%x,MR7=0x%x\n",
- p_dram_info->dramid[0],
- p_dram_info->dramid[1],
- p_dram_info->dramid[2]);
- else
- seq_printf(m, "Dram ID: None\n");
- }
+ seq_printf(m,
+ "DramType: %s\n"
+ ,
+ p_dram_info->dramtype
+ );
+
/* dram capacity information */
- seq_printf(m, "\n"
- "DramCapacity:\n");
+ seq_printf(m,
+ "\n"
+ "DramCapacity:\n"
+ );
for (i = 0; i < p_dram_info->channel_num; i++) {
if (p_dram_info->channel_num == 2)
- seq_printf(m, "Channel [%d]:\n", i);
+ seq_printf(m,
+ "Channel [%d]:\n"
+ ,
+ i
+ );
seq_printf(m,
"CS Count: %d\n"
@@ -249,7 +241,8 @@
"CS0_Row: %d\n"
"CS1_Row: %d\n"
"DieBusWidth: %d bit\n"
- "TotalSize: %d MB\n",
+ "TotalSize: %d MB\n"
+ ,
p_dram_info->ch[i].rank,
p_dram_info->ch[i].buswidth,
p_dram_info->ch[i].col,
@@ -257,7 +250,8 @@
p_dram_info->ch[i].cs0_row,
p_dram_info->ch[i].cs1_row,
p_dram_info->ch[i].die_buswidth,
- p_dram_info->ch[i].size);
+ p_dram_info->ch[i].size
+ );
}
/* check devfreq/dmc device */
@@ -266,8 +260,10 @@
seq_printf(m,
"\n"
"devfreq/dmc: Disable\n"
- "DramFreq: %d\n",
- p_dram_info->dramfreq);
+ "DramFreq: %d\n"
+ ,
+ p_dram_info->dramfreq
+ );
} else {
pos = 0;
kernel_read(fp, cur_freq, sizeof(cur_freq), &pos);
@@ -286,11 +282,15 @@
"\n"
"devfreq/dmc: Enable\n"
"governor: %s\n"
- "cur_freq: %s\n",
- governor, cur_freq);
+ "cur_freq: %s\n"
+ ,
+ governor,
+ cur_freq
+ );
seq_printf(m,
"NOTE:\n"
- "more information about dmc can get from /sys/class/devfreq/dmc.\n");
+ "more information about dmc can get from /sys/class/devfreq/dmc.\n"
+ );
}
return 0;
@@ -340,15 +340,19 @@
}
p_power = (struct power_save_info *)dmcdbg_data.share_memory;
- seq_printf(m, "low power information:\n"
- "\n"
- "[number]name: value\n");
+ seq_printf(m,
+ "low power information:\n"
+ "\n"
+ "[number]name: value\n"
+ );
p_uint = (unsigned int *)p_power;
for (i = 0; i < ARRAY_SIZE(power_save_msg); i++)
seq_printf(m,
- "[%d]%s: %d\n",
- i, power_save_msg[i], *(p_uint + i));
+ "[%d]%s: %d\n"
+ ,
+ i, power_save_msg[i], *(p_uint + i)
+ );
seq_printf(m,
"\n"
@@ -360,7 +364,8 @@
"Support for setting multiple parameters at the same time.\n"
"echo number=value,number=value,... > /proc/dmcdbg/powersave\n"
"eg:\n"
- " echo 0=1,1=32 > /proc/dmcdbg/powersave\n");
+ " echo 0=1,1=32 > /proc/dmcdbg/powersave\n"
+ );
return 0;
}
@@ -497,34 +502,48 @@
}
p_drvodt = (struct drv_odt_info *)dmcdbg_data.share_memory;
- seq_printf(m, "drv and odt information:\n"
- "\n"
- "[number]name: value (ohm)\n");
+ seq_printf(m,
+ "drv and odt information:\n"
+ "\n"
+ "[number]name: value (ohm)\n"
+ );
p_uint = (unsigned int *)p_drvodt;
for (i = 0; i < ARRAY_SIZE(drv_odt_msg); i++) {
if (*(p_uint + (i * 3)) == DRV_ODT_UNKNOWN)
seq_printf(m,
- "[%2d]%s: NULL (unknown) %c\n",
+ "[%2d]%s: NULL (unknown) %c\n"
+ ,
i, drv_odt_msg[i],
- (*(p_uint + (i * 3) + 2) == DRV_ODT_SUSPEND_FIX) ? '\0' : '*');
+ (*(p_uint + (i * 3) + 2) ==
+ DRV_ODT_SUSPEND_FIX) ? '\0' : '*'
+ );
else if (*(p_uint + (i * 3) + 1) == DRV_ODT_UNKNOWN)
seq_printf(m,
- "[%2d]%s: %d (unknown) %c\n",
+ "[%2d]%s: %d (unknown) %c\n"
+ ,
i, drv_odt_msg[i], *(p_uint + (i * 3)),
- (*(p_uint + (i * 3) + 2) == DRV_ODT_SUSPEND_FIX) ? '\0' : '*');
+ (*(p_uint + (i * 3) + 2) ==
+ DRV_ODT_SUSPEND_FIX) ? '\0' : '*'
+ );
else if (i < (ARRAY_SIZE(drv_odt_msg) - 2))
seq_printf(m,
- "[%2d]%s: %d (%d ohm) %c\n",
+ "[%2d]%s: %d (%d ohm) %c\n"
+ ,
i, drv_odt_msg[i], *(p_uint + (i * 3)),
*(p_uint + (i * 3) + 1),
- (*(p_uint + (i * 3) + 2) == DRV_ODT_SUSPEND_FIX) ? '\0' : '*');
+ (*(p_uint + (i * 3) + 2) ==
+ DRV_ODT_SUSPEND_FIX) ? '\0' : '*'
+ );
else
seq_printf(m,
- "[%2d]%s: %d (%d %%) %c\n",
+ "[%2d]%s: %d (%d %%) %c\n"
+ ,
i, drv_odt_msg[i], *(p_uint + (i * 3)),
*(p_uint + (i * 3) + 1),
- (*(p_uint + (i * 3) + 2) == DRV_ODT_SUSPEND_FIX) ? '\0' : '*');
+ (*(p_uint + (i * 3) + 2) ==
+ DRV_ODT_SUSPEND_FIX) ? '\0' : '*'
+ );
}
seq_printf(m,
@@ -539,7 +558,8 @@
"eg: set soc side ca drv up and down to 20\n"
" echo 6=20,7=20 > /proc/dmcdbg/drvodt\n"
"Note: Please update both up and down at the same time.\n"
- " (*) mean unsupported setting value\n");
+ " (*) mean unsupported setting value\n"
+ );
return 0;
}
@@ -674,20 +694,28 @@
return -EPERM;
}
- seq_printf(m, "de-skew information:\n"
- "\n"
- "[group_number]name: value\n");
+ seq_printf(m,
+ "de-skew information:\n"
+ "\n"
+ "[group_number]name: value\n"
+ );
for (group = 0; group < dmcdbg_data.skew_group_num; group++) {
if (dmcdbg_data.skew_group[group].note != NULL)
- seq_printf(m, "%s\n",
- dmcdbg_data.skew_group[group].note);
+ seq_printf(m,
+ "%s\n"
+ ,
+ dmcdbg_data.skew_group[group].note
+ );
p_uint = (unsigned int *)dmcdbg_data.skew_group[group].p_skew_info;
for (i = 0; i < dmcdbg_data.skew_group[group].skew_num; i++)
- seq_printf(m, "[%c%d_%d]%s: %d\n",
- (i < 10) ? ' ' : '\0', group, i,
- dmcdbg_data.skew_group[group].p_skew_timing[i],
- *(p_uint + i));
+ seq_printf(m,
+ "[%c%d_%d]%s: %d\n"
+ ,
+ (i < 10) ? ' ' : '\0', group, i,
+ dmcdbg_data.skew_group[group].p_skew_timing[i],
+ *(p_uint + i)
+ );
}
seq_printf(m,
@@ -700,7 +728,8 @@
"Support for setting multiple parameters simultaneously.\n"
"echo group_number=value,group_number=value,... > /proc/dmcdbg/deskew\n"
"eg:\n"
- " echo 0_1=8,1_2=8 > /proc/dmcdbg/deskew\n");
+ " echo 0_1=8,1_2=8 > /proc/dmcdbg/deskew\n"
+ );
return 0;
}
@@ -847,13 +876,18 @@
}
p_regsinfo = (struct registers_info *)dmcdbg_data.share_memory;
- seq_printf(m, "registers base address information:\n"
- "\n");
+ seq_printf(m,
+ "registers base address information:\n"
+ "\n"
+ );
for (i = 0; i < p_regsinfo->regs_num; i++) {
- seq_printf(m, "%s=0x%x\n",
+ seq_printf(m,
+ "%s=0x%x\n"
+ ,
p_regsinfo->regs[i].regs_name,
- p_regsinfo->regs[i].regs_addr);
+ p_regsinfo->regs[i].regs_addr
+ );
}
return 0;
@@ -870,56 +904,6 @@
.llseek = seq_lseek,
.release = single_release,
};
-
-static int rk_dmcdbg_sip_smc_match_ver(struct platform_device *pdev,
- u32 match_ver)
-{
- struct arm_smccc_res res;
-
- /* check ddr_debug_func version */
- res = sip_smc_dram(0, DDRDBG_FUNC_GET_VERSION,
- ROCKCHIP_SIP_CONFIG_DRAM_DEBUG);
- dev_notice(&pdev->dev, "current ATF ddr_debug_func version 0x%lx.\n",
- res.a1);
- /*
- * [15:8] major version, [7:0] minor version
- * major version must match both kernel dmcdbg and ATF ddr_debug_func.
- */
- if (res.a0 || res.a1 < match_ver || ((res.a1 & 0xff00) != (match_ver & 0xff00))) {
- dev_err(&pdev->dev,
- "version invalid, need update to 0x%x or newer, the major version unmatch!\n",
- match_ver);
-
- return -ENXIO;
- }
-
- return 0;
-}
-
-static int proc_dmcdbg_init(struct platform_device *pdev)
-{
- struct arm_smccc_res res;
-
- /* request share memory for pass parameter */
- res = sip_smc_request_share_mem(DMCDBG_PAGE_NUMS,
- SHARE_PAGE_TYPE_DDRDBG);
- if (res.a0 != 0) {
- dev_err(&pdev->dev, "request share mem error!\n");
- return -ENOMEM;
- }
-
- dmcdbg_data.share_memory = (void __iomem *)res.a1;
- dmcdbg_data.inited_flag = 1;
-
- /* create parent dir in /proc */
- proc_dmcdbg_dir = proc_mkdir(PROC_DMCDBG_DIR_NAME, NULL);
- if (!proc_dmcdbg_dir) {
- dev_err(&pdev->dev, "create proc dir error!\n");
- return -ENOENT;
- }
-
- return 0;
-}
static int proc_regsinfo_init(void)
{
@@ -984,18 +968,42 @@
static __maybe_unused int rv1126_dmcdbg_init(struct platform_device *pdev,
struct rockchip_dmcdbg *dmcdbg)
{
- u32 version = 0x102;
- int ret;
+ struct arm_smccc_res res;
- ret = rk_dmcdbg_sip_smc_match_ver(pdev, version);
- if (ret)
- return ret;
+ /* check ddr_debug_func version */
+ res = sip_smc_dram(0, DDRDBG_FUNC_GET_VERSION,
+ ROCKCHIP_SIP_CONFIG_DRAM_DEBUG);
+ dev_notice(&pdev->dev, "current ATF ddr_debug_func version 0x%lx.\n",
+ res.a1);
+ /*
+ * [15:8] major version, [7:0] minor version
+ * major version must match both kernel dmcdbg and ATF ddr_debug_func.
+ */
+ if (res.a0 || res.a1 < 0x101 || ((res.a1 & 0xff00) != 0x100)) {
+ dev_err(&pdev->dev,
+ "version invalid,need update,the major version unmatch!\n");
+ return -ENXIO;
+ }
- ret = proc_dmcdbg_init(pdev);
- if (ret)
- return ret;
+ /* request share memory for pass parameter */
+ res = sip_smc_request_share_mem(DMCDBG_PAGE_NUMS,
+ SHARE_PAGE_TYPE_DDRDBG);
+ if (res.a0 != 0) {
+ dev_err(&pdev->dev, "request share mem error\n");
+ return -ENOMEM;
+ }
+
+ dmcdbg_data.share_memory = (void __iomem *)res.a1;
+ dmcdbg_data.inited_flag = 1;
rv1126_get_skew_parameter();
+
+ /* create parent dir in /proc */
+ proc_dmcdbg_dir = proc_mkdir(PROC_DMCDBG_DIR_NAME, NULL);
+ if (!proc_dmcdbg_dir) {
+ dev_err(&pdev->dev, "create proc dir error!");
+ return -ENOENT;
+ }
proc_dmcinfo_init();
proc_powersave_init();
@@ -1005,54 +1013,8 @@
return 0;
}
-static __maybe_unused int px30_dmcdbg_init(struct platform_device *pdev,
- struct rockchip_dmcdbg *dmcdbg)
-{
- u32 version = 0x101;
- int ret;
-
- ret = rk_dmcdbg_sip_smc_match_ver(pdev, version);
- if (ret)
- return ret;
-
- ret = proc_dmcdbg_init(pdev);
- if (ret)
- return ret;
-
- proc_dmcinfo_init();
-
- return 0;
-}
-
-static __maybe_unused int rk3568_dmcdbg_init(struct platform_device *pdev,
- struct rockchip_dmcdbg *dmcdbg)
-{
- u32 version = 0x101;
- int ret;
-
- ret = rk_dmcdbg_sip_smc_match_ver(pdev, version);
- if (ret)
- return ret;
-
- ret = proc_dmcdbg_init(pdev);
- if (ret)
- return ret;
-
- proc_dmcinfo_init();
-
- return 0;
-}
-
static const struct of_device_id rockchip_dmcdbg_of_match[] = {
-#ifdef CONFIG_CPU_PX30
- { .compatible = "rockchip,px30-dmcdbg", .data = px30_dmcdbg_init },
-#endif
-#ifdef CONFIG_CPU_RV1126
- { .compatible = "rockchip,rv1126-dmcdbg", .data = rv1126_dmcdbg_init },
-#endif
-#ifdef CONFIG_CPU_RK3568
- { .compatible = "rockchip,rk3568-dmcdbg", .data = rk3568_dmcdbg_init },
-#endif
+ { .compatible = "rockchip,rv1126-dmcdbg", .data = rv1126_dmcdbg_init},
{ },
};
MODULE_DEVICE_TABLE(of, rockchip_dmcdbg_of_match);
--
Gitblit v1.6.2