mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
sfp: force higher rate SFP modules to 10G
sds: validate mode before touching anything Signed-off-by: João Silva <jgc3silva@gmail.com>
This commit is contained in:
2 files changed
+17
-13
No files matched your search
@@ -125,18 +125,6 @@ void early_boot_handle_button(void) __banked
|
|||||||
void sds_config(uint8_t sds, uint8_t mode) __banked
|
void sds_config(uint8_t sds, uint8_t mode) __banked
|
||||||
{
|
{
|
||||||
print_string("sds_config sds: "); print_byte(sds); print_string(", mode: "); print_byte(mode); write_char('\n');
|
print_string("sds_config sds: "); print_byte(sds); print_string(", mode: "); print_byte(mode); write_char('\n');
|
||||||
sds_config_mac(sds, mode);
|
|
||||||
|
|
||||||
if (mode == SDS_10GR || mode == SDS_QXGMII)
|
|
||||||
sds_write_v(sds, 0x21, 0x10, 0x4480); // Q002110:6480
|
|
||||||
else
|
|
||||||
sds_write_v(sds, 0x21, 0x10, 0x6480); // Q002110:6480
|
|
||||||
sds_write_v(sds, 0x21, 0x13, 0x0400); // Q002113:0400
|
|
||||||
sds_write_v(sds, 0x21, 0x18, 0x6d02); // Q002118:6d02
|
|
||||||
sds_write_v(sds, 0x21, 0x1b, 0x424e); // Q00211b:424e
|
|
||||||
sds_write_v(sds, 0x21, 0x1d, 0x0002); // Q00211d:0002
|
|
||||||
sds_write_v(sds, 0x36, 0x1c, 0x1390); // Q00361c:1390
|
|
||||||
sds_write_v(sds, 0x36, 0x14, 0x003f); // Q003614:003f
|
|
||||||
|
|
||||||
uint8_t page = 0;
|
uint8_t page = 0;
|
||||||
uint16_t v = 0;
|
uint16_t v = 0;
|
||||||
@@ -165,6 +153,21 @@ void sds_config(uint8_t sds, uint8_t mode) __banked
|
|||||||
print_string("Error in SDS Mode\n");
|
print_string("Error in SDS Mode\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sds_config_mac(sds, mode);
|
||||||
|
|
||||||
|
if (mode == SDS_10GR || mode == SDS_QXGMII)
|
||||||
|
sds_write_v(sds, 0x21, 0x10, 0x4480); // Q002110:6480
|
||||||
|
else
|
||||||
|
sds_write_v(sds, 0x21, 0x10, 0x6480); // Q002110:6480
|
||||||
|
|
||||||
|
sds_write_v(sds, 0x21, 0x13, 0x0400); // Q002113:0400
|
||||||
|
sds_write_v(sds, 0x21, 0x18, 0x6d02); // Q002118:6d02
|
||||||
|
sds_write_v(sds, 0x21, 0x1b, 0x424e); // Q00211b:424e
|
||||||
|
sds_write_v(sds, 0x21, 0x1d, 0x0002); // Q00211d:0002
|
||||||
|
sds_write_v(sds, 0x36, 0x1c, 0x1390); // Q00361c:1390
|
||||||
|
sds_write_v(sds, 0x36, 0x14, 0x003f); // Q003614:003f
|
||||||
|
|
||||||
sds_write_v(sds, 0x36, 0x10, v); // Q003610:0200
|
sds_write_v(sds, 0x36, 0x10, v); // Q003610:0200
|
||||||
|
|
||||||
if (page == 0x2e) { // 10G Fiber / SDS_QXGMII
|
if (page == 0x2e) { // 10G Fiber / SDS_QXGMII
|
||||||
|
|||||||
@@ -59,8 +59,9 @@ static inline uint8_t sfp_rate_to_sds_config(uint8_t rate)
|
|||||||
return SDS_1000BX_FIBER;
|
return SDS_1000BX_FIBER;
|
||||||
if (rate >= 0x19 && rate <= 0x20) // Ethernet 2.5 GBit
|
if (rate >= 0x19 && rate <= 0x20) // Ethernet 2.5 GBit
|
||||||
return SDS_HSG;
|
return SDS_HSG;
|
||||||
if (rate >= 0x62 && rate < 0x70)
|
if (rate >= 0x62 /* && rate < 0x70 */) // Force higher rates to 10G (e.g., 25G, 50G)
|
||||||
return SDS_10GR;
|
return SDS_10GR;
|
||||||
|
|
||||||
return 0xff;
|
return 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user