gentoo-sources 3.12.5 boots but does not load firmware for my ATI HD video capture card (CX23880/1/2/3-based). dmesg gets flooded with these errors (issued repeatedly in a loop - judging by the timestamps the loop might actually start with the last line): Dec 19 17:35:21 rich kernel: [ 128.768232] nxt200x: Error writing multireg register 0x08 Dec 19 17:35:21 rich kernel: [ 128.771271] nxt200x: Error writing multireg register 0x08 Dec 19 17:35:21 rich kernel: [ 128.783125] nxt200x: Error writing multireg register 0x80 Dec 19 17:35:21 rich kernel: [ 128.788617] nxt200x: Error writing multireg register 0x08 Dec 19 17:35:21 rich kernel: [ 128.794113] nxt200x: Error writing multireg register 0x08 Dec 19 17:35:21 rich kernel: [ 128.799608] nxt200x: Error writing multireg register 0x80 Dec 19 17:35:21 rich kernel: [ 128.802640] nxt200x: Error writing multireg register 0x81 Dec 19 17:35:21 rich kernel: [ 128.806025] nxt200x: Error writing multireg register 0x82 Dec 19 17:35:21 rich kernel: [ 128.811516] nxt200x: Error writing multireg register 0x88 Dec 19 17:35:21 rich kernel: [ 128.817014] nxt200x: Error writing multireg register 0x80 Dec 19 17:35:21 rich kernel: [ 129.048443] nxt200x: Timeout waiting for nxt2004 to init. Dec 19 17:35:22 rich kernel: [ 129.770854] nxt200x: Timeout waiting for nxt200x to stop. This is ok after firmware upload. The device nodes are created for the card, but it does not record video. I built the v3.12.5 from kernel.org's git repo and with that the card appears to work fine, but dmesg contains some warnings: Dec 20 10:52:04 rich kernel: [ 31.747903] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747908] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747910] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747912] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747914] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747916] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747918] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747919] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747921] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747923] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747925] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747926] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747928] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747930] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747931] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747933] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747935] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747937] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747938] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747940] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747942] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747943] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747945] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747947] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747949] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747950] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747952] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747954] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747955] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747957] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747959] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747961] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747962] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747964] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747966] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747967] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747969] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=255 is too big! Dec 20 10:52:04 rich kernel: [ 31.747971] nxt200x: nxt200x_writebytes: i2c wr reg=002c: len=149 is too big! Dec 20 10:52:04 rich kernel: [ 31.750080] nxt200x: nxt2004_init: Firmware upload complete My guess is that this is related to upstream commit: 19496d61f3962fd6470b106b779eddcdbe823c9b I did not test reverting just this change. I suspect that some gentoo patch is causing the problem to become fatal (though no OOPS/BUG/PANIC) - perhaps a race condition or something. Let me know if you need me to do anything further. I figured I'd start here since something gentoo-specific is going on but happy to log upstream if you'd prefer not to do that. 3.10.17 works fine. Reproducible: Always
Created attachment 365770 [details] gentoo config file (used same for vanilla)
This behavior persists in 3.12.6 on the gentoo kernel. I haven't yet gotten a chance to test the vanilla kernel.
Another data point. Vanilla (from git) kernel 3.12.7 behaves just like 3.12.5 did on Gentoo - the device does not initialize at all and repeatedly generates the same series of errors as 3.12.5-gentoo did. I didn't test 3.12.6 vanilla yet.
Looks like upstream solved this for you, Rich. I'll grab it when it hits Mauro's tree or linux-next. diff --git a/drivers/media/dvb-frontends/nxt200x.c b/drivers/media/dvb-frontends/nxt200x.c index fbca9856313a..4bf057544607 100644 --- a/drivers/media/dvb-frontends/nxt200x.c +++ b/drivers/media/dvb-frontends/nxt200x.c <at> <at> -40,7 +40,7 <at> <at> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt /* Max transfer size done by I2C transfer functions */ -#define MAX_XFER_SIZE 64 +#define MAX_XFER_SIZE 256 #define NXT2002_DEFAULT_FIRMWARE "dvb-fe-nxt2002.fw" #define NXT2004_DEFAULT_FIRMWARE "dvb-fe-nxt2004.fw" --
(In reply to Mike Pagano from comment #4) > Looks like upstream solved this for you, Rich. I'll grab it when it hits > Mauro's tree or linux-next. Sounds great. I did reply to Mauro that the patch worked. Obviously I'm already applying it myself in any case...
This is in >= 3.10.30, 3.12.11 and 3.13.3