介绍

架构

OTP 驱动程序遵循 Linux NVMEM 框架,控制固件 OTP 控制器,并执行 OTP 的读写操作。OTP 软件架构如下面的图示所示。

../../rst_linux/1_otpc/figures/otp_software_arch.svg

OTP 驱动程序提供以下两种方式来控制硬件 OTP 设备:

  • 对于用户空间,Linux NVMEM 框架通过 sysfs 设备为用户提供读写功能。

  • 对于内核空间,Linux 驱动程序可以通过 NVMEM 单元函数控制 OTP 设备。

实现

OTP 驱动程序实现在如下文件:

驱动程序所在位置

介绍

<linux>/drivers/rtkdrivers/otp/Kconfig

OTP 驱动程序 Kconfig

<linux>/drivers/rtkdrivers/otp/Makefile

OTP 驱动程序 Makefile

<linux>/drivers/rtkdrivers/otp/rtk-otp.c

OTP 驱动程序源代码

配置

编译配置

选择 Device Drivers > Drivers for Realtek > NVMEM OTP driver

../../rst_linux/1_otpc/figures/otp_driver.png

APIs

用户空间接口(APIs)

正如上文提到的,Linux NVMEM 框架为用户空间提供了 sysfs 设备以控制 OTP 设备。目前,Realtek 的 OTP 驱动程序为用户空间提供了两个 sysfs 接口(/sys/bus/nvmem/devices/otp_raw0/nvmem/sys/bus/nvmem/devices/otp_map0/nvmem)来控制 OTP 设备。

  • otp_raw0 设备控制物理映射。

  • otp_map0 设备控制逻辑映射。

演示的使用方法如下:

efuse rraw/rmap [addr hex] [bytes]
efuse wraw/wmap [addr hex] [bytes] [val hex]

例如:

  • 从物理地址 0x07F40x07F8 读取值:

    efuse rraw 7F4 4
    
  • 将新值 0x021b1c1d 写入逻辑地址 0x01e00x01e4

    efuse wmap 1e0 4 021b1c1d
    

参考 sources/development/cmds/efuse/efuse.c 获取更多细节。

如果您想禁用用户空间的 API,请在内核配置中禁用 sysfs 接口,如下所示:

../../rst_linux/1_otpc/figures/sysfs_interface.png

内核空间接口(APIs)

对于内核空间,NVMEM 提供了 cell 机制供其他驱动程序读取或写入 OTP,例如:

../../rst_linux/1_otpc/figures/nvmem_cell_example.png

驱动程序可以使用 NVMEM cell 函数来获取或设置相应的 OTP 值。