On Fri, Feb 17, 2023 at 08:57:32AM +0000, Kumaravel.Thiagarajan@xxxxxxxxxxxxx wrote: > On Thu, 2023-02-16 at 12:49 +0100, Greg KH wrote: > > > > > > Greg & Michael, I do not want to expose the entire or even > > > > > > partial > > > > > > set of device registers to the user space access directly for > > > > > > safety > > > > reasons. > > > > > > > > But that's all exposed here through this block device, right? > > > The block device created by this driver does not expose the device > > > registers to the user space applications. > > > > What is it exposing? > The device's OTP and EEPROM are not directly mapped into the > processor's address space using PCIe's BAR registers. Ok, that was not obvious and is a lot of the confusion here. > There is a OTP controller and EEPROM controller in the device and the > registers of these controllers are mapped into the processor's address > space along with other registers using the BAR registers. > OTP/EEPROM driver maps these registers into kernel's virtual space > using devm_ioremap and accomplishes the reads and writes by accessing > these registers. To the user side, the driver shows two separate disks > (one for OTP and one for EEPROM) and both of them could be programmed > using the "linux dd" command with "oflag=direct" option. > The driver handles the IO requests that originate out of the dd command > and this way we would not need a separate user space program also. I do not recommend using a block interface for this at all. Why not the "normal" EEPROM interface that the kernel has today (i.e. a binary sysfs file)? That way you can mmap it and edit locations how ever you want. thanks, greg k-h