* [PATCH 1/3] media: si2157: move firmware load to a separate function
2021-12-08 10:13 ` [PATCH 0/3] media: si2157: rework firmware load logic Mauro Carvalho Chehab
@ 2021-12-08 10:13 ` Mauro Carvalho Chehab
2021-12-08 16:40 ` Robert Schlabbach
2021-12-08 10:13 ` [PATCH 2/3] media: si2157: Add optional firmware download Mauro Carvalho Chehab
2021-12-08 10:13 ` [PATCH 3/3] media: si2157: rework the firmware load logic Mauro Carvalho Chehab
2 siblings, 1 reply; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-08 10:13 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Robert Schlabbach,
Antti Palosaari, Mauro Carvalho Chehab, linux-kernel, linux-media
Split the firmware load code from si2157_init, in order to
help to add further changes at the way firmware is handled on
this device.
No functional changes.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
To avoid mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/3] at: https://lore.kernel.org/all/cover.1638958050.git.mchehab+huawei@kernel.org/
drivers/media/tuners/si2157.c | 98 ++++++++++++++++++++---------------
1 file changed, 56 insertions(+), 42 deletions(-)
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index 75ddf7ed1faf..481a5db7fb69 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -76,16 +76,63 @@ static int si2157_cmd_execute(struct i2c_client *client, struct si2157_cmd *cmd)
return ret;
}
-static int si2157_init(struct dvb_frontend *fe)
+static int si2157_load_firmware(struct dvb_frontend *fe,
+ const char *fw_name)
{
struct i2c_client *client = fe->tuner_priv;
- struct si2157_dev *dev = i2c_get_clientdata(client);
- struct dtv_frontend_properties *c = &fe->dtv_property_cache;
- int ret, len, remaining;
- struct si2157_cmd cmd;
const struct firmware *fw;
- const char *fw_name;
+ int ret, len, remaining;
+ struct si2157_cmd cmd;
+
+ /* request the firmware, this will block and timeout */
+ ret = request_firmware(&fw, fw_name, &client->dev);
+ if (ret)
+ return ret;
+
+ /* firmware should be n chunks of 17 bytes */
+ if (fw->size % 17 != 0) {
+ dev_err(&client->dev, "firmware file '%s' is invalid\n",
+ fw_name);
+ ret = -EINVAL;
+ goto err_release_firmware;
+ }
+
+ dev_info(&client->dev, "downloading firmware from file '%s'\n",
+ fw_name);
+
+ for (remaining = fw->size; remaining > 0; remaining -= 17) {
+ len = fw->data[fw->size - remaining];
+ if (len > SI2157_ARGLEN) {
+ dev_err(&client->dev, "Bad firmware length\n");
+ ret = -EINVAL;
+ goto err_release_firmware;
+ }
+ memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len);
+ cmd.wlen = len;
+ cmd.rlen = 1;
+ ret = si2157_cmd_execute(client, &cmd);
+ if (ret) {
+ dev_err(&client->dev, "firmware download failed %d\n",
+ ret);
+ goto err_release_firmware;
+ }
+ }
+
+err_release_firmware:
+ release_firmware(fw);
+
+ return ret;
+}
+
+static int si2157_init(struct dvb_frontend *fe)
+{
+ struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+ struct i2c_client *client = fe->tuner_priv;
+ struct si2157_dev *dev = i2c_get_clientdata(client);
unsigned int chip_id, xtal_trim;
+ struct si2157_cmd cmd;
+ const char *fw_name;
+ int ret;
dev_dbg(&client->dev, "\n");
@@ -181,45 +228,13 @@ static int si2157_init(struct dvb_frontend *fe)
if (fw_name == NULL)
goto skip_fw_download;
- /* request the firmware, this will block and timeout */
- ret = request_firmware(&fw, fw_name, &client->dev);
+ ret = si2157_load_firmware(fe, fw_name);
if (ret) {
dev_err(&client->dev, "firmware file '%s' not found\n",
- fw_name);
- goto err;
- }
-
- /* firmware should be n chunks of 17 bytes */
- if (fw->size % 17 != 0) {
- dev_err(&client->dev, "firmware file '%s' is invalid\n",
- fw_name);
- ret = -EINVAL;
- goto err_release_firmware;
- }
-
- dev_info(&client->dev, "downloading firmware from file '%s'\n",
fw_name);
-
- for (remaining = fw->size; remaining > 0; remaining -= 17) {
- len = fw->data[fw->size - remaining];
- if (len > SI2157_ARGLEN) {
- dev_err(&client->dev, "Bad firmware length\n");
- ret = -EINVAL;
- goto err_release_firmware;
- }
- memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len);
- cmd.wlen = len;
- cmd.rlen = 1;
- ret = si2157_cmd_execute(client, &cmd);
- if (ret) {
- dev_err(&client->dev, "firmware download failed %d\n",
- ret);
- goto err_release_firmware;
- }
+ goto err;
}
- release_firmware(fw);
-
skip_fw_download:
/* reboot the tuner with new firmware? */
memcpy(cmd.args, "\x01\x01", 2);
@@ -270,8 +285,7 @@ static int si2157_init(struct dvb_frontend *fe)
dev->active = true;
return 0;
-err_release_firmware:
- release_firmware(fw);
+
err:
dev_dbg(&client->dev, "failed=%d\n", ret);
return ret;
--
2.33.1
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH 1/3] media: si2157: move firmware load to a separate function
2021-12-08 10:13 ` [PATCH 1/3] media: si2157: move firmware load to a separate function Mauro Carvalho Chehab
@ 2021-12-08 16:40 ` Robert Schlabbach
2021-12-08 17:03 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 17+ messages in thread
From: Robert Schlabbach @ 2021-12-08 16:40 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
> @@ -181,45 +228,13 @@ static int si2157_init(struct dvb_frontend *fe)
> if (fw_name == NULL)
> goto skip_fw_download;
You can invert the condition now and put the si2157_load_firmware() call
inside the if () block, and do away with the goto.
> - /* request the firmware, this will block and timeout */
> - ret = request_firmware(&fw, fw_name, &client->dev);
> + ret = si2157_load_firmware(fe, fw_name);
> if (ret) {
> dev_err(&client->dev, "firmware file '%s' not found\n",
This will produce duplicate error messages, because the called function
will already output some error messages. You should move this line to
the extracted function as well, and reduce the code in the init function
to:
if (fw_name != null) {
ret = si2157_load_firmware(fe, fw_name);
if (ret)
goto err;
}
Best Regards,
-Robert Schlabbach
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [PATCH 1/3] media: si2157: move firmware load to a separate function
2021-12-08 16:40 ` Robert Schlabbach
@ 2021-12-08 17:03 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-08 17:03 UTC (permalink / raw)
To: Robert Schlabbach; +Cc: linux-media
Em Wed, 8 Dec 2021 17:40:56 +0100
Robert Schlabbach <robert_s@gmx.net> escreveu:
> > @@ -181,45 +228,13 @@ static int si2157_init(struct dvb_frontend *fe)
> > if (fw_name == NULL)
> > goto skip_fw_download;
>
> You can invert the condition now and put the si2157_load_firmware() call
> inside the if () block, and do away with the goto.
I know, but this would also require to move the dont_load_firmware check,
which also does the goto.
I did that on a first version of the patch, but ended reverting,
as I can't be 100% certain devices with dont_load_firmware:
if ((le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_DEXATEK &&
le16_to_cpu(d->udev->descriptor.idProduct) == 0x0100) ||
(le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_TERRATEC &&
le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_TERRATEC_CINERGY_TC2_STICK))
si2157_config.dont_load_firmware = true;
Would keep work and report the hardware type/review.
> > - /* request the firmware, this will block and timeout */
> > - ret = request_firmware(&fw, fw_name, &client->dev);
> > + ret = si2157_load_firmware(fe, fw_name);
> > if (ret) {
> > dev_err(&client->dev, "firmware file '%s' not found\n",
>
> This will produce duplicate error messages, because the called function
> will already output some error messages. You should move this line to
> the extracted function as well, and reduce the code in the init function
> to:
>
> if (fw_name != null) {
> ret = si2157_load_firmware(fe, fw_name);
> if (ret)
> goto err;
> }
True, but I guess patch 3 fixes it.
On patch 1, my goal were just to place everything on a single routine
without any real changes. Patch 3 does the optimization/cleanup.
Thanks,
Mauro
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 2/3] media: si2157: Add optional firmware download
2021-12-08 10:13 ` [PATCH 0/3] media: si2157: rework firmware load logic Mauro Carvalho Chehab
2021-12-08 10:13 ` [PATCH 1/3] media: si2157: move firmware load to a separate function Mauro Carvalho Chehab
@ 2021-12-08 10:13 ` Mauro Carvalho Chehab
2021-12-08 16:45 ` Robert Schlabbach
2021-12-08 10:13 ` [PATCH 3/3] media: si2157: rework the firmware load logic Mauro Carvalho Chehab
2 siblings, 1 reply; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-08 10:13 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Robert Schlabbach, Antti Palosaari,
Mauro Carvalho Chehab, linux-kernel, linux-media,
Mauro Carvalho Chehab
From: Robert Schlabbach <robert_s@gmx.net>
The Si2157 (A30) is functional with the ROM firmware 3.0.5, but can also
be patched at runtime, e.g. to firmware 3.1.3. However, although a
firmware filename for its firmware patch exists, that has only been used
for the Si2177 (A30) so far (which indeed takes the binary identical
firmware patch).
Add support for downloading firmware patches into the Si2157 (A30), but
make it optional, so that initialization can succeed with and without a
firmware patch being available. Keep the use of request_firmware() for
this purpose rather than firmware_request_nowarn(), so that the warning
in the log makes users aware that it is possible to provide a firmware
for this tuner.
The firmware patch is probably also optional for other (if not all)
tuners supported by the driver, but since I do not have the others
available to test, they are kept mandatory for now to avoid regressions.
Signed-off-by: Robert Schlabbach <robert_s@gmx.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
To avoid mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/3] at: https://lore.kernel.org/all/cover.1638958050.git.mchehab+huawei@kernel.org/
drivers/media/tuners/si2157.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index 481a5db7fb69..ed28672c060d 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -130,6 +130,7 @@ static int si2157_init(struct dvb_frontend *fe)
struct i2c_client *client = fe->tuner_priv;
struct si2157_dev *dev = i2c_get_clientdata(client);
unsigned int chip_id, xtal_trim;
+ unsigned int fw_required;
struct si2157_cmd cmd;
const char *fw_name;
int ret;
@@ -198,6 +199,10 @@ static int si2157_init(struct dvb_frontend *fe)
#define SI2146_A10 ('A' << 24 | 46 << 16 | '1' << 8 | '0' << 0)
#define SI2141_A10 ('A' << 24 | 41 << 16 | '1' << 8 | '0' << 0)
+ /* assume firmware is required, unless verified not to be */
+ /* only the SI2157_A30 has been verified not to yet */
+ fw_required = true;
+
switch (chip_id) {
case SI2158_A20:
case SI2148_A20:
@@ -206,10 +211,13 @@ static int si2157_init(struct dvb_frontend *fe)
case SI2141_A10:
fw_name = SI2141_A10_FIRMWARE;
break;
- case SI2177_A30:
- fw_name = SI2157_A30_FIRMWARE;
- break;
case SI2157_A30:
+ fw_name = SI2157_A30_FIRMWARE;
+ fw_required = false;
+ break;
+ case SI2177_A30:
+ fw_name = SI2157_A30_FIRMWARE;
+ break;
case SI2147_A30:
case SI2146_A10:
fw_name = NULL;
@@ -230,6 +238,9 @@ static int si2157_init(struct dvb_frontend *fe)
ret = si2157_load_firmware(fe, fw_name);
if (ret) {
+ if (!fw_required)
+ goto skip_fw_download;
+
dev_err(&client->dev, "firmware file '%s' not found\n",
fw_name);
goto err;
--
2.33.1
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH 2/3] media: si2157: Add optional firmware download
2021-12-08 10:13 ` [PATCH 2/3] media: si2157: Add optional firmware download Mauro Carvalho Chehab
@ 2021-12-08 16:45 ` Robert Schlabbach
2021-12-08 17:09 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 17+ messages in thread
From: Robert Schlabbach @ 2021-12-08 16:45 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
> ret = si2157_load_firmware(fe, fw_name);
> if (ret) {
> + if (!fw_required)
> + goto skip_fw_download;
> +
In conjunction with my proposal for PATCH 1/3, this can be simplified to:
ret = si2157_load_firmware(fe, fw_name);
if (ret && fw_required)
goto err;
Best Regards,
-Robert Schlabbach
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [PATCH 2/3] media: si2157: Add optional firmware download
2021-12-08 16:45 ` Robert Schlabbach
@ 2021-12-08 17:09 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-08 17:09 UTC (permalink / raw)
To: Robert Schlabbach; +Cc: linux-media
Em Wed, 8 Dec 2021 17:45:43 +0100
Robert Schlabbach <robert_s@gmx.net> escreveu:
> > ret = si2157_load_firmware(fe, fw_name);
> > if (ret) {
> > + if (!fw_required)
> > + goto skip_fw_download;
> > +
>
> In conjunction with my proposal for PATCH 1/3, this can be simplified to:
>
> ret = si2157_load_firmware(fe, fw_name);
> if (ret && fw_required)
> goto err;
See the patch 3:
ret = si2157_load_firmware(fe, fw_name);
+ if (fw_required && ret == -ENOENT)
+ warn_firmware_not_loaded = true;
+ else if (ret < 0) {
+ dev_err(&client->dev, "error %d when loading firmware file '%s'\n",
+ ret, fw_name);
Basically, it will do (about) the same thing you proposed, with one
important difference: It should only ignore errors loading the firmware
when the error is due to a non-existing firmware file. If the firmware
file is corrupted or can't be load for other reasons (ENOMEM, corrupted
file, etc), it will print the error code and bail out.
Thanks,
Mauro
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 3/3] media: si2157: rework the firmware load logic
2021-12-08 10:13 ` [PATCH 0/3] media: si2157: rework firmware load logic Mauro Carvalho Chehab
2021-12-08 10:13 ` [PATCH 1/3] media: si2157: move firmware load to a separate function Mauro Carvalho Chehab
2021-12-08 10:13 ` [PATCH 2/3] media: si2157: Add optional firmware download Mauro Carvalho Chehab
@ 2021-12-08 10:13 ` Mauro Carvalho Chehab
2021-12-08 22:37 ` Robert Schlabbach
2 siblings, 1 reply; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-08 10:13 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Robert Schlabbach,
Antti Palosaari, Mauro Carvalho Chehab, linux-kernel, linux-media
Loading a firmware file should not be mandatory, as devices
could work with an eeprom firmware, if available.
Yet, using the eeprom firmware could lead into unpredictable
results, so the best is to warn about that.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
To avoid mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/3] at: https://lore.kernel.org/all/cover.1638958050.git.mchehab+huawei@kernel.org/
drivers/media/tuners/si2157.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index ed28672c060d..5f4ae8593864 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -129,8 +129,9 @@ static int si2157_init(struct dvb_frontend *fe)
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
struct i2c_client *client = fe->tuner_priv;
struct si2157_dev *dev = i2c_get_clientdata(client);
+ bool warn_firmware_not_loaded = false;
unsigned int chip_id, xtal_trim;
- unsigned int fw_required;
+ bool fw_required = true;
struct si2157_cmd cmd;
const char *fw_name;
int ret;
@@ -199,10 +200,6 @@ static int si2157_init(struct dvb_frontend *fe)
#define SI2146_A10 ('A' << 24 | 46 << 16 | '1' << 8 | '0' << 0)
#define SI2141_A10 ('A' << 24 | 41 << 16 | '1' << 8 | '0' << 0)
- /* assume firmware is required, unless verified not to be */
- /* only the SI2157_A30 has been verified not to yet */
- fw_required = true;
-
switch (chip_id) {
case SI2158_A20:
case SI2148_A20:
@@ -212,9 +209,8 @@ static int si2157_init(struct dvb_frontend *fe)
fw_name = SI2141_A10_FIRMWARE;
break;
case SI2157_A30:
- fw_name = SI2157_A30_FIRMWARE;
fw_required = false;
- break;
+ fallthrough;
case SI2177_A30:
fw_name = SI2157_A30_FIRMWARE;
break;
@@ -237,12 +233,11 @@ static int si2157_init(struct dvb_frontend *fe)
goto skip_fw_download;
ret = si2157_load_firmware(fe, fw_name);
- if (ret) {
- if (!fw_required)
- goto skip_fw_download;
-
- dev_err(&client->dev, "firmware file '%s' not found\n",
- fw_name);
+ if (fw_required && ret == -ENOENT)
+ warn_firmware_not_loaded = true;
+ else if (ret < 0) {
+ dev_err(&client->dev, "error %d when loading firmware file '%s'\n",
+ ret, fw_name);
goto err;
}
@@ -263,6 +258,11 @@ static int si2157_init(struct dvb_frontend *fe)
if (ret)
goto err;
+ if (warn_firmware_not_loaded) {
+ dev_warn(&client->dev, "firmware file '%s' not found. Using firmware from eeprom.\n",
+ fw_name);
+ warn_firmware_not_loaded = false;
+ }
dev_info(&client->dev, "firmware version: %c.%c.%d\n",
cmd.args[6], cmd.args[7], cmd.args[8]);
@@ -298,6 +298,11 @@ static int si2157_init(struct dvb_frontend *fe)
return 0;
err:
+ if (warn_firmware_not_loaded)
+ dev_err(&client->dev,
+ "firmware file '%s' not found. Can't continue without a firmware.\n",
+ fw_name);
+
dev_dbg(&client->dev, "failed=%d\n", ret);
return ret;
}
--
2.33.1
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH 3/3] media: si2157: rework the firmware load logic
2021-12-08 10:13 ` [PATCH 3/3] media: si2157: rework the firmware load logic Mauro Carvalho Chehab
@ 2021-12-08 22:37 ` Robert Schlabbach
2021-12-09 11:34 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 17+ messages in thread
From: Robert Schlabbach @ 2021-12-08 22:37 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
> Loading a firmware file should not be mandatory, as devices
> could work with an eeprom firmware, if available.
>
> Yet, using the eeprom firmware could lead into unpredictable
> results, so the best is to warn about that.
As there is no proof of an EEPROM being involved in any of
that, but strong evidence that all these devices actually have
an embedded firmware ROM, I propose changing that to "ROM"
instead.
> + bool warn_firmware_not_loaded = false;
> unsigned int chip_id, xtal_trim;
> - unsigned int fw_required;
> + bool fw_required = true;
To me, this is getting too ugly. All these per-model special
flags set somewhere in the code.
I propose removing BOTH these flags. Review of the SiLabs code
revealed:
1. ALL of the tuner models this driver supports have a firmware
patch from SiLabs available.
2. NONE of them seems to require it. At least all the SiLabs
drivers allow disabling the download.
So my proposal is:
1. Add firmware download support to all tuner models (this
means adding some new firmware file names)
2. When a firmware file is not available, log an info (not
warning) message and proceed.
None of the above boolean flags are needed then. The
dont_load_firmware flag from the config should of course be
kept as it is.
> + dev_warn(&client->dev, "firmware file '%s' not found. Using firmware from eeprom.\n",
Aside from using dev_info instead and changing the text to
"ROM firmware will be used.", this would also be a duplicate
message, as firmware_request() also logs a message when a
requested firmware file is not found.
So I propose also changing the firmware_request() call to
request_firmware_nowarn() instead to suppress the message
from the firmware loader.
Best Regards,
-Robert Schlabbach
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 3/3] media: si2157: rework the firmware load logic
2021-12-08 22:37 ` Robert Schlabbach
@ 2021-12-09 11:34 ` Mauro Carvalho Chehab
2021-12-09 19:37 ` Robert Schlabbach
0 siblings, 1 reply; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-09 11:34 UTC (permalink / raw)
To: Robert Schlabbach; +Cc: linux-media
Em Wed, 8 Dec 2021 23:37:33 +0100
Robert Schlabbach <robert_s@gmx.net> escreveu:
> > Loading a firmware file should not be mandatory, as devices
> > could work with an eeprom firmware, if available.
> >
> > Yet, using the eeprom firmware could lead into unpredictable
> > results, so the best is to warn about that.
>
> As there is no proof of an EEPROM being involved in any of
> that, but strong evidence that all these devices actually have
> an embedded firmware ROM, I propose changing that to "ROM"
> instead.
Agreed. Will do such changes on patch 4, to be added to this series.
> > + bool warn_firmware_not_loaded = false;
> > unsigned int chip_id, xtal_trim;
> > - unsigned int fw_required;
> > + bool fw_required = true;
>
> To me, this is getting too ugly. All these per-model special
> flags set somewhere in the code.
>
> I propose removing BOTH these flags. Review of the SiLabs code
> revealed:
>
> 1. ALL of the tuner models this driver supports have a firmware
> patch from SiLabs available.
OK.
> 2. NONE of them seems to require it. At least all the SiLabs
> drivers allow disabling the download.
Not true. if you check the code for si2148, it doesn't have
an option to skip firmware load.
The same is also true for other currently unsupported models.
> So my proposal is:
>
> 1. Add firmware download support to all tuner models (this
> means adding some new firmware file names)
Ok.
> 2. When a firmware file is not available, log an info (not
> warning) message and proceed.
I guess this shouldn't be allowed for si2148 devices.
> None of the above boolean flags are needed then. The
> dont_load_firmware flag from the config should of course be
> kept as it is.
>
> > + dev_warn(&client->dev, "firmware file '%s' not found. Using firmware from eeprom.\n",
>
> Aside from using dev_info instead and changing the text to
> "ROM firmware will be used.", this would also be a duplicate
> message, as firmware_request() also logs a message when a
> requested firmware file is not found.
>
> So I propose also changing the firmware_request() call to
> request_firmware_nowarn() instead to suppress the message
> from the firmware loader.
I can't see a request_firmware_nowarn() function, but year, the
printed messages can be simplified.
Thanks,
Mauro
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 3/3] media: si2157: rework the firmware load logic
2021-12-09 11:34 ` Mauro Carvalho Chehab
@ 2021-12-09 19:37 ` Robert Schlabbach
2021-12-10 6:45 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 17+ messages in thread
From: Robert Schlabbach @ 2021-12-09 19:37 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
> Not true. if you check the code for si2148, it doesn't have
> an option to skip firmware load.
You're right. I thought I had checked all code, but I must have
missed that one.
Or I was distracted by the fact that for Si2148 with romid 0x33,
a "dummy patch" is used, which according to the code comment
skips the firmware download and boots from NVM only. So I suppose
that version does not actually need the firmware...?!?
> I can't see a request_firmware_nowarn() function
Sorry, it's:
EXPORT_SYMBOL_GPL(firmware_request_nowarn);
They swapped the words around vs. the original function, for
whatever reason. Anyway, please use "firmware_request_nowarn()"
which does not log any message when the file is not found, so
that only the message logged from the si2157 shows up in the
kernel log.
Best Regards,
-Robert Schlabbach
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 3/3] media: si2157: rework the firmware load logic
2021-12-09 19:37 ` Robert Schlabbach
@ 2021-12-10 6:45 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 17+ messages in thread
From: Mauro Carvalho Chehab @ 2021-12-10 6:45 UTC (permalink / raw)
To: Robert Schlabbach; +Cc: linux-media
Em Thu, 9 Dec 2021 20:37:29 +0100
Robert Schlabbach <robert_s@gmx.net> escreveu:
> > Not true. if you check the code for si2148, it doesn't have
> > an option to skip firmware load.
>
> You're right. I thought I had checked all code, but I must have
> missed that one.
>
> Or I was distracted by the fact that for Si2148 with romid 0x33,
> a "dummy patch" is used, which according to the code comment
> skips the firmware download and boots from NVM only. So I suppose
> that version does not actually need the firmware...?!?
That's a good question. It sounds funny to have a "dummy patch"
loaded that would "skip firmware download", as the same would happen
without a firmware patch :-)
Hard to know for sure, but maybe the comment there was just outdated.
E. g. on a previous release it would have the code below such comment
also commented, but a new patch was then added, but someone forgot
to remove the comments.
> > I can't see a request_firmware_nowarn() function
>
> Sorry, it's:
>
> EXPORT_SYMBOL_GPL(firmware_request_nowarn);
Ah ;-)
> They swapped the words around vs. the original function, for
> whatever reason. Anyway, please use "firmware_request_nowarn()"
> which does not log any message when the file is not found, so
> that only the message logged from the si2157 shows up in the
> kernel log.
Yeah, makes sense, especially since we'll be trying to load two
firmware files, at least for some of the tuners.
Thanks,
Mauro
^ permalink raw reply [flat|nested] 17+ messages in thread