Driver này không hoạt động trên 3000c nhé
cái này là đương nhiên rồi, phải port sang cho AX3000C. Nhưng logic để cho con YT9215 hoạt động thì driver này có đủ rồi. Theo datasheet của 2 con này(ipq5018 và yt9215s) thì chỉ có 1 trong 2 kiểu setup do nhà sx chọn thôi là dual link giữa ipq5018 và yt9215s hoặc single link(2.5Gbps chính + 1Gbps phụ/fall back hoặc chỉ 2.5Gbps) Driver này cũng là do ng ta dịch ngược cái driver của xào mì nên có hạn chế là khi dùng với QSDK thì uplink YT9215<>IPQ5018 2.5Gbps chỉ lên đc 1Gbps do bọn xào mì nó custom QSDK lại nên tác giả đang bó tay và không hỗ trợ dual link do driver xào mì cũng chỉ set up single up link dù trong DTS setup dual up link như thật

P/S : Bác nào có Chatgpt Codex thì bảo nó dịch ngược driver của hãng trước để lấy procedure call để biết logic của driver của hãng, rồi bảo Codex nó áp logic đấy, sửa lại cái driver của yangfl và sửa lại DTS của thiết bị rồi test driver thôi, failed ở đâu thì bảo Codex nó sửa ở đấy. Mình thử dùng Codex rồi, có datasheet(hardware+software) thôi là nó viết đc driver mới luôn ý( đương nhiên là không ngon = dev nhưng ít nhất chạy đc ở mức sơ khai)
P/S 2: Driver của Yangfl đã nói rõ là không hoạt động ở speed 2500, Up link của YT9215s lên, đã nhận Switch nhưng các port đều bị tình trạng TX<OK>/RX<BROKEN> thì chủ thớt có thể giảm nó xuống 1000 + SGMII thay cho 2500 + BaseX để test.
---target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax3000cv2.dts:
/* YT9215 CPU-facing port */
ethernet-port@8 {
reg = <8>;
phy-mode = "sgmii";
ethernet = <&dp2>;
fixed-link {
speed = <1000>; /* set speed here */
full-duplex;
pause;
asym-pause;
};
};
&dp2 {
status = "okay";
label = "lan";
fixed-link {
speed = <1000>; /* keep same speed as port@8 */
full-duplex;
pause;
asym-pause;
};
};
Reactions:
jeremienguyen
cái này là đương nhiên rồi, phải port sang cho AX3000C. Nhưng logic để cho con YT9215 hoạt động thì driver này có đủ rồi. Theo datasheet của 2 con này(ipq5018 và yt9215s) thì chỉ có 1 trong 2 kiểu setup do nhà sx chọn thôi là dual link giữa ipq5018 và yt9215s hoặc single link(2.5Gbps chính + 1Gbps phụ/fall back hoặc chỉ 2.5Gbps) Driver này cũng là do ng ta dịch ngược cái driver của xào mì nên có hạn chế là khi dùng với QSDK thì uplink YT9215<>IPQ5018 2.5Gbps chỉ lên đc 1Gbps do bọn xào mì nó custom QSDK lại nên tác giả đang bó tay và không hỗ trợ dual link do driver xào mì cũng chỉ set up single up link dù trong DTS setup dual up link như thật

