* [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
@ 2009-09-05 17:13 Alistair John Strachan
2009-09-06 7:23 ` Hans de Goede
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Alistair John Strachan @ 2009-09-05 17:13 UTC (permalink / raw)
To: lm-sensors
Most known Abit motherboards have unique uguru chip IDs. However,
some "refresh" boards keep the same chip ID but have a different
DMI string. As our DMI board string matching is (necessarily)
strict, some boards were failing DMI detection, and as the old
probe method was also failing, the driver would not load.
The only known boards affected by this problem are the IP35 Pro XE
(vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
relax the match criteria, as some boards (e.g. the AB9 Quad GT)
have different uguru chip IDs.
This patch replaces the dmi_name string with a NULL terminated
array of strings to be matched per uguru chip ID. It has been
compile and runtime tested (thanks Rune).
References: https://bugs.launchpad.net/bugs/298798
Signed-off-by: Alistair John Strachan <alistair@devzero.co.uk>
Tested-by: Rune Svendsen <runesvend@gmail.com>
Cc: Rune Svendsen <runesvend@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: lm-sensors@lm-sensors.org
---
drivers/hwmon/abituguru3.c | 63 +++++++++++++++++++++++--------------------
1 files changed, 34 insertions(+), 29 deletions(-)
diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
index 7d3f15d..5203ec2 100644
--- a/drivers/hwmon/abituguru3.c
+++ b/drivers/hwmon/abituguru3.c
@@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
int offset;
};
+/* Avoid use of flexible array members */
+#define ABIT_UGURU3_MAX_DMI_NAMES 2
+
struct abituguru3_motherboard_info {
u16 id;
- const char *dmi_name;
+ const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
/* + 1 -> end of sensors indicated by a sensor with name = NULL */
struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
};
@@ -164,7 +167,7 @@ struct abituguru3_data {
/* Constants */
static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
- { 0x000C, NULL /* Unknown, need DMI string */, {
+ { 0x000C, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 35, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000D, NULL /* Abit AW8, need DMI string */, {
+ { 0x000D, { NULL } /* Abit AW8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000E, NULL /* AL-8, need DMI string */, {
+ { 0x000E, { NULL } /* AL-8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000F, NULL /* Unknown, need DMI string */, {
+ { 0x000F, { NULL } /* Unknown, need DMI string */, {
+
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
+ { 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0011, "AT8 32X", {
+ { 0x0011, { "AT8 32X", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
+ { 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0013, NULL /* Abit AW8D, need DMI string */, {
+ { 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0014, "AB9", /* + AB9 Pro */ {
+ { 0x0014, { "AB9", "AB9 Pro", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0015, NULL /* Unknown, need DMI string */, {
+ { 0x0015, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0016, "AW9D-MAX", {
+ { 0x0016, { "AW9D-MAX", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 38, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0017, NULL /* Unknown, need DMI string */, {
+ { 0x0017, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0018, "AB9 QuadGT", {
+ { 0x0018, { "AB9 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0019, "IN9 32X MAX", {
+ { 0x0019, { "IN9 32X MAX", NULL }, {
{ "CPU Core", 7, 0, 10, 1, 0 },
{ "DDR2", 13, 0, 20, 1, 0 },
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
@@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001A, "IP35 Pro", {
+ { 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX4 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001B, NULL /* Unknown, need DMI string */, {
+ { 0x001B, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR3", 1, 0, 20, 1, 0 },
{ "DDR3 VTT", 2, 0, 10, 1, 0 },
@@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001C, "IX38 QuadGT", {
+ { 0x001C, { "IX38 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
+ { 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
};
@@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
"ID: %04X\n", (unsigned int)id);
#ifdef CONFIG_DMI
- if (!abituguru3_motherboards[i].dmi_name) {
+ if (!*abituguru3_motherboards[i].dmi_name) {
printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
"not detected using DMI. Please send the output of "
"\"dmidecode\" to the abituguru3 maintainer "
@@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
{
const char *board_vendor, *board_name;
int i, err = (force) ? 1 : -ENODEV;
+ const char *const *dmi_name;
size_t sublen;
board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
@@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
sublen--;
for (i = 0; abituguru3_motherboards[i].id; i++) {
- const char *dmi_name = abituguru3_motherboards[i].dmi_name;
- if (!dmi_name || strlen(dmi_name) != sublen)
- continue;
- if (!strncasecmp(board_name, dmi_name, sublen))
- break;
+ dmi_name = abituguru3_motherboards[i].dmi_name;
+ for ( ; *dmi_name; dmi_name++) {
+ if (strlen(*dmi_name) != sublen)
+ continue;
+ if (!strncasecmp(board_name, *dmi_name, sublen))
+ return 0;
+ }
}
- if (!abituguru3_motherboards[i].id)
- return 1;
-
- return 0;
+ /* No match found */
+ return 1;
}
#else /* !CONFIG_DMI */
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
@ 2009-09-06 7:23 ` Hans de Goede
2009-09-06 9:15 ` Alistair John Strachan
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Hans de Goede @ 2009-09-06 7:23 UTC (permalink / raw)
To: lm-sensors
Hi,
On 09/05/2009 07:13 PM, Alistair John Strachan wrote:
> Most known Abit motherboards have unique uguru chip IDs. However,
> some "refresh" boards keep the same chip ID but have a different
> DMI string. As our DMI board string matching is (necessarily)
> strict, some boards were failing DMI detection, and as the old
> probe method was also failing, the driver would not load.
>
> The only known boards affected by this problem are the IP35 Pro XE
> (vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
> relax the match criteria, as some boards (e.g. the AB9 Quad GT)
> have different uguru chip IDs.
>
> This patch replaces the dmi_name string with a NULL terminated
> array of strings to be matched per uguru chip ID. It has been
> compile and runtime tested (thanks Rune).
>
> References: https://bugs.launchpad.net/bugs/298798
>
> Signed-off-by: Alistair John Strachan<alistair@devzero.co.uk>
> Tested-by: Rune Svendsen<runesvend@gmail.com>
> Cc: Rune Svendsen<runesvend@gmail.com>
> Cc: Hans de Goede<hdegoede@redhat.com>
> Cc: lm-sensors@lm-sensors.org
>
> ---
> drivers/hwmon/abituguru3.c | 63 +++++++++++++++++++++++--------------------
> 1 files changed, 34 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
> index 7d3f15d..5203ec2 100644
> --- a/drivers/hwmon/abituguru3.c
> +++ b/drivers/hwmon/abituguru3.c
<snip>
> @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
> "ID: %04X\n", (unsigned int)id);
>
> #ifdef CONFIG_DMI
> - if (!abituguru3_motherboards[i].dmi_name) {
> + if (!*abituguru3_motherboards[i].dmi_name) {
> printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> "not detected using DMI. Please send the output of "
> "\"dmidecode\" to the abituguru3 maintainer "
I would prefer to see you write this as:
+ if (!abituguru3_motherboards[i].dmi_name[0]) {
This is better readable IMHO (I always dislike people using the singleton *
operator when they want to get the first member of an array. The singleton
* operator is for getting the content of a pointer).
Note this is in no way a blocker for this patch, just my preference.
> @@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
> {
> const char *board_vendor, *board_name;
> int i, err = (force) ? 1 : -ENODEV;
> + const char *const *dmi_name;
> size_t sublen;
>
> board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
> @@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
> sublen--;
>
> for (i = 0; abituguru3_motherboards[i].id; i++) {
> - const char *dmi_name = abituguru3_motherboards[i].dmi_name;
> - if (!dmi_name || strlen(dmi_name) != sublen)
> - continue;
> - if (!strncasecmp(board_name, dmi_name, sublen))
> - break;
> + dmi_name = abituguru3_motherboards[i].dmi_name;
> + for ( ; *dmi_name; dmi_name++) {
> + if (strlen(*dmi_name) != sublen)
> + continue;
> + if (!strncasecmp(board_name, *dmi_name, sublen))
> + return 0;
> + }
> }
>
> - if (!abituguru3_motherboards[i].id)
> - return 1;
> -
> - return 0;
> + /* No match found */
> + return 1;
> }
>
> #else /* !CONFIG_DMI */
Other then that the patch looks good to me.
Regards,
Hans
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
2009-09-06 7:23 ` Hans de Goede
@ 2009-09-06 9:15 ` Alistair John Strachan
2009-09-06 9:37 ` Hans de Goede
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alistair John Strachan @ 2009-09-06 9:15 UTC (permalink / raw)
To: lm-sensors
Most known Abit motherboards have unique uguru chip IDs. However,
some "refresh" boards keep the same chip ID but have a different
DMI string. As our DMI board string matching is (necessarily)
strict, some boards were failing DMI detection, and as the old
probe method was also failing, the driver would not load.
The only known boards affected by this problem are the IP35 Pro XE
(vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
relax the match criteria, as some boards (e.g. the AB9 Quad GT)
have different uguru chip IDs.
This patch replaces the dmi_name string with a NULL terminated
array of strings to be matched per uguru chip ID. It has been
compile and runtime tested (thanks Rune).
References: https://bugs.launchpad.net/bugs/298798
Signed-off-by: Alistair John Strachan <alistair@devzero.co.uk>
Tested-by: Rune Svendsen <runesvend@gmail.com>
Cc: Rune Svendsen <runesvend@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: lm-sensors@lm-sensors.org
---
drivers/hwmon/abituguru3.c | 63 +++++++++++++++++++++++--------------------
1 files changed, 34 insertions(+), 29 deletions(-)
diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
index 7d3f15d..5203ec2 100644
--- a/drivers/hwmon/abituguru3.c
+++ b/drivers/hwmon/abituguru3.c
@@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
int offset;
};
+/* Avoid use of flexible array members */
+#define ABIT_UGURU3_MAX_DMI_NAMES 2
+
struct abituguru3_motherboard_info {
u16 id;
- const char *dmi_name;
+ const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
/* + 1 -> end of sensors indicated by a sensor with name = NULL */
struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
};
@@ -164,7 +167,7 @@ struct abituguru3_data {
/* Constants */
static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
- { 0x000C, NULL /* Unknown, need DMI string */, {
+ { 0x000C, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 35, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000D, NULL /* Abit AW8, need DMI string */, {
+ { 0x000D, { NULL } /* Abit AW8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000E, NULL /* AL-8, need DMI string */, {
+ { 0x000E, { NULL } /* AL-8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000F, NULL /* Unknown, need DMI string */, {
+ { 0x000F, { NULL } /* Unknown, need DMI string */, {
+
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
+ { 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0011, "AT8 32X", {
+ { 0x0011, { "AT8 32X", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
+ { 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0013, NULL /* Abit AW8D, need DMI string */, {
+ { 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0014, "AB9", /* + AB9 Pro */ {
+ { 0x0014, { "AB9", "AB9 Pro", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0015, NULL /* Unknown, need DMI string */, {
+ { 0x0015, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0016, "AW9D-MAX", {
+ { 0x0016, { "AW9D-MAX", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 38, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0017, NULL /* Unknown, need DMI string */, {
+ { 0x0017, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0018, "AB9 QuadGT", {
+ { 0x0018, { "AB9 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0019, "IN9 32X MAX", {
+ { 0x0019, { "IN9 32X MAX", NULL }, {
{ "CPU Core", 7, 0, 10, 1, 0 },
{ "DDR2", 13, 0, 20, 1, 0 },
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
@@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001A, "IP35 Pro", {
+ { 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX4 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001B, NULL /* Unknown, need DMI string */, {
+ { 0x001B, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR3", 1, 0, 20, 1, 0 },
{ "DDR3 VTT", 2, 0, 10, 1, 0 },
@@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001C, "IX38 QuadGT", {
+ { 0x001C, { "IX38 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
+ { 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
};
@@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
"ID: %04X\n", (unsigned int)id);
#ifdef CONFIG_DMI
- if (!abituguru3_motherboards[i].dmi_name) {
+ if (!abituguru3_motherboards[i].dmi_name[0]) {
printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
"not detected using DMI. Please send the output of "
"\"dmidecode\" to the abituguru3 maintainer "
@@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
{
const char *board_vendor, *board_name;
int i, err = (force) ? 1 : -ENODEV;
+ const char *const *dmi_name;
size_t sublen;
board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
@@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
sublen--;
for (i = 0; abituguru3_motherboards[i].id; i++) {
- const char *dmi_name = abituguru3_motherboards[i].dmi_name;
- if (!dmi_name || strlen(dmi_name) != sublen)
- continue;
- if (!strncasecmp(board_name, dmi_name, sublen))
- break;
+ dmi_name = abituguru3_motherboards[i].dmi_name;
+ for ( ; *dmi_name; dmi_name++) {
+ if (strlen(*dmi_name) != sublen)
+ continue;
+ if (!strncasecmp(board_name, *dmi_name, sublen))
+ return 0;
+ }
}
- if (!abituguru3_motherboards[i].id)
- return 1;
-
- return 0;
+ /* No match found */
+ return 1;
}
#else /* !CONFIG_DMI */
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
2009-09-06 7:23 ` Hans de Goede
2009-09-06 9:15 ` Alistair John Strachan
@ 2009-09-06 9:37 ` Hans de Goede
2009-09-06 12:03 ` Jean Delvare
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Hans de Goede @ 2009-09-06 9:37 UTC (permalink / raw)
To: lm-sensors
Hi,
Looks perfect now.
Acked-by: Hans de Goede<hdegoede@redhat.com>
Regards,
Hans
On 09/06/2009 11:15 AM, Alistair John Strachan wrote:
> Most known Abit motherboards have unique uguru chip IDs. However,
> some "refresh" boards keep the same chip ID but have a different
> DMI string. As our DMI board string matching is (necessarily)
> strict, some boards were failing DMI detection, and as the old
> probe method was also failing, the driver would not load.
>
> The only known boards affected by this problem are the IP35 Pro XE
> (vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
> relax the match criteria, as some boards (e.g. the AB9 Quad GT)
> have different uguru chip IDs.
>
> This patch replaces the dmi_name string with a NULL terminated
> array of strings to be matched per uguru chip ID. It has been
> compile and runtime tested (thanks Rune).
>
> References: https://bugs.launchpad.net/bugs/298798
>
> Signed-off-by: Alistair John Strachan<alistair@devzero.co.uk>
> Tested-by: Rune Svendsen<runesvend@gmail.com>
> Cc: Rune Svendsen<runesvend@gmail.com>
> Cc: Hans de Goede<hdegoede@redhat.com>
> Cc: lm-sensors@lm-sensors.org
>
> ---
> drivers/hwmon/abituguru3.c | 63 +++++++++++++++++++++++--------------------
> 1 files changed, 34 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
> index 7d3f15d..5203ec2 100644
> --- a/drivers/hwmon/abituguru3.c
> +++ b/drivers/hwmon/abituguru3.c
> @@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
> int offset;
> };
>
> +/* Avoid use of flexible array members */
> +#define ABIT_UGURU3_MAX_DMI_NAMES 2
> +
> struct abituguru3_motherboard_info {
> u16 id;
> - const char *dmi_name;
> + const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
> /* + 1 -> end of sensors indicated by a sensor with name = NULL */
> struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
> };
> @@ -164,7 +167,7 @@ struct abituguru3_data {
>
> /* Constants */
> static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> - { 0x000C, NULL /* Unknown, need DMI string */, {
> + { 0x000C, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX1 Fan", 35, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000D, NULL /* Abit AW8, need DMI string */, {
> + { 0x000D, { NULL } /* Abit AW8, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX5 Fan", 39, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000E, NULL /* AL-8, need DMI string */, {
> + { 0x000E, { NULL } /* AL-8, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000F, NULL /* Unknown, need DMI string */, {
> + { 0x000F, { NULL } /* Unknown, need DMI string */, {
> +
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
> + { 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "OTES1 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0011, "AT8 32X", {
> + { 0x0011, { "AT8 32X", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
> + { 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX1 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0013, NULL /* Abit AW8D, need DMI string */, {
> + { 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX5 Fan", 39, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0014, "AB9", /* + AB9 Pro */ {
> + { 0x0014, { "AB9", "AB9 Pro", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0015, NULL /* Unknown, need DMI string */, {
> + { 0x0015, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0016, "AW9D-MAX", {
> + { 0x0016, { "AW9D-MAX", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "OTES1 Fan", 38, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0017, NULL /* Unknown, need DMI string */, {
> + { 0x0017, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 FAN", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0018, "AB9 QuadGT", {
> + { 0x0018, { "AB9 QuadGT", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0019, "IN9 32X MAX", {
> + { 0x0019, { "IN9 32X MAX", NULL }, {
> { "CPU Core", 7, 0, 10, 1, 0 },
> { "DDR2", 13, 0, 20, 1, 0 },
> { "DDR2 VTT", 14, 0, 10, 1, 0 },
> @@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 FAN", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001A, "IP35 Pro", {
> + { 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX4 Fan", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001B, NULL /* Unknown, need DMI string */, {
> + { 0x001B, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR3", 1, 0, 20, 1, 0 },
> { "DDR3 VTT", 2, 0, 10, 1, 0 },
> @@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001C, "IX38 QuadGT", {
> + { 0x001C, { "IX38 QuadGT", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
> + { 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
> };
>
>
> @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
> "ID: %04X\n", (unsigned int)id);
>
> #ifdef CONFIG_DMI
> - if (!abituguru3_motherboards[i].dmi_name) {
> + if (!abituguru3_motherboards[i].dmi_name[0]) {
> printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> "not detected using DMI. Please send the output of "
> "\"dmidecode\" to the abituguru3 maintainer "
> @@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
> {
> const char *board_vendor, *board_name;
> int i, err = (force) ? 1 : -ENODEV;
> + const char *const *dmi_name;
> size_t sublen;
>
> board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
> @@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
> sublen--;
>
> for (i = 0; abituguru3_motherboards[i].id; i++) {
> - const char *dmi_name = abituguru3_motherboards[i].dmi_name;
> - if (!dmi_name || strlen(dmi_name) != sublen)
> - continue;
> - if (!strncasecmp(board_name, dmi_name, sublen))
> - break;
> + dmi_name = abituguru3_motherboards[i].dmi_name;
> + for ( ; *dmi_name; dmi_name++) {
> + if (strlen(*dmi_name) != sublen)
> + continue;
> + if (!strncasecmp(board_name, *dmi_name, sublen))
> + return 0;
> + }
> }
>
> - if (!abituguru3_motherboards[i].id)
> - return 1;
> -
> - return 0;
> + /* No match found */
> + return 1;
> }
>
> #else /* !CONFIG_DMI */
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (2 preceding siblings ...)
2009-09-06 9:37 ` Hans de Goede
@ 2009-09-06 12:03 ` Jean Delvare
2009-09-06 13:55 ` Alistair John Strachan
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Jean Delvare @ 2009-09-06 12:03 UTC (permalink / raw)
To: lm-sensors
Hi Alistair,
On Sun, 6 Sep 2009 10:15:53 +0100, Alistair John Strachan wrote:
> Most known Abit motherboards have unique uguru chip IDs. However,
> some "refresh" boards keep the same chip ID but have a different
> DMI string. As our DMI board string matching is (necessarily)
> strict, some boards were failing DMI detection, and as the old
> probe method was also failing, the driver would not load.
>
> The only known boards affected by this problem are the IP35 Pro XE
> (vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
> relax the match criteria, as some boards (e.g. the AB9 Quad GT)
> have different uguru chip IDs.
>
> This patch replaces the dmi_name string with a NULL terminated
> array of strings to be matched per uguru chip ID. It has been
> compile and runtime tested (thanks Rune).
>
> References: https://bugs.launchpad.net/bugs/298798
Looks overall good, with a suggestion for improvement below:
>
> Signed-off-by: Alistair John Strachan <alistair@devzero.co.uk>
> Tested-by: Rune Svendsen <runesvend@gmail.com>
> Cc: Rune Svendsen <runesvend@gmail.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: lm-sensors@lm-sensors.org
>
> ---
> drivers/hwmon/abituguru3.c | 63 +++++++++++++++++++++++--------------------
> 1 files changed, 34 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
> index 7d3f15d..5203ec2 100644
> --- a/drivers/hwmon/abituguru3.c
> +++ b/drivers/hwmon/abituguru3.c
> @@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
> int offset;
> };
>
> +/* Avoid use of flexible array members */
> +#define ABIT_UGURU3_MAX_DMI_NAMES 2
> +
> struct abituguru3_motherboard_info {
> u16 id;
> - const char *dmi_name;
> + const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
> /* + 1 -> end of sensors indicated by a sensor with name = NULL */
> struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
> };
> @@ -164,7 +167,7 @@ struct abituguru3_data {
>
> /* Constants */
> static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> - { 0x000C, NULL /* Unknown, need DMI string */, {
> + { 0x000C, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX1 Fan", 35, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000D, NULL /* Abit AW8, need DMI string */, {
> + { 0x000D, { NULL } /* Abit AW8, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX5 Fan", 39, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000E, NULL /* AL-8, need DMI string */, {
> + { 0x000E, { NULL } /* AL-8, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x000F, NULL /* Unknown, need DMI string */, {
> + { 0x000F, { NULL } /* Unknown, need DMI string */, {
> +
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
> + { 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "OTES1 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0011, "AT8 32X", {
> + { 0x0011, { "AT8 32X", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
> + { 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX1 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0013, NULL /* Abit AW8D, need DMI string */, {
> + { 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX5 Fan", 39, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0014, "AB9", /* + AB9 Pro */ {
> + { 0x0014, { "AB9", "AB9 Pro", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 10, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "SYS Fan", 34, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0015, NULL /* Unknown, need DMI string */, {
> + { 0x0015, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR", 1, 0, 20, 1, 0 },
> { "DDR VTT", 2, 0, 10, 1, 0 },
> @@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0016, "AW9D-MAX", {
> + { 0x0016, { "AW9D-MAX", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "OTES1 Fan", 38, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0017, NULL /* Unknown, need DMI string */, {
> + { 0x0017, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 FAN", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0018, "AB9 QuadGT", {
> + { 0x0018, { "AB9 QuadGT", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0019, "IN9 32X MAX", {
> + { 0x0019, { "IN9 32X MAX", NULL }, {
> { "CPU Core", 7, 0, 10, 1, 0 },
> { "DDR2", 13, 0, 20, 1, 0 },
> { "DDR2 VTT", 14, 0, 10, 1, 0 },
> @@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 FAN", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001A, "IP35 Pro", {
> + { 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX4 Fan", 37, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001B, NULL /* Unknown, need DMI string */, {
> + { 0x001B, { NULL } /* Unknown, need DMI string */, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR3", 1, 0, 20, 1, 0 },
> { "DDR3 VTT", 2, 0, 10, 1, 0 },
> @@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x001C, "IX38 QuadGT", {
> + { 0x001C, { "IX38 QuadGT", NULL }, {
> { "CPU Core", 0, 0, 10, 1, 0 },
> { "DDR2", 1, 0, 20, 1, 0 },
> { "DDR2 VTT", 2, 0, 10, 1, 0 },
> @@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> { "AUX3 Fan", 36, 2, 60, 1, 0 },
> { NULL, 0, 0, 0, 0, 0 } }
> },
> - { 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
> + { 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
> };
>
>
> @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
> "ID: %04X\n", (unsigned int)id);
>
> #ifdef CONFIG_DMI
> - if (!abituguru3_motherboards[i].dmi_name) {
> + if (!abituguru3_motherboards[i].dmi_name[0]) {
> printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> "not detected using DMI. Please send the output of "
> "\"dmidecode\" to the abituguru3 maintainer "
This test is no longer as perfect as it used to be. Now that you admit
that each ID can correspond to more than one board model, it is
possible that the board was _not_ detected using DMI but this message
will not show (because another board with this ID is already known.)
While this is not a blocker, I still think it would be worth improving.
Maybe I am missing something obvious, but why isn't this message
printed in abituguru3_dmi_detect() directly? This would be more
efficient and more elegant too IMHO.
> @@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
> {
> const char *board_vendor, *board_name;
> int i, err = (force) ? 1 : -ENODEV;
> + const char *const *dmi_name;
> size_t sublen;
>
> board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
> @@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
> sublen--;
>
> for (i = 0; abituguru3_motherboards[i].id; i++) {
> - const char *dmi_name = abituguru3_motherboards[i].dmi_name;
> - if (!dmi_name || strlen(dmi_name) != sublen)
> - continue;
> - if (!strncasecmp(board_name, dmi_name, sublen))
> - break;
> + dmi_name = abituguru3_motherboards[i].dmi_name;
> + for ( ; *dmi_name; dmi_name++) {
> + if (strlen(*dmi_name) != sublen)
> + continue;
> + if (!strncasecmp(board_name, *dmi_name, sublen))
> + return 0;
> + }
> }
>
> - if (!abituguru3_motherboards[i].id)
> - return 1;
> -
> - return 0;
> + /* No match found */
> + return 1;
> }
>
> #else /* !CONFIG_DMI */
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (3 preceding siblings ...)
2009-09-06 12:03 ` Jean Delvare
@ 2009-09-06 13:55 ` Alistair John Strachan
2009-09-06 14:06 ` Jean Delvare
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alistair John Strachan @ 2009-09-06 13:55 UTC (permalink / raw)
To: lm-sensors
Hi Jean,
On Sunday 06 September 2009 13:03:51 Jean Delvare wrote:
> On Sun, 6 Sep 2009 10:15:53 +0100, Alistair John Strachan wrote:
> > #ifdef CONFIG_DMI
> > - if (!abituguru3_motherboards[i].dmi_name) {
> > + if (!abituguru3_motherboards[i].dmi_name[0]) {
> > printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> > "not detected using DMI. Please send the output of "
> > "\"dmidecode\" to the abituguru3 maintainer "
>
> This test is no longer as perfect as it used to be. Now that you admit
> that each ID can correspond to more than one board model, it is
> possible that the board was _not_ detected using DMI but this message
> will not show (because another board with this ID is already known.)
> While this is not a blocker, I still think it would be worth improving.
You're right. I think the message should go in abituguru3_init() after
abituguru3_detect() (legacy probing) succeeds. Because..
> Maybe I am missing something obvious, but why isn't this message
> printed in abituguru3_dmi_detect() directly? This would be more
> efficient and more elegant too IMHO.
I don't think it would be correct though. I assume we don't want to print
anything out if somebody loads the driver on truly unsupported hardware. In
this case abituguru3_dmi_detect() will fail (rightfully) and then the legacy
probe method will also fail (hopefully) and modprobe will fail. Nothing would
be printed.
There's the unfortunate case where DMI match can fail (due to incomplete
cataloguing of strings) and the legacy probe can also fail (due to it being
rubbish) and this can also result in no messages being printed for supported
hardware. However, I don't think there's much we can do about that.
--
Cheers,
Alistair.
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (4 preceding siblings ...)
2009-09-06 13:55 ` Alistair John Strachan
@ 2009-09-06 14:06 ` Jean Delvare
2009-09-06 14:15 ` Rune Svendsen
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Jean Delvare @ 2009-09-06 14:06 UTC (permalink / raw)
To: lm-sensors
On Sun, 6 Sep 2009 14:55:08 +0100, Alistair John Strachan wrote:
> Hi Jean,
>
> On Sunday 06 September 2009 13:03:51 Jean Delvare wrote:
> > On Sun, 6 Sep 2009 10:15:53 +0100, Alistair John Strachan wrote:
> > > #ifdef CONFIG_DMI
> > > - if (!abituguru3_motherboards[i].dmi_name) {
> > > + if (!abituguru3_motherboards[i].dmi_name[0]) {
> > > printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> > > "not detected using DMI. Please send the output of "
> > > "\"dmidecode\" to the abituguru3 maintainer "
> >
> > This test is no longer as perfect as it used to be. Now that you admit
> > that each ID can correspond to more than one board model, it is
> > possible that the board was _not_ detected using DMI but this message
> > will not show (because another board with this ID is already known.)
> > While this is not a blocker, I still think it would be worth improving.
>
> You're right. I think the message should go in abituguru3_init() after
> abituguru3_detect() (legacy probing) succeeds. Because..
>
> > Maybe I am missing something obvious, but why isn't this message
> > printed in abituguru3_dmi_detect() directly? This would be more
> > efficient and more elegant too IMHO.
>
> I don't think it would be correct though. I assume we don't want to print
> anything out if somebody loads the driver on truly unsupported hardware. In
> this case abituguru3_dmi_detect() will fail (rightfully) and then the legacy
> probe method will also fail (hopefully) and modprobe will fail. Nothing would
> be printed.
You are perfectly correct :) I knew I was overlooking something!
Can you please either update your patch, or send a second, incremental
one fixing the problem?
> There's the unfortunate case where DMI match can fail (due to incomplete
> cataloguing of strings) and the legacy probe can also fail (due to it being
> rubbish) and this can also result in no messages being printed for supported
> hardware. However, I don't think there's much we can do about that.
That's right. But that should be rare enough that it doesn't matter,
especially when hopefully the affected user would report the lack of
functionality so we finally know about the problem.
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (5 preceding siblings ...)
2009-09-06 14:06 ` Jean Delvare
@ 2009-09-06 14:15 ` Rune Svendsen
2009-09-06 14:30 ` Alistair John Strachan
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Rune Svendsen @ 2009-09-06 14:15 UTC (permalink / raw)
To: lm-sensors
(resending because my mail application apparently removed the CC'd addresses.)
On Sun, 2009-09-06 at 14:03 +0200, Jean Delvare wrote:
[snip]
> >
> >
> > @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
> > "ID: %04X\n", (unsigned int)id);
> >
> > #ifdef CONFIG_DMI
> > - if (!abituguru3_motherboards[i].dmi_name) {
> > + if (!abituguru3_motherboards[i].dmi_name[0]) {
> > printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> > "not detected using DMI. Please send the output of "
> > "\"dmidecode\" to the abituguru3 maintainer "
>
> This test is no longer as perfect as it used to be. Now that you admit
> that each ID can correspond to more than one board model, it is
> possible that the board was _not_ detected using DMI but this message
> will not show (because another board with this ID is already known.)
> While this is not a blocker, I still think it would be worth improving.
>
> Maybe I am missing something obvious, but why isn't this message
> printed in abituguru3_dmi_detect() directly? This would be more
> efficient and more elegant too IMHO.
After speaking with Alistair I've been thinking about this as well.
Right now, when I'm running a kernel that doesn't support inserting the
abituguru3 module without using the "force=1" option (a kernel to which
this patch has not been applied), I don't receive a message in my kernel
log about sending the output of "dmidecode" - precisely because of what
you mention here.
I'm thinking that that same rules that decide whether I get to insert
the abituguru3 module into the kernel should decide whether the message
about sending the output of "dmidecode" will appear.
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (6 preceding siblings ...)
2009-09-06 14:15 ` Rune Svendsen
@ 2009-09-06 14:30 ` Alistair John Strachan
2009-09-06 14:41 ` Alistair John Strachan
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alistair John Strachan @ 2009-09-06 14:30 UTC (permalink / raw)
To: lm-sensors
Most known Abit motherboards have unique uguru chip IDs. However,
some "refresh" boards keep the same chip ID but have a different
DMI string. As our DMI board string matching is (necessarily)
strict, some boards were failing DMI detection, and as the old
probe method was also failing, the driver would not load.
The only known boards affected by this problem are the IP35 Pro XE
(vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
relax the match criteria, as some boards (e.g. the AB9 Quad GT)
have different uguru chip IDs.
This patch replaces the dmi_name string with a NULL terminated
array of strings to be matched per uguru chip ID. It has been
compile and runtime tested (thanks Rune).
References: https://bugs.launchpad.net/bugs/298798
Signed-off-by: Alistair John Strachan <alistair@devzero.co.uk>
Tested-by: Rune Svendsen <runesvend@gmail.com>
Cc: Rune Svendsen <runesvend@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: lm-sensors@lm-sensors.org
---
drivers/hwmon/abituguru3.c | 77 +++++++++++++++++++++++---------------------
1 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
index 7d3f15d..d45c569 100644
--- a/drivers/hwmon/abituguru3.c
+++ b/drivers/hwmon/abituguru3.c
@@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
int offset;
};
+/* Avoid use of flexible array members */
+#define ABIT_UGURU3_MAX_DMI_NAMES 2
+
struct abituguru3_motherboard_info {
u16 id;
- const char *dmi_name;
+ const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
/* + 1 -> end of sensors indicated by a sensor with name = NULL */
struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
};
@@ -164,7 +167,7 @@ struct abituguru3_data {
/* Constants */
static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
- { 0x000C, NULL /* Unknown, need DMI string */, {
+ { 0x000C, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 35, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000D, NULL /* Abit AW8, need DMI string */, {
+ { 0x000D, { NULL } /* Abit AW8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000E, NULL /* AL-8, need DMI string */, {
+ { 0x000E, { NULL } /* AL-8, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x000F, NULL /* Unknown, need DMI string */, {
+ { 0x000F, { NULL } /* Unknown, need DMI string */, {
+
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
+ { 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0011, "AT8 32X", {
+ { 0x0011, { "AT8 32X", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
+ { 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0013, NULL /* Abit AW8D, need DMI string */, {
+ { 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX5 Fan", 39, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0014, "AB9", /* + AB9 Pro */ {
+ { 0x0014, { "AB9", "AB9 Pro", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 10, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "SYS Fan", 34, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0015, NULL /* Unknown, need DMI string */, {
+ { 0x0015, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
@@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0016, "AW9D-MAX", {
+ { 0x0016, { "AW9D-MAX", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 38, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0017, NULL /* Unknown, need DMI string */, {
+ { 0x0017, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0018, "AB9 QuadGT", {
+ { 0x0018, { "AB9 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0019, "IN9 32X MAX", {
+ { 0x0019, { "IN9 32X MAX", NULL }, {
{ "CPU Core", 7, 0, 10, 1, 0 },
{ "DDR2", 13, 0, 20, 1, 0 },
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
@@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001A, "IP35 Pro", {
+ { 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX4 Fan", 37, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001B, NULL /* Unknown, need DMI string */, {
+ { 0x001B, { NULL } /* Unknown, need DMI string */, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR3", 1, 0, 20, 1, 0 },
{ "DDR3 VTT", 2, 0, 10, 1, 0 },
@@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x001C, "IX38 QuadGT", {
+ { 0x001C, { "IX38 QuadGT", NULL }, {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
@@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
- { 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
+ { 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
};
@@ -946,15 +950,6 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
printk(KERN_INFO ABIT_UGURU3_NAME ": found Abit uGuru3, motherboard "
"ID: %04X\n", (unsigned int)id);
-#ifdef CONFIG_DMI
- if (!abituguru3_motherboards[i].dmi_name) {
- printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
- "not detected using DMI. Please send the output of "
- "\"dmidecode\" to the abituguru3 maintainer "
- "(see MAINTAINERS)\n");
- }
-#endif
-
/* Fill the sysfs attr array */
sysfs_attr_i = 0;
sysfs_filename = data->sysfs_names;
@@ -1131,6 +1126,7 @@ static int __init abituguru3_dmi_detect(void)
{
const char *board_vendor, *board_name;
int i, err = (force) ? 1 : -ENODEV;
+ const char *const *dmi_name;
size_t sublen;
board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
@@ -1151,17 +1147,17 @@ static int __init abituguru3_dmi_detect(void)
sublen--;
for (i = 0; abituguru3_motherboards[i].id; i++) {
- const char *dmi_name = abituguru3_motherboards[i].dmi_name;
- if (!dmi_name || strlen(dmi_name) != sublen)
- continue;
- if (!strncasecmp(board_name, dmi_name, sublen))
- break;
+ dmi_name = abituguru3_motherboards[i].dmi_name;
+ for ( ; *dmi_name; dmi_name++) {
+ if (strlen(*dmi_name) != sublen)
+ continue;
+ if (!strncasecmp(board_name, *dmi_name, sublen))
+ return 0;
+ }
}
- if (!abituguru3_motherboards[i].id)
- return 1;
-
- return 0;
+ /* No match found */
+ return 1;
}
#else /* !CONFIG_DMI */
@@ -1221,6 +1217,13 @@ static int __init abituguru3_init(void)
err = abituguru3_detect();
if (err)
return err;
+
+#ifdef CONFIG_DMI
+ printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
+ "not detected using DMI. Please send the output of "
+ "\"dmidecode\" to the abituguru3 maintainer "
+ "(see MAINTAINERS)\n");
+#endif
}
err = platform_driver_register(&abituguru3_driver);
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (7 preceding siblings ...)
2009-09-06 14:30 ` Alistair John Strachan
@ 2009-09-06 14:41 ` Alistair John Strachan
2009-09-06 15:05 ` Rune Svendsen
2009-09-06 16:23 ` Jean Delvare
10 siblings, 0 replies; 12+ messages in thread
From: Alistair John Strachan @ 2009-09-06 14:41 UTC (permalink / raw)
To: lm-sensors
Hi Rune,
(Fixed CCs)
On Sunday 06 September 2009 15:15:58 Rune Svendsen wrote:
> On Sun, 2009-09-06 at 14:03 +0200, Jean Delvare wrote:
> [snip]
>
> > > @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct
> > > platform_device *pdev) "ID: %04X\n", (unsigned int)id);
> > >
> > > #ifdef CONFIG_DMI
> > > - if (!abituguru3_motherboards[i].dmi_name) {
> > > + if (!abituguru3_motherboards[i].dmi_name[0]) {
> > > printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
> > > "not detected using DMI. Please send the output of "
> > > "\"dmidecode\" to the abituguru3 maintainer "
> >
> > This test is no longer as perfect as it used to be. Now that you admit
> > that each ID can correspond to more than one board model, it is
> > possible that the board was _not_ detected using DMI but this message
> > will not show (because another board with this ID is already known.)
> > While this is not a blocker, I still think it would be worth improving.
> >
> > Maybe I am missing something obvious, but why isn't this message
> > printed in abituguru3_dmi_detect() directly? This would be more
> > efficient and more elegant too IMHO.
>
> After speaking with Alistair I've been thinking about this as well.
> Right now, when I'm running a kernel that doesn't support inserting the
> abituguru3 module without using the "force=1" option (a kernel to which
> this patch has not been applied), I don't receive a message in my kernel
> log about sending the output of "dmidecode" - precisely because of what
> you mention here.
There's a bit of history associated with the DMI message. Before I added DMI
support to the driver the legacy probe method (which doesn't really work at
all on IP35 Pro) was used to detect the other 20-or-so supported mainboards.
On a lot of the boards in this list, this detection is reliable, and the
message I added was a useful helper to get people to send in their DMI info.
Unfortunately your case has fallen through the cracks of obscurity where both
DMI was broken (because of a bug) and legacy probing didn't work (because it
doesn't work on IP35 Pro). You board appears to the driver to be just like any
other unsupported hardware.
You're right that it's suboptimal there are no kernel messages displayed, but
consider the distro/script case where driver loading may be attempted
automatically on unsupported hardware. In this case it is customary for Linux
drivers to reject the modprobe with -ENODEV but *not* print a message.
Printing a verbose one about sending DMI info to the uguru maintainer would
certainly not be desirable!
So yes, it's not perfect, and maybe we could improve it a la "if it's an Abit
board, the message could be printed" but anything you do is really just a
heuristic.
--
Cheers,
Alistair.
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (8 preceding siblings ...)
2009-09-06 14:41 ` Alistair John Strachan
@ 2009-09-06 15:05 ` Rune Svendsen
2009-09-06 16:23 ` Jean Delvare
10 siblings, 0 replies; 12+ messages in thread
From: Rune Svendsen @ 2009-09-06 15:05 UTC (permalink / raw)
To: lm-sensors
Hi,
[snip]
>
> There's a bit of history associated with the DMI message. Before I added DMI
> support to the driver the legacy probe method (which doesn't really work at
> all on IP35 Pro) was used to detect the other 20-or-so supported mainboards.
> On a lot of the boards in this list, this detection is reliable, and the
> message I added was a useful helper to get people to send in their DMI info.
>
> Unfortunately your case has fallen through the cracks of obscurity where both
> DMI was broken (because of a bug) and legacy probing didn't work (because it
> doesn't work on IP35 Pro). You board appears to the driver to be just like any
> other unsupported hardware.
>
> You're right that it's suboptimal there are no kernel messages displayed, but
> consider the distro/script case where driver loading may be attempted
> automatically on unsupported hardware. In this case it is customary for Linux
> drivers to reject the modprobe with -ENODEV but *not* print a message.
> Printing a verbose one about sending DMI info to the uguru maintainer would
> certainly not be desirable!
>
> So yes, it's not perfect, and maybe we could improve it a la "if it's an Abit
> board, the message could be printed" but anything you do is really just a
> heuristic.
>
Ah, ok, I see what the problem is now. I didn't get the message because
for all abituguru3 knew, I didn't have an Abit motherboard. That makes
sense.
Well the good news would then be that by adding the IP35 Pro XE to pass
the DMI string test, there are no more IP35 Pro models left. So if the
legacy probing method is only non-functional for IP35 Pro boards, then
an Abit board should pass either of the two tests now.
(There are still several non-"Pro" "IP35" Abit boards left though: IP35,
IP35P, IP35V, IP35-E. But if it _is_ only the "Pro" models that are
incompatible with the legacy probing method, this issue should be
solved.)
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
` (9 preceding siblings ...)
2009-09-06 15:05 ` Rune Svendsen
@ 2009-09-06 16:23 ` Jean Delvare
10 siblings, 0 replies; 12+ messages in thread
From: Jean Delvare @ 2009-09-06 16:23 UTC (permalink / raw)
To: lm-sensors
On Sun, 6 Sep 2009 15:30:28 +0100, Alistair John Strachan wrote:
> Most known Abit motherboards have unique uguru chip IDs. However,
> some "refresh" boards keep the same chip ID but have a different
> DMI string. As our DMI board string matching is (necessarily)
> strict, some boards were failing DMI detection, and as the old
> probe method was also failing, the driver would not load.
>
> The only known boards affected by this problem are the IP35 Pro XE
> (vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
> relax the match criteria, as some boards (e.g. the AB9 Quad GT)
> have different uguru chip IDs.
>
> This patch replaces the dmi_name string with a NULL terminated
> array of strings to be matched per uguru chip ID. It has been
> compile and runtime tested (thanks Rune).
>
> References: https://bugs.launchpad.net/bugs/298798
>
> Signed-off-by: Alistair John Strachan <alistair@devzero.co.uk>
> Tested-by: Rune Svendsen <runesvend@gmail.com>
> Cc: Rune Svendsen <runesvend@gmail.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: lm-sensors@lm-sensors.org
>
> ---
> drivers/hwmon/abituguru3.c | 77 +++++++++++++++++++++++---------------------
> 1 files changed, 40 insertions(+), 37 deletions(-)
Applied, thanks.
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2009-09-06 16:23 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-05 17:13 [lm-sensors] [PATCH] hwmon: (abituguru3) Support multiple DMI Alistair John Strachan
2009-09-06 7:23 ` Hans de Goede
2009-09-06 9:15 ` Alistair John Strachan
2009-09-06 9:37 ` Hans de Goede
2009-09-06 12:03 ` Jean Delvare
2009-09-06 13:55 ` Alistair John Strachan
2009-09-06 14:06 ` Jean Delvare
2009-09-06 14:15 ` Rune Svendsen
2009-09-06 14:30 ` Alistair John Strachan
2009-09-06 14:41 ` Alistair John Strachan
2009-09-06 15:05 ` Rune Svendsen
2009-09-06 16:23 ` Jean Delvare
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.