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
반응형
'NXP i.MX SoC Family > i.MX Linux User`s Guide (IMXLUG)' 카테고리의 다른 글
i.MX Linux User's Guide (IMXLUG) - Murata Wi-Fi/Bluetooth Solutions (0) | 2023.04.03 |
---|---|
i.MX Linux User's Guide (IMXLUG) - NXP eIQ Machine Learning (0) | 2023.04.03 |
i.MX Linux User's Guide (IMXLUG) - DDR Performance Monitor (0) | 2023.03.30 |
i.MX Linux User's Guide (IMXLUG) - Connectivity (0) | 2023.03.28 |
i.MX Linux User's Guide (IMXLUG) - Security (0) | 2023.03.13 |