P/S : Bác nào có Chatgpt Codex thì bảo nó dịch ngược driver của hãng trước để lấy procedure call để biết logic của driver của hãng, rồi bảo Codex nó áp logic đấy, sửa lại cái driver của yangfl và sửa lại DTS của thiết bị rồi test driver thôi, failed ở đâu thì bảo Codex nó sửa ở đấy. Mình thử dùng Codex rồi, có datasheet(hardware+software) thôi là nó viết đc driver mới luôn ý( đương nhiên là không ngon = dev nhưng ít nhất chạy đc ở mức sơ khai)
P/S 2: Driver của Yangfl đã nói rõ là không hoạt động ở speed 2500, Up link của YT9215s lên, đã nhận Switch nhưng các port đều bị tình trạng TX<OK>/RX<BROKEN> thì chủ thớt có thể giảm nó xuống 1000 + SGMII thay cho 2500 + BaseX để test.
Cũng đã bỏ khá nhiều thời gian cho con này. Ipq5018 đang nối với yt9215s qua link 2500 (driver yangfl dù có fixedlink 1000 cũng không nhận nhé). Vấn đề là driver hiện tại kia không có link tại các port, driver này chỉ gen các port ảo, cách tạm thời là uboot init và dùng như 1 dumb-sw.
Thay vì reg port check dễ dàng trong uboot như qca8337 thì nó qua smi, actiontec đã làm lại driver riêng phù hợp cho hardware, tương tự như cách họ đã làm với con 3000cv1 (dùng driver qca8081 mod lại thay vì dùng driver realtek chuẩn).
cục AX3000C tròn tròn thì mình làm tương tự được không bác
Đi mượn được 1 con về test trên source của xiaomi thì sau khi fix driver yt921x + dts đã lên đủ LAN
Test nhanh driver YT9215s nên chưa fix wifi
Reactions:
dichton and greenhope
Đi mượn được 1 con về test trên source của xiaomi thì sau khi fix driver yt921x + dts đã lên đủ LAN
Test nhanh driver YT9215s nên chưa fix wifi
View attachment 3495411
View attachment 3495414
Toẹt vời, vậy là con này chuẩn bị thành quốc router của vozer rồi.
@michioxd @theflash✓
Test thử boot process với driver của yangfl thì trong Uboot đến trước khi driver lên thì LAN vẫn hoạt động. Sau khi driver lên thì tịt. Bảo thằng Gemini/Chatgpt xem lại code của driver thì thấy 1 chỗ gay cấn
Code:
static int yt921x_chip_reset(struct yt921x_priv *priv)
{
struct device *dev = to_device(priv);
u16 eth_p_tag;
u32 val;
int res;
res = yt921x_chip_detect(priv);
if (res)
return res;
/* Reset */
res = yt921x_reg_write(priv, YT921X_RST, YT921X_RST_HW); <<< nó đây >YT921X_RST_HW<
if (res)
return res;
/* RST_HW is almost same as GPIO hard reset, so we need this delay. */
fsleep(YT921X_RST_DELAY_US);
val = 0;
res = yt921x_reg_wait(priv, YT921X_RST, ~0, &val);
if (res)
return res;
/* Check for tag EtherType; do it after reset in case you messed it up
* before.
*/
res = yt921x_reg_read(priv, YT921X_CPU_TAG_TPID, &val);
if (res)
return res;
eth_p_tag = FIELD_GET(YT921X_CPU_TAG_TPID_TPID_M, val);
if (eth_p_tag != ETH_P_YT921X) {
dev_err(dev, "Tag type 0x%x != 0x%x\n", eth_p_tag,
ETH_P_YT921X);
/* Despite being possible, we choose not to set CPU_TAG_TPID,
* since there is no way it can be different unless you have the
* wrong chip.
*/
return -EINVAL;
}
return 0;
}
Thêm debug code vào thì thấy 1 số register của switch thay đổi sau khi hard reset > việc hard reset switch làm mất cấu hình phù hợp với board này > fix nhanh = cách bỏ qua việc driver nó hard reset switch thì LAN lên bình thường. Còn kỹ hơn thì hard reset rồi áp lại mấy cái register như nhà sản xuất đã làm nhưng hiện tại vẫn chưa thành công.
@michioxd @theflash✓
Test thử boot process với driver của yangfl thì trong Uboot đến trước khi driver lên thì LAN vẫn hoạt động. Sau khi driver lên thì tịt. Bảo thằng Gemini/Chatgpt xem lại code của driver thì thấy 1 chỗ gay cấn
Code:
static int yt921x_chip_reset(struct yt921x_priv *priv)
{
struct device *dev = to_device(priv);
u16 eth_p_tag;
u32 val;
int res;
res = yt921x_chip_detect(priv);
if (res)
return res;
/* Reset */
res = yt921x_reg_write(priv, YT921X_RST, YT921X_RST_HW); <<< nó đây >YT921X_RST_HW<
if (res)
return res;
/* RST_HW is almost same as GPIO hard reset, so we need this delay. */
fsleep(YT921X_RST_DELAY_US);
val = 0;
res = yt921x_reg_wait(priv, YT921X_RST, ~0, &val);
if (res)
return res;
/* Check for tag EtherType; do it after reset in case you messed it up
* before.
*/
res = yt921x_reg_read(priv, YT921X_CPU_TAG_TPID, &val);
if (res)
return res;
eth_p_tag = FIELD_GET(YT921X_CPU_TAG_TPID_TPID_M, val);
if (eth_p_tag != ETH_P_YT921X) {
dev_err(dev, "Tag type 0x%x != 0x%x\n", eth_p_tag,
ETH_P_YT921X);
/* Despite being possible, we choose not to set CPU_TAG_TPID,
* since there is no way it can be different unless you have the
* wrong chip.
*/
return -EINVAL;
}
return 0;
}
Thêm debug code vào thì thấy 1 số register của switch thay đổi sau khi hard reset > việc hard reset switch làm mất cấu hình phù hợp với board này > fix nhanh = cách bỏ qua việc driver nó hard reset switch thì LAN lên bình thường. Còn kỹ hơn thì hard reset rồi áp lại mấy cái register như nhà sản xuất đã làm nhưng vẫn chưa thành công.
Đúng vậy. Uboot init thì chạy nhưng khi reset sw là mất. Thậm chí thay thử qua rtl8367s cũng không chạy. Con v1 dùng realtek phy thì 1 phát chạy luôn.
Đúng vậy. Uboot init thì chạy nhưng khi reset sw là mất. Thậm chí thay thử qua rtl8367s cũng không chạy. Con v1 dùng realtek phy thì 1 phát chạy luôn.
5 register của con switch có thay đổi khi hard reset đây
0x80028 : 0x00000001 -> 0x00000000
0x8008c : 0x0000027a -> 0x0000007a
0x80400 : 0x04184908 -> 0x04184108
0x80200 : 0x0000019a -> 0x000000e2
0x80220 : 0x00000084 -> 0x000000e2
mà riêng 2 em này nhất quyết không chịu đổi khi ghi lại giá trị cũ của nhà sản xuất dẫn đến LAN port không lên. Không có datasheet nên cũng chả rõ nó là cái gì nhưng theo driver yt921x thì là YT921X_PORTn_STATUS(0) và YT921X_PORTn_STATUS(8)
0x80200 : 0x0000019a -> 0x000000e2
0x80220 : 0x00000084 -> 0x000000e2
Chatgpt nó đoán:
- 0x80200 (YT921X_PORTn_STATUS(0))
- 0x0000019a -> 0x000000e2
- Factory (0x19a) roughly = 1G, full duplex, MAC RX/TX enabled, half-pause set.
- After reset (0xe2) roughly = 1G, full duplex, RX/TX pause set, MAC RX/TX disabled.
- 0x80220 (YT921X_PORTn_STATUS(8))
- 0x00000084 -> 0x000000e2
- Factory (0x84) roughly = full duplex, speed code 4 (2.5G), no pause/MAC-enable bits.
- After reset (0xe2) roughly = full duplex, speed code 2 (1G), RX/TX pause set, MAC RX/TX disabled.
Cái này thì chỉ có hỏi thẳng driver maker thì mới rõ đc
Cũng mò nát rồi. Tốn thời gian mà không được nên qua làm con khác. Con đó tạm gác lại.
Thế thì chơi bài dump lấy hết register của switch về xem nhà sx nó cài đặt cái gì cho switch rồi viết lại driver theo những register có thay đổi khi hard reset thôi. Lâu thật là lâu mà nó chắc có khả năng.
5 register của con switch có thay đổi khi hard reset đây
mà riêng 2 em này nhất quyết không chịu đổi khi ghi lại giá trị cũ của nhà sản xuất dẫn đến LAN port không lên. Không có datasheet nên cũng chả rõ nó là cái gì nhưng theo driver yt921x thì là YT921X_PORTn_STATUS(0) và YT921X_PORTn_STATUS(8)
Chatgpt nó đoán:
Cái này thì chỉ có hỏi thẳng driver maker thì mới rõ đc
thấy có driver yt9215s từ trên mạng thì
Code:
{/* mem: port_status */
/* Asic Base Address */ 0x80200,
/* offset */ 0x4,
/* bytes */ 0x4,
/* Entry Number */ 11,
/* Fields_num */ 7,
/* fields_id */ port_statusm_field,
},
Code:
const field_id_t port_statusm_field[] = {
{PORT_STATUS_LINKf,1,0,8},
{PORT_STATUS_DUPLEX_MODEf,1,0,7},
{PORT_STATUS_RX_FC_ENf,1,0,6},
{PORT_STATUS_TX_FC_ENf,1,0,5},
{PORT_STATUS_RXMAC_ENf,1,0,4},
{PORT_STATUS_TXMAC_ENf,1,0,3},
{PORT_STATUS_SPEED_MODEf,3,0,0},
};
Bỏ vô chatgpt thì nó đoán
0x19a = b1_1001_1010
- bit8 LINK = 1 (link up)
- bit7 DUPLEX = 1 (full duplex)
- bit6 RX_FC_EN = 0
- bit5 TX_FC_EN = 0
- bit4 RXMAC_EN = 1 (RX MAC enabled)
- bit3 TXMAC_EN = 1 (TX MAC enabled)
- speed_mode[2:0] = 0b010
0x0e2 = b0_1110_0010
- bit8 LINK = 0 (link down)
- bit7 DUPLEX = 1 (full duplex)
- bit6 RX_FC_EN = 1 (RX pause/flow control enabled)
- bit5 TX_FC_EN = 1 (TX pause/flow control enabled)
- bit4 RXMAC_EN = 0 (RX MAC disabled)
- bit3 TXMAC_EN = 0 (TX MAC disabled)
- speed_mode[2:0] = 0b010
e2 -> link down nên switch không hoạt động.
Link driver:
https://github.com/BPI-SINOVOIP/BPI...ower/sf_eth/yt9215-swconfig/src/yt9215s_api.c
thấy có driver yt9215s từ trên mạng thì
Code:
{/* mem: port_status */
/* Asic Base Address */ 0x80200,
/* offset */ 0x4,
/* bytes */ 0x4,
/* Entry Number */ 11,
/* Fields_num */ 7,
/* fields_id */ port_statusm_field,
},
Code:
const field_id_t port_statusm_field[] = {
{PORT_STATUS_LINKf,1,0,8},
{PORT_STATUS_DUPLEX_MODEf,1,0,7},
{PORT_STATUS_RX_FC_ENf,1,0,6},
{PORT_STATUS_TX_FC_ENf,1,0,5},
{PORT_STATUS_RXMAC_ENf,1,0,4},
{PORT_STATUS_TXMAC_ENf,1,0,3},
{PORT_STATUS_SPEED_MODEf,3,0,0},
};
Bỏ vô chatgpt thì nó đoán
0x19a = b1_1001_1010
- bit8 LINK = 1 (link up)
- bit7 DUPLEX = 1 (full duplex)
- bit6 RX_FC_EN = 0
- bit5 TX_FC_EN = 0
- bit4 RXMAC_EN = 1 (RX MAC enabled)
- bit3 TXMAC_EN = 1 (TX MAC enabled)
- speed_mode[2:0] = 0b010
0x0e2 = b0_1110_0010
- bit8 LINK = 0 (link down)
- bit7 DUPLEX = 1 (full duplex)
- bit6 RX_FC_EN = 1 (RX pause/flow control enabled)
- bit5 TX_FC_EN = 1 (TX pause/flow control enabled)
- bit4 RXMAC_EN = 0 (RX MAC disabled)
- bit3 TXMAC_EN = 0 (TX MAC disabled)
- speed_mode[2:0] = 0b010
e2 -> link down nên switch không hoạt động.
Link driver:
https://github.com/BPI-SINOVOIP/BPI...ower/sf_eth/yt9215-swconfig/src/yt9215s_api.c
Done method rồi nhé các bác, dump hết register của switch ra trước khi reset để lấy factory config, hard reset xong dump thêm phát nữa để xem cái register nào bị đổi giá trị. Xong là còn mỗi việc bảo AI nó viết lại driver theo mấy cái bị đổi là LAN sẽ lên theo, ít nhất giờ là reset đc switch mà ko bị mất LAN thì chắc ốp đc một số config cần reset switch để apply.
Sau rảnh rảnh bảo AI nó mò hộ nốt mấy cái register noname xem nó là cái giống gì thì có thể viết lại full DSA compatible driver, mà chắc khó, vì ko có datasheet thì thử từng cái thôi là cũng mất ối thời gian
Cập nhật: tìm đc register liên quan đến việc LAN port dead, apply mấy cái này lại sau khi hard reset switch thì LAN sẽ lên. Nhưng vẫn chưa hoạt động được TX=0, RX= working (ngược lại với đám CR881x TX=working, RX = 0) tiếp tục dump thêm register để tìm kiếm
- 0x80028 = 0x00000001
- 0x8002c = 0x00001fff
- 0x80044 = 0x004a0a04
- 0x8008c = 0x0000027a
- 0x80400 = 0x04184908
- 0x1803f8 = 0x00020000
0.7.2 và 0.9.1 em vẫn vô SSH nhưng bị hỏi pass nên thua, giờ lên 0.9.1 ko bik sao hạ 0.7.2
Coi firmware thì đoán đại password SSH sẽ là chuỗi macaddress+FTEL, ví dụ
00:11:22:33:44:55 thì pass là
001122334455FTEL
Code:
MAC=$(fw_printenv | grep eth1addr | cut -d= -f2 | tr -d ':')
COMBINED="${MAC}FTEL"
MD5_VALUE=$(echo -n "$COMBINED" | md5sum | cut -d' ' -f1)
uci set dropbear.@dropbear[0].enable=1
uci set dropbear.@dropbear[0].password=$MD5_VALUE
Reactions:
jeremienguyen
Update: 1 bước tiến khá lớn
Router đã thấy Client nhưng Client vẫn đang tịt
Cập nhật: tìm đc register liên quan đến việc LAN port dead, apply mấy cái này lại sau khi hard reset switch thì LAN sẽ lên. Nhưng vẫn chưa hoạt động được TX=0, RX= working (ngược lại với đám CR881x TX=working, RX = 0) tiếp tục dump thêm register để tìm kiếm
Trong firmware gốc có script get_switch_info.sh, đoán là những register quan trọng ở đây:
Code:
echo "===Get switch register====" >>/tmp/get_switch
echo "swconfig dev switch0 port $1 get switchreg 0x80328 ====$temp" >>/var/log/lm/tmp/switch_debug
echo "swconfig dev switch0 port $1 get switchreg 0x8002C ====$temp" >>/var/log/lm/tmp/switch_debug
echo "swconfig dev switch0 port $1 get switchreg 0x80100 ====$temp" >>/var/log/lm/tmp/switch_debug
echo "swconfig dev switch0 port $1 get switchreg 0x80200 ====$temp" >>/var/log/lm/tmp/switch_debug
Chatgpt quân nhân mới reg lại đc làm đc 2 acc và đay là kết quả Codex nó tự biên tự diễn luôn
Nó mò nhanh hơn mình chắc phải cả 10.000 lần.
Tự improve code, tự build, tự flash tự test luôn, này thì dev phải làm sao
Chatgpt quân nhân mới reg lại đc làm đc 2 acc và đay là kết quả Codex nó tự biên tự diễn luôn
Chatgpt nó còn... tự suy đoán theo ý nó luôn, có khi trật lất hết nếu không điều chỉnh lại chính xác theo datasheet. Khả năng decompile code có sẵn so với với Claude thì thua xa, trước ngồi test thử thì thằng Chatgpt tự đoán register này để chứa abc từ code Ghidra, mang qua Claude kiểm tra lại, nó nói sai bét rồi gen ra script python chạy trong Ghidra in mã assembly để chứng minh thanh ghi này dùng để chứa xyz.
Chatgpt nó còn... tự suy đoán theo ý nó luôn, có khi trật lất hết nếu không điều chỉnh lại chính xác theo datasheet. Khả năng decompile code có sẵn so với với Claude thì thua xa, trước ngồi test thử thì thằng Chatgpt tự đoán register này để chứa abc từ code Ghidra, mang qua Claude kiểm tra lại, nó nói sai bét rồi gen ra script python chạy trong Ghidra in mã assembly để chứng minh thanh ghi này dùng để chứa xyz.
Cái Codex này xứng đáng chỉ là code agent. Mình phải đóng vai trò project manager cho nó chứ không nó ngu lắm toàn làm chuyện tào lao bí đao thôi.
Agent.md = hiến pháp = rule cơ bản
Agent-***.md = luật nghị định công việc nào phải làm cái gì
Agent-***-logs.md = tóm tắt quá trình/kết quả
thêm cái milestone Map nữa cho chắc cú.
Ít nhất là vậy không nó
hết session hết context window là nó quên mẹ hết mấy cái context cũ, lại làm lại như mới thì chào thua

Reactions:
greenhope