mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
kunit: provide a set of fwnode-oriented helpers
Provide three new kunit-managed helpers for test cases that need to register/create dynamic software nodes. Reviewed-by: David Gow <david@davidgow.net> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Link: https://patch.msgid.link/20260713-swnode-fw-devlink-v4-1-d4f2dee27ad9@oss.qualcomm.com Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
committed by
Danilo Krummrich
parent
dc59e4fea9
commit
9fdbdb5284
@@ -0,0 +1,29 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* KUnit resource management helpers for firmware nodes.
|
||||
*
|
||||
* Copyright (C) Qualcomm Technologies, Inc. and/or its subsidiaries
|
||||
*/
|
||||
|
||||
#ifndef _KUNIT_FWNODE_H
|
||||
#define _KUNIT_FWNODE_H
|
||||
|
||||
struct device;
|
||||
struct fwnode_handle;
|
||||
struct kunit;
|
||||
struct property_entry;
|
||||
struct software_node;
|
||||
|
||||
struct fwnode_handle *
|
||||
kunit_fwnode_create_software_node(struct kunit *test,
|
||||
const struct property_entry *properties,
|
||||
const struct fwnode_handle *parent);
|
||||
struct fwnode_handle *
|
||||
kunit_software_node_register(struct kunit *test,
|
||||
const struct software_node *node);
|
||||
int kunit_software_node_register_node_group(struct kunit *test,
|
||||
const struct software_node *const *nodes);
|
||||
int kunit_device_add_software_node(struct kunit *test, struct device *dev,
|
||||
const struct software_node *node);
|
||||
|
||||
#endif /* _KUNIT_FWNODE_H */
|
||||
@@ -11,6 +11,7 @@ kunit-objs += test.o \
|
||||
attributes.o \
|
||||
device.o \
|
||||
platform.o \
|
||||
fwnode.o \
|
||||
bug.o
|
||||
|
||||
ifeq ($(CONFIG_KUNIT_DEBUGFS),y)
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (C) Qualcomm Technologies, Inc. and/or its subsidiaries
|
||||
*/
|
||||
|
||||
#include <kunit/fwnode.h>
|
||||
#include <kunit/test.h>
|
||||
|
||||
#include <linux/fwnode.h>
|
||||
#include <linux/property.h>
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(fwnode_remove_software_node_wrapper,
|
||||
fwnode_remove_software_node,
|
||||
struct fwnode_handle *);
|
||||
|
||||
/**
|
||||
* kunit_fwnode_create_software_node() - Create a kunit-managed software node
|
||||
* @test: Test context
|
||||
* @properties: Properties to use to create the new software node
|
||||
* @parent: Parent of this software node
|
||||
*
|
||||
* Create a test-managed software node and return its firmware node handle.
|
||||
* The software node is removed after the test case completes.
|
||||
*
|
||||
* Returns:
|
||||
* Firmware node handle of the newly created software node or IS_ERR() on
|
||||
* failure.
|
||||
*/
|
||||
struct fwnode_handle *
|
||||
kunit_fwnode_create_software_node(struct kunit *test,
|
||||
const struct property_entry *properties,
|
||||
const struct fwnode_handle *parent)
|
||||
{
|
||||
struct fwnode_handle *fwnode;
|
||||
int ret;
|
||||
|
||||
fwnode = fwnode_create_software_node(properties, parent);
|
||||
if (IS_ERR(fwnode))
|
||||
return fwnode;
|
||||
|
||||
ret = kunit_add_action_or_reset(test, fwnode_remove_software_node_wrapper,
|
||||
fwnode);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
return fwnode;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_fwnode_create_software_node);
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(software_node_unregister_wrapper,
|
||||
software_node_unregister,
|
||||
const struct software_node *);
|
||||
|
||||
/**
|
||||
* kunit_software_node_register() - Register a kunit-managed software node
|
||||
* @test: Test context
|
||||
* @swnode: Software node to register
|
||||
*
|
||||
* Register a test-managed software node and return its firmware node handle.
|
||||
* The software node is unregistered after the test case completes.
|
||||
*
|
||||
* Returns:
|
||||
* Firmware node handle of the registered software node or IS_ERR() on failure.
|
||||
*/
|
||||
struct fwnode_handle *
|
||||
kunit_software_node_register(struct kunit *test,
|
||||
const struct software_node *swnode)
|
||||
{
|
||||
struct fwnode_handle *fwnode;
|
||||
int ret;
|
||||
|
||||
ret = software_node_register(swnode);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
fwnode = software_node_fwnode(swnode);
|
||||
if (WARN_ON(!fwnode))
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
||||
ret = kunit_add_action_or_reset(test, software_node_unregister_wrapper,
|
||||
(void *)swnode);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
return fwnode;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_software_node_register);
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(software_node_unregister_node_group_wrapper,
|
||||
software_node_unregister_node_group,
|
||||
const struct software_node *const *);
|
||||
|
||||
/**
|
||||
* kunit_software_node_register_node_group() - Register a kunit-managed software node group
|
||||
* @test: Test context
|
||||
* @nodes: Software node group to register
|
||||
*
|
||||
* Register a test-managed software node group. The nodes are unregistered
|
||||
* after the test case completes.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, negative error number on failure.
|
||||
*/
|
||||
int kunit_software_node_register_node_group(struct kunit *test,
|
||||
const struct software_node *const *nodes)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = software_node_register_node_group(nodes);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return kunit_add_action_or_reset(test, software_node_unregister_node_group_wrapper,
|
||||
(void *)nodes);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_software_node_register_node_group);
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(device_remove_software_node_wrapper,
|
||||
device_remove_software_node,
|
||||
struct device *);
|
||||
|
||||
/**
|
||||
* kunit_device_add_software_node() - Assign a kunit-managed software node to a device
|
||||
* @test: Test context
|
||||
* @dev: Device to assign the software node for
|
||||
* @node: The software node to assign
|
||||
*
|
||||
* Make @node the secondary firmware node of @dev. If @dev has no primary
|
||||
* firmware node, @node will become the primary node. The software node will
|
||||
* be automatically removed from @dev when the test case completes.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, negative error number on failure.
|
||||
*/
|
||||
int kunit_device_add_software_node(struct kunit *test, struct device *dev,
|
||||
const struct software_node *node)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = device_add_software_node(dev, node);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return kunit_add_action_or_reset(test, device_remove_software_node_wrapper, dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_device_add_software_node);
|
||||
Reference in New Issue
Block a user