mirror of
https://github.com/torvalds/linux.git
synced 2024-12-22 10:56:40 +00:00
pinctrl: sh-pfc: Add check for empty pinmux groups/functions
The pinmux groups and functions arrays may contain two parts, to ease supporting SoCs that expose pin subsets of other related SoCs. Both parts need to be declared with explicit sizes, which thus need to be updated when adding support for more groups and functions. If a size is too small, the compiler will detect this at build time ("excess elements in array initializer"). If a size is too large, this may go undetected (for pin groups), lead to pin controller registration failures (for pin functions: "pinmux ops has no name for functionN"), or crash the optional run-time debug code (for pin groups). Extend the run-time debug code with checks to detect this, to help catching bugs early. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
This commit is contained in:
parent
80cde64f68
commit
3dd5fd79f0
@ -780,9 +780,15 @@ static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
|
||||
for (i = 0; i < info->nr_functions; i++) {
|
||||
func = &info->functions[i];
|
||||
if (!func->name) {
|
||||
pr_err("%s: empty function %u\n", drvname, i);
|
||||
sh_pfc_errors++;
|
||||
continue;
|
||||
}
|
||||
for (j = 0; j < func->nr_groups; j++) {
|
||||
for (k = 0; k < info->nr_groups; k++) {
|
||||
if (!strcmp(func->groups[j],
|
||||
if (info->groups[k].name &&
|
||||
!strcmp(func->groups[j],
|
||||
info->groups[k].name)) {
|
||||
refcnts[k]++;
|
||||
break;
|
||||
@ -798,6 +804,11 @@ static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
}
|
||||
|
||||
for (i = 0; i < info->nr_groups; i++) {
|
||||
if (!info->groups[i].name) {
|
||||
pr_err("%s: empty group %u\n", drvname, i);
|
||||
sh_pfc_errors++;
|
||||
continue;
|
||||
}
|
||||
if (!refcnts[i]) {
|
||||
pr_err("%s: orphan group %s\n", drvname,
|
||||
info->groups[i].name);
|
||||
|
Loading…
Reference in New Issue
Block a user