NXP i.MX SoC Family/i.MX Linux User`s Guide (IMXLUG)

i.MX Linux User's Guide (IMXLUG) - One-Time Programmable Controller Driver Using NVMEM Subsystem

까마귀75 2023. 3. 31. 13:47
728x90
반응형

[이전] [목차] [다음]

13 One-Time Programmable Controller Driver Using NVMEM Subsystem

13.1 Introduction

One-Time Programmable Controller 드라이버는 컨슈머 디바이스가 필요한 데이터(MAC 주소, SoC/Revision ID, 부품 번호 등)를 NVMEM에서 가져올 수 있도록 DT 표현을 도입하는 NVMEM Subsystem으로 구현된다.

 

13.2 NVMEM provider OCOTP

struct nvmem_config를 사용하여 NVMEM 디바이스 OCOTP의 구성을 설정한다. 이 구조체는 eFUSE 데이터를 read/write하기 위한 콜백을 정의할 수 있다.

 

read/write 함수 프로토타입에서:

  • 첫 번째 파라미터는 OCOTP 디바이스의 private 데이터이며, 리맵된 메로리에 대한 포인터를 포함한다.
  • 두 번째 파라미터는 NVMEM 컨슈머의 속성 reg에 있는 첫 번째 데이터에서 가져오고, 이 오프셋은 eFuse 주소가 매핑된 OCOTP shadow 레지스터를 나타낸다.
  • 세 번째 파라미터는 read할  때 읽은 데이터를 반환하거나 write할 때 쓸 데이터를 전달한다.
  • read/write 바이트 수를 나타내는 네 번째 파라미터는 NVMEM 컨슈머의 속성 reg에 있는 두 번째 데이터에서 가져온다.
typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset, void *val, size_t bytes);
typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset, void *val, size_t bytes);

 

13.3 NVMEM consumer

NVMEM 컨슈머는 NVMEM 공급자를 사용하여 NVMEM에서 읽거나 읽는 엔터티이다. DTS 파일에서, NVMEM 컨슈머 노드는 NVMEM 공급자 노드에 작성되어야 한다. 필수 속성은 reg이다. 첫 번째 데이터는 eFuse 주소가 매핑되는 OCOTP shadow 레지스터의 오프셋을 나타낸다. 두 번째 데이터는 읽거나 쓸 바이트 수를 나타낸다.

 

i.MX 8M Nano의 MAC 주소를 예로 들면 아래와 같다:

 

reg의 첫 번째 데이터는 0x90, 0x400 + 0x90 * 0x4 = 0x640, 0x640은 MAC_ADDR의 첫 번째 Fuse 주소이다. 0x4는 4바이트를 나태낸다.

 

13.4 Examples to read/write the raw NVMEM file in user space

  • i.MX 6/i.MX 7/i.MX 8M Mini/8M Nano/8M Plus/8M Quad
    # hexdump /sys/bus/nvmem/devices/imx-ocotp0/nvmem
  • i.MX 8ULP
    # hexdump /sys/bus/nvmem/devices/fsb_s400_fuse1/nvmem

 

 

[이전] [목차] [다음]

 

 

728x90
반응형