討論區快速選單
知識庫快速選單
討論區最近新進100則主題 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
PCI Routing Table
更改我的閱讀文章字型大小
作者 : lrm0617(小烏龜)
[ 貼文 16 | 人氣 4384 | 評價 10 | 評價/貼文 0.62 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/28 下午 08:45:58
到處都可以看到跟PCI IRQ routing table相關的東西,卻一直搞不清楚…

ASL中可以看到如下的code:
Name(PR00, Package(){
Package(){0x0002FFFF, 0, LNKC, 0 },
}
Name(AR00, Package(){
Package(){0x0002FFFF, 0, 0, 18 },
    }

使用SE之類的軟體可以看到每個PCI Device都有Interrupt Pin和Interrupt Line這兩個Register…

PCI spec中,每個PCI device有四個interrupt pin…

而ACPI spec中有關於routing table的sample code都是以
Name(_PRT, Package(){ // Need PCI IRQ routing for PCI bridge
    // Package with PCI IRQ routing table information
}
來帶過

…結果看了大量的相關資訊,還是一頭霧水…

我理解如下(有誤請務必指正!因為我認為應該很誤…)

硬體:
假設新增一個PCI device X,
必須將X接在SB的PCI interface上,比如說#IRDY, #TRDY等,
然後將X的interrupt pin接到SB的interrupt interface上(#PIRQ[A:H])
比如說INTA->PIRQA; INTB->PIRQB; INTC->PIRQC; INTD->PIRQD。
(接法有規定嗎?可以INTA->PIRQH, INTB->PIRQA,...等亂接嗎?還是要根據什麼來接呢?)

軟體方面,
設定chipset使PIRQ[A:H](可多對一)對應到傳統的PIC(即IRQ[0:15]) (亂設定嗎?還是有一定規距?)
或是啟用APIC之類的功能,設定PIRQ[A:H]所對應的vector和APIC ID等
(進入Windows OS後,用SE等軟體看,好像都是使用APIC功能(對應為IRQ16~23))

中斷處理流程(未進OS前):
X發出中斷訊號INTA->LNKA (即PIRQA)
SB收到訊號後,對應到IRQi,通知PIC設定IRR,並發INTR給CPU
CPU得到訊號後,通知SB回ack廣播給所有PCI device(?)
SB回ack給PIC
PIC設定ISR(最高priority)後,清掉對應的IRR

混亂的protocol後,PIC會給出vector給CPU,
PIC給的vector是指什麼東西?int 00~64h?
是否同一個IRQ的所有PCI Interrupt都是對應到同一個vector?
CPU怎麼知道不同的PCI interrupt(同IRQ)要執行哪一個中斷程式?

另外,AMI core8中,sdl檔案好像要設定PCIDEVICE的bus和device,
然後也要在sdl檔裡設定PCIDEVICE的INTA->LNKx->IRQy。
(在編譯過程中,即會產生如開頭第一段的ASL code)
PCI bus和device需要(如何)事先決定嗎?
我看PCI_SCAN討論串好像是開機後自動偵測查知?那為何還要事先給值?
INTA->LNKx的設定應該是根據硬體來設吧?
LNKx->IRQy的設定呢?根據之前所設定的PIRQ->IRQ來設嗎?
Package(){0x0002FFFF, 0, LNKC, 0 }, 的格式應該是給OS看的routing table吧,
有相關spec嗎?還是就是在ACPI spec裡?找不大到…我完全不知道為何要這樣填。
另一個比較不相干的問題,SERIRQ是做什麼的?什麼時候會用到?老是跟PIRQ一起出現…

目前有一塊版子上使用TI的PCI8042擴充1394接口和Flash Media Card接口,
於視窗下有抓到MS槽和SD槽,
但是插卡進去卻沒任何反應,問題是否有可能為PCI routing設定錯誤所致?

AMI core8 sdl裡有一堆title為PciExBr7、slot 1之類的PCIDEVICE,
不懂他們的作用是啥。
原本的BIOS source code,MS槽和SD槽是偵測不到的,
之後用SE得知該PCI8042的bus和device,
將code裡slot 1的bus和device設定後,
就偵測到了,
只是看的到吃不到,插卡也不給用…

參考資料:
ICH8 spec
ACPI spec
作者 : bill_z(bill)
[ 貼文 30 | 人氣 1573 | 評價 100 | 評價/貼文 3.33 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人lrm0617註記此篇回應為很有道理 2008/3/29 下午 02:13:24
>ASL中可以看到如下的code:
> Name(PR00, Package(){
> Package(){0x0002FFFF, 0, LNKC, 0 },
> }
> Name(AR00, Package(){
> Package(){0x0002FFFF, 0, 0, 18 },
> }
// PR00: Include all PCI IRQ routing in PIC mode
// AR00: Include all PCI IRQ routing in APIC mode
// 0x0002FFFF: device 2 all function on this bus
// 0, LNKC : device intA connect to SB LNKC(some PIRQ reg)
// 0:this field is the global system interrupt number to which the pin is connected

//Package(){0x0002FFFF, 0, 0, 18 },
// device 2 all function on this bus, intA uses interrupt which is allocated from the global interrupt pool 18, maybe this is hardware fixed to IRQ18.

_PRT :ACPI spec 30b chapter 6.2.11
_ADR :ACPI spec 30b chapter 6.1.1

Above is my personal opinion, FYR.
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人lrm0617註記此篇回應為最佳解答 2008/3/30 上午 01:53:42
>(接法有規定嗎?可以INTA->PIRQH, INTB->PIRQA,...等亂接嗎?還是要根據什麼來接呢?)

=> 我的認知是: Interrupt pin and line為PCI spec定義的.前者代表PCI device透過哪一個 pin (#A/B/C/D)來產生 interrupt;後者代表這個 interrupt最終由 8259 or APIC 的哪一個 interrupt source發出去讓 processor知道.

Interrupt pin為出廠時就決定的,不能改變. Ex. 使用 SE or ru check PCI Reg3Dh = 01/02/03/04 for INT#A/B/C/D. 而 interrupt line則是BIOS知道了 "routing"後去填的.例如,BIOS知道 INT#A最終會接到 PIC mode的 8259的 IRQ 11,則 PCI Reg3Ch在 PCI scan 階段會被填成 "0Bh".

至於你說的如何接,PCI spec有提到,為了 "loading balance", board designer可以決定.

Ex. 2 PCI devices, 都是利用 INT#A發 interrupt(so their PCI Reg3Dh = 01h).兩者接到同一個板子上. 假如,board designer決定將:(以下為假設的接法)

PCI slot1 接成: INT#A接到 I-router的INT#B,INT#B接到 I-router的INT#C,INT#C接到 I-router的INT#D,INT#D接到 I-router的INT#A

PCI slot2 接成: INT#A接到 I-router的INT#A,INT#B接到 I-router的INT#B,INT#C接到 I-router的INT#C,INT#D接到 I-router的INT#D

則當 2 PCI devices接到 slot1 and 2時,就發生:雖然都是透過INT#A發 interrupt,但是,最後卻是從 "不同的 source出去的 ( Device 1 從 INT#B出去,Device 2從 INT#A出去...)

*I-router是一個 routing 電路,在南橋裡,專門將 INT#A/B/C/D..etc連接到 8259 or APIC controller的 input,即 IRQx

所以,硬體而言: device 透過 INT#x發 interrupt -> Mapping by board designer -> i-Router->Interrupt controller(8259 or APIC) -> processor

>設定chipset使PIRQ[A:H](可多對一)對應到傳統的PIC(即IRQ[0:15]) (亂設定嗎?還是有一定規距?)

=>我的認知是: BIOS必須要將 INT#A/B/C/D/E/F/G/H與真正的 interrupt source建立mapping,並config 相關的 registers. APIC mode 可以支援 IRQ15以上,Ex. 16~23等.

>中斷處理流程(未進OS前):
>.......
>CPU怎麼知道不同的PCI interrupt(同IRQ)要執行哪一個中斷程式?

=>我的認知是:8259為 2-ACK transaction. 即 processor在接到 interrupt request後,回第一個 act 給 8259,請它將 prioritize(有可能有兩個以上 request發生,當然一次只處理一個,要依據優先順序). Processor接到要服務的人的ID後,回2nd act 請 8259將該中斷向量送出;中斷向量就是中斷服務副程式的起使位置...之後 processor會跳到該副程式作該服務的事情...最後會將該 interrupt 的 status清掉,以免又重做...APIC設定則較為複雜,但觀念一樣.

基本上,要服務的人很多,但中斷向量表有限,所以,會有 "interrupt chain"的觀念.即可以share interrupt. 同一個中斷向量可以對應到很多中斷服務副程式,其實,只要在中斷服務副程式中去 check 是否是 "自己所對應的 device 發 interrupt 即可" (有H/W register可以讀取並判定), 不是就交給下一個ISR check...
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/30 上午 01:56:03
>PCI bus和device需要(如何)事先決定嗎?

=> 我的認知是:板子出來就決定了 !!!不管是PCI slot or embedded PCI device,其bus/device number都決定了,BIOS只是去 SCAN 並據此建立PCI architecture !

>LNKx->IRQy的設定呢?根據之前所設定的PIRQ->IRQ來設嗎?

=>我的認知是:BIOS PCI kernel會決定這種mapping. LNKx<->IRQy

>Package(){0x0002FFFF, 0, LNKC, 0 }, 的格式應該是給OS看的routing table吧,

=> ACPI spec 的精神就是將H/W information描述讓OS知道,進而可以讓該 device被OS掌控.ASL是其描述語言

>另一個比較不相干的問題,SERIRQ是做什麼的?什麼時候會用到?老是跟PIRQ一起出現…

=> 我的認知是:Serial IRQ. 通常用在提供 interrupt for SIO. SIO內包很多 legacy devices(printer port,com port,floppy,...etc) 它們發 interrupt不是想發就可以發的,是要被分配時間的. (<- "serial" 的精神,一個一個來...)

>目前有一塊版子上使用TI的PCI8042擴充1394接口和Flash Media Card接口,
>於視窗下有抓到MS槽和SD槽,
>但是插卡進去卻沒任何反應,問題是否有可能為PCI routing設定錯誤所致?

=>有可能...

>AMI core8 sdl裡有一堆title為PciExBr7、slot 1之類的PCIDEVICE,
>不懂他們的作用是啥。

=> 宣告該平台有PCIe device

>將code裡slot 1的bus和device設定後,
>就偵測到了,

=> 除了BUS/DEVICE, PCI routing也要指定...有做嗎 ?

作者 : lrm0617(小烏龜)
[ 貼文 16 | 人氣 4384 | 評價 10 | 評價/貼文 0.62 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/31 上午 07:59:01
大感恩!如此詳盡的回答^^

消化資訊&持續debug中…
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/31 下午 06:09:50
>然後將X的interrupt pin接到SB的interrupt interface上(#PIRQ[A:H])
>比如說INTA->PIRQA; INTB->PIRQB; INTC->PIRQC; INTD->PIRQD。
>(接法有規定嗎?可以INTA->PIRQH, INTB->PIRQA,...等亂接嗎?還是要根據什麼來接呢?)
基本上只要 BIOS建立的 routing table 和實際上硬體接線是吻合就沒有問題了.
但是如果是PCI card上有個P2P bridge IC的話, 那麼就需要根據P2P spec裡面的規定來作.

>軟體方面,
>設定chipset使PIRQ[A:H](可多對一)對應到傳統的PIC(即IRQ[0:15]) (亂設定嗎?還是有一定規距?)
有!就是PCI不可以使用legacy device 用掉的IRQ. 另外就是儘量把IRQ 分散,減少 share IRQ的device數量


>或是啟用APIC之類的功能,設定PIRQ[A:H]所對應的vector和APIC ID等
>(進入Windows OS後,用SE等軟體看,好像都是使用APIC功能(對應為IRQ16~23))
APIC的中斷線是固定的.


>混亂的protocol後,PIC會給出vector給CPU,
>PIC給的vector是指什麼東西?int 00~64h?
是!就是對應IDT 的vector, 不過這個vector base要對8259設定.

>PCI bus和device需要(如何)事先決定嗎?
>我看PCI_SCAN討論串好像是開機後自動偵測查知?那為何還要事先給值?
雖然BIOS 可以掃到 PCI device, 但是 IRQ routing是掃不出來的(這是板子接線問題). 當然需要先給好. 比如說, PCI slot沒有插卡時, 當然不會有PCI device存在, 但是實際slot上的INT線還是接在SB上. 所以這個routing table還是存在的, 只是因為沒有device 所以不需要programming card & PIRQ罷了.

>另一個比較不相干的問題,SERIRQ是做什麼的?什麼時候會用到?老是跟PIRQ一起出現…
serial IRQ就是一個走 serial protocal 的IRQ signal. LPC device & card bus 都有使用到.

>
>目前有一塊版子上使用TI的PCI8042擴充1394接口和Flash Media Card接口,
>於視窗下有抓到MS槽和SD槽,
>但是插卡進去卻沒任何反應,問題是否有可能為PCI routing設定錯誤所致?
有可能. 使用的IC是PCI bus?還是PCI express?

>
>AMI core8 sdl裡有一堆title為PciExBr7、slot 1之類的PCIDEVICE,
>不懂他們的作用是啥。
那個就是AMI BIOS建立PCI routing規則用的. AMI是提供一個比較視覺化的方式來給BIOS 工程師. 畢竟PCI routing這部份雖然不難. 但是沒有花點功夫還是不會瞭解的.
PCI express 雖然沒有實際的INT pin但是還是有模擬這樣的動作, 來"相容"那些 PCI bus driver. 因此BIOS還是需要對pci express port建立PCI routing table.

作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/31 下午 06:25:43
>=> 我的認知是:Serial IRQ. 通常用在提供 interrupt for SIO. SIO內包很多 legacy devices(printer port,com port,floppy,...etc) 它們發 interrupt不是想發就可以發的,是要被分配時間的. (<- 'serial' 的精神,一個一個來...)
>
這個說明可以算對, 但是也不完全對.
serial IRQ 有兩種模式. continuous mode和quiet mode.
continuous mode就是分配時間的. host端不斷的發出start frame/data frame/end frame, 由device把要發的中斷放在對應的frame中.
quiet mode就不是等待分配時間了, 是device需要中斷的時候就發出 start frame, 當然會把要發的中斷放在對應的data frame中. 最後在發出end frame. 只要沒有device需要中斷服務, serial IRQ上是沒有訊號的.
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/31 下午 06:53:38
原來我講的只是 sirq 的其中一種 operating mode ...! 感謝提醒 ^_^
作者 : linboco(boco)
[ 貼文 15 | 人氣 4323 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/7/9 下午 03:09:27
請問為何

PCI slot1 接成: INT#A接到 I-router的INT#B,INT#B接到 I-router的INT#C,INT#C接到 I-router的INT#D,INT#D接到 I-router的INT#A

PCI slot2 接成: INT#A接到 I-router的INT#A,INT#B接到 I-router的INT#B,INT#C接到 I-router的INT#C,INT#D接到 I-router的INT#D

PCI slot 1和2的INT#A都接到I-router的INT #A, 不行嗎????

3q!
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/7/10 下午 05:21:31

>PCI slot 1和2的INT#A都接到I-router的INT #A, 不行嗎????
>
當然可以這樣接. 不過如前面提到, 要注意loading balance. 兩個INTA接在一起就是註定兩的slot上的裝置就是share IRQ(當然如果OS/driver支援PCI 2.2的MSI就沒這問題). IRQ sharing 太多就是把自己的命運交給OS and driver. 太多device hook同一個IRQ, 由於所有的device ISR必須在同一個cpu的中斷服務中排隊等處理.就會有所謂IRQ latency. 一旦latency超過某些device ISR可以等待的時間, 結果就是driver處理不正常.
在PC 上由於OS, driver往往無法自己掌控. 所以一般我們是不會自找麻煩的.
 板主 : 徵求中
 > 組合語言 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 組合語言 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
組合語言
1 H 2220 
2 liaoo 990 
3 青衫 970 
4 牧童哥 940 
5 史努比 920 
6 qq 480 
7 GHOST-JACKY 330 
8 ]CALL-151 310 
9 harrison 300 
10 掌握文武半邊天 280 
組合語言
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125