Skip to content

Commit

Permalink
Merge tag 'driver-core-5.9-rc1' of git://git.kernel.org/pub/scm/linux…
Browse files Browse the repository at this point in the history
…/kernel/git/gregkh/driver-core

Pull driver core updates from Greg KH:
 "Here is the "big" set of changes to the driver core, and some drivers
  using the changes, for 5.9-rc1.

  "Biggest" thing in here is the device link exposure in sysfs, to help
  to tame the madness that is SoC device tree representations and driver
  interactions with it.

  Other stuff in here that is interesting is:

   - device probe log helper so that drivers can report problems in a
     unified way easier.

   - devres functions added

   - DEVICE_ATTR_ADMIN_* macro added to make it harder to write
     incorrect sysfs file permissions

   - documentation cleanups

   - ability for debugfs to be present in the kernel, yet not exposed to
     userspace. Needed for systems that want it enabled, but do not
     trust users, so they can still use some kernel functions that were
     otherwise disabled.

   - other minor fixes and cleanups

  The patches outside of drivers/base/ all have acks from the respective
  subsystem maintainers to go through this tree instead of theirs.

  All of these have been in linux-next with no reported issues"

* tag 'driver-core-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (39 commits)
  drm/bridge: lvds-codec: simplify error handling
  drm/bridge/sii8620: fix resource acquisition error handling
  driver core: add deferring probe reason to devices_deferred property
  driver core: add device probe log helper
  driver core: Avoid binding drivers to dead devices
  Revert "test_firmware: Test platform fw loading on non-EFI systems"
  firmware_loader: EFI firmware loader must handle pre-allocated buffer
  selftest/firmware: Add selftest timeout in settings
  test_firmware: Test platform fw loading on non-EFI systems
  driver core: Change delimiter in devlink device's name to "--"
  debugfs: Add access restriction option
  tracefs: Remove unnecessary debug_fs checks.
  driver core: Fix probe_count imbalance in really_probe()
  kobject: remove unused KOBJ_MAX action
  driver core: Fix sleeping in invalid context during device link deletion
  driver core: Add waiting_for_supplier sysfs file for devices
  driver core: Add state_synced sysfs file for devices that support it
  driver core: Expose device link details in sysfs
  driver core: Drop mention of obsolete bus rwsem from kernel-doc
  debugfs: file: Remove unnecessary cast in kfree()
  ...
  • Loading branch information
torvalds committed Aug 5, 2020
2 parents 1785d11 + 76acb5e commit dd27111
Show file tree
Hide file tree
Showing 35 changed files with 945 additions and 254 deletions.
10 changes: 10 additions & 0 deletions Documentation/ABI/testing/sysfs-bus-platform
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,13 @@ Description:
devices to opt-out of driver binding using a driver_override
name such as "none". Only a single driver may be specified in
the override, there is no support for parsing delimiters.

What: /sys/bus/platform/devices/.../numa_node
Date: June 2020
Contact: Barry Song <[email protected]>
Description:
This file contains the NUMA node to which the platform device
is attached. It won't be visible if the node is unknown. The
value comes from an ACPI _PXM method or a similar firmware
source. Initial users for this file would be devices like
arm smmu which are populated by arm64 acpi_iort.
126 changes: 126 additions & 0 deletions Documentation/ABI/testing/sysfs-class-devlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
What: /sys/class/devlink/.../
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
Provide a place in sysfs for the device link objects in the
kernel at any given time. The name of a device link directory,
denoted as ... above, is of the form <supplier>--<consumer>
where <supplier> is the supplier device name and <consumer> is
the consumer device name.

What: /sys/class/devlink/.../auto_remove_on
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file indicates if the device link will ever be
automatically removed by the driver core when the consumer and
supplier devices themselves are still present.

This will be one of the following strings:

'consumer unbind'
'supplier unbind'
'never'

'consumer unbind' means the device link will be removed when
the consumer's driver is unbound from the consumer device.

'supplier unbind' means the device link will be removed when
the supplier's driver is unbound from the supplier device.

'never' means the device link will not be automatically removed
when as long as the supplier and consumer devices themselves
are still present.

What: /sys/class/devlink/.../consumer
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file is a symlink to the consumer device's sysfs directory.

What: /sys/class/devlink/.../runtime_pm
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file indicates if the device link has any impact on the
runtime power management behavior of the consumer and supplier
devices. For example: Making sure the supplier doesn't enter
runtime suspend while the consumer is active.

This will be one of the following strings:

'0' - Does not affect runtime power management
'1' - Affects runtime power management

What: /sys/class/devlink/.../status
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file indicates the status of the device link. The status
of a device link is affected by whether the supplier and
consumer devices have been bound to their corresponding
drivers. The status of a device link also affects the binding
and unbinding of the supplier and consumer devices with their
drivers and also affects whether the software state of the
supplier device is synced with the hardware state of the
supplier device after boot up.
See also: sysfs-devices-state_synced.

This will be one of the following strings:

'not tracked'
'dormant'
'available'
'consumer probing'
'active'
'supplier unbinding'
'unknown'

'not tracked' means this device link does not track the status
and has no impact on the binding, unbinding and syncing the
hardware and software device state.

'dormant' means the supplier and the consumer devices have not
bound to their driver.

'available' means the supplier has bound to its driver and is
available to supply resources to the consumer device.

