2019年6月18日 星期二

General Purpose I/O (GPIO)

General Purpose I/O (GPIO)

1. Overview

GPIO簡單來說就是對於Intel PCH跟外部溝通的Transmit(Tx)和Receive(Rx)。

2. Accessing GPIO Reigsters

GPIO Registers放在(SBREG_BAR+PortID+Register Offset)的地方。
  • SBREG_BAR就是P2SB(Primary to sideband bridge)的BAR0
  • PortID是用Intel定義的好的值
  • Register Offset是PCH spec裡面定義的位置

3. Config GPIO

3.1 Pad Ownership - Register Offset : 0x20
設定要把控制權交給誰使用。
00 := ACPI 或 GPIO Driver
01 := ME
10 := ISH
11 := Reserved

3.2 Host Software Pad Ownership - Register Offset : 0xC0
若Pad Ownership設定為00,就要更細分為是給ACPI還是GPIO Driver使用。
0 := ACPI, 
1 := GPIO Driver, 

3.3 Pad Configuration - Register Offset : 0x600 (GPP_A0)

3.4 Interrupt
GPI Interrupt Status - Register Offset : 0x100
前面Pad Ownership=00 && Host Software Pad Ownership=1才能使用。

GPE - Register Offset : 0x140
Pad Ownership=00 && HostSW Pad Ownership=0 && GPIRoutSCI=1才能開

SMI - Register Offset : 0x184
Pad Ownership=00 && HostSW Pad Ownership=0 && GPIOSMIRout=1

NMI - Register Offset : 0x1C4
Pad Ownership=00 && HostSW Pad Ownership=0 && GPINMIRount=1

3.6 Miscellaneous Configuration - Register Offset : 0x10
並不是所有的family都可以用Interrupt,Intel只有提供3個family可以讓你用interrupt。
ex.
GPE[95:88]=not used
GPE[87:64]=GPP_C[23:0]
GPE[63:56]=not used
GPE[55:32]=GPP_B[23:0]
GPE[31:24]=not used
GPE[23:0]=GPP_A[23:0]

2019年6月16日 星期日

System Management Mode (SMM)

System Management Mode (SMM)

1. Overview

SMM是一個只有韌體才可以使用的操作模式,在SMM下主要可以處理電源管理,系統硬體控制或是OEM自己設計的功能。
SMM有如下幾個機制:

  • 只能被SMI戳起來
  • CPU會在一個特定的定址空間執行SMM的code,這個空間基本上不能夠被其他人存取
  • 進入SMM後,CPU會將現有的中斷和任務記錄起來
  • OS產生的中斷在SMM中會無法使用

2.進入SMM

當CPU的實體SMI# pin收到SMI訊號或是APIC bus收到SMI message的話,CPU會等待所有指令停止然後把當前上下的指令記錄在SMRAM裡面,接著進入SMM後CPU會跟外部的硬體說我要開始處理SMI了並開始執行SMI Handler。

3.離開SMM

唯一的方法就是在SMI Handler裡面執行RSM,RSM主要的目的是把剛剛存在SMRAM裡面的東西放回原位,之後CPU會跟外部硬體說我離開SMM了。

4.System Management RAM (SMRAM)

SMRAM就是存放SMI Handler code和data的記憶體空間。

  • SMRAM的大小是64KB(default)
  • SMRAM的physical address (SMBASE)是0x30000h(default)
  • SMI Handler的code放在[SMBASE+8000h]
  • CPU的Registers放在[SMBASE+FE00h]到[SMBASE+FFFFh]裡

4-1.SMRAM State Save Map















CPU的registers會從[SMBASE+FFFFh]開始依序放到[SMBASE+FE00h],有些register的值是可以更改的,但在RSM的時候會還原回去。


5 SMI Handler Execution Environment

5.1 初始化SMM執行環境

CPU把當前上下的的指令丟進SMRAM之後,CPU會把CR0裡面的PE和PG清掉讓當前的環境類似於real-address mode。
BitNameFull NameDescription
0PEProtected Mode EnableIf 1, system is in protected mode, else system is in real mode
31PGPagingIf 1, enable paging and use the § CR3 register, else disable paging.