[PATCH] kernal: skip hpower setting for the module which has no revs

Bjørn Mork bjorn at mork.no
Mon Nov 29 04:18:35 PST 2021


照山周一郎 <teruyama at springboard-inc.jp> writes:

> Thanks for all the helpful advice.
>
> The EEPROM dump is as follows.
>
> ーーー
>
> Offset Values
> ---— ———
> 0x0000: 03 04 01 00 00 00 80 00 00 00 00 01 0d 00 0a 64
> 0x0010: 00 00 00 00 4e 54 54 20 20 20 20 20 20 20 20 20
> 0x0020: 20 20 20 20 00 00 00 00 30 30 30 30 30 30 30 30
> 0x0030: 30 30 30 30 30 30 30 30 30 30 30 30 05 1e 00 7d
> 0x0040: 02 00 00 00 30 30 30 30 30 30 30 30 30 30 30 30

So id.ext.options is 0x0200, meaning that SFP_OPTIONS_POWER_DECL is set
and nothing else.  

> 0x0050: 30 30 30 30 31 36 30 34 30 38 20 20 00 00 00 75

And both id.ext.diagmon and id.ext.sff8472_compliance are 0x00.  Not
sure why they'd want that with such a new module, but I guess it's
fine..

Anyway, this means that your module would have matched the old

	if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE &&
	    (sfp->id.ext.diagmon & (SFP_DIAGMON_DDM | SFP_DIAGMON_ADDRMODE)) !=
	    SFP_DIAGMON_DDM) {

test and therefore have been accepted by the driver.


> 0x0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> ーーー
>
> The log is as follows.
>
> ーーー
>
> [    8.583797] kmodloader: done loading kernel modules from /etc/modules.d/*
> [    8.834704] sfp sfp-eth1: module OEM              10G-SFP-PCU1M
> rev G    sn HS18100810001    dc 181008
> [    8.856051] sfp sfp-eth3: module NTT              0000000000000000
> rev 0000 sn 0000000000000000 dc 160408
> [    8.865843] mvpp2 f4000000.ethernet eth3: switched to
> inband/1000base-x link mode
> [    8.873469] sfp sfp-eth3: Failed to read EEPROM: -5
> [    8.983251] sfp sfp-eth3: Failed to read EEPROM: -5
> [    9.103250] sfp sfp-eth3: Failed to read EEPROM: -5
> ーーー
>
> "Failed to read EEPROM: -5"  output in a loop.

Thanks.  Just wanted to be sure that even read access to EXT_STATUS
failed.  That's as expected when SFP_DIAGMON_DDM is not set.

The loop makes the problem even worse.  It's not like this is going to
fix itself.  But I guess it makes sense for the temporary access
problems this was intended to catch.


> Its caused here.
>
> https://github.com/torvalds/linux/blob/master/drivers/net/phy/sfp.c#L1694
>
>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/net/phy/sfp.c?id=7cfa9c92d0a325f97ac13f894a7b47d37bd2040
>> if (power_mW > sfp->max_power_mW) {
>
> I think the above modification is wrong too.
>
> However, I don't have the SFP module that returns the appropriate
> revision, and I don't have the environment to verify it, so I can't
> fix the above patch myself.

Well.  I have a few modules with revisions 0x00, 0x01, 0x03 but none of
them set any of the high power flags.  So I can't really verify this
either.  Still, I think we understand the issue well enough now to make
an attempt.  Review by netdev, including a CC to the original author,
should be plenty enough for a fix.  It was enough to introduce the bug
:-)

> The NTT OCU that I want to run this time is widely used in Japan, so I
> would like to apply the patch with the method I applied.

Even more reason to fix this properly in mainline + stable and not just
in OpenWrt.  I can make an attempt with you as reporter, if you don't
want to submit this yourself?

I think the bug you found here might affect many other high power
modules too.  Any high power module without diagnostics will fail
AFAICS.

It's a great catch.  Thanks!


Bjørn



More information about the openwrt-devel mailing list