ๅพ๏ผPCIe ่ฎพๅค่ฟๆฅ้พ่ทฏ
่ฎพๅคไน้ด็่ทฏๅพ็งฐไธบ้พ่ทฏ๏ผLink๏ผใๅฎ็ฑไธไธชๆๅคไธชๅ้ๅๆฅๆถๅฏน็ปๆใ้พ่ทฏไธญ็ไธๅฏน็งฐไธบ้้๏ผLane๏ผใQualcomm Linux ่ฎพๅคไธญ็ PCIe ่ฎพๅค่ฟๆฅๆฏๆ 16 ไธช้้ใ้้ๆฐๆ้พ่ทฏๅฎฝๅบฆไธบ x16ใ ไธ่กจๅๅบไบ่ฎพๅค็ PCIe ่ฟๆฅ็ฑปๅใ่กจ๏ผPCIe ่ฟๆฅ
| PCIe ็ฑปๅ | ่ฏดๆ |
|---|---|
| ๆ นๅคๅไฝ๏ผRC๏ผ | ๅฐ CPU ่ฟๆฅๅฐ PCIe ๆๆ |
| ไบคๆขๆบ | ่ฟๆฅ 2 ไธชไปฅไธ็็ซฏๅฃๅนถๅ ๅฝๆฐๆฎๅ ่ทฏ็ฑๅจ |
| ๆกฅ | ่ฟๆฅไธๅ็ๆป็บฟ๏ผไพๅฆ๏ผPCIe ๅฐ PCIe๏ผๆ PCIe ๅฐๅค่ฎพ็ปไปถไบ่ฟ๏ผPCI๏ผ |
| ็ซฏ็น๏ผEP๏ผ | ไฝไบ PCIe ๆๆๆ ็ปๆ็ๅบ้จ๏ผๅชๆไธไธชไธๆธธ็ซฏๅฃ |
| ไผ ็ป็ซฏ็น | ไฝฟ็จ่พๆง็ PCI ๆป็บฟๆไฝไปฅๆฏๆๅๅๅ ผๅฎน |
PCIe ไธปๆบๆจกๅผๆไธพๅ่ฝ
็ณป็ป้ฆๆฌกไธ็ตๆถ๏ผๅจ็ณป็ปไธปๆบๅค็ๅจไธ่ฟ่ก็้ ็ฝฎ่ฝฏไปถๅช็ฅ้ Bus 0 ็ๅญๅจ๏ผๅฆๆๆฏๆ PCIe๏ผใ่ฝฏไปถไธไบ่งฃๆป็บฟๆๆๆ่ฟๆฅๅฐๆป็บฟ็ไปปไฝ่ฎพๅคใๆไธพ่ฟ็จไผๅ็ฐ็ณป็ปไธญๅญๅจ็ๅ็งๆป็บฟใ่ฎพๅคๅๅ่ฝใ ๆไธพๅฎๆๅ๏ผ็ณป็ปไธญ็ๆฏๆกๆป็บฟ็ผๅทๅฆไธ๏ผ- ไธปๆป็บฟๅท่กจ็คบ็ดๆฅ่ฟๆฅๅฐๆกฅ็ไธปๆฅๅฃ๏ผๆๅๆ นๅคๅไฝ๏ผ็ๆป็บฟใ
- ๆฌกๆป็บฟๅท่กจ็คบ็ดๆฅ่ฟๆฅๅฐๆกฅ็ๆฌกๆฅๅฃ๏ผ่ฟ็ฆปๆ นๅคๅไฝ๏ผ็ๆป็บฟใ
- ไปๅฑๆป็บฟๅท่กจ็คบๅญๅจไบๆกฅไธๆธธไพง็็ผๅทๆ้ซ็ๆป็บฟใ
- ้พ่ทฏ่ฎญ็ป
- ๆซๆๆป็บฟไธ็่ฎพๅค
- ๆณจๅ
PCIe ๅๅฑๆถๆ
ไธๅพๅฑ็คบไบ PCIe ่ฝฏไปถๆถๆใ
ๅพ๏ผPCIe ่ฝฏไปถๆถๆ
ไธๅพๅฑ็คบไบ PCIe ็ๅๅฑๆถๆๆจกๅใๅพ๏ผPCIe ๅๅฑๆถๆ
ไบคๆข็ไผ ่พๅๅ ๅฆไธใ- ็ฉ็ๅฑๅฎไฝไน้ด็ๆๅบ้๏ผOrdered set๏ผใ
- ๆฐๆฎ้พ่ทฏๅฑๅฎไฝไน้ด็ๆฐๆฎ้พ่ทฏๅฑๆฐๆฎๅ ๏ผDLLP๏ผใ
- ไบๅกๅฑๅฎไฝไน้ด็ไบๅกๅฑๆฐๆฎๅ ๏ผTLP๏ผใ
่กจ๏ผPCIe ๆถๆไธญ็ๅฑ
| ๅฑ | ็นๆง |
|---|---|
| ็ฉ็ๅฑ | ้ป่พๅญๅ๏ผ้พ่ทฏ่ฎญ็ปใๅๅงๅๅ็ปดๆคใ |
| ็ฉ็ๅญๅ๏ผ8b/10b ็ผ็ ๅ่งฃ็ ๏ผไปฅๅๅนถไธฒๅไธฒๅนถ่ฝฌๆขใ | |
| ๆฐๆฎ้พ่ทฏๅฑ | DLLP ๆฐๆฎๅ ็็ป่ฃ ๅๆๅธใ |
| ้พ่ทฏๅฑ CRC๏ผLCRC๏ผ็็ๆๅ้ช่ฏใ | |
| ็กฎ่ฎคๅๅฆๅฎ็กฎ่ฎคๅ่ฎฎ๏ผ้ไผ ๅบ้็ TLP๏ผใ | |
| ไบๅกๅฑ | TLP ๆฐๆฎๅ ็็ป่ฃ ๅๆๅธใ |
| ็ซฏๅฐ็ซฏ CRC๏ผECRC๏ผ็็ๆๅ้ช่ฏใ | |
| ๆต้ๆงๅถ๏ผๆฅๆถๅฎไฝไฝฟ็จ DLLP ้ๅๅฏ็จๆฅๆถ็ผๅฒๅบๅคงๅฐไฟกๆฏใ | |
| ๆๅก่ดจ้๏ผQoS๏ผ๏ผๆต้็ฑปๅซ๏ผTC๏ผๅฐ่ๆ้้๏ผVC๏ผ็ๆ ๅฐใ | |
| ไบๅกๆๅบ๏ผๅจ VC ๅ ๅฎ็ฐไบๅกๆๅบ่งๅใ |
ๅพ๏ผPCIe ้ ็ฝฎๅฐๅ็ฉบ้ด
PCIe ่ฝฏไปถ้ฉฑๅจ็จๅบ้ ็ฝฎ
PCIe ๆงๅถๅจ้ฉฑๅจ็จๅบๅๅงๅ PCIe ่ตๆบๅนถๆง่ก้พ่ทฏ่ฎญ็ปใ่ฎญ็ปๆๅๅ๏ผๆงๅถๅจ้ฉฑๅจ็จๅบ่ฐ็จ PCIe ๆกๆถ่ฟ่ก้พ่ทฏๆไธพ๏ผไพๅฆ็ซฏ็นๅ็ฐใ่ฏๅซๅฎขๆท็ซฏ้ฉฑๅจ็จๅบๅนถๆขๆต่ฟไบ้ฉฑๅจ็จๅบใๆๅ ณ PCIe ๆกๆถๅๅฎขๆท็ซฏ้ฉฑๅจ็จๅบ PCIe ๆณจๅ็ๆดๅคไฟกๆฏ๏ผ่ฏทๅ้ https://www.kernel.org/doc/html/latest/PCI/index.htmlใ้พ่ทฏ่ฎญ็ป
้พ่ทฏ่ฎญ็ปๅ ๆฌไปฅไธๆไฝ๏ผ- ไฝไบ https://github.com/torvalds/linux/blob/master/drivers/pci/controller/dwc/pcie-qcom.c ็ PCIe ้ฉฑๅจ็จๅบ
pcie-qcom.cๆไปถไป่ฎพๅคๆ ่ทๅๆ้่ตๆบ๏ผไพๅฆ็จณๅๅจใๆถ้ใ - PCIe ้ฉฑๅจ็จๅบ่ฐ็จไฝไบ https://github.com/torvalds/linux/blob/master/drivers/pci/controller/dwc/pcie-designware-host.c ็ Synopsys DesignWareยฎ Core ไธปๆบ้ฉฑๅจ็จๅบ pcie-designware-host.c ๆไปถๆฅๅๅงๅๆ นๅคๅไฝใ
- Synopsys DesignWare Core ้ฉฑๅจ็จๅบๆง่กๆๆๅฟ ่ฆ็ๅๅงๅใ
- Synopsys DesignWare Core ้ฉฑๅจ็จๅบ่ฐ็จๅฝๆฐๆ้ไปฅๆง่กไธปๆบๅๅงๅใ
- Qualcomm PCIe ้ฉฑๅจ็จๅบๆง่ก PHY ไธ็ต๏ผๅฏ็จๆๆ็จณๅๅจใๆถ้ใ
- Synopsys DesignWare Core ้ฉฑๅจ็จๅบ้่ฟ่ฐ็จๅฏๅจ้พ่ทฏ็ๅฝๆฐๆ้ๆฅๅผๅง้พ่ทฏ่ฎญ็ปใ
็กฌไปถๅๅงๅ
้ฉฑๅจ็จๅบๅๅงๅๅนถ้ ็ฝฎ PCIe ็กฌไปถๆจกๅๅนถๆง่ก้พ่ทฏ่ฎญ็ปใๅๅงๅๅจ่ฐ็จplatform _probe() ้ฉฑๅจๅฝๆฐไนๅ่ฟ่กใ
ๆณจๆ๏ผPCIE_0 ๆ นๅคๅไฝๅฎไพ้ป่ฎคๅฏ็จ๏ผ็จไบ WLAN EP ่ฟๆฅใ
ไธบ Dragonwing IQ-9075๏ผLemans๏ผๅฏ็จ PCIe ็ซฏ็น๏ผEP๏ผๆจกๅผ
Dragonwing IQ-9075๏ผLemans๏ผไธ็ๆฏไธช PCIe ๆงๅถๅจๅฎไพ้ฝๅฏไปฅ่ฟ่กๅจๆ นๅคๅไฝ๏ผRC๏ผๆ็ซฏ็น๏ผEP๏ผๆจกๅผ๏ผไฝไธ่ฝๅๆถ่ฟ่กไธค็งๆจกๅผใ่ฎพๅคๆ ๅจๅไธๅบๅฐๅๅคไธบๆฏ็งๆจกๅผๅฎไนไบๅ็ฌ็่็น,ๅนถไธๆฏไธช PCIe ๅฎไพๆฏๆฌกๅช่ฝๅฏ็จๅ ถไธญไธไธชใๆณจๆ๏ผMonaco ไนๆฏๆ PCIe EP ๆจกๅผ๏ผไฝ่ฏฅๆฏๆๅฐๆชๅ
ๅซๅจๅฝๅๅ
ๆ ธไปฃ็ ๆ ไธญ๏ผ่ฎกๅๅจๅ็ปญ็ๆฌไธญๆไพใ
่กจ๏ผLemans PCIe EP ่็น
| EP ่็น | RC ่็น๏ผไบๆฅ๏ผ | Compatible | num-lanes | linux,pci-domain |
|---|---|---|---|---|
| pcie0_ep | pcie0 | qcom,sa8775p-pcie-ep | 2 | 0 |
| pcie1_ep | pcie1 | qcom,sa8775p-pcie-ep | 4 | 1 |
pcie0_ep ๅ pcie1_ep ๅๅจ arch/arm64/boot/dts/qcom/lemans.dtsi ไธญๅฎไน๏ผไธ้ป่ฎค status = "disabled",ๅ ไธบๅฏนๅบ็ RC ่็น(pcie0ใpcie1)ๅทฒๅฏ็จใ็ปๅฎๅฐ่ฟไบ่็น็ Qualcomm PCIe EP ๆงๅถๅจ้ฉฑๅจ็จๅบไธบ drivers/pci/controller/dwc/pcie-qcom-ep.c(้ฉฑๅจๅ็งฐ qcom-pcie-ep)ใ
PCIe EP ๆจกๅผๅ ๆ ธ้ ็ฝฎ
CONFIG_PCI_ENDPOINT ๅ CONFIG_PCI_ENDPOINT_CONFIGFS ๅทฒๅจ Lemans defconfig ไธญๅฏ็จใ็จไบๆๅปบ Qualcomm EP ๆงๅถๅจ้ฉฑๅจ็จๅบ็ CONFIG_PCIE_QCOM_EP ้ป่ฎคๆชๅฏ็จ๏ผๅฟ
้กปๅผๅฏๆ่ฝๅฏ็จ EP ๆจกๅผใCONFIG_PCI_EPF_MHI ๅๅ
ถไพ่ต้กน CONFIG_MHI_BUS_EP ไน้ป่ฎคๆชๅฏ็จ๏ผๅฟ
้กปๅผๅฏๆ่ฝไฝฟ็จ MHI ็ซฏ็นๅ่ฝใ
่ฆๅฏ็จ่ฟไบ้
็ฝฎ๏ผ่ฏทๅฐไปฅไธ่กฅไธๅบ็จๅฐ arch/arm64/configs/defconfig ๆไปถใ
ๆณจๆ๏ผ
CONFIG_PCIE_QCOM_EP ไพ่ต CONFIG_PCI_ENDPOINT,ๅนถ้ๆฉ drivers/pci/controller/dwc/Kconfig ไธญๅฎไน็ CONFIG_PCIE_DW_EP ๅ CONFIG_PCIE_QCOM_COMMONใCONFIG_PCI_EPF_MHI ๅฎไนไบ drivers/pci/endpoint/functions/Kconfig,ไพ่ต CONFIG_MHI_BUS_EPโโๅณ drivers/bus/mhi/ep/Kconfig ไธญ็ MHI ็ซฏ็นๆป็บฟๅฎ็ฐใๅจ่ฎพๅคๆ ไธญๅฏ็จ EP ่็น
pcie1๏ผRC๏ผๅ pcie1_ep๏ผEP๏ผ้ฝๅจ lemans.dtsi ไธญ้่ฟๆ ็ญพๅฎไน๏ผไธ pcie1 ๅจๅ
ถไธญ้ป่ฎค status = "disabled"ใ็ถ่๏ผlemans-evk.dts ๅ้่ฟๆฟ่ฝฝ M.2 E-key ่ฟๆฅๅจๅฐ pcie1 ้ๆฐๅฏ็จไธบ RC ๆจกๅผ(&pcie1 { ... status = "okay"; };)ใ็ฑไบๆฏไธช PCIe ๅฎไพๅจๅไธๆถ้ดๅช่ฝๅคไบ RC ๆ EP ไธญ็ไธ็งๆจกๅผ๏ผๅ ๆญคๅจ Lemans EVK ไธๅฐ PCIE_1 ๅๆขไธบ EP ๆจกๅผๆๅณ็็ฆ็จ่ฏฅ RC ่ฆ็๏ผๅนถๆนไธบๅฏ็จ pcie1_epใๅฐไปฅไธๆดๆนๅบ็จๅฐ arch/arm64/boot/dts/qcom/lemans-evk.dts๏ผ
pcie1_default_state๏ผๅจ lemans-evk.dts ้ ๅไฝ็ฝฎ็ &tlmm ่็นไธญๅฎไน๏ผไธบ GPIO 4 (PERST#) ๅ GPIO 5 (WAKE#) ่ฎพ็ฝฎไบๅผ่ๅ่ฝใ้ฉฑๅจๅผบๅบฆๅๅ็ฝฎ๏ผไฝๆฒกๆๅบๅฎๅฎไปฌ็ๆนๅ,ๅ ๆญค EP ่็นๅฏไปฅๅค็จไธ RC ๆจกๅผ็ธๅ็ pinctrl ็ปๅ็ฉ็ GPIOใไฝๆฏ,ๆฏไธช GPIO ไธ็ไฟกๅทๆนๅไผๅจไธค็งๆจกๅผไน้ดๅ่ฝฌ:
- ๅจ RC ๆจกๅผไธ,
pcie-qcom.cๅฐ PERST# GPIO ่ฏทๆฑไธบGPIOD_OUT_HIGHโโๆ นๅคๅไฝ้ฉฑๅจ PERST# ไปฅๅคไฝไธ่ก่ฎพๅคใRC ๆจกๅผไธ้ฉฑๅจ WAKE# GPIOใ - ๅจ EP ๆจกๅผไธ,
pcie-qcom-ep.cๅฐreset-gpios่ฏทๆฑไธบGPIOD_INโโ็ซฏ็นๅฐ PERST# ไฝไธบ่พๅ ฅ่ฏปๅ,็ฑ่ฟๆฅ็ๆ นๅคๅไฝ้ฉฑๅจ;ๅนถๅฐwake-gpios่ฏทๆฑไธบGPIOD_OUT_LOWโโ็ซฏ็นๅฐ WAKE# ไฝไธบ่พๅบ้ฉฑๅจๅฐไธปๆบใ
ๆณจๆ๏ผไธๆธธ
qcom,pcie-ep.yaml ็ปๅฎ่ฆๆฑๆไพ reset-gpios,ๅณ่ฟๆฅๅฐ็ฑๆ่ฟๆฅๆ นๅคๅไฝ้ฉฑๅจ็ PERST# ่พๅ
ฅ็ GPIOใlemans.dtsi ไธญ็ pcie1_ep ่็นๆฒกๆๅฎไน่ฏฅๅฑๆง,ๅ ไธบๅฎๆฏๆฟๅก็ธๅ
ณ็ใPCIE_0๏ผ็ฆ็จ pcie0 RC ่ฆ็๏ผๆนไธบๅฏ็จ pcie0_ep,ๅค็จ pcie0_default_state pinctrl ็ปๅๅ
ถ PERST#/WAKE# GPIOใ
ๆณจๆ๏ผ็ฆ็จ
pcie0 ไนไผๅๆถ็ฆ็จ M.2 E-key ่ฟๆฅๅจ็ PCIe ้พ่ทฏ(pcieport0)๏ผๅ ไธบ่ฏฅ่ฟๆฅๅจๅจ RC ๆจกๅผไธๆฅ็บฟๅฐ PCIE_0ใไป
ๅฝไฝ ไธ้่ฆๅฐ M.2 ่ฟๆฅๅจ็จไบ PCIe ๅกๆถ๏ผๆๅฐ PCIE_0 ๅๆขๅฐ EP ๆจกๅผใphysใiommusใinterconnectsใpower-domainsใclocks ๅ resets ๅทฒๅจไธคไธช EP ่็นไธญๅกซๅ
ๅฎๆฏ๏ผๆ ๅ bring-up ๆถๆ ้ไฟฎๆนใ
PCIe EP ้ฉฑๅจๅๅงๅ
pcie-qcom-ep.c ไธญ็ qcom_pcie_ep_probe() ไผ่ทๅ parfใdbiใmmio ๅ dma ๅฏๅญๅจๅบๅใๅ
จ้จไบไธชๅฎไพๆถ้ใcore ๅคไฝใreset(PERST#)ๅๅฏ้็ wake(WAKE#) GPIO,ไปฅๅๅฏ้็ pciephy PHY,็ถๅ่ฐ็จๅ
ฌๅ
ฑ็ DesignWare dw_pcie_ep_init() ๆฅๅๅงๅ็ซฏ็นๆ ธๅฟใLemans ๅน้
qcom,sa8775p-pcie-ep compatible ๅญ็ฌฆไธฒ,่ฏฅๅญ็ฌฆไธฒ้ๆฉ cfg_1_34_0 ้
็ฝฎ(ๅฏ็จ HDMA ๆฏๆใNO_SNOOP ่ฆ็,ๅนถ็ฆ็จ MHI RAM ๅฅๅถๆ ก้ช)ใ
ไธไธชๅ
จๅฑ IRQ ็บฟ็จ(qcom_pcie_ep_global_irq_thread())็จไบๅค็็ฑ่ฟๆฅ็ๆ นๅคๅไฝ่งฆๅ็้พ่ทฏๅปบ็ซ/ๆญๅผไบไปถใๆป็บฟไธปๆงไฝฟ่ฝ(BME),ไปฅๅ PM turn-off/D ็ถๆ้็ฅใ
ไฝฟ็จ configfs ็ปๅฎ MHI ็ซฏ็นๅ่ฝ
pci-epf-mhi.c ้ฉฑๅจๅจ pci_epf_mhi_ids[] ไธญไธบๆฏไธช SoC ๆณจๅไธไธช่ฎพๅค ID,ๆฏไธช้ฝๆๅ่ช็ header(vendor/device ID)ๅ MHI ้้้
็ฝฎใLemans ๅน้
pci_epf_mhi_sa8775p ๆก็ฎ,่ฏฅๆก็ฎ่ฎพ็ฝฎ่ฎพๅค ID 0x0116,ไฝฟ็จ BAR_0ใ32 ไธช MSI ๅ้ใMRU ไธบ 0x8000,ๅนถๅฏ็จ DMA ่พ
ๅฉไผ ่พ(MHI_EPF_USE_DMA)ใ่ฏฅๆก็ฎ่ฟ้ๆฉๆ ๅ็ mhi_v1_channels ่กจ(LOOPBACKใSAHARAใDIAGใSSRใQDSSใEFSใMBIMใQMIใIP-CTRL-1ใIPCRใDUNใIP_SW0)ใheader ๅ้้้
็ฝฎ็ฑๆญคๆก็ฎๅบๅฎ,ๅ ๆญคๆ ้้่ฟ configfs ๅๅ
ฅ vendorid/deviceidใ
ๅ
ๆ ธๅจๅฏ็จ pcie1_ep ็ๆ
ๅตไธๅฏๅจๅ,ไฝฟ็จ PCI ็ซฏ็น configfs ๆฅๅฃๅฐ MHI ็ซฏ็นๅ่ฝ็ปๅฎๅฐ qcom-pcie-ep ๆงๅถๅจใfunctions ็ฎๅฝๅ็งฐๅฟ
้กปไธ pci_epf_mhi_sa8775p ๆก็ฎๅน้
,ไปฅไพฟๆขๆตๅฐๆญฃ็กฎ็่ฎพๅค ID ๅ้้่กจใ
start ๅๅ
ฅ 1 ไผๅฃฐๆ็ซฏ็นๅทฒๅฐฑ็ปช,ๅ
่ฎธ้พ่ทฏไธ่ฟๆฅ็ๆ นๅคๅไฝ่ฟ่ก่ฎญ็ปใpci_epf_mhi_bind() ไผไป็ถ qcom-pcie-ep ๅนณๅฐ่ฎพๅคไธญๆฅๆพ mmio ๅฏๅญๅจๅบๅๅ doorbell ไธญๆญ,่ pci_epf_mhi_link_up() ไผๅจ้พ่ทฏๅปบ็ซๅๆณจๅ MHI ็ซฏ็นๆงๅถๅจใ
ๆณจๆ๏ผๅฆๆ
mhi_bus_ep ๅ pci_epf_mhi ๆๅปบไธบ็ฌ็ซๆจกๅ,่ฏทๅ
ๅ ่ฝฝ mhi_bus_ep,ๅ ไธบ CONFIG_PCI_EPF_MHI ไพ่ต CONFIG_MHI_BUS_EPใ้ช่ฏ MHI EP ๆจกๅผๆไธพ
ๅจ่ฟๆฅๅฐ Lemans EP ็ซฏๅฃ็ไธปๆบไธ,็กฎ่ฎค่ฎพๅคๅทฒไฝไธบๅ ทๆ่ฏฅ MHI ่ฎพๅค ID ็ PCI ็ซฏ็น่ขซๆไธพใๅฏ็จ QPS615 PCIe ไบคๆขๆบ
ๆฌ่ไป็ปๅฆไฝๅจ Qualcomm Linux ็กฌไปถ SoC ไธญๅฏ็จ QPS615 PCIe ไบคๆขๆบใQPS615 ไบคๆขๆบ็ซฏ็นๅจPCIe1 ๅฎไพไธๅๆฏๆใไธๅพๅฑ็คบไบ QPS615 ็ซฏ็นๅ่ฟๆฅใ
ๅพ๏ผQPS615 PCIe ไบคๆขๆบ่ฟๆฅๅพ
ๅฏไปไปฅไธไฝ็ฝฎ่ฎฟ้ฎ Qualcomm PCIe ้ฉฑๅจ็จๅบๆๆกฃ๏ผ- https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/pci/qcom%2Cpcie-sc8280xp.yaml
- https://elixir.bootlin.com/linux/v6.6.48/source/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
- https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/phy/qcom%2Csc8280xp-qmp-pcie-phy.yaml
PCIe ็ธๅ ณ้ ็ฝฎ
ไปฅไธ้ ็ฝฎ้ป่ฎคๅฏ็จ๏ผไปฅๆฏๆ QPS615 ไบคๆขๆบใ่ฅ่ฆๅฐๅ ถ็จไบๅ ถไป PCIe ็ซฏ็น๏ผ่ฏท้่ฟ่ฟๅไปฃ็ ๆดๆนๆฅ็ฆ็จ QPS615 ไบคๆขๆบ็้ป่ฎคๆฏๆใ ่ฆๅฏ็จ PCIe ็ธๅ ณ็configs๏ผ่ฏทๅฐไปฅไธ่กฅไธๅบ็จๅฐ /arch/arm64/configs/qcom_addons.config ๆไปถใ
ๆถๆฏไฟกๅทไธญๆญ๏ผMSI๏ผ
ๅฝๅ็ MSI ๆ ๅฐๅนถไธๅ ๅซๆๆๅ้ใQualcomm Linux ็กฌไปถ SoC ๆฏๆๅ ซไธชๅ้ใๆฏไธชๅ้ๅๆฏๆ 32 ไธช MSIใๅ ๆญค๏ผๆฏๆ็ MSI ๆปๆฐไธบ 256ใ ๆๅ ณไธบๆญค PCIe ๅฎไพๆทปๅ ๆๆๅๆฏๆ็ MSI ็ป็ไฟกๆฏ๏ผ่ฏทๅ้ https://lore.kernel.org/linux-arm-msm/f1168212-bc6e-4570-869c-2870d6f248ad@linaro.org/T/ใPCIe ๅ ๆ ธ้ฉฑๅจ็จๅบๆฅๅฟ็คบไพ
ไปฅไธๆฏๆฅ่ช QPS615 ่ฎพๅคๆไธพ็ PCIe ๅ ๆ ธ้ฉฑๅจ็จๅบๆฅๅฟ็คบไพใ้่ฟ QPS615 PCIe ไบคๆขๆบๆฏๆ็ไปฅๅคช็ฝๆฅๅฃ
QPS615 PCIe ไบคๆขๆบไธบ่ฎพๅคๅฏ็จไปฅๅคช็ฝ่ฟๆฅใๅฝ่ฎพๅคๅ ่ฝฝ QPS615 ้ฉฑๅจ็จๅบๅนถๅปบ็ซ PCIe ้พ่ทฏๆถ๏ผ้ป่ฎคๆ ๅตไธไผๅจ่ฎพๅคๅฏๅจๆ้ด่ชๅจๆฟๆดปๅๆฏๆ็ไปฅๅคช็ฝๆฅๅฃใ ่ฆ่ชๅฎไน้ป่ฎค้ ็ฝฎๆๅฏ็จ Qualcomm ็กฌไปถ่ฎพ็ฝฎไนๅค็้ขๅค MAC/PHY ็ปไปถ๏ผ่ฏทๅ้ Qualcomm Linux Ethernet guide ไธญ็ Bring up Ethernet ้จๅใ่กจ๏ผๆฏๆ็ไปฅๅคช็ฝๆฅๅฃ
| ๆฅๅฃ็ฑปๅ | ้ๅบฆ | ่ฟๆฅๅจ็ฑปๅ | ่ฏดๆ |
|---|---|---|---|
| QEP PHY (SGMII) | 2.5 GbE | IX/RJ45 ่ฟๆฅๅจ๏ผQEP8121๏ผ |
|
| AQR PHY (USXGMII) | 10 GbE | IX/RJ45 ่ฟๆฅๅจ๏ผAQR113C๏ผ |
|
ๅฏ็จๆฟไปฃ็กฌไปถ็ปไปถ
ๆจๅฏไปฅ่ฟๆฅ Qualcomm ๆไพ็็กฌไปถ้ ็ฝฎไนๅค็ MAC/PHY ็ปไปถๅนถๅฐๅ ถๅฏ็จใ ่ฆๅฐ QPS615 ๆฟๆขไธบๅ ถไปๅบไบ PCIe ็ MAC/PHY๏ผ่ฏทๅ้ ๅฏ็จ QPS615 PCIe ไบคๆขๆบใๆณจๆ๏ผๆจๅฟ
้กปไป็ธๅบ็ไพๅบๅๅค่ทๅ MAC/PHY ้ฉฑๅจ็จๅบๅๅบไปถใQualcomm ๅฏน่ฟไบ้
็ฝฎๆดๆนไธๆฟๆ
่ดฃไปปใ
้่ฟ PCIe ไบคๆขๆบๅฏ็จ USB ๆฅๅฃ
ๆฌ่ไป็ปๅฆไฝๅจ Qualcomm Linux ็กฌไปถ SoC ไธญ้่ฟ PCIe ไบคๆขๆบๆฟๆดป USB ๆฅๅฃใPCIE1 ๅฎไพ่ฟๆฅๅฐ QPS615 ไบคๆขๆบ็็ซฏ็น๏ผQPS615 ็ไธๆธธ็ซฏๅฃ่ฟๆฅๅฐ PCIe ่ฝฌ USB ็ซฏ็นใๆๅ ณไฝฟ็จ QPS615 ็ PCIe ่ฝฌ USB ็ซฏ็น่ฟๆฅ๏ผ่ฏทๅ้ ไฝไบ https://docs.qualcomm.com/bundle/publicresource/topics/80-80021-251/rb3_hardware_overview.html ็ไธปๆฟๅ่ฝฌๆฅๆฟๆกๅพใๆณจๆ๏ผDragonwing IQ-9075 PCIe ่ฝฏไปถไธๆฏๆ USBใ
ไธ่ฝฝ PCIe ่ฝฌ USB ๆงๅถๅจๅบไปถ
่ฆไป https://www.renesas.com/us/en/products/interface/usb-switches-hubs/upd720201-usb-30-host-controller#design_development ไธ่ฝฝๅบไปถ๏ผ่ฏทๆณจๅๅนถ็ปๅฝ https://www.renesas.com/ใๅฐไธ่ฝฝ็ๅบไปถๆไปถ้ๅฝๅไธบ renesas_usb_fw.memใๆณจๆ๏ผไธบ้ฒๆญขๅฝไปคๅคฑ่ดฅ๏ผ่ฏทๅจๆดๆฐ Renesas ๅบไปถไนๅ๏ผๆ็
ง Set up the device ้จๅไธญ็่ฏดๆๆดๆฐ่ฝฏไปถใ
- ้่ฟ USB ็บฟ็ผๅฐ่ฎพๅค่ฟๆฅๅฐไธปๆบ PC ไปฅไฝฟ็จ adbใ
- ๅฐๅบไปถๆจ้ๅฐ่ฎพๅคใ
- ่ฆๆฟๆดปๅบไปถ๏ผ่ฏทๆง่กไปฅไธไปปไธ้้กนใ
- ้้กน A๏ผ้ๅฏ็ฎๆ ่ฎพๅคไปฅๅฏ็จ USB Type-A ็ซฏๅฃใ
- ้้กน B๏ผๆๅจ็ปๅฎ Renesas xHCI ้ฉฑๅจ็จๅบใ
- ้ช่ฏๅบไปถๆไธพใ
็จไบ PCIe ่ฝฌ USB ่ฎพๅคๆไธพๅ่็ PCIe ๅ ๆ ธ้ฉฑๅจ็จๅบๆฅๅฟ
ๆจๅฏไปฅ่ฟ่กไปฅไธๅฝไปคๆฅๆฅ็่ฎพๅคไฟกๆฏ๏ผ- ่ฆๆพ็คบ USB ไธญ็่ฎพๅคไฟกๆฏ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
ๅฐๆพ็คบไปฅไธๆถๆฏใ
- ่ฆๆพ็คบ PCIe ไธญ็่ฎพๅคไฟกๆฏ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
ๅฐๆพ็คบไปฅไธๆถๆฏใ
็บง่่ฟๆฅ QPS615 ไบคๆขๆบ
ไปฅ็บง่ๆนๅผ่ฟๆฅ QPS615 ไบคๆขๆบ๏ผไปฅๅฏ็จ้ขๅค็ไปฅๅคช็ฝใPCIe ๅ USB ็ซฏๅฃใๆณจๆ๏ผๆญคๅ่ฝไป
ๅจ QCS6490 ไธญๅๆฏๆใ
ๅพ๏ผQPS615 ไบคๆขๆบ็บง่่ฟๆฅ
- ่ฆ้็ฝฎ QPS615 ไบคๆขๆบ๏ผ่ฏทๅๆข QPS615 #1 ๅ QPS615 #2 ็ RESX GPIOใ
- ่ฆๆงๅถ็ซฏ็น้็ฝฎ๏ผ่ฏท่งฆๅ PERSTใไธคไธชไบคๆขๆบๅ ฑไบซ PERSTใ
- ่ฟๆฅๅฐไบคๆขๆบ็่ฎพๅค๏ผ
- QPS615 PCIe ๆ ่็นๅฑๆฌก็ปๆๆฏ้ๆๅบๅฎ็ใ
- ็จไบไบคๆข USP ๅ DSP ็ซฏๅฃ็ๆๆ่็น้ฝๅจ PCIe ๅๅงๅๆ้ดๅๅปบใ
- ๅ ถไธญไธไธชไบคๆขๆบ DSP ็ซฏๅฃไปฃ่กจ WLANใ
- ๅฆๆ็ฆ็จ WLAN ่็น๏ผๅฐ็ฆ็จ WLAN ่ฎพๅค๏ผไฝ PCIe ไธๆธธ็ซฏๅฃไปไฟๆๅฏ็จ็ถๆ๏ผๅนถ่ฟๅ้ป่ฎค็ๆๅคง้พ่ทฏๅฎฝๅบฆใ
- ็ดๆฅ่ฟๆฅ็ WLAN ่ฎพๅค๏ผ
- ไป ็ฆ็จๅไธช่็นใ
- ๅฝ WLAN ่ขซ็ฆ็จๆถ๏ผ่ฟๅ Invalid argumentใ
้่ฟ PCIe ๆฅๅฃๅฏ็จ NVMe
ๆฌ่ไป็ปๅฆไฝไฝฟ็จ PCIe ๅฏ็จ NVMe ไปฅ่ฟ่กๅญๅจๆฉๅฑใ่ฆ้ช่ฏ NVMe ๆฏๅฆ้่ฟ PCIe ๆฅๅฃ่ฟๆฅ๏ผ่ฏทๆง่กไปฅไธๆไฝ๏ผ- ่ฆๆพ็คบ PCIe ่ฎพๅคไฟกๆฏ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
่พๅบ๏ผ
- ๆพๅฐ PCIe ๆฅๅฟใ
่พๅบ๏ผ
- ่ฆๆพๅฐ NVMe ็ฎๅฝ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
่พๅบ๏ผ
ไธบ SMMUv2 ็ฎๆ ๆดๆฐ iommu-map ๅฑๆง
ๅฏนไฝฟ็จ SMMUv2 IOMMU ๅค็ PCIe ็็ฎๆ (ไพๅฆ Dragonwing IQ-9075 (Lemans)ใMonaco ๅ Kodiak)่่จ,ๆฏไธช PCIe Requester ID (RID) ้ฝไผ้่ฟ PCIe host bridge ่็นไธญ็iommu-map ๅฑๆง่ฝฌๆขไธบไธไธช Stream ID (SID)ใๅจ็ป PCIe ๆ นๅคๅไฝไธๆธธๆทปๅ ่ฎพๅคใไบคๆขๆบๆ็ซฏ็นๆถ,ๆญคๅฑๆง้
็ฝฎ้่ฏฏๆฏๅฏผ่ดๅบ็ฐ no iommu-map translation for id ๅคฑ่ดฅ็ๅธธ่งๅๅ ใ
iommu-map ็ๅทฅไฝๅ็
ๆฏไธชiommu-map ๆก็ฎๅ
ทๆไปฅไธๅฝขๅผ๏ผ
drivers/of/base.c: of_map_id())ๆไปฅไธ่งๅๅค็:
count = 1 ๆถ,ๆ ๅฐ็ฎๅไธบ RID == rid_base -> SID = sid_baseใๆฏไธชๆก็ฎไฝฟ็จ count = 1๏ผ็จ็็นๆ ๅฐ๏ผๅฏๅฐไธไธช RID ็ฒพ็กฎๅบๅฎๅฐไธไธช SID,ๆ ่ฎบ RID ๅผๆๅคๅคง,ๅนถๅฏ้ฟๅ
่ๅฐฝ SMMU ๅฎ็ฐ็ SID ่ๅดใ
ๆณจๆ๏ผ็ฎๅ็ๅไธ range ๆก็ฎ,ไพๅฆ
iommu-map = <0x0 &pcie_smmu 0x0000 0x500>;,ไผๅฐ count ไธช่ฟ็ปญ็ RID ๆ ๅฐๅฐ count ไธช่ฟ็ปญ็ SID,ๅ ๆญค SID ๅ็งปไผ้ RID ๅผๆๆฏไพๅข้ฟใไธๆฆๆฅ่ชไธๆธธไบคๆขๆบๆ้ขๅค็ซฏ็น็ RID ่ถ
ๅบ SMMU ๅฏ็จ็ SID ่ๅด,่ฟ็งๆ ๅฐๅฐฑไผๅคฑ่ดฅใPCIe RID ไธ SID ๅบ็ก
PCIe RID ๆฏไธไธช 16 ไฝๅผ,็ผ็ ไบๆป็บฟใ่ฎพๅคๅๅ่ฝ๏ผ่กจ๏ผๅธธ่ง RID ๅผ
| Bus | Dev | Fn | RID (hex) | ่ฏดๆ |
|---|---|---|---|---|
| 0 | 0 | 0 | 0x0000 | ๆ นๅคๅไฝ๏ผๅง็ปๅญๅจ |
| 1 | 0 | 0 | 0x0100 | RC ไธ่ก็็ฌฌไธไธช่ฎพๅค๏ผ็ซฏ็นๆไบคๆขๆบไธ่ก๏ผ |
| 2 | 1 | 0 | 0x0208 | ไบคๆขๆบไธ่ก็ซฏๅฃ๏ผ่ฎพๅค 1 |
| 2 | 16 | 1 | 0x0281 | lspci ๅฐๅ 02:10.1 |
lemans.dtsi ๅ่็คบไพ
Lemans ๅฎไนไบไธคไธช PCIe ๆงๅถๅจ,ๆฏไธช้ฝๆ ๅฐๅฐๅ ฑไบซpcie_smmu(qcom,sa8775p-smmu-500,ไธไธช SMMUv2 ็ณปๅ IOMMU)ไธญๅ่ช็ SID ๅญ่ๅดใpcie0 ไฝฟ็จ SID ๅบๅ 0x0000,pcie1 ไฝฟ็จ SID ๅบๅ 0x0080,ๅ ๆญคๅฎไปฌ็ SID ็ฉบ้ดไธไผ้ๅ ใ
0x0000(bus 0, dev 0, fn 0)ๅจ pcie0 ไธๆ ๅฐๅฐ SID 0x0000,ๅจ pcie1 ไธๆ ๅฐๅฐ SID 0x0080ใRID 0x0100(bus 1, dev 0, fn 0)ๅจ pcie0 ไธๆ ๅฐๅฐ SID 0x0001,ๅจ pcie1 ไธๆ ๅฐๅฐ SID 0x0081ใMonaco ไฝฟ็จๅ
ถ่ช่บซ็ pcie_smmu ๅฎไพ้ตๅพช็ธๅๆจกๅผ๏ผKodiak ไน้ตๅพช็ธๅๆจกๅผ,ๅชๆฏไฝฟ็จ apps_smmu(qcom,sc7280-smmu-500)่ไธๆฏไธ็จ็ pcie_smmuใ
ๆณจๆ๏ผ
lemans-ride-common.dtsi ๅจ pcieport0(bus 1, dev 0, fn 0 โ RID 0x0100)ไธๆ่ฝฝไบไธไธช WiFi ่ฏ็,ๅนถไป lemans.dtsi ็ปงๆฟ iommu-map ่ๆช่ฆ็,ๅ ไธบๅบ็กๆไปถๅทฒ็ปๆถต็ไบ่ฏฅ RIDใไธบไบคๆขๆบๆๆๆฉๅฑ iommu-map
ๅฆๆๅจๆงๅถๅจไธๆธธๅฎ่ฃ ไบ PCIe ไบคๆขๆบ(ไพๅฆ,้่ฟไธคไธชไบคๆขๆบ็ซฏๅฃๅจ bus 4 ไธๆทปๅ NVMe SSD),่ฏทๅจๆก็ฎๅ่กจไธญไธบๆฏไธช RID ๅขๅ ไธ่ก,ๅนถๅฏนๆฏไธ้กนไฟๆcount = 1๏ผ
0x0000 ๅฐ 0x0004),ๅ
จ้จไฝไบ pcie0 ็ๅญ่ๅดไนๅ
;่ไธๆฏไฝฟ็จไธไธช count = 0x500 ็ๅไธ range ๆก็ฎ,ๅ่
ๅฏ่ฝ่ถ
ๅบ SMMU ๅฎ็ฐ็ SID ่ๅดใ
ๆณจๆ๏ผๅ้
็ปๆฏไธช RID ็ SID ๅผไธๅฟ
ๆฏ่ฟ็ปญ็,ไนไธๅฟ
ๆ RID ้กบๅบๆๅใๅฎไปฌๅช้ๅจ่ฏฅๆงๅถๅจ็
iommu-map ๅ
ๅฏไธ,ๅนถไธไฝไบ SMMU ๅฎ็ฐ็ SID ่ๅดๅ
ใ่ฏๆญ็ผบๅคฑ็ iommu-map ๆก็ฎ
ๅฝ่ฎพๅค็ RID ๆฒกๆๅน้ ็iommu-map ๆก็ฎๆถ,ๅ
ๆ ธๆฅๅฟไผ่ฎฐๅฝ็ฑปไผผๅฆไธ็้่ฏฏ:
- ไปๆฅๅฟไธญ่ฏปๅ RIDใๅจๆญค็คบไพไธญ,RID ไธบ
0x0281ใ - ๅฐ RID ่งฃ็ ไธบๆป็บฟใ่ฎพๅคๅๅ่ฝใ
ไธๅไธๆฅๅฟ่กไธญ็
lspciๅฐๅไบคๅๆ ธๅฏน(0001:02:10.1โ bus 2, device 0x10, function 1)ใๅญๆฎตไธ่ด,็กฎ่ฎค RID ่งฃ็ ๆญฃ็กฎใ - ไธบ่ฏฅ่ฎพๅค้ๆฉไธไธช็ฉบ้ฒ SIDใๆฅ็็ฐๆ็
iommu-mapๆก็ฎ,้ไธไธชๅฐๆช่ขซๆญคๆงๅถๅจๆ ๅฐไธญๅ ถไปๆก็ฎไฝฟ็จใๅนถไธๅจ SMMU ๅฎ็ฐ็ SID ่ๅดๅ ็ SIDใ - ไฝฟ็จ
count = 1ๆทปๅ ๆก็ฎใๅฆๆ fn0 ๅ fn1 ่ฟ็ปญไธ้ฝ่ฟๆฒกๆ SID,ๅฏไปฅ็จไธไธชcount = 2็ๆก็ฎๅๆถ่ฆ็ไธค่ :<0x0280 &apps_smmu 0x1403 0x2>ไผๅฐ RID0x0280ๆ ๅฐๅฐ SID0x1403,ๅฐ RID0x0281ๆ ๅฐๅฐ SID0x1404ใ - ้ๆฐๆๅปบ DTBใๅทๅๅนถ้ๅฏ,็ถๅ็กฎ่ฎคไฟฎๅคๆๆใ
้่ฏฏ่กๅฟ ้กปไธๅๅบ็ฐใ
ๆณจๆ๏ผๆ ่ฎบๆฏๅฆๅญๅจ
iommu-map ๆก็ฎ,lspci ้ฝไผๆพ็คบ่ฎพๅค,ๅ ไธบ lspci ็ดๆฅ่ฏปๅ PCI ้
็ฝฎ็ฉบ้ด,ไธๅ IOMMU ๆ ๅฐๅฝฑๅใ่ฏทไฝฟ็จ dmesg,่ไธๆฏ lspci,ๆฅ็กฎ่ฎค็ผบๅคฑ็ๆก็ฎๅทฒ่ขซไฟฎๅคใdrivers/of/base.c: of_map_id()ใ
PCIe ๅฎขๆท็ซฏ้ฉฑๅจ็จๅบ็คบไพ
ๅฎขๆท็ซฏ้ฉฑๅจ็จๅบๅฎไนdevice-id ่กจๅ pci_driver ็ปๆ๏ผๅนถๅ PCIe ๆกๆถๆณจๅใไปฅไธๆฏไธไบ PCIe ๅฎขๆท็ซฏ้ฉฑๅจ็จๅบ็คบไพ๏ผไพๅ่ใ
- ็จไบไฟๅญๅฎขๆท็ซฏ็นๅฎ็งๆๆฐๆฎ็ๆฐๆฎ็ปๆ็คบไพใ
- ้ฉฑๅจ็จๅบ็คบไพ๏ผๆจๅฏไปฅๆ นๆฎ้ฉฑๅจ็จๅบ็นๅฎ็ๆฐๆฎ็ปๆๆไพๆฐๆฎใ
- ๅธฆๆ้ฉฑๅจ็จๅบ็นๅฎๆฐๆฎ็่ฎพๅค ID ่กจ็คบไพใๅฎขๆท็ซฏ้ฉฑๅจ็จๅบไฝฟ็จ
0x306่ฎพๅค ID ่ฟ่กๆณจๅใ
ๆณจๆ๏ผ
MODULE_DEVICE_TABLE(pci, sample_pci_id_table); ๆฏๅผบๅถๆง็ใ- ๅธฆๆๅฎขๆท็ซฏ้ฉฑๅจ็จๅบๅ็งฐใ
pci-id่กจๅๅ่ฐ็pci_driverๆฐๆฎ็ปๆ็คบไพใๅจๅ PCI ๆกๆถๆณจๅๆถไผไผ ้ๆๅๆญค็ปๆ็ๆ้ใ - ่ฆๅ PCI ๅบไปถๆณจๅ๏ผ่ฏทไป
module_init()ไธญ่ฐ็จpci_register_driver(&sample_pci_driver)ใ
PCIe ๅฏ็จ๏ผbringup๏ผ
ๆๅ ณ PCIe ๅฏ็จ็ไฟกๆฏ๏ผ่ฏทๅ้ PCIe-related configurations ๅ QPS615 switch supportใPCIe ๅ่ไผๅ
PCIe ๅฎไนไบไธค็ง็ฑปๅ็็ตๆบ็ฎก็ๆนๆณใ- ็ตๆบ็ฎก็่ฝฏไปถ๏ผ็จไบ็กฎๅฎๆฏไธช่ฎพๅค็็ตๆบ็ฎก็่ฝๅๅนถๅ็ฌ็ฎก็ๆฏไธช่ฎพๅค
- ๆ ้่ฝฏไปถๅนฒ้ข็็ณป็ป๏ผไพๅฆๆดปๅจ็ถๆ็ตๆบ็ฎก็๏ผASPM๏ผ
PCIe L0 ้พ่ทฏ็ถๆ
PCIe ็ตๆบ็ฎก็ๅฎไนไบไปฅไธ L0 ้พ่ทฏ็ถๆ๏ผ- L0๏ผๆดปๅจ็ถๆ๏ผๆๆ PCIe ไบๅกๅๅ ถไปๆไฝๅๅทฒๅฏ็จ
- L0s๏ผๅ ทๆไฝๆขๅคๅปถ่ฟ็ ASPM ็ถๆ๏ผ่่ฝๅพ ๆบ็ถๆ๏ผ
PCIe ่ฎพๅค็ถๆ
PCIe ็ตๆบ็ฎก็ๅฎไนไบไปฅไธ่ฎพๅค็ถๆ๏ผ- D0๏ผๅผบๅถ๏ผ๏ผ่ฎพๅคๅคไบๅฎๅ
จๅผๅฏ็ถๆ๏ผๅ
ถไธญๆไธคไธชๅญ็ถๆ
- D0uninitialized๏ผ่ฎพๅคๅคไฝๅ๏ผๅ่ฝๅคไบ D0uninitialized ็ถๆ๏ผ็ญๅพ ่ขซๆไธพๅ้ ็ฝฎใ
- D0active
- ๆไธพๅ้ ็ฝฎ่ฟ็จๅฎๆๅ๏ผๅ่ฝๅคไบ D0active ็ถๆใ
- ๅฝ็ณป็ป่ฝฏไปถๅฏ็จไธไธชๆๅคไธช๏ผไปปๆ็ปๅ๏ผๅ่ฝๅๆฐ๏ผไพๅฆๅ ๅญ็ฉบ้ดไฝฟ่ฝใI/O ็ฉบ้ดไฝฟ่ฝๆ BME ไฝ๏ผๆถ๏ผๅ่ฝ่ฟๅ ฅ D0active ็ถๆใ
- D1๏ผๅฏ้๏ผ๏ผๆต
็ก็ ็ถๆ
- ้ค PME ๆถๆฏๅค๏ผๅ่ฝไธ่ฝๅ่ตท TLP
- ้ค้ ็ฝฎไบๅกๅค๏ผๅ่ฝไธ่ฝไฝไธบไบๅก็็ฎๆ ใ
- ๅ่ฝ้่ฟๅฏน PM ๆงๅถๅ็ถๆๅฏๅญๅจ่ฟ่ก็ผ็จๆฅๅๅบ่ฟๅ ฅ D1 ็ถๆ็่ฝฏไปถๅฝไปคใ
- D2๏ผๅฏ้๏ผ๏ผๆทฑ็ก็ ็ถๆ
- ้ค PME ๆถๆฏๅค๏ผๅ่ฝไธ่ฝๅ่ตท TLP
- ้ค้ ็ฝฎไบๅกๅค๏ผๅ่ฝไธ่ฝไฝไธบไบๅก็็ฎๆ ใ
- ๅ่ฝ้่ฟๅฏน PM ๆงๅถๅ็ถๆๅฏๅญๅจ่ฟ่ก็ผ็จๆฅๅๅบ่ฟๅ ฅ D2 ็ถๆ็่ฝฏไปถๅฝไปคใ
- D3๏ผๅผบๅถ๏ผ๏ผ่ฎพๅคๅคไบๆไฝๅ่็ถๆ๏ผๅ่ฝๅฟ ้กปๆฏๆไธค็ง D3 ็ถๆ
- D3hot
- ้ค PME ๆถๆฏๅค๏ผๅ่ฝไธ่ฝๅ่ตท TLPใ
- ้ค้ ็ฝฎไบๅกๅค๏ผๅ่ฝไธ่ฝไฝไธบไบๅก็็ฎๆ ใ
- ๅ่ฝ้่ฟๅฏน็ตๆบ็ถๆๅญๆฎต่ฟ่ก็ผ็จๆฅๅๅบ่ฟๅ ฅ D3hot ็ถๆ็่ฝฏไปถๅฝไปคใ
- D3cold๏ผ่ฎพๅค่ฟๅ ฅ D3cold ็ถๆๅนถๆญ็ต๏ผ็ตๆบๆขๅคๅ๏ผ่ฎพๅค่ฟๅ ฅ D0uninitialized ็ถๆใ
PCIe ้ช่ฏ
ๆๅ ณ PCIe ้ช่ฏ็ไฟกๆฏ๏ผ่ฏทๅ้ PCIe-related configurations ๅ QPS615 switch supportใ่ฐ่ฏ PCIe ้ฎ้ข
lspci ๅ setpci ๅฝไปคๆฏ Linux ๅ่ก็็ๅ็ๅฝไปคใ่ฟไบๅฝไปคๅ
ทๆไธๅ็บงๅซ็่พๅบใ่ฟไบๅฝไปค่ฟๅฏไปฅๆไพๅฏน PCI ๆป็บฟไธ่ฎญ็ป็ไธๅ็ปไปถ็่ฝๅๅ็ถๆ็ๆ็จ็ๅณๆถๅฟซ็
งใ่ฟไบ่ฝๅๅคงๅคๆฏ PCIe ๅบ็ก่ง่ๆ่ฆๆฑ็้
็ฝฎ็ฉบ้ดๅฏๅญๅจ็ๅๆ ใๆๅ
ณๆดๅค่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้
https://pcisig.com/specificationsใ่ฆๆฅ็ไฝฟ็จ่ฏดๆ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
- ๆพ็คบ่ฎพๅคไฟกๆฏ
ๅฐๆพ็คบไปฅไธๆถๆฏใ
- ๆพ็คบ่ฎพๅคๆงๅถๅฏๅญๅจไธญ็ PCIe ่ฎพๅคๅไพๅบๅ IDใ
ๅฐๆพ็คบไปฅไธๆถๆฏใ
PCIe ็คบไพ
ๆๅ ณไธๆธธ่ฎพๅคๆ ๅ่็ไฟกๆฏ๏ผ่ฏทๅ้ ไปฅไธๆไปถใ- QCS6490 ๅ QCS5430๏ผhttps://elixir.bootlin.com/linux/v7.0-rc7/source/arch/arm64/boot/dts/qcom/kodiak.dtsi
- Dragonwing IQ-9075๏ผhttps://elixir.bootlin.com/linux/v7.0-rc7/source/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-8275๏ผhttps://elixir.bootlin.com/linux/v7.0-rc7/source/arch/arm64/boot/dts/qcom/monaco.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/controller/dwc/pcie-qcom.c?h=v6.8-rc6#n1634
- QCS6490 ๅ QCS5430๏ผhttps://elixir.bootlin.com/linux/v7.0-rc7/source/arch/arm64/boot/dts/qcom/kodiak.dtsi
- Dragonwing IQ-9075๏ผhttps://elixir.bootlin.com/linux/v7.0-rc7/source/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16
ๅฎขๆท็ซฏไธ PCI ้ฉฑๅจ็จๅบๆไฝๆต็จ็คบไพ
ไธๅพๅฑ็คบไบ PCIe ๅฎขๆท็ซฏ้ฉฑๅจ็จๅบไธบๅฎขๆท็ซฏ้ ็ฝฎ PCIe ้ฉฑๅจ็จๅบๆ้ตๅพช็้กบๅบใ
ๅฎขๆท็ซฏไธ PCI ้ฉฑๅจ็จๅบ้ซๅฑ่ฐ็จๆต็จ็คบไพ
ไธๅพๅฑ็คบไบ PCIe ๅฎขๆท็ซฏ้ฉฑๅจ็จๅบไธ PCIe ้ฉฑๅจ็จๅบไน้ด็้ซๅฑ่ฐ็จๆต็จๅ่ฐ็จ่ฏฆ็ปไฟกๆฏใ

