Commit 19d0f5f6 authored by Saravana Kannan's avatar Saravana Kannan Committed by Greg Kroah-Hartman

driver core: Add fw_devlink.strict kernel param

This param allows forcing all dependencies to be treated as mandatory.
This will be useful for boards in which all optional dependencies like
IOMMUs and DMAs need to be treated as mandatory dependencies.
Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-4-saravanak@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1753c4d1
...@@ -1433,6 +1433,11 @@ ...@@ -1433,6 +1433,11 @@
to enforce probe and suspend/resume ordering. to enforce probe and suspend/resume ordering.
rpm -- Like "on", but also use to order runtime PM. rpm -- Like "on", but also use to order runtime PM.
fw_devlink.strict=<bool>
[KNL] Treat all inferred dependencies as mandatory
dependencies. This only applies for fw_devlink=on|rpm.
Format: <bool>
gamecon.map[2|3]= gamecon.map[2|3]=
[HW,JOY] Multisystem joystick and NES/SNES/PSX pad [HW,JOY] Multisystem joystick and NES/SNES/PSX pad
support via parallel port (up to 5 devices per port) support via parallel port (up to 5 devices per port)
......
...@@ -1521,6 +1521,13 @@ static int __init fw_devlink_setup(char *arg) ...@@ -1521,6 +1521,13 @@ static int __init fw_devlink_setup(char *arg)
} }
early_param("fw_devlink", fw_devlink_setup); early_param("fw_devlink", fw_devlink_setup);
static bool fw_devlink_strict;
static int __init fw_devlink_strict_setup(char *arg)
{
return strtobool(arg, &fw_devlink_strict);
}
early_param("fw_devlink.strict", fw_devlink_strict_setup);
u32 fw_devlink_get_flags(void) u32 fw_devlink_get_flags(void)
{ {
return fw_devlink_flags; return fw_devlink_flags;
...@@ -1531,6 +1538,11 @@ static bool fw_devlink_is_permissive(void) ...@@ -1531,6 +1538,11 @@ static bool fw_devlink_is_permissive(void)
return fw_devlink_flags == FW_DEVLINK_FLAGS_PERMISSIVE; return fw_devlink_flags == FW_DEVLINK_FLAGS_PERMISSIVE;
} }
bool fw_devlink_is_strict(void)
{
return fw_devlink_strict && !fw_devlink_is_permissive();
}
static void fw_devlink_parse_fwnode(struct fwnode_handle *fwnode) static void fw_devlink_parse_fwnode(struct fwnode_handle *fwnode)
{ {
if (fwnode->flags & FWNODE_FLAG_LINKS_ADDED) if (fwnode->flags & FWNODE_FLAG_LINKS_ADDED)
......
...@@ -162,6 +162,7 @@ static inline void fwnode_init(struct fwnode_handle *fwnode, ...@@ -162,6 +162,7 @@ static inline void fwnode_init(struct fwnode_handle *fwnode,
} }
extern u32 fw_devlink_get_flags(void); extern u32 fw_devlink_get_flags(void);
extern bool fw_devlink_is_strict(void);
int fwnode_link_add(struct fwnode_handle *con, struct fwnode_handle *sup); int fwnode_link_add(struct fwnode_handle *con, struct fwnode_handle *sup);
void fwnode_links_purge(struct fwnode_handle *fwnode); void fwnode_links_purge(struct fwnode_handle *fwnode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment