Github Page

레이블이 IF-PCIe인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IF-PCIe인 게시물을 표시합니다. 모든 게시물 표시

12/02/2025

PHY 의 이해와 DSP 관점 이해

1. PHY 의 이해 

Transceiver라고도 말하며, PHY라고도 말을 하기도 한다. 
SoC/MPU/AP에서 Digital Data를 PHY에게 보내면, 이를 재 가공(Encoding)해서, 물리적으로 전송을 하는 Layer라고 생각을 하면 된다. 
물리적 계층에서 최종 데이터의 전송을 담당하기에 각 PHY/Transeiver 마다 각 Encoding 방식은 다르다. 

RF에서도 Transceiver가 존재하며, 각 Encoding이 Analog 라고 봐야할 듯하다. 
좀 더 넓게 생각해보면, 유선과무선(RF)으로 볼 수 있고, 각 부분들을 간단히 알고 이해해보도록 하자. 

PCIe PHY
PCIe 이해 와 USB 의 비교 
2.3. Physical Layer (PCS/PMA)

MIPI PHY
MIPI PHY (D-PHY)

Ethernet PHY 
MII(Media Idependent Interface) MAC과 PHY

RS-485 Transceiver
RS232 와 RS485 Tranceiver 


1.1  PHY 의 Encoding/Decoding 방식 


PCIe PHY
PCIe PHY 구조 

  • PCIe PHY Interface Spec
PCIe PHY/USB PHY/USB4 PHY/SATA PHY 관련 비교 설명 
  1. 2.1 PCIe PHY Layer
  2. 8.1.1 Clocking Topologies    (PLL 부분)
  3. 8.3.1 Power Management – PCIe Mode
  4. 8.15 Error Detection
  5. 9.10 Message Bus: Equalization   ( CDR 부분?)
  6. 10 Multi-Lane PIPE – PCIe Mode

1.2  Phase Detection 

  • Mixer 의 Phase Detection 이해 
Mixer/Phase Detector 관련 설명 (별도 추가)
PHY 를 DSP관점으로 이해하기 위해서 아래 설명을 별도로 먼저 추가함 

PHY에서 가장 중요하게 생각해야 할 것이 Phase 일 것으로 생각되어진다. 
특히, 고속 I/O Interface로 갈 수로 Phase Detect를 하고 이를 Calibration을 하고 각 Error 상태 확인하고, 
각 에러 특징에 따라 상태변경을 해야 하기 때문이다.

이 생각을 하다가, 
RF Mixer/Phase Detector가 생각이 나서, 이 부분을 DSP 관점으로 변경해서 생각해보기로 했다.
원래는 PCIe 와 CXL 부분을 하다가 갑자기 생각이 나서 간단히 만 정리한다. 


2. 고속 Serial PHY 의 DSP 관점 이해  

PHY는 DSP 사용하지 않으며, 전부 H/W 동작 되는 게 맞을 것 같으며, 아래는 개인적인 생각이다.
다만, H/W관점에서 PHY를 DSP 관점을 바꾸어서 이해하기 위해서 생각해보자. 

  • CTLE(Continuous-Time Linear Equalizer)/DFE DSP 관점 
Digital RX FIR Equalization
Digital RX FIR & DFE Equalization Example
Link with Equalization  (TX FIR Equalization ->  RX CTLE+DFE)
DFE with IIR Feedback
DFE with IIR Feedback RX Architecture
나만 이렇게 DSP관점에서 생각한 것은 아닌 듯하며, 기존에도 사용을 하는 듯하다. 
아래 문서를 좀 자세히 보면 , TX / RX 를 분리해서 관리하며 맞을 것 같으며, 아직 완벽히 이해가 되지 않음 


Simulink
  https://kr.mathworks.com/help/serdes/ref/ctle.html  

개인생각으로는 
DSP에서 동작을 시킨다는 관점에서 생각하면, 더 쉽게 이해하지 않을까 쉽다.
아래 내용이 다 틀리 수 있으므로, 개인생각이라 주의해야 한다. 

  1. HW-Analog Front-End 
  2. DSP-FIR Equalization : Channel Equalization 
    1. H/W 여러 요소들을  통계 평준화/보정  
    2. DSP의 예로 들면, Camera ISP의 White Balance 느낌 
  3. DSP-IIR Correction:  Adaptive EQ (DFE)
    1. 상위에서 얻은 것들을 지속적으로 보정 
    2. DSP의 예로 들면, Radar의 IIR인 Kalman Filter 느낌
  4. DSP-Digital Control (FSM/LTSSM 설계) 
    1. 각 상태도 들을 만들어 설계 후 이에 맞게 행동 
    2. 상태도 기반의 제어 (State Machine)

  • DSP 관점 쉽게 이해   
HW --> PD --> LPF --> ADC --> FIR Filter 문제확인 --> IIR 지속적인 적응 보정  --> FSM 상태 제어 
추후 시간이 더 되면 진행 


  • DSP 관점에서 생각 

FIR / IIR / FSM Functional Mapping in High-Speed Interfaces
블록 DSP 관점 역할 DSP 관점 생각 PHY 설명
FIR Analyzer H/W Channel 각 요소 왜곡된 정보들
FIR 기반 추정/탐색 후 초기보정
FIR 필터 응답으로 각 요소파악
평준화(Equlization)
CTLE/FFE 기반으로 ISI, BER, Eye margin 등 측정
IIR Loop (Adaptive EQ) FIR 분석 결과 누적 보정 IIR Feedback DFE.AdativeEQ 계수, 온도,전압 변화 계수 갱신하여 제어
FSM / LTSSM FIR/IIR 루프의 제어기 상태 제어기(State Machine) Polling, Recovery, L0 등 상태 전환 제어


  • DSP 관점 에서 FIR /IIR /FSM 의 역할  

Interfaces vs. FIR/IIR Roles and Control FSM
인터페이스 FIR 역할 IIR 역할 FSM 제어기
PCIe / USB Channel Observation Adaptive EQ (CTLE/DFE) LTSSM
Ethernet KR / PAM4 Eye Margin Monitor Coefficient Update Link Training FSM
DisplayPort / HDMI (FRL) Training Pattern Measure Equalizer Tune LTTPR FSM
MIPI (M-PHY) Gear Training Measure Feedback Adaptation LSS / Power FSM





10/28/2025

PCIe 이해 와 USB 비교

1. PCIe 의 기본 구조 
.
PCIe Layer 전체 구조 와 각 Layer 특성을 간단히 알아본 후, USB 와 같이 비교를 해보자 
일단 1차 버전으로 기본을 이해하고, USB 와 지속적으로 비교하면서 업데이를 하겠다. 

  • PCIe Layer 구조 
Ethernet 가 다르게 Layer 3개이며, USB  Layer 비슷하다고 생각되어진다.
이 부분은 나중에 다시 다루도록 하겠음 




  • PCIe 각 Layer 관련 설명
Wiki만 봐도 대충 이해는 갈 듯 하다. 


1.1  PCIe 와 USB 비교 

PCIe 와 USB 가 서로 비슷하므로, 관련 부분들을 일단 비교를 해보고 차이점을 알아보도록 하자. 

  • PCIe 와 USB 비교  
구분 PCI Express (PCIe) USB (특히 USB 3.x 기준) 차이점
Topology Point-to-Point
(Switch fabric)
Tiered Star
(Host + Hub + Device)
PCIe P2P  
USB Master-Slave 
Application Layer SW에서 보낸 Memory/Registeer 접근 요청을 처리
(e.g. Memory Read/Write, I/O, Config)
Host 에서 Description 기반의 
Class Driver 제공 및 별도 정의해서 구현가능
(e.g. Mass Storage, HID 등)
상위 연결 후 (URB)을 통신 
PCIe 자동 협상+동기화
USB Host Control 중심
Transaction Layer
(TL)
Packet 단위로 Request/Completion 처리
주소 기반(Load/Store)
USB Transfer Types
(Control/Bulk/Interrupt/Isochronous)
Transaction 을 Device 정의
PCIe는 Memory Access 중심
USB는 EndPoint 중심
Data Link Layer
(DLL)
Ack/Nak, 시퀀스 번호, CRC, 재전송 Link Command 패킷
(Flow Control, Link Management 등)
PCIe는 신뢰성(ACK/NACK) 보장
USB는 최소 Overhead
Physical Layer
(PHY)
8b/10b 또는 128b/130b
CDR, EQ(CTLE/DFE), PIPE
8b/10b(USB 3.0)
128b/132b(USB 3.1)
LFPS,
PHY PIPE
둘 다 High Speed SERDES PHY사용
둘 다 Channel 특성/속도 협상방식 다름



  • USB 관련자료 
PCIe 와 USB 간단히 비교를 해보고, 이해하자. 

  • TI USB 3.2 정보 
  1. 6  Physical Layer  --> 전체구조 파악 
  2. Section 6.9 Low-Frequency Periodic Signaling (LFPS)   -> 기능확인 (Sequence)

개인생각 
내 개인 생각이지만, 추후 CXL를 잘 사용하기 위해서는 PCIe Switch/CXL Switch 와 USB Host 연결이 중요할 듯하다.
이유는 둘 다 고속 Serial Interface 이면서, 잘 이용한다면, CXL 의 확장으로 쉽게 USB 와 연결하여 
사용할 것 같다. 
USB의 경우 역사가 깊어 Protocol 안전성 과 관련 Host Stack 이미 구현되어져 있는 게 많다. 
더불어 USB의 장점이 Device에서 Transfer Type을 설정하고, 기술하여 마음대로 전송도 가능하므로, 확장도 쉽다. 




1.2 PCIe Version 따른 개별 Layer 변화  

각 용어가 몰라도 좋으니, 그러려니 하고 넘어가도록 하며 각 변화 사항만 파악하도록 하자.

  • PCIe Version 별 각 Layer 변화 
PCIe Version Transaction Layer Data Link Layer Physical Layer (PCS / PMA / PIPE)
1.0 / 1.1 • Basic TLP (Memory, I/O, Config)
• No Atomic Ops / FLIT concept
• Basic ACK/NAK mechanism
• 8-bit Sequence Number
8b/10b Encoding (2.5 GT/s)
No standardized PIPE (Vendor-specific)
• PMA = Basic SerDes
2.0 • Adds Virtual Channels (QoS)
• Transaction Layer split enhancement
• LCRC reliability improved
• Replay buffer efficiency improved
PIPE introduced (v3.0)
5 GT/s signaling
• Same 8b/10b encoding
• PHY–MAC separation begins
3.0 • Atomic Ops added
• TLP Compression (Header Reduction)
• 16-bit Sequence Numbers
• DLLP optimization for higher throughput
128b/130b Encoding (8 GT/s)
PIPE 4.x
• Equalization / Training introduced
• Advanced LTSSM states
4.0 • Enhanced Ordering Rules
• Improved Completion Handling
• Retry buffer + Replay Timer improvement PIPE 5.1
16 GT/s, improved EQ tuning
• Enhanced Link Training sequences
• Jitter tolerance improved
5.0 • No major logical change
• Mainly supports higher bandwidth TLP
• Optimized flow control timing PIPE 6.1
32 GT/s, retimer interoperability
• Power Management enhancements (L1.1/L1.2)
6.0 FLIT-based TLP (Fixed-Length Packet) ✓
Forward Error Correction (FEC) added
Replay protocol removed (replaced by FEC)
• Simplified ACK logic
PAM-4 signaling (64 GT/s)
PIPE 6.2+
FEC engine in PHY
• LTSSM updated for FLIT and PAM-4 link training
7.0 (draft) • Continuation of FLIT architecture • TBD minor optimization PIPE 7.0 (planned)
PAM-4 extended, improved EQ/FEC interaction
• Anticipated 128 GT/s signaling


  • 주요특징정리
Transaction Layer: 3.0부터 Atomic Ops, 6.0에서 FLIT 구조로 근본적 변화
Data Link Layer: 6.0에서 FEC 도입으로 ACK/NAK 메커니즘 단순화
Physical Layer:
2.0 → PIPE 등장
3.0 → 128b/130b 전환
6.0 → PAM-4 + FEC로 신호방식 자체 변화


2. PCIe Layer 

상위 Layer 기반으로 각 기능들을 간단히 설명하도록 하겠으며, 아래와 같이 1개의 Serial 통신이 생성이 되어진다. 


2.1 Transaction Layer 


A.역할  

CPU, DMA, 또는 다른 SoC 내부 논리에서 발생한 메모리 접근, 
I/O Access, Message Transaction을  Packet(TLP, Transaction Layer Packet)으로 생성하는계층.

B.기능정리
  1. Memory Read / Write, I/O Read / Write, Configuration Read / Write 등의 Trasaction 정의
  2. 각 요청(Request)과 응답(Completion) 관리
  3. Address Translation, BAR (Base Address Register) Mapping
  4. MSI/MSI-X Interrupt 관리
  5. Flow Control 관리 
    1. Credits 방식
B.세부사항  
  1. 실제 PCIe Core (Controller) 의 대부분의 로직이 여기에 있음
  2. 펌웨어/드라이버는 주로 Transaction Layer 레벨에서 동작 (메모리 접근, DMA 제어 등)
  3. SW ↔ HW 인터페이스는 Configuration Space (PCI Config) 를 통해 이루어짐

2.2 Data Link Layer


A. 역할

Transaction Layer에서 내려온 TLP에 대해 신뢰성을 보장하고, ACK/NACK 기반의 재전송 메커니즘을 수행한다.
Network 치면, TCP와 유사할 것 같다. 
즉, “Reliable Delivery”를 담당

B. 기능정리
  1. Sequence Number 관리 (순서 보장)
  2. LCRC (Link CRC) 계산 및 검증
  3. ACK / NACK 프로토콜 (Data Link Layer Packet, DLLP 사용)
  4. Flow Control Credit 업데이트 (DLLP 통해 전송)

C. 주요패킷 종류
  1. TLP (Transaction Layer Packet): 실제 데이터
  2. DLLP (Data Link Layer Packet): 제어 정보 (ACK/NACK, Flow Control 등)

B. 세부 사항  
  1. TLP이 손상되거나 순서가 어긋나면 재전송 요청
  2. PHY 신호 오류는 Data Link Layer에서 검출하여 자동으로 복구
  3. 한 Link마다 독립적으로 동작 
    1. (ex. Root ↔ Endpoint, Switch ↔ Device)

2.3. Physical Layer


A. 역할

Data Link Layer에서 전달 받은 데이터 패킷을 직렬화(Serialize) 하여 실제 신호로 전송하고, 수신 데이터를 복원(Deserialize) 한다.
전송 매체는 AC-Coupled Differential Pair (Tx/Rx Lane) 로 구성된다.
중간에 Bypass Capacitor 사용하여 ,즉 AC로 전송을 하는 구조이다.  

B. 하부구조

A. PCS (Physical Coding Sublayer)
  1.  Encoding/Decoding
    1. 128b/130b (Gen3 이상)
    2. 8b/10b (Gen1/2)
  2. Scrambling/Descrambling (DC Balance 유지)
  3. Lane Alignment, Symbol Lock
  4. SKP Ordered Set 삽입 (Clock 보정용)
  5. PIPE 인터페이스
B. PMA (Physical Medium Attachment)
  1. Serializer / Deserializer (SerDes)
  2. Equalizer (CTLE, DFE 등)
  3. Clock Data Recovery (CDR)
  4. Transmit Driver / Receiver Front-End
  5. Eye Diagram, Pre-emphasis 등 실제 아날로그 신호 특성 조정

  • PHY 의 PCS vs PMA 비교 
구분 PCS (Physical Coding Sublayer) PMA (Physical Medium Attachment)
성격 Digtal Logic Analog/ Mixed-signal
주요 기능 • Encoding/Decoding (8b/10b, 128b/130b)
• Scrambling
• Alignment
• LTSSM
• SerDes
• Equalization
• CDR
• Voltage swing
주요 위치 Controller Side Channel(Lane) Side
주요 변화 PIPE 3.0~6.0 사이 인코딩 변화 PCIe 3.0부터 EQ·CDR 고도화


  • Serializer / Deserializer (SerDes)
  1. Controller에서 오는 병렬 데이터를 직렬 신호로 변환 (TX)
  2. 수신 시 반대로 직렬 데이터를 병렬로 복원 (RX)
  3. PCIe x1, x4, x8, x12, x16, x32 Lane  동작

  • Equalization (Channel 보정)
  1. 신호 감쇠, 반사, ISI(inter-symbol interference)를 보정
  2. 송신단 (Tx Pre-emphasis / De-emphasis)
  3. 수신단 (Rx CTLE, DFE) 조합으로 수행
  4. PCIe 3.0 이후에서 매우 중요해짐

  • CDR (Clock and Data Recovery)
  1. 수신 신호에서 클록을 복원하여 비트 타이밍 동기화 수행
    1. Inverse Filter를 사용하여 복원 
  2. Eye Diagram을 기반으로 샘플링 포인트 결정

  • Electrical Interface
  1. 전압 스윙, 신호 스펙트럼, 임피던스 매칭, EMI 최소화
  2. 실제 Package Pin / PCB Trace/ Connecter / Cable과 직접 연결

3. TI 와 AMD  PCIe Controller 분석 


TI PCIe Controller

AMD PCIe Controller 


3.1 USB-DRD(Dual Role Data) 정리  

USB의 경우, Host 와 Device 즉 Master / Slave 구조라서 각 Role 의 역할이 정해져 있으며, 협상을 통해 이를 정하는 기능이 존재했다. 
그것이 기존의 OTG이고, USB Type-C  기존 OTG에서 확장된 개념으로 생각하면 될 듯하다. 

  • i.MX6 OTG/DRD(Dural Role Data) 이해 
USB OTG(On The Go) 이해해야, DRD(Dural Role Data)  이해가 가능 

  • USB 3.0 이후 OTG 와 DRD 차이점 
USB OTG 차이를 생각하면, 단지 Host / Device Role 구분 뿐만 아니라,
USB-PD(Power Delivery)가 Source/ Sink 구분되어 
기존의 USB Host에서 만 전원을 제공하던 개념이 깨진 것이 핵심일 것 같다. 

  • USB-DRD(Dual Role Data)
AMD USB 3.2 DRD(Dual Role Data) Controller 

10/17/2025

CXL 의 이해 와 구조

1. CXL(Compute Express Link) 의 이해 

CXL (Compute Express Link) 에 대해 급하게 알아야 할 듯하여,관련 자료들을 수집하고 학습. 

  • CXL(Compute Express Link) 란?
PCIe 기반으로 사용되어지는, 고속 DMA Controller 비슷할 것 같다. 
즉 CPU 입장에서 생각하면, 각 Cache 에 연결된 AMBA(AHB,APB,AXI) 와 DMA를 이용하여 각 Memory 고속으로 전송하는 Bus Switch Interface가 맞을 듯 하다 

  • UCIe
CXL 기반으로 출발한 것 같으며, 현재 Chiplet이라는 ,즉 실리콘 즉 반도체에서 이를 다 연결하려고 하는 Interface가 맞을 것 같다.

  • PCIe
PCI에서 발전된 Bus로 PCI/HPI는 직접 Driver를 개발했지만, PCIe 직접 개발해보지 못해 이 부분은 나중에 별도로 정리하도록 한다. 
요즘은 솔직히 Kernel Platform화가 잘 되어있어, 개발보다는 주로 설정하고 변경하는 것이라 이 부분은 별도로 기회가 있으면 다시 정리하도록 하겠다. 

  • CXL 의 개인적 생각 과 결론 
종합적으로 보면, CXL는 PCIe Interface 이용하지만, CPU 의 내부에서 비교하자면, AMBA(PCIe) 역할과 DMA Contorller 와 Memory Controller 가능 일 것이다. 
그러니, CPU 밖에서, 다양한 CPU들 과 연결하는 것도 쉽게 가능 하리라고 본다. 
더 나아가 왜 UCIe가 실리콘, 즉 반도체  위에서 한다는 이유도 대충 이해가 가는 듯하다. 


1.1 CXL 구조 와 CXL Type 

  • CXL 구조 와 Type 의 이해 
CXL에 대해 쉽게 설명이 되어 있어 , CXL 기본 구조 와 Type 1/2/3 쉽게 이해 
CXL 2.0 이 후 Type1/2/3 기반으로 연결 확장 가능하며, 이를 다양하게 더 확장이 가능 설명  

  • CXL 의 Spec 과 이해 
1.6 Flex Bus Layering Overview : Flex Bus 의 이해 
2.0 Compute Express Link System Architecture : CXL의 Type1/2/3 의 이해 
PDF의 좌측 Index 기반으로 각 살펴보면,  쉽게 감이 잡히는 듯하다 
관련 그림들은 혹시 문제가 될 듯해서 가져오지 않음 

Compute Express Link Consortium
  1. CXL 최신 Spec 신청가능하며 왠지 무료는 아닐듯?
  2. 일단 Spec 1.0으로만 만족 
 

  • CXL Device Type 1/2/3 구조 와 역할 
CXL Type 포함 프로토콜 주요 역할 예시 디바이스 특징
Type 1 CXL.io + CXL.cache 가속기(Accelerator) – 호스트 메모리를 캐시 형태로 접근 Smart NIC, FPGA Accelerator, AI Inference Engine 자체 메모리는 거의 없고, Host DRAM을 Cache Access 함
Type 2 CXL.io + CXL.cache + CXL.mem 고성능 가속기 – Host 메모리 접근 + 자체 메모리 공유 가능 GPU, FPGA with onboard HBM, AI Chip 호스트와 디바이스가 서로의 메모리에 Coherent Access
Type 3 CXL.io + CXL.mem 메모리 익스팬더(Memory Expander) – Host에 추가 메모리 제공 CXL.DIMM, CXL Memory Card, Persistent Memory CPU가 Device 메모리를 Load/Store 식으로 사용


  • CXL Controller 관점의 비교  
각 Host 와 CXL Device(CXL Controller) 관점에서 비교를 해보자. 
Cache 에 따라 성능이 변경되므로, 
Coherency Directory 즉 Cache 의 일관성을 어디까지 해야 하는 지이며, 알고리즘은 어떤 것을 쓰는지 또, 범위는 어디까지 하는 지가 중요하다(이 부분 다시 밑에) 

구성 요소 Type 1 Type 2 Type 3
CXL.cache
CXL.mem
CXL.cache
Coherency Directory (Host side only) (Host + Device side) (Host side only)
Local DRAM Access
목적 Compute 가속 Compute + 메모리공유 Pure Memory 확장

  • CXL Device Type1/2/3 확장 (결합)
CXL 2.0 이상부터는 이 Type 1/2/3 디바이스를 스위치와 Fabric구조에서 논리적 결합(Logical Device) 으로 묶을 수도 있다고 한다. 
증권사 자료이지만, 이해 하기가 자료 좋음 

  • CXL Fabric 간단 정리 
지능형 연결망이라고 하는데, 각 기능들을 Thread 즉 실로 보고, 이를 엮어서 각 기능들의 총체적인 기능을 말한다고 한다. 
즉 CXL Fabric 구조는 여러 외부 CPU들 과 다양한 Peripherial 들 연결 확장까지도 생각을 해볼 수 있는 것이다. 



1.2 CXL Swtich 구조 

다양한 PCIe Channel 들을 처리하기 때문에 Arbiter/Mux 는 역할이 중요할 것 같으며, 
즉, DMA Controller 역할이 비슷할 거라고 생각되어진다.
상위 Spec1.0 보면 다양한 기능들이 들어가면서, 다양한 기능들을 처리하려면, 단순한 DMA Controller가 아닌 복합적인 DMA Controller 동작할 거 같다. 

CXL Switch 역시 여러 CXL Device Type 1/2/3 조합으로 각 CXL switch 마다 각 기능이 다 다를 것이다.  

여러 CXL Device Type 1/2/3 조합이 가능하므로, 아래로 한정적으로 생각하지 말자. 


CXL Switch Diagram


  • CXL 2.0 부터 추가되어진 기능 
기능 역할
Address Mapping / Routing 어떤 요청이 어느 Type으로 가야 하는지 결정
Coherency Management 여러 Type 2/3 장치가 같은 주소 접근 시 캐시 일관성 유지
QoS / Credit Flow 트래픽 제어 및 우선순위 관리
Memory Pooling / Partitioning 여러 메모리 모듈을 하나의 논리 풀로 묶음
Security (IDE) 각 링크별 암호화 및 키 관리


1.3 Rambus 의 CXL Controller IP 확인  

실제 CXL Controller IP 팔고 있는 곳이 있기에 관련 부분을 보도록 하자 

  • Data Encrytion 의 이해 
AES의 대칭키 이해와 KEY 운영 GCM 확인 

  • CXL Controller IP기능 확인
  1. CXL Controller 3.1 vs CXL 2.0 비교 
  2. CCIX(Cache Coherent Interconnect for Accelerators) Controller  각 기능 
  3. CXL Controller  -> 거의 이게 핵심 
    1. PIPE 부분은 PCIe 와 같이 봐야 할 듯 

  • CXL 2.0 Controller 의 구조 
  1. CXL 2.0 Controller 
    1. CXL Protocol Layer
    2. User Interface Layer
    3. Integrity and Data Encryption (IDE)  -> AES-GCM 방식
    4. Unique Features & Capabilities
  2. CXL 2.0 Controller with AXI Block  
    1. ARM과 AMBA 호환 
  
  • Rambus CXL 2.0 Controller with IDE 
  1. IDE(Encrytion)의 Zero Latency  
    1. AES-256-GCM, GCM 이외 CTR 지원 가능
  2. 상위와 CXL 2.0 Controller 와 동일 

  • PCIe 의 구조 
  1. PCIe Contoller 
  2. PCIe Switch 
  3. PCIe Phy
CXL의 이해하려면 PCIe의 Phy를 사용하므로, 이 부분은 어 쩔 수 없이 봐야 할 듯하다 



2.  CXL 의 Cache 이해 

CXL의 Cache 는 아주 중요한 개념이며,  어떻게 보면, CXL 성능 핵심 기능일 듯하다.
즉 Cache 알고리즘에 따라 각 CXL의 성능이 달라질 것이며, 이 부분은 거의 회사마다 민감한 문제가 있을 듯하다. 


2.1  Cache Coherence 의 이해 

  • CPU 입장 의 SMP 관점 
다중 코어의 cache-coherency protocols 이용하여 1개의 Core처럼 사용을 하려 한다면, 어떻게 해야 하지  

  • OS 입장의 SMP vs AMP 관점 
OS 입장에서는 다중 코어일 경우,  SMP vs AMP 어떻게 Scheduling 할 것인지, 즉 방법 
Linux 의 경우, SMP기준으로 많이 사용 

  • CPU Cache Coherence 의 기본이해 
각 독립적인 Cache를 Sync를 맞춰주는 작업이며, 아래 그림을 보면 쉽게 이해 간다.
그럼 Why 사용할까 , ARM 같은 다중 코어 일 때, SMP로 Task Scheduling 하려면,  Cache Coherence의 역할은 중요하다 
이유는 아래같이 여러 Core 같이 동시에 나누어서 작업을 해야 하기 때문이다. 

https://en.wikipedia.org/wiki/Cache_coherence#Overview


  • Cache Coherence 의 문제
각 CPU  Cache의 Coherence를 맞추어 주는 것은 좋으나, Cache Coherence의 범위를 예측을 못하는 문제가 발생하다. 
SMP 기준으로 간단히 생각을 해보면, 
모든 CPU의 Cache가 Coherence되어, 1/2번째 CPU는 작업을 나누어 완료 후, 3번째 CPU의 Cache 오래되어, 이제 필요가 없어지는 문제이다. 

  • Cache Coherence 의 개인 생각 정리 
결과적으로, Cache Coherence 범위, Cache 사이즈 및 갯 수 정확하게 제대로 예측 못하면, Cache의 Hit 율이 계속 떨어지고 효율은 낮다. 
어떻게 보면, Cache 예측과 Coherence 범위가 가장 중요할 듯 하다 

좀 더 세부적으로 Cache Coherence 생각해보면, 아직 아래 Protocol도 이해를 못했지만, 
Cache Coherence 운영을 하는 입장에서 생각을 해보면, 다음과 같은 생각도 얼마든지 해볼 수 있다.  
  1. Cache Coherence를 3가지로 A.전체/B.부분(범위)/C.제외 이런 식으로 될 것 같기도 하다. 
  2. 가중치(weight,bias)기반으로 매번 Cache Coherence 변경되어지거나 다양하게 생각 할 수 있을 것 같다.
  3. CNN으로 TinyML 사용해서, 가중치 대신해서 사용 가능 할 것 같다. (다양하게 생각이 듦)
이 부분은 Spec 과 나중에 Cache Corency Protocol 이해 후 다시 생각해 보고, 이해해보도록 하자 


ESP32 Cache 와 Memory 비교 
개인적으로 ESP32 CPU 설계를 잘했다고 생각을 하며, ESP-IDF 역시 너무 잘 구현을 해놨다.



2.2 Cache Corency Protocol 

우선적으로 Cache Corency Protocol 이해 하기 위해서 각 Cache 상태들 부터  이해 해보도록 하자  
머리가 나쁘면, 고생이다. 

CAPI(Coherent Accelerator Processor Interface)

  • Cache 의 상태 이해 
Cache Coherency Protocol States 
상태 약어 의미 설명 
M Modified / D / Dirty / DE / EM - 한 개의 캐시에만 존재하고 수정된(Dirty) 상태
- 메모리 내용은 오래된 값 (아직 반영 안 됨)
- 교체 시 반드시 Write-back 필요
O Owner / SD / SM / T - 여러 캐시에 복사본 존재하지만 메모리는 오래된 값
- 한 캐시만 “소유자(Owner)” 역할
- 다른 캐시의 읽기 요청 시 Owner 캐시가 데이터 공급
E Exclusive / R / VE / EC / Me - 한 캐시만 데이터 보유하고 메모리와 동일(clean)
- 다른 캐시에는 복사본 없음
- 쓰기 시 바로 M(Modified)로 전환
S Shared / V / SC - 여러 캐시에 동일 데이터 복사본 존재
- 주로 읽기 전용(Read-only) 상태
- 메모리와 일관됨 (clean)
- 단, 일부 프로토콜(예: Dragon)은 Shared Clean이 dirty일 수 있음
I Invalid - 유효한 데이터 없음 (태그 불일치 또는 무효화됨)
- 접근 시 메모리나 다른 캐시로부터 새로 읽어와야 함


Special / Extended States (MESI 확장형)
상태 이름 설명
F (또는 R) Forward / Recent - Shared 상태 중 대표 캐시(Forwarder)가 응답 역할 담당
- 동일 데이터가 여러 캐시에 있을 때 메모리 대신 이 캐시가 응답(intervention)
- Intel: MESIF, IBM: R-MESI (MERSI)
H Hover - 캐시에 주소 태그만 유지, 데이터는 무효(Invalid)
- 버스에서 해당 주소가 탐지되면 빠르게 유효(S) 상태로 복귀
- HR-MESI, HRT-MESI 등에서 사용되어 검색 속도 개선


  • Cache Status 요약 비교
상태 캐시에 존재 메모리 최신성 공유 가능성 쓰기 가능성 설명
M ✔ 있음 ✘ 오래됨 수정됨, 아직 메모리 반영 안 됨
O ✔ 있음 ✘ 오래됨 여러 캐시 중 한 곳이 최신 데이터 소유
E ✔ 있음 ✔ 최신 유일한 캐시 복사본, clean 상태
S ✔ 있음 ✔ 최신 여러 캐시에서 읽기만 가능
I ✘ 없음 ✔/✘ 불명 데이터 없음 또는 무효 상태
F ✔ 있음 ✔ 최신 공유 중 대표 캐시(Forwarder)
H 태그만 존재 주소만 남겨 빠른 재활성 가능


Cache Corency Protocol 의 종류 와 알고리즘 
각 알고리즘의 흐름이 변경되어지는 것을 대충 알 수 있으며, 이 부분은 나중에 좀 더 확인하자.


MESI 의 이해 (대표적)
아직 완벽히 이해가 되지 않은 상태 

MESIF 의 이해 (요즘?)
아직 완벽히 이해가 되지 않은 상태 



3. CXL 의 Linux Manual  

현재 Linux를 잠시 보면, CXL는  Device Type 3으로 메모리 확장용 으로만 사용하는 듯하다. 

  • Linux Device Driver (CXL)
  1. CXL Linux Device Driver 와 Manual 
  2. CXL Device Type 3으로만 사용? 
CXL Device Type 3(Memory 확장용)로만 사용한 것 같으며, Manaul도 거기 까지 인듯하다. 

  • Linux UserSpace
  1. CXL Linux User Manual 
  2. CXL ioctl 이용 


3.1 CXL 의 Linux Kernel 소스 

Linux Kernel 소스 찾아 각 부분 확인 

  • PCI의 ACPI 의 정보 
다만 PCIe가 아닌 PCI 인듯하며, PM 제어는 오래전부터 존재 했던거 같다. 
상위 CXL 1.0 Spec을 보면 PM제어는 부분이 많이 나온다. 

  • BIOS 와 ACPI 관련이해 
BIOS 에서 사용하는 UEFI의  ACPI(Advanced Configuration and Power Interface)  


  • CXL 의 Core 소스 (Linux Kernel)
  1. 상위 Device Type 3 의 Memory 확장형 소스 인것 같음 
  2. Memory 를 보면 주로 모듈형 RAM을 제어 DIMM

  • CXL 의  이외 소스 (Linux Kernel)
  1. 상위 Core 기반으로 Memory 확장형에  ACPI 기술이 첨부
    1. UEFI 의 ACPI(Advanced Configuration and Power Interface)  
  2. PCIe를 그냥 PCI로 기술을 하는 듯함 



상위 Device Driver 와 각 Spec 1.0을 보면서 느낀 점을 정리하자면 아래와 같다. 

  • CXL Switch 의 개인생각 
CXL 관련 Linux Kernel 소스 부분 확인 및 구조 확인 했지만, Device Type 3만 확인되는 듯하며,
CXL Switch Driver(각 CXL Type1/2/3 복합적 연결)는 아직 발견을 못했으며, 
분명, USB Host 처럼 Bus 형태의 Driver 일 것 같은데, 현재 각 제조사마다 다 다를 테니 이것은 초창기 USB Host Controller와 비슷하게 갈 듯하다 

또한, 분명히 CXL Switch가 구조화가 복잡하게 되므로, USB Host처럼 각 Device 의 구조를 설명하는 Description 형태로 각 설정을 변경하는 구조로 갈 듯하다. 왠지?
상위 부분은 Spec을 보고 나중에 다시 생각해보자  


  • CXL 기반의 AI 업체 개인생각 
H/W 입장에서 보면, CXL기반의 AI 업체들의  핵심 개발은 왠지  CPU 와 GPU 와 NPU 의 CXL.cache 가 가장 중요할 듯 하다. 
이유는 SRAM을 가장 효율적으로 빨리 동작 시켜서 DRAM기반으로 VRAM으로 성능 최적화를 하려고 할 것 같다. 

S/W 입장에서 보면, NVIDIA처럼 이제 AI H/W 도 중요하지만, 오히려 S/W Platform의 다각화가 더 중요할 듯하다. 
(NVIDIA 사이트만 가봐도 이해가 되며, Training 대충 경험이 있다면 이해가 더 빠르다)


3.2 Linux 의 Yocto 

Yocto 기반의 Linux에서 CXL 관련부분 을 검색하고 자료 수집 하려 했으나, 아직 제대로 찾지를 못함 
나중에 찾으면, 아래에 링크를 추가하겠음 

  • Yocto 의 기본이해 
Yocto 의 기본이해 



  • Yocto 의 openembedded Layer 확인 
각 최신 버전 과 Layer 확인 했지만, 아직 발견 못함 
CXL Switch 일 경우, 각 Bus Driver가 있어야 할 듯한데, 흐음? 



3.3 Linux 의 QEMU 

Linux Kernel에서 QEMU의 기반의 CXL 부분 확인 

  • QEMU 의 Linux Device Driver (CXL) 
  1. CXL 전체 구조를 보면 역시 Device Type 3 메모리 확장형만 사용 
    1. CXL 2.0  Type.1/2/3 지원 (문제는 Type 3만 사용)
    2. KERNEL CONFIG 확인 
    3. QEMU 으로 동작되는 것을 확인 
      1. 아래 링크 확인

9/01/2019

Lenovo Laptop Window 와 Ubuntu 18.04 설치 및 문제사항 정리

1.  Window / Ubuntu Dual Boot 설치 준비

원래 나의 계획은 Laptop에 Ubuntu로만 전체 설치진행하고, Window 10의 경우,Ubuntu에서 VirtualBox를 이용하여 사용할 계획이였다. , 
하지만, 막상 Ubuntu 18.04를 Laptop에 직접 설치 해보니, 
Laptop의 각종 Driver들이 지원 되지 않으니 상위 계획을 할 수가 없어서 일단 아래와 같이 Ubuntu 와 Window 10를 별도로 설치 진행 후, 
두 OS를 Dual Boot로 임시적으로 사용하기로 결정했다.

  • Lenovo Laptop Partition 구성 
  1. NVMe: Ubuntu 18.04
  2. HDD: Window 10 Home

그래서, 기존에 이미 설치한 Ubuntu 18.04 LTS도 다시 전부 지우고 다시 Window 10을 130G만 잡고 다시 설치 진행하고, 
Ubuntu를 재 설치하기로 결정 (Window 10도 벌써 2번째 설치 중)

  • 중요사항 
이번 설치로 Ubuntu 18.04 와 Window 10 home을 Dual Boot로 진행하며, 
BIOS에서 UEFI 모드로만 설치하기로 결정


1.1 USB 시동디스크 와 UEFI 기본이해 

기존 Window 설치프로그램으로 USB Boot를 만들려면 시간이 너무 오래  걸려서 그냥 ISO기반으로 
RUFUS를 이용하여 USB Boot Disk를 만들어 설치하기로 결정

우선 USB 시동디스크와 UEFI의 기본적인 이해를 아래의 사이트에서 해야한다.

UEFI Booting 관련내용정리 (USB 시동디스크)
   https://ahyuo79.blogspot.com/2019/01/usb.html

Window 10과 Ubuntu Dual Boot (별도움이 안됨)
  https://www.pcsuggest.com/dual-boot-windows-10-and-ubuntu-uefi/

RUFUS Download 

  • File Download 및 준비사항 
  1. rufus-3.6.exe
  2. Window.iso
  3. Ubuntu.iso 

아래와 같이 Window ISO Image를 Download 진행후 RUFUS로 USB Boot 진행



1.2 Lenovo Laptop 정보확인 

  • BIOS 설정확인 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Information 정보 확인 
    1. Product Name: Legion Y540-151RH
    2. BIOS Version:  반드시 체크 
    3. Hard Disk: WDC WD10SPZX-24Z10
    4. NVME: SAMSUNG MZVLB1TOHALR-0000
    5. Secure Boot: Disabled
    6. Lenovo SN:  반드시 기억 
    7. UUID Number: 반드시 기억 
  3. Boot 정보확인
    1. Boot Mode: UEFI or Legacy Support
    2. USB Boot: Enabled
    3. PXE Boot to LAN: Enabled

PXE Boot to LAN은 전형적으로 DHCP(BOOTP)를 사용하여 진행한다고 한다. 
Laptop이 DHCPC가 되어 DHCP Server에게 각 Boot File 정보 와 IP를 할당 받고, TFTP 기반으로 Image를 다운받아 Booting을 진행

오래전에 DHCP 기반의 Embeded Board 랑 똑같은 구조인것 같다. 


2. Window 10 Home UEFI Mode로 재설치 진행 

RUFUS를 이용하여 Window 10 Image를 외장형 32G USB에 Write하여, Booting USB Disk 생성하도록하자.

  • MS사에 제공하는 Window  ISO Image   
MS사에 제공하며, Window ISO Image or USB에 직접설치가능 
RUFUS를 사용 할꺼 이므로, ISO File로 가져와야함 



  • RUFUS를 이용하여 USB Boot Window Image 생성 
일단 MS사꺼 보다 USB에 Window Image Write (속도가 빠름)


  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : UEFI 변경
  3. Boot->USB Boot : Enable 
  4. Boot->EFI:  
    1. EFI Partition 중 우선순위를 USB를 최상위변경

  • UEFI Mode 설치후 EFI Partition 확인 
Window 10 Home은 NVMe가 아닌 HDD 위치에 설치완료





3. Ubuntu 18.04 설치 진행

Ubuntu 18.04 Image Download하여 USB Image로 생성 후 BIOS에서 UEFI Mode 와 Legacy Mode로 각각 개별 설치진행하여 테스트 진행하였다

  • Boot Mode UEFI Mode 와 Legacy Mode 
UEFI Mode  설정시 GRUB의  Kernel Parameter를 변경하지 않으면, 아예 동작되지 않으며, 변경하더라도 추후 다른 문제들이 발생

Legacy Mode로 설정시
GRUB 미수정 후 진행하며, ACPI 에러발생하지만 넘어가고 설치진행되지만 WIFI Driver 문제부터 다른 Driver의 문제가 발생하여
완벽한 설치가 진행되지 않아 다른방법을 찾아야할 것같음

  • Boot Mode 선택 결론
BIOS의 Legacy Mode로 설치 진행해야 할 것 같으며 문제사항은 해결해야 할것 같음 
각각의 문제사항들을 정리

  • BIOS-ACPI(Advanced_Configuration_and_Power_Interface)정보
ACPI 부분을 처음알아서 관련부분 자료조사 및 이해 
Power Management기능으로 AP에서 사용하는 PMIC 와 Power Management 기능이라고 보면 되겠다. 
거의 동일한 것으로 보인다.

일단 BIOS의 ACPI 에러로 설치는 커녕 Ubuntu 실행도 불가능하지만, 다만 GRUB에서 acpi=off 옵션을 넣어 임시방편으로 실행가능하지만,
제대로 동작되는 부분이 많이 없어 이 설치로 거의 Ubuntu 설치가 힘들 것 같다

Lenovo의 ideapad 8 UEFI 부팅정보
다 아는 내용이라 별 도움이 안되지만, 추후 내용이 BIOS Update되면 그때 확인하도록 하자.
  https://support.lenovo.com/co/ko/solutions/ht075710


  • Ubuntu UEFI USB Boot Image 생성 
Rufus를 이용하여 UEFI Mode와 GPT로 설정하여 USB Boot Image 생성



  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : UEFI 변경
  3. Boot->USB Boot : Enable 
  4. Boot->EFI:  
    1. EFI Partition 중 우선순위를 USB를 최상위로 변경

  • GRUB2 Boot Loader 
Ubuntu Boot Loader로 현재 Version 2.x 이며  e를 선택하면 본인 직접 Kernel Parameter를 수정도 가능하며 이를 적용하려면 F10으로 부팅

GRUB2의 세부설정  (Config File 부분)
  https://help.ubuntu.com/community/Grub2

Common Kernel Options (ACPI 설정 옵션확인)
  https://help.ubuntu.com/community/BootOptions

GRUB의 UEFI BOOT 관련정보


  • Ubuntu 18.04 설치 혹 실행시 에러발생 
UEFI Mode 설치진행시, ACPI BIOS Error 발생 후 더 이상 진행되지않고 PAN만 오동작하여 소리가 커지고 문제발생(HDD Disk 소리인지 PAN소리인지 헷갈림)




  • BIOS-ACPI의 해결방법 
Kernel Parameter 수정방법 or BIOS Update 권장
ACPI(Advanced Configuration and Power Interface)로 Laptop에서 전원을 조절하는 부분으로 이에 관련된 Spec이 지원이 되어야한다. (현재 미지원)
  https://www.linuxquestions.org/questions/linux-laptop-and-netbook-25/acpi-error-on-ubuntu-18-04-boot-4175628907/
  https://askubuntu.com/questions/953666/acpi-errors-when-booting-cant-boot
  https://rog.asus.com/forum/showthread.php?81684-Ubuntu-Installation-Issues-UEFI-amp-ACPI


  • BIOS-ACPI 임시해결시 다른문제발생 
상위 GRUB으로 E를 눌러 Kernel Parameter에 acpi=off를 추가한 후 F10눌러 적용하면 상위문제가 해결되고 설치모드로 진입가능하지만 별도문제발생
  1. Ubuntu 설치모드 진입가능 
  2. 키보드는 동작가능 
  3. 터치패드 미동작 
  4. PAN의 오동작으로 소음이 점점 커짐 (처음에 PAN소리로 생각했는데, HDD소리같음)
  5. 무선네트워크 동작가능  
임시해결방법은 근본적인 해결이 아니며, PAN인지 HDD의 오동작을 어떻게 막을 수가 없다
너무 시끄러운 문제가 발생


3.2 BIOS-Legacy Mode USB Ubuntu 설치 문제사항 

참고로 착각하지 말아야 할 것은 아래의 Image Parition은 USB 이지 설치될 Linux의 Parition이 아니라는 것이다. 

  • Ubuntu Legacy USB Boot Image 생성 
Rufus를 이용하여 Legacy Mode와 MBR로 설정하여 USB Boot Image 생성



  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : Legacy Support 변경 
  3. Boot Priority : UEFI First 설정 
  4. Boot-> Legacy: Boot USB 우선순위 변경 (F5/F6) 

  • GRUB2 Boot Loader 
Ubuntu 설치진행 (별도의 수정없음)

  • Ubuntu 설치진행모드 진입가능
  1. 상위와 동일하게 ACPI 에러는 발생하지만, 에러를 넘기고 설치모드로 진입가능
  2. 키보드 동작가능 
  3. 터치패드 동작가능 
  4. 무선네트워크 제대로 동작되지 않고 문제발생 (Driver 문제)
  5. 기본설치는 가능 

Legacy에서는 설치가 가능하지만, 무선네트워크/유선네트워크 미동작하는 문제발생
lspci로 살펴보면 Intel Wireless-AC 9560 감지확인가능

유선네트워크로 연결 후 아래와 같이 하면 update/upgrade가 가능 (WIFI 동작안됨)

웃긴것은 ifconfig도 동작되지도 않는데 아래 명령어가 동작된다.
ifconfig를 위해서 별도로 net-tools 설치하면 동작가능한데, 이것 기본설치가 제대로 되지 않았다.

$ sudo apt update 
$ sudo apt upgrade 
$ sudo apt install net-tools
$ sudo apt install ndisgtk 
$ sudo apt install ndiswrapper

  • WIFI 관련 문제사항
한마디로 Window 의 NDIS 를 가져다가 쓰라는 이야기이며, 현재 방법은 상위방법으로 설치진행
  https://askubuntu.com/questions/1158716/wlan-driver-xubuntu-18-lenovo-legion-y540-15irh-laptop

  • 현재 PCIe Interface로 연결된 장치확인 및 Firmware 확인
Laptop의 경우 기본적으로 모두 PCIe기반으로 연결이 되어있으므로, PCIe BUS에 연결된 것들을 확인하자.
$ lspci
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 07)
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 07)
00:08.0 System peripheral: Intel Corporation Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th Gen Core Processor Gaussian Mixture Model
00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10)
00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)
00:14.3 Network controller: Intel Corporation Wireless-AC 9560 [Jefferson Peak] (rev 10)
00:15.0 Serial bus controller [0c80]: Intel Corporation Device a368 (rev 10)
00:15.1 Serial bus controller [0c80]: Intel Corporation Device a369 (rev 10)
00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)
00:17.0 SATA controller: Intel Corporation Device a353 (rev 10)
00:1d.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port 9 (rev f0)
00:1d.5 PCI bridge: Intel Corporation Device a335 (rev f0)
00:1e.0 Communication controller: Intel Corporation Device a328 (rev 10)
00:1f.0 ISA bridge: Intel Corporation Device a30d (rev 10)
00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)
00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f11 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f9 (rev a1)
01:00.2 USB controller: NVIDIA Corporation Device 1ada (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1adb (rev a1)
06:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)


$ lspci -nnk | grep -e 0200 -e 0280 -A3
00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)
 Subsystem: Intel Corporation Device [8086:0034]
 Kernel driver in use: iwlwifi
 Kernel modules: iwlwifi
--
07:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
 Subsystem: Lenovo RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [17aa:38cd]
 Kernel driver in use: r8169
 Kernel modules: r8169

//Intel Corporation Wireless-AC 9560 Firmware
$ ls /lib/firmware/iwlwifi-9000-pu-b0-jf-b0-34.ucode
/lib/firmware/iwlwifi-9000-pu-b0-jf-b0-34.ucode

lspci -nnk 하면 사용하고 있는 Kernel Module도 같이 확인가능
( Kernel Module도 있는데 왜 작동이 안되는지 dmesg로 분석)

  • /lib/firmware 의 정보확인 (WIFI Firmware )
상위 장소에 HW관련된 Firmware를 가지고 있으며, 이 정보를 확인
  https://www.intel.co.kr/content/www/kr/ko/support/articles/000005511/network-and-i-o/wireless-networking.html
  https://www.intel.com/content/www/us/en/support/articles/000005511/network-and-i-o/wireless-networking.html
  https://askubuntu.com/questions/1054012/driver-intel-ac-wireless-9560-ubuntu-18

  • 무선장치정보확인 
유선은 동작이 되었으니, WIFI가 동작되지 않아 원인 분석 중이며, 아래와 같이 확인 가능 - 현재 해결중 
$ rfkill list all
0: ideapad_wlan: Wireless LAN
 Soft blocked: no
 Hard blocked: yes
1: ideapad_bluetooth: Bluetooth
 Soft blocked: yes
 Hard blocked: yes
2: hci0: Bluetooth
 Soft blocked: yes
 Hard blocked: no
3: phy0: Wireless LAN
 Soft blocked: no
 Hard blocked: no


$ dmesg | grep iwl
[    3.005710] iwlwifi 0000:00:14.3: loaded firmware version 43.95eb4e97.0 op_mode iwlmvm
[    3.051419] iwlwifi 0000:00:14.3: Detected Intel(R) Dual Band Wireless AC 9560, REV=0x318
[    3.154652] iwlwifi 0000:00:14.3: base HW address: 48:89:e7:32:1c:a2
[    3.224101] ieee80211 phy0: Selected rate control algorithm 'iwl-mvm-rs'
[    3.225468] iwlwifi 0000:00:14.3 wlp0s20f3: renamed from wlan0

참조자료
  https://askubuntu.com/questions/1158716/wlan-driver-xubuntu-18-lenovo-legion-y540-15irh-laptop


3.3 ACPI 문제 분석  

일단 대충 땜방으로 해결했으나, 좀 더 분석을 해보고 어떻게 할지 더 보자. 
대충 분석하는 것이기때문에, 틀리수도 있음 

  • ACPI 에러분석 
에러내용을 봐도 Power Management의 AML opcode  Parsing에서 에러가 나며, 
한마디로 현재 Ubuntu에서 이 Laptop의 ACPI기능을 완벽히는 지원못해주는 것으로 보인다.

ACPI AML Spec 


$ uname -a
Linux jhlee-Legion-Y540-15IRH 5.0.0-25-generic #26~18.04.1-Ubuntu SMP Thu Aug 1 13:51:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ dmesg | grep ACPI
[    0.000000] BIOS-e820: [mem 0x000000009e49e000-0x000000009eb8dfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000009eb8e000-0x000000009ec0dfff] ACPI data
[    0.000000] efi:  ACPI=0x9ec0d000  ACPI 2.0=0x9ec0d014  SMBIOS=0x9dc50000  SMBIOS 3.0=0x9dc4e000  ESRT=0x9dc4cb98  MEMATTR=0x8cf62018 
[    0.012110] ACPI: Early table checksum verification disabled
[    0.012113] ACPI: RSDP 0x000000009EC0D014 000024 (v02 LENOVO)
[    0.012116] ACPI: XSDT 0x000000009EBEE188 0000FC (v01 LENOVO CB-01    00000001      01000013)
[    0.012121] ACPI: FACP 0x000000009EBF1000 00010C (v05 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012126] ACPI: DSDT 0x000000009EBBC000 0304E0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012129] ACPI: FACS 0x000000009EB0D000 000040
[    0.012131] ACPI: UEFI 0x000000009EC0C000 000236 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012133] ACPI: SSDT 0x000000009EC0A000 001B1C (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012136] ACPI: SSDT 0x000000009EC06000 0031D0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012138] ACPI: UEFI 0x000000009EC05000 000042 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012140] ACPI: SSDT 0x000000009EC04000 00045A (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012143] ACPI: SSDT 0x000000009EC03000 000046 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012145] ACPI: TPM2 0x000000009EC02000 000034 (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012147] ACPI: POAT 0x000000009EC01000 000055 (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012150] ACPI: SSDT 0x000000009EBFC000 0044B6 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012152] ACPI: LPIT 0x000000009EBFB000 000094 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012154] ACPI: WSMT 0x000000009EBFA000 000028 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012157] ACPI: SSDT 0x000000009EBF9000 000C2F (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012159] ACPI: DBGP 0x000000009EBF8000 000034 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012161] ACPI: DBG2 0x000000009EBF7000 000061 (v00 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012164] ACPI: SSDT 0x000000009EBF6000 000896 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012166] ACPI: SSDT 0x000000009EBF3000 002F89 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012168] ACPI: ASF! 0x000000009EBF2000 0000A5 (v32 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012171] ACPI: HPET 0x000000009EBF0000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012173] ACPI: APIC 0x000000009EBEF000 00012C (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012175] ACPI: MCFG 0x000000009EBED000 00003C (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012178] ACPI: SSDT 0x000000009EBB9000 002BBF (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012180] ACPI: DMAR 0x000000009EBB8000 000070 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012182] ACPI: SSDT 0x000000009EBB5000 002A9D (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012185] ACPI: SSDT 0x000000009EBB4000 00004C (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012187] ACPI: FPDT 0x000000009EBB3000 000044 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012189] ACPI: BGRT 0x000000009EBB2000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012197] ACPI: Local APIC address 0xfee00000
[    0.200167] ACPI: PM-Timer IO Port: 0x1808
[    0.200168] ACPI: Local APIC address 0xfee00000
[    0.200175] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.200175] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.200176] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.200176] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.200177] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.200177] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.200178] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.200178] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.200179] ACPI: LAPIC_NMI (acpi_id[0x09] high edge lint[0x1])
[    0.200179] ACPI: LAPIC_NMI (acpi_id[0x0a] high edge lint[0x1])
[    0.200180] ACPI: LAPIC_NMI (acpi_id[0x0b] high edge lint[0x1])
[    0.200180] ACPI: LAPIC_NMI (acpi_id[0x0c] high edge lint[0x1])
[    0.200181] ACPI: LAPIC_NMI (acpi_id[0x0d] high edge lint[0x1])
[    0.200181] ACPI: LAPIC_NMI (acpi_id[0x0e] high edge lint[0x1])
[    0.200182] ACPI: LAPIC_NMI (acpi_id[0x0f] high edge lint[0x1])
[    0.200182] ACPI: LAPIC_NMI (acpi_id[0x10] high edge lint[0x1])
[    0.200245] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.200246] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.200247] ACPI: IRQ0 used by override.
[    0.200248] ACPI: IRQ9 used by override.
[    0.200250] Using ACPI (MADT) for SMP configuration information
[    0.200251] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[    0.287523] ACPI: Core revision 20181213
[    0.350148] PM: Registering ACPI NVS region [mem 0x9e49e000-0x9eb8dfff] (7274496 bytes)
[    0.350148] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.350148] ACPI: bus type PCI registered
[    0.350148] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5   //acpipphp PCIe HotPlug 감지 아래소스 참고 
[    0.352204] ACPI: Added _OSI(Module Device)
[    0.352205] ACPI: Added _OSI(Processor Device)
[    0.352206] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.352207] ACPI: Added _OSI(Processor Aggregator Device)
[    0.352207] ACPI: Added _OSI(Linux-Dell-Video)
[    0.352208] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    0.352209] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
[    0.403571] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.TPLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403578] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403580] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.403630] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS01._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403634] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403635] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.403637] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS01._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403639] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403640] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.406600] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS02._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.406604] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.406605] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.406607] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS02._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.406609] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.406610] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.409555] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS03._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.409558] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.409560] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.409561] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS03._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.409563] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.409565] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.412506] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS04._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.412509] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.412511] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.412512] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS04._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.412514] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.412516] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.415455] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS05._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.415458] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.415459] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.418403] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS06._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.418406] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.418407] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.418409] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS06._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.418411] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.418412] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.421356] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS07._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.421359] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.421361] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.424304] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS08._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.424307] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.424308] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.427252] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS09._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.427255] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.427256] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.427257] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS09._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.427260] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.427261] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.430204] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS10._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.430207] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.430208] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.433154] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS11._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.433157] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.433158] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.436096] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS12._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.436099] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.436100] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.439045] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS13._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.439048] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.439049] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.441992] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS14._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.441995] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.441997] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.441998] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS14._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.442000] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.442002] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.444924] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.XHC.RHUB.USR1], AE_NOT_FOUND (20181213/dswload2-160)
[    0.444927] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.444929] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.444932] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.XHC.RHUB.USR2], AE_NOT_FOUND (20181213/dswload2-160)
[    0.444934] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.444936] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.444963] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS01._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.444965] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.444967] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.444968] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS01._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.444971] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.444972] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445004] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS02._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445007] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445008] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445010] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS02._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445012] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445013] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445045] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS03._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445048] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445049] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445051] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS03._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445053] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445054] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445086] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS04._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445089] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445090] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445091] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS04._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445094] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445095] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445126] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS05._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445129] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445130] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445161] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS06._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445163] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445165] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445192] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS07._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445195] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445196] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445224] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS08._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445227] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445228] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445256] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS09._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445258] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445259] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445287] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS10._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445290] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445291] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.446394] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.I2C2.TPD0], AE_NOT_FOUND (20181213/dswload2-160)
[    0.446398] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.446400] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.446426] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.I2C3.TPL1], AE_NOT_FOUND (20181213/dswload2-160)
[    0.446429] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.446430] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.449074] ACPI: 12 ACPI AML tables successfully acquired and loaded
[    0.464591] ACPI: Dynamic OEM Table Load:
[    0.464604] ACPI: SSDT 0xFFFF9AD9B96C1F00 0000F4 (v02 PmRef  Cpu0Psd  00003000 INTL 20160422)
[    0.465078] ACPI: \_SB_.PR00: _OSC native thermal LVT Acked
[    0.466075] ACPI: Dynamic OEM Table Load:
[    0.466082] ACPI: SSDT 0xFFFF9AD9B96BFC00 000400 (v02 PmRef  Cpu0Cst  00003001 INTL 20160422)
[    0.466693] ACPI: Dynamic OEM Table Load:
[    0.466699] ACPI: SSDT 0xFFFF9AD9B9F35800 000581 (v02 PmRef  Cpu0Ist  00003000 INTL 20160422)
[    0.467398] ACPI: Dynamic OEM Table Load:
[    0.467403] ACPI: SSDT 0xFFFF9AD9B96C6600 00011B (v02 PmRef  Cpu0Hwp  00003000 INTL 20160422)
[    0.467911] ACPI: Dynamic OEM Table Load:
[    0.467918] ACPI: SSDT 0xFFFF9AD9B9F35000 000724 (v02 PmRef  HwpLvt   00003000 INTL 20160422)
[    0.468765] ACPI: Dynamic OEM Table Load:
[    0.468771] ACPI: SSDT 0xFFFF9AD9B9F37800 0005FC (v02 PmRef  ApIst    00003000 INTL 20160422)
[    0.469469] ACPI: Dynamic OEM Table Load:
[    0.469475] ACPI: SSDT 0xFFFF9AD9B96B8C00 000317 (v02 PmRef  ApHwp    00003000 INTL 20160422)
[    0.470185] ACPI: Dynamic OEM Table Load:
[    0.470191] ACPI: SSDT 0xFFFF9AD9B9F81000 000AB0 (v02 PmRef  ApPsd    00003000 INTL 20160422)
[    0.471527] ACPI: Dynamic OEM Table Load:
[    0.471533] ACPI: SSDT 0xFFFF9AD9B96BC000 00030A (v02 PmRef  ApCst    00003000 INTL 20160422)
[    0.477238] ACPI: EC: EC started
[    0.477239] ACPI: EC: interrupt blocked
[    0.492285] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as first EC
[    0.492286] ACPI: \_SB_.PCI0.LPCB.EC0_: GPE=0x2, EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    0.492287] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as boot DSDT EC to handle transactions
[    0.492288] ACPI: Interpreter enabled
[    0.492341] ACPI: (supports S0 S3 S4 S5)
[    0.492342] ACPI: Using IOAPIC for interrupt routing
[    0.492386] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.492959] ACPI: Enabled 10 GPEs in block 00 to 7F
[    0.494043] ACPI: Power Resource [PG00] (on)
[    0.498501] ACPI: Power Resource [PUBS] (on)
[    0.499519] ACPI: Power Resource [BTPR] (on)
[    0.501236] ACPI: Power Resource [USBC] (on)
[    0.501446] ACPI: Power Resource [PAUD] (on)
[    0.505921] ACPI: Power Resource [PXP] (off)
[    0.513409] ACPI: Power Resource [PXP] (off)
[    0.515322] ACPI: Power Resource [V0PR] (on)
[    0.515548] ACPI: Power Resource [V1PR] (on)
[    0.515769] ACPI: Power Resource [V2PR] (on)
[    0.518096] ACPI: Power Resource [PXTC] (on)
[    0.518595] ACPI: Power Resource [PXTC] (off)
[    0.520702] ACPI: Power Resource [WRST] (on)
[    0.523071] ACPI: Power Resource [PIN] (off)
[    0.523600] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.562428] ACPI: EC: interrupt unblocked
[    0.562456] ACPI: EC: event unblocked
[    0.562478] ACPI: \_SB_.PCI0.LPCB.EC0_: GPE=0x2, EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    0.562479] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as boot DSDT EC to handle transactions and events
[    0.562561] ACPI: bus type USB registered
[    0.612565] PCI: Using ACPI for IRQ routing
[    0.714118] pnp: PnP ACPI init
[    0.714239] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.714629] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.714973] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.715178] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.715312] system 00:04: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.715348] pnp 00:05: Plug and Play ACPI device, IDs PNP0303 (active)
[    0.716871] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.717454] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.717663] pnp: PnP ACPI: found 8 devices
[    1.310148] ACPI: AC Adapter [ADP0] (on-line)
[    1.310219] ACPI: Lid Switch [LID0]
[    1.310246] ACPI: Power Button [PWRB]
[    1.408535] battery: ACPI: Battery Slot [BAT0] (battery present)
[    1.519238] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS
[    1.519281] ACPI: Video Device [PEGP] (multi-head: yes  rom: yes  post: no)
[    3.213312] ACPI Warning: \_SB.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20181213/nsarguments-66)


  • ACPI Dump 분석 
