![Page 1: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/1.jpg)
How to write Platform Devices and Drivers with FPGA via GPMC
Bo-Yi Wu
2011.06.15
http://blog.wu-boy.com
![Page 2: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/2.jpg)
What’s GPMC
• 全名 General-Purpose Memory Controller• the device unified memory controller (UMC)
dedicated to interfacing external memory devices.– NAND Flash– NOR Flash– FPGA (*)
• 如果要更深入研究,請參考 TI 線上 Documentation
![Page 3: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/3.jpg)
寫 GPMC Drive 跟 FPGA 溝通前
![Page 4: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/4.jpg)
必須先瞭解什麼是 Platform Devices 和 Platform Drivers
![Page 5: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/5.jpg)
撰寫 Driver Model 事先預備 Porting Drivers to New Driver Model
• Driver Binding• Bus Types• Device Classes• Basic Device Structure• Managed Device Resource• Device Drivers• Device Interfaces• Platform Devices and Drivers
![Page 6: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/6.jpg)
Platform 架構• 參考 <linux/platform_device.h> 來瞭解 dri
ver model 如何跟 platform bus 溝通• 用在 system-on-chip processors 或者是一
些 "legacy" PC interconnects
![Page 7: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/7.jpg)
Platform devices
• 請指定一個名稱用來 Driver Binding ,以及定義該 Devices 需要用到的 addresses 和 IRQs.
struct platform_device {const char *name;u32 id;struct device dev;u32 num_resources;struct resource *resource;
};
![Page 8: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/8.jpg)
Platform drivers
• Platform drivers 走 Driver Model 標準規範,提供 probe 及 remove method ,它們提供 power 管理及關閉提醒等標準
![Page 9: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/9.jpg)
struct platform_driver {int (*probe)(struct platform_device *);int (*remove)(struct platform_device *);void (*shutdown)(struct platform_device *);int (*suspend)(struct platform_device *, pm_message_t state);int (*suspend_late)(struct platform_device *, pm_message_t state);int (*resume_early)(struct platform_device *);int (*resume)(struct platform_device *);struct device_driver driver;
};
![Page 10: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/10.jpg)
• Probe 用來偵測特定 Hardware 是否存在,及使用該裝置資源 (clocks 和 device platform_data)
• 透過底下函式來註冊 Driver– int platform_driver_register(struct platform_driv
er *drv);
• 過去 Legacy Driver 並不會完全遵守標準 driver model ,這些 driver 會去註冊自己的 platform device ,而不是讓系統來完成註冊
![Page 11: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/11.jpg)
裝置初始化• 在大多數的 Platform 設備都必須先註冊 P
latform Device– 定義 platform_data, resource, 共有多少個 re
source 等等– platform_device_register– platform_add_devices
![Page 12: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/12.jpg)
Device Naming 和 Driver Binding
• platform_device.dev.bus_id 是一個 device id 分為兩個 component:– platform_device.name 用來跟 Driver match– platform_device.id 裝置編號順序 ( 例如假設有
支援多個 NAND 或 NOR Flash) ,如果設定為 -1 表示為獨一無二的裝置
![Page 13: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/13.jpg)
Driver binding
• 在 Driver Core 裡面透過 probe 自動匹對– 利用 Device Name and ID 去 match
• name/id: gpmc_bus.1 或 gpmc_bus
![Page 14: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/14.jpg)
board-omap3evm
GPMC Device Init
Match Driver name
GPMC Driver Init
GPMC Address IRQ
GPMC Clock andChip Select Define
![Page 15: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/15.jpg)
GPMC support functions
• gpmc_cs_read_reg
• gpmc_cs_write_reg
• Please referrer arch/arm/mach-omap2/gpmc.c
![Page 16: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/16.jpg)
GPMC Address Mapping
![Page 17: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/17.jpg)
• Supported Devices– .GPMC_CONFIG1_i[11:10]
• Access Size Adaptation and Device Width– .GPMC_CONFIG1_i[13:12]
![Page 18: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/18.jpg)
Timing Setting
![Page 19: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/19.jpg)
上面兩張設定如果設定正確,就可以正確看到波形,如果設定錯誤,
請準備接收 Kernel Panic
![Page 20: How to write Platform Devices and Drivers with FPGA via GPMC](https://reader035.vdocuments.net/reader035/viewer/2022073018/55d4d51dbb61ebe0488b45de/html5/thumbnails/20.jpg)
結論• Platform Device 和 Platform Driver 區別?• GPMC Config_[1-7] 設定方式及規範• 實際參考 NAND Driver 程式