2.1 Machine-Specific Layer (MSL)
2.1.1 Introduction
Machine-Specific Layer (MSL)은 머신에 의존하는 다음과 같은 컴포넌트를 Linux 커널에 제공한다.
- GPIO와 EDIO를 포함한 인터럽트 (특정 플랫폼에서만)
- 타이머
- 메모리 맵
- 특정 플랫폼에서 IOMUX를 포함한 General Purpose Input/Output (GPIO)
- Clock
- Shared Peripheral Bus Arbiter (SPBA)
- Smart Direct Memory Access (SDMA)
2.1.2 Interrupts (Operation)
이 섹션에서는 디바이스에서 인터럽트의 하드웨어와 소프트웨어 운영에 대해 설명한다.
2.1.2.1 Interrupt Hardware Operation
Interrupt Controller는 내부와 외부의 모든 인터럽트 소스를 컨트롤하고 우선 순위를 지정한다. 모든 인터럽트는 기본적으로 동일한 우선 순위를 갖는다.
각 인터럽트 소스는 인터럽트 컨트롤러의 레지스터를 구성하여 활성화나 비활성화할 수 있다.
GIC에는 PPI, SGI, SPI 등, 세 가지 유형의 인터럽트가 있다.
- PPI(Private Peripheral Interrupts)는 해당 CPU 소유의 주변 디바이스 인터럽트이다. 해당 CPU에서만 처리할 수 있다.
- SGI(Software Generated Interrupts)는 소프트웨어 인터럽트 생성이다. 소프트웨어 운영에 의해 트리거(인터럽트 생성)될 수 있으며, 해당 CPU에서만 처리할 수 있다.
- 일반적으로 SoC 플랫폼의 외부 인터럽트 소스인, 공유 주변 디바이스 인터럽트를 SPI(Shared Peripheral Interrupts)라고 한다. 모든 CPU에서 처리할 수 있다.
2.1.2.2 Interrupt Software Operation
i.MX 6와 i.MX 7 SoC의 GIC-400을 사용하는 Arm 아키텍처 기반 프로세서의 경우, 서로 다른 두 가지 예외(exception) 유형으로 일반(normal) 인터럽트와 고속(fast) 인터럽트가 있다. i.MX 6와 i.MX 7 플랫폼에서 예외 벡터 주소는 낮은 주소(0x0)나 높은 주소(0xFFFF0000)에서 시작하도록 구성할 수 있다. Arm 아키텍처에서 실행되는 Linux OS는 높은 벡터 주소 모델을 선택하도록 구현되어 있다.
i.MX 8 SoC의 GIC-500을 사용하는 Arm 아키텍처 기반 프로세서의 경우, 예외 벡터 주소는 "VBAR_ELn + offset"으로 정의되어 있다. 오프셋은 인터럽트 예외가 발생하는 예외 레벨에 따라 다르다. Documentation/arm/Interrupts 파일에 Arm 인터럽트 아키텍처에 대한 설명이 있다.
소프트웨어는 irqchip 구조체에 정의된 콜백 함수와 프로세서별로 인터럽트 구조체를 제공하고, 시스템이 시작하는 동안 호출되는 하나의 초기화 함수를 내보낸다.
Table 3. Interrupt Files
File | Description |
---|---|
drivers/irqchip/irq-gic.c | i.MX 6/7 SoC의 GIC-400 |
drivers/irqchip/irq-gic-v3.c | i.MX 8 SoC의 GIC-500 |
drivers/irqchip/irq-imx-irqsteer.c | CONFIG_IMX_IRQSTEER 구성의 인터럽트 기능 |
drivers/irqchip/irq-imx-intmux.c | CONFIG_IMX_INTMUX 구성의 인터럽트 기능 |
irq-imx-gpcv2.c | CONFIG_IMX_GPCV2 구성의 인터럽트 기능 |
2.1.2.3 Interrupt Features
인터럽트 구현은 다음 기능을 지원한다:
- Interrupt Controller는 인터럽트를 비활성화하고 활성화
- 표준 Arm 인터럽트 소스 코드에 정의된 Linux 인터럽트 아키텍처에 필요한 기능
2.1.2.4 Interrupt Source Code Structure
인터럽트 모듈은 drivers/irqchip에 위치해 있다.
아래 테이블은 인터럽트에 대한 소스 파일 목록이다.
Table 4. Interrupt Files
File | Description |
---|---|
drivers/irqchip/irq-imx-irqsteer.o.c | CONFIG_IMX_IRQSTEER 구성의 인터럽트 기능 |
drivers/irqchip/irq-imx-gpcv2.c | CONFIG_IMX_GPCV2 구성의 인터럽트 기능 |
drivers/irqchip/irq-imx-intmux.c | CONFIG_IMX_INTMUX 구성의 인터럽트 기능 |
2.1.2.5 Interrupt Programming Interface
머신별 인터럽트 구현은 단일 기능을 내보낸다. 이 기능은 Interrupt Controller 하드웨어를 초기화하고 각 인터럽트 소스에서 인터럽트를 활성화/비활성화하는 기능를 등록한다. 이는 struct irqdesc 유형의 전역 구조체 irq_desc로 수행한다. 초기화 후, request_irq() 함수를 통해 디바이스별 인터럽트 핸들러를 등록하여, 인터럽트는 드라이버에 의해 사용될 수 있다.
Interrupt Controller에서 지원하는 기본(native) 인터럽트 라인 외에도, 인터럽트 수는 GPIO 인터럽트와 (일부 플랫폼에서) EDIO 인터럽트를 지원하도록 확장된다. request_irq(), free_irq() 함수와 같이 Linux OS를 실행하는 Arm 디바이스에서 지원하는 표준 인터럽트 인터페이스를 드라이버가 사용할 수 있도록 허용한다.
2.1.3 Timer
시스템 타이머(주기적으로 인터럽트 생성)와 동적 타이머(이벤트 스케줄를 위한) 모두 지원하기 위해, Linux 커널은 기본(underlying) 하드웨어에 의존한다.
시스템 타이머 인터럽트가 발생한 후, 다음을 수행한다:
- 시스템 가동 시간(uptime) 업데이트
- 시간(time of day) 업데이트
- 현재 프로세스가 타임 슬라이스를 다 소진한 경우, 새 프로세스를 다시 스케줄
- 만료된 모든 동적 타이머를 실행
- 리소스 사용량과 프로세서 시간 통계 업데이트
다음 테이블은 사용되는 다양한 타이머를 설명한다.
Table 5. Timers
Timer | Description |
---|---|
General Purpose Timer (GPT) | GPT는 일정 간격(10ms 마다)으로 주기적인 인터럽트를 생성하도록 구성되어 있다. i.MX 6에서 WFI 모드로 전환하는 데 사용된다. i.MX 6과 i.MX 7에서 사용된다. |
Enhanced Periodic Interrupt Timer (EPIT) | i.MX 6과 i.MX 7에서 사용 가능 |
Arm Arch Timer | GPT 대신 i.MX 8에서 사용 |
System Counter Timer | GPT 대신 i.MX 8M과 i.MX 8X에서 사용 |
2.1.3.1 Timer Software Operation
타이머의 소프트웨어 구현은 적절한 clock 소스, 인터럽트 모드와 인터럽트 간격으로 GPT를 초기화하는 초기화 기능를 제공한다.
그리고 타이머는 인터럽트 서비스 루틴을 등록하고 타이머를 시작한다. 인터럽트 서비스 루틴은 이전 Section 2.1.3에서 언급한 목적을 위해 OS를 서비스하기 위해 필요하다. 또 다른 기능은 마지막 타이머 인터럽트로 경과된 시간을 제공한다.
2.1.3.2 Timer Features
타이머 구현은 다음 기능을 지원한다:
- 시스템 타이머와 동적 타이머를 제공하기 위해 Linux OS에서 요구되는 기능
- i.MX6과 i.MX 7의 경우 10ms마다, i.MX 8의 경우 4ms마다 인터럽트를 생성한다. 이는 CONFIG_HZ_XXX를 기반으로 한다.
2.1.3.3 Timer Source Code Structure
Table 6. Timer Files
File | Description |
---|---|
arch/arm/mach-imx/epit.c | Enhanced Periodic Interrupt Timer |
driver/clocksource/timer-imx-sysctr.c | System Controller Timer |
driver/clocksource/timer-imx-tpm.c | TPM Timer |
drivers/clocksource/timer-imx-gpt.c | General Purpose Timer |
drivers/clocksource/arch-arm-timer.c | Arm arch Timer |
2.1.3.4 Timer Programming Interface
타이머 모듈은 clock 소스와 clock 이벤트 개체를 구현하기 위해 4개의 하드웨어 타이머를 사용한다.
이는 struct clocksource 유형의 clocksource_mxc 구조체와 struct clockevent_device 유형의 clockevent_mxc 구조체로 수행된다. 두 구조체 모두 현재 타이머 값을 읽고 다음 타이머 이벤트를 스케줄하는 데 필요한 루틴을 제공한다. 모듈은 이 장의 시작 부분에서 언급한 목적을 위해 타이머 이벤트로 Linux OS에 서비스하는 타이머 인터럽트 루틴을 구현한다.
2.1.4 Memory Map
Linux 커널은 Memory Management Unit(MMU)이 활성화된 가상 주소 공간에서 실행되기 때문에, 디바이스 레지스터에 액세스하려는 디바이스 드라이버는 미리 정의된 virtual-to-physical(가상-물리) 메모리 맵 테이블이 필요하다.
2.1.4.1 Memory Map Hardware Operation
Arm 코어의 일부인 MMU는 페이지 테이블에 정의된 가상에서 물리로 주소 매핑을 제공한다. 자세한 내용은 Arm Technical Reference Manual (TRM) from Arm Limited를 참조한다.
2.1.4.2 Memory Map Features
Memory Map 구현은 모든 I/O 모듈에 대해 물리에서 가상으로 메모리 맵을 생성하여 Memory Map 모듈을 프로그램한다.
2.1.5 IOMUX
고밀도 집적 프로세서의 제한된 핀은 다양한 용도를 가질 수 있다. IOMUX 모듈은 핀의 용도를 컨트롤하여, 동일한 핀을 다른 용도로 구성할 수 있으며 다른 모듈에서 사용할 수 있다. 이는 다양한 사용자의 요구 사항을 충족하면서 핀 수를 줄일 수 있는 일반적인 방법이다. IOMUX 하드웨어 모듈이 없는 플랫폼은 GPIO 모듈을 통해 핀 다중화(multiplex)를 수행할 수 있다.
IOMUX 모듈은 다중화 컨트롤을 제공하여, 각 핀을 기능(예: UART, SPI 기능) 핀이나 GPIO 핀으로 구성할 수 있다. 기능 핀은 기본(primary) 기능이나 대체(alternate) 기능으로 세분화할 수 있다. 핀의 작동은 특정 하드웨어 모듈에 의해 컨트롤된다. GPIO 핀은, GPIO 모듈을 통한 추가 구성과 함께 소프트웨어로 사용자가 컨트롤한다. 예를 들어, TXD1 핀은 다음과 같은 기능을 가질 수 있다:
- TXD1 - 내부 UART1 데이터 전송. 이는 이핀의 주요(primary) 기능이다.
- UART2 DTR - 대체(alternate) 모드 3
- LCDC_CLS - 대체 모드 4
- GPIO4[22] - 대체 모드 5
- SLCDC_DATA[8] - 대체 모드 6
하드웨어 모드가 시스템 통합 레벨에서 선택한 경우, 이 핀은 해당 용도로만 사용되고 소프트웨어로는 변경할 수 없다. 그렇지 않으면, IOMUX 모듈은 시스템(보드) 디자인에 따라 지정된 특정 용도를 수행하도록 구성해야 한다. 핀이 외부 UART 트랜시버에 연결되고 UART 데이터 전송 신호로 사용되는 경우, 기본 기능으로 구성해야 한다. Arm 코어를 인터럽트하기 위해 핀이 외부 Ethernet 컨트롤러에 연결된 경우, 인터럽트가 활성화된 GPIO 핀으로 구성해야 한다. 다시 말하지만, 소프트웨어는 핀이 가져야 하는 기능을 제어할 수 없다. 시스템 디자인에 따라 소프트웨어는 핀의 용도만 구성한다.
2.1.5.1 IOMUX Hardware Operation
다음 설명은 IOMUX 하드웨어 모듈이 있는 프로세서에만 적용된다. 이 섹션에서는 IOMUX의 컨트롤러 레지스터에 대해 간략하게 설명한다. 자세한 정보는, IC Reference Manual의 "pin multiplexing" 섹션을 참조한다.
- SW_MUX_CTL - 핀의 기본이나 대체 기능을 선택한다. 또한 해당하는 경우 루프백 모드를 활성화한다.
- SW_SELECT_INPUT - 핀의 입력 경로를 컨트롤한다. 이 레지스터는 여러 패드가 동일한 내부 포트를 구동할 때만 필요하다.
- SW_PAD_CTL - 패드 슬루율(slew rate: 출력 전압의 최대 변화율), 드라이버 강도, 풀업/풀다운 저항등을 컨트롤한다.
2.1.5.2 IOMUX Software Operation
IOMUX의 소프트웨어 구현은 핀 기능(functionality)과 핀 특성(features)을 설정하기 위한 API를 제공한다.
2.1.5.3 IOMUX Features
IOMUX의 구현은 하드웨어에서 지원하는 핀을 구성하도록 IOMUX 모듈을 프로그램한다.
2.1.5.4 IOMUX Source Code Structure
아래 테이블은 IOMUX 모듈의 소스 파일을 목록이다. 파일은 drivers/princtrl/freescale 폴더에 있다.
Table 7. IOMUX Files
File | Description |
---|---|
drivers/pinctrl/freescale/pinctrl-imx.c | i.MX pinctrl core driver |
drivers/pinctrl/freescale/pinctrl-imx6q.c | i.MX 6Quad/DualLite pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx6sx.c | i.MX 6SoloX pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx6sll.c | i.MX 6SLL pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx6ul.c | i.MX 6UltraLite and 6ULL pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx7d.c | i.MX 7Dual pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx7ulp.c | i.MX 7ULP pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8qm.c | i.MX 8QuadMax pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8qxp.c | i.MX 8QuadXPlus pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8mq.c | i.MX 8M Quad pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8mm.c | i.MX 8M Mini pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8mn.c | i.MX 8M Nano pinctrl driver |
drivers/pinctrl/freescale/pinctrl-imx8ulp.c | i.MX 8ULP pinctrl driver |
2.1.5.5 IOMUX Programming Interface
pinctrl 바인딩 문서는 Documentation/devicetree/bindings/pinctrl/fsl를 참조한다.
- imx-pinctrl.txt
- imx6q-pinctrl.txt
- imx6dl-pinctrl.txt
- imx6sll-pinctrl.txt
- imx6sx-pinctrl.txt
- imx6ul-pinctrl.txt
- imx7d-pinctrl.txt
- imx7ulp-pinctrl.txt
- imx8qm-pinctrl.txt
- imx8qxp-pinctrl.txt
- imx8mq-pinctrl.txt
- imx8mm-pinctrl.txt
- imx8mn-pinctrl.txt
2.1.5.6 IOMUX Control Through GPIO Module
다용도 핀의 경우에는, GPIO 컨트롤러는 멀티플렉싱 컨트롤을 제공하여 각 핀이 기능이나 GPIO 핀으로 구성될 수 있도록 한다. 주요 기능이나 하나의 대체 기능으로 세분화될 수 있는 기능 핀의 작동은 특정 하드웨어 모듈에 의해 컨트롤된다. GPIO 핀으로 구성된 경우, 핀은 GPIO 모듈을 통한 추가 구성과 함께 소프트웨어로 사용자가 컨트롤한다. 또한, GPIO 핀에 대한 특별한 구성(예: 출력 기반은 A_IN, B_IN, C_IN나 DATA 레지스터이지만, 입력 기반은 A_OUT나 B_OUT)이 있다.
다음 설명은 GPIO(General Purpose Input/Output) 모듈을 통해 핀의 멀티플렉스를 컨트롤하는 플랫폼에 적용된다.
하드웨어 모드가 시스템 통합 레벨에서 선택된 경우, 이 핀은 소프트웨어로 변경할 수 없고 해당 용도로만 사용된다. 그렇지 않으면, GPIO 모듈을 시스템(보드) 디자인에 지정된 특정 용도를 수행하도록 적절하게 구성해야 한다. 이 핀이 외부 UART 트랜시버에 연결되어 있는 경우, 기본 기능으로 구성해야 한다. 또는 이 핀이 코어를 인터럽트하기 위해 외부 Ethernet 컨트롤러에 연결되어 있는 경우, 인터럽트가 활성화된 GPIO 입력 핀으로 구성해야 한다. 소프트웨어는 핀이 가져야 하는 기능을 컨트롤할 수 없다. 시스템 디자인에 따라 소프트웨어는 해당 용도로 핀을 구성만 한다.
2.1.5.6.1 GPIO Hardware Operation
GPIO 컨트롤러 모듈은 MUX 컨트롤과 PULLUP 컨트롤 서브 모듈로 구분된다. 다음 섹션에서는 하드웨어 작동에 대해 간략하게 설명한다. 자세한 내용은 관련된 디바이스 문서를 참조한다.
2.1.5.6.1.1 Muxing Control
GPIO In Use Registers는 GPIO 모듈의 멀티플렉서를 컨트롤한다.
이 레지스터의 설정은 핀이 주변 디바이스 기능이에 사용되는지 GPIO 기능에 사용되는지 여부를 선택한다. 하나의 32비트 범용 레지스터는 각 GPIO 포트 전용이다. 이 레지스터는 GPIO IOMUX 블록의 소프트웨어 컨트롤에 사용할 수 있다.
2.1.5.6.1.2 PULLUP Control
GPIO 모듈에는 각 GPIO 포트(해당 포트의 모든 핀을 컨트롤하는)에 대한 PULLUP 컨트롤 레지스터(PUEN)를 가지고 있다.
2.1.5.6.2 GPIO Software Operation (general)
GPIO 소프트웨어 구현은 핀 기능(functionality)과 패드 특성(features)을 설정하기 위한 API를 제공한다.
2.1.5.6.3 GPIO Implementation
GPIO 구현은 하드웨어에서 지원되는 핀을 구성하기 위해 GPIO 모듈을 프로그램한다.
2.1.6 General Purpose Input/Output (GPIO)
GPIO 모듈은 입력이나 출력으로 구성할 수 있는 범용 핀을 제공한다. 출력으로 구성되면, 내부 레지스터에 기록하여 핀 상태(high나 low)를 컨트롤할 수 있다. 입력으로 구성되면, 내부 레지스터에서 핀 입력 상태를 읽을 수 있다.
2.1.6.1 GPIO Software Operation
GPIO(General Purpose Input/Output) 모듈은 i.MX 프로세서 외부 핀을 구성하는 API와 GPIO 인터럽트를 컨트롤하는 중앙 장소(a central place)를 제공한다.
핀을 구성하기 위해, 직접 GPIO 레지스터를 액세스하는 대신 GPIO 유틸리티 함수를 호출해야 한다. GPIO 인터럽트 구현에는 ISR(Interrupt Service Routine)의 등록/등록 취소와 인터럽트 발생 시 ISR 디스패치 같은 함수가 포함되어 있다. 모든 드라이버별 GPIO 설정 함수는 더 나은 이식성과 유지 관리성을 제공하기 위해 MSL 레이어에서 디바이스를 초기화 동안 만들어어야 한다. 이 GPIO 인터럽트는 시스템 시작 중에 자동으로 초기화된다.
IOMUX에 의해 핀이 GPIO로 구성되는 경우, 전용 하드웨어 모듈에 의해 초기화되지 않으므로 핀의 상태도 설정해야 한다. 패드 컨트롤 함수로 패드 풀업, 풀다운, 슬루율 등을 설정해야 할 수도 있다.
2.1.6.1.1 API for GPIO
"API for GPIO"는 GPIO 구현에서 지원하는 기능을 나열한다.
GPIO 구현은 다음 기능을 지원한다:
- GPIO 인터럽트를 인터럽트 서비스 루틴에 등록하기 위한 API. 이는 인터럽트를 생성할 수 있는 모든 가능한 GPIO 핀을 수용하기 위해 NR_IRQS에 의해 정의된 인터럽트 수가 확장되기 때문에 가능하다.
- IOMUX 핀을 request하고 free하는 함수. 핀이 GPIO로 사용되는 경우, 다른 request/free 함수 호출 세트가 제공된다. 사용자는 request 호출의 반환 값을 확인하여, 핀 상태를 수정하기 전에 핀이 이미 예약되었는지 확인해야 한다. 핀이 필요하지 않을 때는 free 함수 호출을 수행해야 한다. 자세한 내용은 API 문서를 참조한다.
- IOMUX와 GPIO 함수 호출 모두에 정렬된 파라미터 전달. 이 구현에서 동일한 iomux_pins에 대한 열거는 IOMUX와 GPIO 호출 모두에 사용되며, 사용자는 GPIO 모듈에서 핀이 어느 비트 위치에 있는지 파악할 필요가 없다.
- Ethernet과 UART 드라이버와 같은 공용 드라이버에 필요한 최소한의 변경. 인터럽트 등록을 위해 특별한 GPIO 함수 호출이 필요하지 않다.
2.1.6.2 GPIO Features
이 GPIO 구현은 다음 기능을 지원한다:
- GPIO 하드웨어 모듈에 액세스하기 위한 함수를 구현.
- GPIO 신호 방향과 GPIO 인터럽트를 컨트롤하는 방법을 제공.
2.1.6.3 GPIO Module Source Code Structure
모든 GPIO 모듈 소스 코드는 이 장의 시작 부분에 표시된 디렉토리에 있는 다음 파일의 GPIO 프레임워크에 있다:
Table 8. GPIO Files
File | Description |
---|---|
drivers/gpio/gpio-mxc.c | 함수 구현 |
2.1.6.4 GPIO Programming Interface 2
자세한 내용은 프로그래밍 인터페이스에 대한 Linux 소스 코드 디렉토리 아래의 Documentation/gpio/gpio.txt를 참조한다.
2.1.7 Clock
Linux 클럭 프레임워크는 클럭 트리 관리를 지원하기 위해 기본(underlying) 하드웨어에 의존한다.
다음 테이블에서는 사용되고 있는 다양한 클럭 하드웨어에 대해 설명한다.
File | Description |
---|---|
Clock controller module (CCM) | i.MX 6Quad/DualLite/SoloX/UltraLite/ULL/SLL, i.MX 7Dual, i.MX 8M Quad, i.MX 8M Mini, i.MX 8M Nano |
Peripheral clock control (PCC) and System clock generator (SCG) |
i.MX 7ULP |
Distributed slave system controller (DSC) | i.MX 8QuadMax/8QuadXPlus |
2.1.7.1 Clock Software Operation
클럭 소프트웨어 구현은 하드웨어 클럭 유형과 설정에 따라 클럭 트리를 초기화한 다음, 하드웨어 클럭 모듈을 작동하기 위한 클럭 operation 콜백을 제공하는 초기화 함수를 제공한다.
2.1.7.2 Clock Features
클럭 구현은 다양한 클럭 유형에 따라 다음 기능을 지원한다:
- 클럭을 Prepare/Unprepare
- 클럭을 Enable/Disable
- 클럭 속도를 Get/Set
- 클럭 부모를 Get/Set
2.1.7.3 Source Code Structure
소스 코드의 구성은 다음과 같다.
File | Description |
---|---|
drivers/clk/imx/clk-imx6q.c | i.MX 6Quad/6DualLite clock driver |
drivers/clk/imx/clk-imx6sx.c | i.MX 6SoloX clock driver |
drivers/clk/imx/clk-imx6ul.c | i.MX 6UltraLite and 6ULL clock driver |
drivers/clk/imx/clk-imx6sll.c | i.MX 6SLL clock driver |
drivers/clk/imx/clk-imx7d.c | i.MX 7Dual clock driver |
drivers/clk/imx/clk-imx7ulp.c | i.MX 7ULP clock driver |
drivers/clk/imx/clk-imx8qm.c | i.MX 8QuadMax clock driver |
drivers/clk/imx/clk-imx8qxp.c | i.MX 8QuadXPlus clock driver |
drivers/clk/imx/clk-imx8mq.c | i.MX 8M Quad clock driver |
drivers/clk/imx/clk-imx8mm.c | i.MX 8M Mini clock driver |
drivers/clk/imx/clk-imx8mn.c | i.MX 8M Nano clock driver |
drivers/clk/imx/clk-imx8ulp.c | i.MX 8ULP clock driver |
2.1.7.4
다른 클럭 유형은 다른 클럭 operation 콜백을 제공한다. 디바이스 드라이버는 클럭 프레임워크에서 표준 클럭 API를 호출하고 결국 플랫폼 클럭 드라이버를 호출하고, 해당 클럭 노드의 operation 콜백이 실행된다.
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual (IMXLXRM) - System - Boot Image (0) | 2022.11.03 |
---|---|
i.MX Linux Reference Manual (IMXLXRM) - System - System Controller (0) | 2022.11.01 |
i.MX Linux Reference Manual (IMXLXRM) - Introduction - References (0) | 2022.10.27 |
i.MX Linux Reference Manual (IMXLXRM) - Introduction - Audience (0) | 2022.10.25 |
i.MX Linux Reference Manual (IMXLXRM) - Introduction - Overview (0) | 2022.10.24 |