로그를 대충 보면, 일반적인 Power Resource는 가능한 것으로 보인다. 

$ sudo apt-get update -y
$ sudo apt-get install -y acpidump
$ sudo acpidump -s
ACPI: SSDT 0x0000000000000000 000046 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: MCFG 0x0000000000000000 00003C (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: ASF! 0x0000000000000000 0000A5 (v32 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: APIC 0x0000000000000000 00012C (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0031D0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: TPM2 0x0000000000000000 000034 (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002BBF (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DSDT 0x0000000000000000 0304E0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000896 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: WSMT 0x0000000000000000 000028 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0000F4 (v02 PmRef  Cpu0Psd  00003000 INTL 20160422)
ACPI: LPIT 0x0000000000000000 000094 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0044B6 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: UEFI 0x0000000000000000 000236 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DBG2 0x0000000000000000 000061 (v00 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002A9D (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: POAT 0x0000000000000000 000055 (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 00045A (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DMAR 0x0000000000000000 000070 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FACP 0x0000000000000000 00010C (v05 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FPDT 0x0000000000000000 000044 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 001B1C (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002F89 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DBGP 0x0000000000000000 000034 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: HPET 0x0000000000000000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000C2F (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: UEFI 0x0000000000000000 000042 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FACS 0x0000000000000000 000040
ACPI: BGRT 0x0000000000000000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 00004C (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000317 (v02 PmRef  ApHwp    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000724 (v02 PmRef  HwpLvt   00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000581 (v02 PmRef  Cpu0Ist  00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 00030A (v02 PmRef  ApCst    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000AB0 (v02 PmRef  ApPsd    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 0005FC (v02 PmRef  ApIst    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 00011B (v02 PmRef  Cpu0Hwp  00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000400 (v02 PmRef  Cpu0Cst  00003001 INTL 20160422)

참조자료
  https://bugzilla.redhat.com/show_bug.cgi?id=1610727

상위 acidump로 본 각 Table 정보 및 Spec

  • 상위 로그분석 및 커널부분 (ACPI Linux Kernel Driver)
ACPI라는 것이 PCIe Interface로 연결되어 Hotplug로 잡혀 Kernel에서 상위 Driver를 지원을 해줘야하며, 관련 Linux Kernel Driver를 각각 살펴보자.

  • Linux Kernel HotPlug 소스 (관련 ACPI Core)
아래 소스을 보면 HotPlug기능을 대충이해가능하며, 참고 
  1. DRIVER_DESC 
  2. DRIVER_VERSION 
  https://elixir.bootlin.com/linux/latest/source/drivers/pci/hotplug/acpiphp_core.c

  • Linux Kernel 관련 ACPI Log Kernel 소스 
  1. ACPI_INFO
  2. ACPI_ERROR
  3. ACPI_BIOS_ERROR 
상위 내용들을 아래에서 찾아 Kernel에서 검색해서 상위동작부분 LOG 파악가능
  https://elixir.bootlin.com/linux/latest/source/include/acpi/acoutput.h#L205

  • ACPI 에러 현재결론 
BIOS의 ACPI의 문제해결은 어려울 것 같으며, 인터넷을 찾아봐도 답은 BIOS Update라고 하는데, 
이미 최신 BIOS로 Upgrade했으며, Downgrade를 해야 하나 생각중이다
역시 Linux를 설치하려면, 오래된 Laptop이 최고인데, 새로운 Laptop은 새 기능이 많아 아직 지원되지 않는게 많다.

결론적으로 소스를 보면, Linux Kernel의 PCIe Driver에서 ACPI부분을 지원이 가능해야 제대로된 동작이 가능하며, BIOS문제로만 치부될 사항은 아닌 것 같다

대충구조를 보면, Table을 만들어 관리하고 이 기준으로 통신하는 것 같은데, 일단 ACPI는 관련부분에러는 포기하고, 최대한 에러없도록 설치하자

편히 설치가능하면 좋은데 T.T 지속적인 문제 발생이 문제로군.