'consumer probing' means the consumer device is currently
trying to bind to its driver.

'active' means the supplier and consumer devices have both
bound successfully to their drivers.

'supplier unbinding' means the supplier devices is currently in
the process of unbinding from its driver.

'unknown' means the state of the device link is not any of the
above. If this is ever the value, there's a bug in the kernel.

What: /sys/class/devlink/.../supplier
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file is a symlink to the supplier device's sysfs directory.

What: /sys/class/devlink/.../sync_state_only
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
This file indicates if the device link is limited to only
affecting the syncing of the hardware and software state of the
supplier device.

This will be one of the following strings:

'0'
'1' - Affects runtime power management

'0' means the device link can affect other device behaviors
like binding/unbinding, suspend/resume, runtime power
management, etc.

'1' means the device link will only affect the syncing of
hardware and software state of the supplier device after boot
up and doesn't not affect other behaviors of the devices.
8 changes: 8 additions & 0 deletions Documentation/ABI/testing/sysfs-devices-consumer
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
What: /sys/devices/.../consumer:<consumer>
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
The /sys/devices/.../consumer:<consumer> are symlinks to device
links where this device is the supplier. <consumer> denotes the
name of the consumer in that device link. There can be zero or
more of these symlinks for a given device.
24 changes: 24 additions & 0 deletions Documentation/ABI/testing/sysfs-devices-state_synced
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
What: /sys/devices/.../state_synced
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
The /sys/devices/.../state_synced attribute is only present for
devices whose bus types or driver provides the .sync_state()
callback. The number read from it (0 or 1) reflects the value
of the device's 'state_synced' field. A value of 0 means the
.sync_state() callback hasn't been called yet. A value of 1
means the .sync_state() callback has been called.

Generally, if a device has sync_state() support and has some of
the resources it provides enabled at the time the kernel starts
(Eg: enabled by hardware reset or bootloader or anything that
run before the kernel starts), then it'll keep those resources
enabled and in a state that's compatible with the state they
were in at the start of the kernel. The device will stop doing
this only when the sync_state() callback has been called --
which happens only when all its consumer devices are registered
and have probed successfully. Resources that were left disabled
at the time the kernel starts are not affected or limited in
any way by sync_state() callbacks.


8 changes: 8 additions & 0 deletions Documentation/ABI/testing/sysfs-devices-supplier
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
What: /sys/devices/.../supplier:<supplier>
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
The /sys/devices/.../supplier:<supplier> are symlinks to device
links where this device is the consumer. <supplier> denotes the
name of the supplier in that device link. There can be zero or
more of these symlinks for a given device.
17 changes: 17 additions & 0 deletions Documentation/ABI/testing/sysfs-devices-waiting_for_supplier
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
What: /sys/devices/.../waiting_for_supplier
Date: May 2020
Contact: Saravana Kannan <[email protected]>
Description:
The /sys/devices/.../waiting_for_supplier attribute is only
present when fw_devlink kernel command line option is enabled
and is set to something stricter than "permissive". It is
removed once a device probes successfully (because the
information is no longer relevant). The number read from it (0
or 1) reflects whether the device is waiting for one or more
suppliers to be added and then linked to using device links
before the device can probe.

A value of 0 means the device is not waiting for any suppliers
to be added before it can probe. A value of 1 means the device
is waiting for one or more suppliers to be added before it can
probe.
15 changes: 15 additions & 0 deletions Documentation/admin-guide/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,21 @@
useful to also enable the page_owner functionality.
on: enable the feature

debugfs= [KNL] This parameter enables what is exposed to userspace
and debugfs internal clients.
Format: { on, no-mount, off }
on: All functions are enabled.
no-mount:
Filesystem is not registered but kernel clients can
access APIs and a crashkernel can be used to read
its content. There is nothing to mount.
off: Filesystem is not registered and clients
get a -EPERM as result when trying to register files
or directories within debugfs.
This is equivalent of the runtime functionality if
debugfs was not enabled in the kernel at all.
Default value is set in build-time with a kernel configuration.

debugpat [X86] Enable PAT debugging

decnet.addr= [HW,NET]
Expand Down
2 changes: 1 addition & 1 deletion Documentation/driver-api/driver-model/platform.rst
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ field to hold additional information.

Embedded systems frequently need one or more clocks for platform devices,
which are normally kept off until they're actively needed (to save power).
System setup also associates those clocks with the device, so that that
System setup also associates those clocks with the device, so that
calls to clk_get(&pdev->dev, clock_name) return them as needed.


Expand Down
3 changes: 3 additions & 0 deletions drivers/base/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ struct device_private {
struct klist_node knode_class;
struct list_head deferred_probe;
struct device_driver *async_driver;
char *deferred_probe_reason;
struct device *device;
u8 dead:1;
};
Expand Down Expand Up @@ -134,6 +135,8 @@ extern void device_release_driver_internal(struct device *dev,
extern void driver_detach(struct device_driver *drv);
extern int driver_probe_device(struct device_driver *drv, struct device *dev);
extern void driver_deferred_probe_del(struct device *dev);
extern void device_set_deferred_probe_reason(const struct device *dev,
struct va_format *vaf);
static inline int driver_match_device(struct device_driver *drv,
struct device *dev)
{
Expand Down
Loading

0 comments on commit dd27111

Please sign in to comment.