Re: How to pass software configuration to driver built as module in boot up phase

From: Tingwei Zhang
Date: Tue Oct 31 2023 - 06:02:01 EST


On 10/31/2023 2:58 PM, Greg Kroah-Hartman wrote:
On Tue, Oct 31, 2023 at 10:56:23AM +0800, Tingwei Zhang wrote:
On 10/30/2023 7:30 PM, Greg Kroah-Hartman wrote:
On Mon, Oct 30, 2023 at 07:21:48PM +0800, Tingwei Zhang wrote:
Hi Masami, Greg and Rafael,

I have one driver that needs a bunch to software configuration like 1000
settings. These settings can be different according to the use case.

That seems very odd, what type of driver is this?
The example use case is below DCC driver which is a DMA engine. It can be
configured to read/write registers while whose registers need to be
configured by software. It's mainly used to debug device crash issue.
https://lore.kernel.org/lkml/cover.1691496290.git.quic_schowdhu@xxxxxxxxxxx/T/

Given that no one listened to my last review cycle of that driver, why
are you asking us again?


There's some change on developer owner of DCC driver. We preparing and reviewing the driver internally. It will be submitted once ready.

They are required in boot up phase so we can't reply on user space to make
the configuration.

Boot config is not preferred since we'd like to build that driver as dynamic
load Kernel module.

Could you let me know if there's any mechanism in Kernel to do that?

What is wrong with the existing ways of doing this that all other
drivers use?
I'm not aware of all the existing ways. Below ways are what I know and they
may not be suitable for some reason.
1. Let user space to configure with sysfs/debugfs/ioctl interface. Since we
need this configuration to be done in early stage before user space is up.

I really doubt that you need this before userspace starts, as that's not
what "device crash" stuff should be dealing with. That happens after
init starts, because you have a working kernel (i.e. this is not for
hardware bringup.)

This doesn't work.

Why do you need this before init? Specific reasons please.

There are some case that some driver broke Kernel in development phase and those bad driver could cause device crash in very early boot up phase.
2. Use device tree to pass the configuration to driver. Since the
configuration is software configuration instead of hardware descirption. It
doesn't fit in device tree.
3. Boot config or commandline parameter. If the driver is built in, it can
work. But it doesn't work for dynamically loadable Kernel module.

If you have a module, then you can do this after init starts, so you
are reporting conflicting "requirements" here, which make this
impossible for us to understand :(

You are correct. I missed that part. We should already have user space up when install the module.


Please work with the kernel developers at your company to come up with a
solution for this, you have the experience, do not require the community
to do your work for you.

thanks,

greg k-h

--
Thanks,
Tingwei