欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Linux內(nèi)核syscon框架:寄存器統(tǒng)一管理與驅(qū)動開發(fā)實(shí)踐

Linux內(nèi)核syscon框架:寄存器統(tǒng)一管理與驅(qū)動開發(fā)實(shí)踐 調(diào)過Linux內(nèi)核驅(qū)動的人大概都見過這么一幕設(shè)備樹里明明只是聲明了一個簡單的寄存器區(qū)域驅(qū)動里卻要ioremap、要算偏移、要加spinlock最后還會因?yàn)椴煌?qū)動改了同一片寄存器的值而互相踩踏。syscon框架就是為了收拾這個爛攤子而生的。它是一個“雜散寄存器區(qū)域的統(tǒng)一管家”在Linux內(nèi)核中占據(jù)著一個很微妙的位置——說它簡單它確實(shí)只是一個regmap的封裝說它重要從時鐘到電源管理再到硬件隨機(jī)數(shù)依賴它的驅(qū)動遍布整個內(nèi)核。這篇就圍繞syscon框架從它解決的問題出發(fā)一直講到設(shè)備樹配置、驅(qū)動調(diào)用、業(yè)務(wù)落地和踩坑經(jīng)歷。無論你是剛?cè)腴T的內(nèi)核新手還是在為某塊板子的寄存器管理發(fā)愁的老手相信都能從中拿到點(diǎn)對自己有用的東西。1. 為什么我們需要syscon框架寄存器管理到底亂在哪1.1 一次真實(shí)的寄存器沖突現(xiàn)場之前做某款多媒體SoC的適配遇到了一個很典型的場景芯片手冊里有一塊叫“SYS_CFG”的區(qū)域地址從某個基址開始總共就256個字節(jié)。里面密密麻麻分布著幾十個寄存器——bit 0控制某個外設(shè)的軟復(fù)位bit 4到bit 6是某個PLL的鎖定狀態(tài)bit 8又是另一個模塊時鐘的開關(guān)。這些寄存器之間沒有任何規(guī)律純粹是芯片設(shè)計(jì)時“順手”放在一起的。問題來了。驅(qū)動A要操作bit 0做軟復(fù)位驅(qū)動B要輪詢bit 4到bit 6判斷PLL狀態(tài)驅(qū)動C需要改bit 8的時鐘開關(guān)。如果三個驅(qū)動都拿到自己設(shè)備樹里配的reg屬性各自ioremap同一個物理地址那么會出現(xiàn)三種尷尬每個驅(qū)動都維護(hù)一份自己的ioremap映射資源浪費(fèi)還在其次關(guān)鍵是cache一致性不好處理尤其在ARM體系下設(shè)備樹里沒有標(biāo)shared-dma-coherent的區(qū)域CPU cache和device view可能不一致。驅(qū)動A讀修改寫時把驅(qū)動B剛寫好的bit覆蓋了。這種問題在調(diào)試時極其隱蔽因?yàn)閺?fù)現(xiàn)它需要精確到微秒級的時序巧合。一旦某個驅(qū)動要probe失敗或卸載它不能隨便iounmap因?yàn)閯e的驅(qū)動還在用同一塊映射。這就是典型的“系統(tǒng)控制器”場景一片寄存器不屬于任何一個獨(dú)立的功能模塊而是整個SoC的“公共設(shè)施”。syscon框架為這類場景提供了一種“共享映射統(tǒng)一訪問”的解法本質(zhì)是用regmap子系統(tǒng)來做一次共享資源管理。1.2 syscon不是一個新功能而是一種約定嚴(yán)格來說syscon并不新增任何硬件能力。它做的事情聽起來簡單但價值極大由內(nèi)核統(tǒng)一維護(hù)對某個寄存器區(qū)域的ioremap多個驅(qū)動共享同一個映射避免各自為政。通過regmap提供統(tǒng)一的讀改寫接口天然處理了cache同步和鎖問題。允許驅(qū)動之間通過regmap的lock機(jī)制避免并發(fā)訪問沖突。在設(shè)備樹層面形成一種節(jié)點(diǎn)約定大家通過syscon的phandle引用同一個控制器。打個比方?jīng)]有syscon的時候幾個驅(qū)動相當(dāng)于各自拿鑰匙開了同一間辦公室文件擺得到處都是還經(jīng)?;ハ嗄缅e。有了syscon辦公室門口多了一個管理員所有人去管理員那里登記、存取文件雖然多了一道手續(xù)但再也不會亂了。2. 設(shè)備樹中的syscon節(jié)點(diǎn)怎么聲明怎么引用2.1 從compatible開始syscon框架在設(shè)備樹中的核心就是一個節(jié)點(diǎn)它的compatible通常有兩種寫法syscon12340000 { compatible syscon, simple-mfd; reg 0x12340000 0x1000; };第一種寫法compatible里帶了simple-mfd意思是這個節(jié)點(diǎn)不僅是syscon還是一個“簡單多功能設(shè)備”——它的子節(jié)點(diǎn)通常對應(yīng)芯片手冊里的各個功能塊由simple-mfd機(jī)制自動展開probe子節(jié)點(diǎn)。第二種寫法更常見system-controller12340000 { compatible syscon; reg 0x12340000 0x1000; };這種節(jié)點(diǎn)的驅(qū)動匹配是在drivers/mfd/syscon.c里完成的。內(nèi)核會為它創(chuàng)建一個regmap并把regmap作為syscon設(shè)備的核心資源保存起來。2.2 引用方式phandle 偏移其他驅(qū)動引用syscon的方式很直接在設(shè)備樹里放一個syscon屬性some-driverabc00000 { compatible vendor,some-block; reg 0xabc00000 0x100; syscon system-controller 0x10; /* 基址偏移0x10 */ };這里system-controller是phandle指向之前定義的syscon節(jié)點(diǎn)后面的0x10表示這個驅(qū)動關(guān)心的寄存器相對于syscon基址的偏移。2.3 內(nèi)核驅(qū)動怎么拿到這個引用設(shè)備驅(qū)動側(cè)通過syscon_regmap_lookup_by_phandle來解析#include linux/mfd/syscon.h #include linux/of.h #include linux/regmap.h struct regmap *regmap; regmap syscon_regmap_lookup_by_phandle(np, syscon); if (IS_ERR(regmap)) { return PTR_ERR(regmap); }拿到regmap之后整個寄存器區(qū)域就可以像一個普通內(nèi)存塊一樣通過regmap_read/regmap_write/regmap_update_bits來訪問了。提醒syscon_regmap_lookup_by_phandle返回的regmap不需要驅(qū)動自己釋放它的生命周期由syscon設(shè)備管理。驅(qū)動remove時不要調(diào)用regmap_exit否則會double free。3. syscon的核心接口不只是regmap3.1 syscon整個家族接口syscon提供的接口并不算多但每個都很有用。我把它們梳理成三類按phandle查找、按節(jié)點(diǎn)查找、直接按地址創(chuàng)建。第一類是按phandle查找驅(qū)動代碼最常用struct regmap *syscon_regmap_lookup_by_phandle(struct device_node *np, const char *property); struct regmap *syscon_regmap_lookup_by_phandle_args(struct device_node *np, const char *property, int arg_count, unsigned int *arg);第二類是按節(jié)點(diǎn)查找struct regmap *syscon_node_to_regmap(struct device_node *np);這個接口適合已經(jīng)有struct device_node但不一定通過phandle屬性引用的場景。第三類是直接創(chuàng)建struct regmap *syscon_regmap_lookup_by_compatible(const char *s compatible);這個接口適合那種驅(qū)動不知道phandle屬性名但知道syscon節(jié)點(diǎn)的compatible字符串的場景。我最初一直想不通這個函數(shù)該怎么用后來在一個平臺驅(qū)動里看到了就是全局只有一個syscon節(jié)點(diǎn)直接按compatible找省得去改設(shè)備樹加phandle屬性。還有syscon_node_to_regmap需要特別說一句它查找的是節(jié)點(diǎn)對應(yīng)的regmap如果節(jié)點(diǎn)本身沒有建立regmap會返回錯誤。但如果節(jié)點(diǎn)加上了syscon的compatible設(shè)備驅(qū)動會為它自動創(chuàng)建regmap。3.2 regmap層的配置syscon本身是建立在一個regmap之上的。drivers/mfd/syscon.c在probe時候會根據(jù)設(shè)備樹信息配置regmapstruct regmap_config config { .reg_bits 32, .val_bits 32, .reg_stride 4, .max_register resource_size(res), };通常它會根據(jù)reg屬性的大小推斷寄存器數(shù)量但對那些“寄存器之間有空洞”的硬件可以額外在設(shè)備樹里加reg-io-width或者自定義regmap配置。我碰到過一個硬件設(shè)計(jì)寄存器偏移不是連續(xù)的中間有大量保留區(qū)域這時就得手動設(shè)置stride或者用regmap_config里更細(xì)的max_register和num_reg_defaults_raw來避免掃描到無效寄存器。4. 動手寫一個依賴syscon的驅(qū)動完整實(shí)例4.1 場景設(shè)定假設(shè)有一個硬件模塊叫“某某系統(tǒng)控制”它需要在設(shè)備初始化時完成以下操作讀取寄存器0x04判斷某個硬件加速器是否已上電。如果沒上電則在寄存器0x00寫入BIT(0)啟動上電序列。輪詢寄存器0x04直到bit3置位表示上電完成。在關(guān)機(jī)前要清除寄存器0x00的bit0并等待bit3清零。這類場景非常典型就是電源管理、外設(shè)復(fù)位和狀態(tài)輪詢的混合操作。4.2 設(shè)備樹exp_syscon: syscon12340000 { compatible syscon; reg 0x12340000 0x1000; }; hw-accelabc00000 { compatible vendor,hw-accel; reg 0xabc00000 0x200; syscon exp_syscon 0x0; };4.3 驅(qū)動代碼骨架#include linux/module.h #include linux/platform_device.h #include linux/of.h #include linux/regmap.h #include linux/mfd/syscon.h #define SYSCON_PWR_CTRL 0x00 #define SYSCON_PWR_STATUS 0x04 #define PWR_ENABLE BIT(0) #define PWR_ACK BIT(3) struct hwaccel_data { struct regmap *regmap; struct device *dev; }; static int hwaccel_power_on(struct hwaccel_data *data) { unsigned int val; int ret; ret regmap_read(data-regmap, SYSCON_PWR_STATUS, val); if (ret 0) return ret; if (val PWR_ACK) return 0; /* 已上電 */ ret regmap_update_bits(data-regmap, SYSCON_PWR_CTRL, PWR_ENABLE, PWR_ENABLE); if (ret 0) return ret; /* 輪詢等待確認(rèn) */ return regmap_read_poll_timeout(data-regmap, SYSCON_PWR_STATUS, val, (val PWR_ACK), 1000, 100000); } static int hwaccel_probe(struct platform_device *pdev) { struct device *dev pdev-dev; struct device_node *np dev-of_node; struct hwaccel_data *data; struct regmap *regmap; data devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; regmap syscon_regmap_lookup_by_phandle(np, syscon); if (IS_ERR(regmap)) { dev_err(dev, failed to get syscon regmap: %ld\n, PTR_ERR(regmap)); return PTR_ERR(regmap); } >regmap_update_bits(regmap, 4, BIT(0), BIT(0));是在修改物理寄存器0x12340010。但這里有一個反直覺的點(diǎn)硬件工程師在芯片手冊里通常寫的是“寄存器0x04”意思是基址加0x04字節(jié)處的寄存器。那么對應(yīng)regmap寄存器編號就是0x04 / 4 1。我調(diào)試某IP核的時候手冊寫的寄存器偏移是0x1C結(jié)果我在regmap里直接用regmap_read(regmap, 0x1C, val)讀出來的數(shù)據(jù)永遠(yuǎn)跟預(yù)期不符最后對著代碼和手冊查了好久才發(fā)現(xiàn)偏移應(yīng)該除以4。這個坑真的很經(jīng)典。要么在代碼里保持“寄存器編號byte offset/stride”要么在驅(qū)動里顯式定義一個宏比如#define REG_OFFSET_TO_INDEX(off) ((off) / 4)把換算關(guān)系寫清楚避免事后調(diào)試時混淆。5.3 regmap的默認(rèn)配置syscon為節(jié)點(diǎn)創(chuàng)建regmap時有幾個關(guān)鍵配置項(xiàng)需要注意。reg_bits和val_bits通常都是32但有些老平臺是16位總線就要在設(shè)備樹里表示清楚或者通過驅(qū)動側(cè)的regmap_config顯式指定。max_register最好根據(jù)reg屬性的大小設(shè)定否則如果硬件只實(shí)現(xiàn)了低地址段寄存器高地址段的讀操作可能返回cease錯誤甚至觸發(fā)總線錯誤。我遇到過一個極小概率但很麻煩的問題某個syscon節(jié)點(diǎn)的物理區(qū)域只有0x400個字節(jié)但有一個驅(qū)動在寫regmap_config.max_register時漏配導(dǎo)致內(nèi)核讓后續(xù)驅(qū)動訪問到0x1000偏移處的非法地址直接Serror panic。所以使用syscon時最好在驅(qū)動里檢查一下regmap能訪問的寄存器邊界unsigned int max_reg; int ret; ret regmap_get_max_register(regmap, max_reg); if (ret 0) return ret; if (offset max_reg) { dev_err(dev, register offset out of range: 0x%x 0x%x\n, offset, max_reg); return -EINVAL; }6. syscon與老式regmap私有管理的對比到底贏在哪6.1 一個驅(qū)動私自ioremap的問題在syscon流行之前很多驅(qū)動是這么寫的static void __iomem *base; static int foo_probe(struct platform_device *pdev) { struct resource *res; res platform_get_resource(pdev, IORESOURCE_MEM, 0); base devm_ioremap_resource(pdev-dev, res); if (IS_ERR(base)) return PTR_ERR(base); ... }然后其他驅(qū)動如果想訪問同一片區(qū)域可能要通過platform_device的私有數(shù)據(jù)或全局變量把這個base傳出去。這種方案在單驅(qū)動時很高效但對于共享寄存器區(qū)域就有致命缺陷io的訪問完全依賴誰先映射了這片內(nèi)存一旦驅(qū)動加載順序變化另一個驅(qū)動就拿不到地址。syscon的做法是把“誰持有regmap”這個信息交給內(nèi)核統(tǒng)一管理誰想用誰來查而不是誰加載早誰說了算。6.2 cache問題和自旋鎖regmap內(nèi)部對cache的處理也很講究。在大多數(shù)SoC默認(rèn)配置下內(nèi)存domain寄存器訪問需要保證cache一致性而regmap在regmap_update_bits流程里會同時考慮fast_io和cache_only等模式。雖然實(shí)際中syscon是MMIO通常不會開普通cache但regmap仍會對每次讀寫做好屏障和同步處理。相比之下如果驅(qū)動直接操作__iomem指針還要手動處理wmb()/rmb()這種內(nèi)存屏障。syscon的regmap統(tǒng)一封裝了這些細(xì)節(jié)驅(qū)動代碼可以干凈很多。6.3 模塊化和可測試性使用syscon的另一個好處是驅(qū)動代碼可以拆得更干凈底層寄存器訪問邏輯可以單獨(dú)做一個backend模塊方便在host環(huán)境做單元測試。我有個團(tuán)隊(duì)在做某電源管理子系統(tǒng)時因?yàn)殡娫葱酒募拇嫫骺刂七壿嫼蚐oC本身是解耦的就把寄存器訪問全部抽象成regmap接口然后在PC主機(jī)上用一個虛擬的regmap總線驅(qū)動來模擬硬件時序。這樣整個電源狀態(tài)機(jī)的邏輯可以在沒有硬件的情況下跑通省了大量上板時間。這完全仰仗于syscon把寄存器訪問和業(yè)務(wù)邏輯徹底解耦。7. syscon和mfd的異與同什么時候該用誰7.1 兩者解決的問題有重疊mfd是多功能設(shè)備框架通常對應(yīng)一個硬件芯片它里面有多個功能單元比如一個音頻codec里既有ADC又有DAC還有數(shù)字接口。mfd設(shè)備會創(chuàng)建多個子設(shè)備每個子設(shè)備又有一個獨(dú)立驅(qū)動。syscon看起來也可以創(chuàng)建一個多子節(jié)點(diǎn)的設(shè)備因?yàn)閟imple-mfd就是和syscon配合的。但兩者的側(cè)重點(diǎn)不同mfd側(cè)重“功能架構(gòu)”syscon側(cè)重“寄存器共享方式”。mfd是把一個物理設(shè)備拆成多個邏輯設(shè)備syscon是把一個寄存器區(qū)域共享給多個獨(dú)立設(shè)備。7.2 實(shí)際選型建議如果硬件手冊明確把某個區(qū)域定義成一個獨(dú)立的IP該IP下掛多個功能子模塊使用mfd更合理。如果多個IP之間共享一片寄存器但沒有從屬關(guān)系用syscon更合理。如果一個IP里既有多種功能又想讓外部驅(qū)動訪問該IP的某些寄存器可以考慮mfd包裝IP、內(nèi)部用syscon暴露寄存器區(qū)域兩者結(jié)合使用。我實(shí)際參與的一個項(xiàng)目就做過這種組合主控芯片里有一個混合信號處理單元它內(nèi)部有完整的mfd架構(gòu)管理ADC和比較器等子設(shè)備同時這個處理單元的寄存器區(qū)域又被另一個獨(dú)立的安全模塊引用這時在主設(shè)備里注冊一個syscon節(jié)點(diǎn)讓外部驅(qū)動通過syscon_node_to_regmap訪問就解決了跨驅(qū)動共享問題。8. 調(diào)試syscon的實(shí)用工具與心得8.1 debugfs里的regmap接口這是我最依賴的工具。內(nèi)核配置打開CONFIG_DEBUG_FS并掛載debugfs后在/sys/kernel/debug/regmap/目錄下能看到所有已注冊的regmap。每個regmap會生成幾個文件registers讀取當(dāng)前寄存器快照。access內(nèi)核會把讀寫權(quán)限信息輸出。nameregmap的名字通常和設(shè)備節(jié)點(diǎn)名對應(yīng)。如果你想快速確認(rèn)某個驅(qū)動對syscon寄存器的寫操作是否生效直接讀registers文件就能比對。但要注意debugfs里的信息只是當(dāng)前緩存狀態(tài)不代表真實(shí)硬件值如果regmap配置了cache并且發(fā)生了cache miss可能讀出來的不是最新硬件值。不過對于MMIO型的syscon一般不會開cache寫。8.2 使用tracepoint跟蹤訪問CONFIG_REGMAP_MMIO打開后內(nèi)核的tracepoint能捕捉到每次寄存器讀寫的地址和數(shù)據(jù)。調(diào)試時可以用echo 1 /sys/kernel/debug/tracing/events/regmap/regmap_reg_read/enable echo 1 /sys/kernel/debug/tracing/events/regmap/regmap_reg_write/enable cat /sys/kernel/debug/tracing/trace這樣可以清楚看到哪個驅(qū)動在什么時間讀了哪個寄存器。在排查多驅(qū)動互相踩踏的疑難雜癥時這一步的追蹤信息比邏輯分析儀還直觀。8.3 常見問題速查表問題現(xiàn)象可能原因排查方法probe返回-EPROBE_DEFERsyscon設(shè)備還沒注冊檢查設(shè)備樹syscon節(jié)點(diǎn)compatible是否匹配查看dmesg的deferred probe信息regmap_read_all返回-EIO訪問越過了regmap的max_register檢查regmap_config里max_register是否配到正確值寄存器值始終不對偏移沒有除以stride對照硬件手冊讀到的值和預(yù)期之間是否呈倍數(shù)關(guān)系兩個驅(qū)動互相覆蓋寄存器位缺少regmap鎖或者同時更新了同一寄存器確認(rèn)它們是否通過同一個regmap實(shí)例訪問檢查tracepoint確認(rèn)訪問序列syscon設(shè)備注冊失敗regmap_config里可能有無效配置內(nèi)核日志會打印syscon: invalid regmap之類信息檢查reg屬性長度8.4 一個需要特別警惕的板級問題某個平臺在低功耗休眠前要利用syscon的寄存器把整個系統(tǒng)控制單元配置到睡眠狀態(tài)。結(jié)果發(fā)現(xiàn)休眠喚醒后某些寄存器變成了隨機(jī)值。后來排查發(fā)現(xiàn)問題不在驅(qū)動而是板級設(shè)計(jì)里這片syscon區(qū)域沒有接入正確的電源域休眠時域掉電導(dǎo)致寄存器內(nèi)容丟失。驅(qū)動代碼再怎么訪問都是對的但硬件寄存器本身就沒了。這就是單片系統(tǒng)里提syscon特別容易忽視的問題syscon解決了軟件訪問問題但沒解決硬件供電問題。所以設(shè)計(jì)時要檢查這塊區(qū)域在低功耗狀態(tài)下的保持能力別把人家“系統(tǒng)控制器”當(dāng)普通內(nèi)存區(qū)域處理。9. 給驅(qū)動接入syscon時容易踩的坑與細(xì)節(jié)梳理9.1 phandle args和offset部分硬件在設(shè)計(jì)時同一片syscon區(qū)域里不同驅(qū)動關(guān)心的偏移差異很大最好的做法是讓設(shè)備樹把偏移直接傳給驅(qū)動而不是在設(shè)備樹里寫硬件寄存器絕對地址。比如power-ctrl10000000 { compatible vendor,power-ctrl; syscon exp_syscon 0x20; };驅(qū)動側(cè)用syscon_regmap_lookup_by_phandle_args來獲取struct regmap *regmap; unsigned int offset; int ret; ret syscon_regmap_lookup_by_phandle_args(np, syscon, 1, offset); if (IS_ERR(regmap)) return PTR_ERR(regmap);這樣設(shè)備樹已經(jīng)告訴了這個驅(qū)動它關(guān)心的偏移在哪驅(qū)動不需要重復(fù)定義偏移宏。與syscon_regmap_lookup_by_phandle相比這種模式更適合一個驅(qū)動內(nèi)部有多組不同寄存器的場景。9.2 不要自己持有全局regmap指針有些驅(qū)動圖省事把某個syscon的regmap指針存在全局變量里。一旦驅(qū)動被卸載重裝這個全局值就指向已釋放的內(nèi)存另一個驅(qū)動再查就只能crash。正確做法是每次需要時都通過syscon_node_to_regmap或syscon_regmap_lookup_by_phandle查詢。這可能會增加一點(diǎn)指針查找開銷但對于probe階段的調(diào)用完全可接受。如果運(yùn)行時會非常頻繁地使用可以在驅(qū)動的私有數(shù)據(jù)結(jié)構(gòu)里保存這個regmap指針而不是放進(jìn)全局。9.3 regmap的volatile范圍syscon區(qū)域里的寄存器很多是硬件狀態(tài)寄存器每次讀都會改變值。如果在regmap里配置了cache并標(biāo)記這些寄存器為non-volatile緩存會覆蓋真實(shí)狀態(tài)導(dǎo)致驅(qū)動讀到錯誤值。這也是一個很容易被忽視的點(diǎn)。特別是某平臺把syscon節(jié)點(diǎn)里的一部分寄存器當(dāng)作普通寄存器來緩存而實(shí)際它們是一讀就自清零的latched寄存器。遇到這種問題可以在regmap_config里加volatile_table來指定哪些寄存器不能被緩存。10. 使用syscon的一些進(jìn)階玩法10.1 通過syscon_reboot實(shí)現(xiàn)重啟syscon不僅能在驅(qū)動里用內(nèi)核里還有基于它實(shí)現(xiàn)的雜項(xiàng)功能。比如drivers/power/reset/syscon-reboot.c通過設(shè)備樹配置一個復(fù)位寄存器用一個節(jié)點(diǎn)配置reboot-mode { compatible syscon-reboot; offset 0x0; mask 0x08; value 0x08; };這種配置可以讓整個系統(tǒng)掛到syscon的復(fù)位寄存器上不需要為重啟專門實(shí)現(xiàn)一個平臺驅(qū)動。同樣還有syscon-poweroff。10.2 配合syscon_restart_handle或regmap的寫保護(hù)部分SoC的寄存器區(qū)域有寫保護(hù)位比如要先往某個保護(hù)寄存器寫固定值才能真正改動目標(biāo)寄存器。這種邏輯同樣可以封裝在sycon驅(qū)動里通過regmap的write回調(diào)或者reg_update_bits的往返控制在底層實(shí)現(xiàn)業(yè)務(wù)驅(qū)動無感。10.3 把syscon作為regmap cache watch點(diǎn)我們曾經(jīng)借助syscon的regmap訪問記錄來追蹤一個可疑的驅(qū)動為什么在系統(tǒng)休眠時會周期性地讀某個寄存器。通過tracepoint和debugfs的訪問統(tǒng)計(jì)找到了特定的外部訪問模式最終問題定位到bios里某種GPIO中斷誤觸發(fā)導(dǎo)致讀取行為被反復(fù)調(diào)度。syscon提供了一個統(tǒng)一觀察窗口對這種疑難雜癥的排查幫助巨大。11. 在現(xiàn)有平臺里添加syscon支持具體步驟如果要在自己的平臺里引入syscon通常就以下幾個步驟。設(shè)備樹增加syscon節(jié)點(diǎn)并確認(rèn)reg屬性和硬件手冊一致。在需要使用syscon的驅(qū)動頭文件里加入#include linux/mfd/syscon.h。驅(qū)動中通過syscon_regmap_lookup_by_phandle或syscon_node_to_regmap獲取regmap。正確換算偏移使用regmap_read/write/update_bits訪問。驗(yàn)證時用debugfs的regmap接口和tracepoint。注意probe的順序通常syscon設(shè)備會被優(yōu)先初始化。如果存在依賴順序最好讓看起來需要syscon的驅(qū)動檢查-EPROBE_DEFER并重試。這個順序看起來很簡單但實(shí)際項(xiàng)目里我見過很多次“設(shè)備樹里syscon節(jié)點(diǎn)忘了加”或者“加了節(jié)點(diǎn)但忘記把compatible設(shè)成syscon”的低級失誤。一旦syscon節(jié)點(diǎn)沒建立regmap后面所有引用的驅(qū)動全部掛在-EPROBE_DEFER上日志里一片deferred probe warning。12. 從syscon框架到“好架構(gòu)需要好抽象”12.1 一個協(xié)議和實(shí)現(xiàn)的統(tǒng)一syscon框架給我的啟發(fā)是在嵌入式/內(nèi)核開發(fā)中很多看起來“沒什么技術(shù)含量”的基礎(chǔ)組件恰恰決定了整個系統(tǒng)的穩(wěn)定性和開發(fā)效率。寄存器的訪問本身是一件小事但凡是系統(tǒng)級的共享資源它的訪問方案必須在初始設(shè)計(jì)時就統(tǒng)一。等到硬件跑起來再補(bǔ)救日志里出現(xiàn)兩三個驅(qū)動互相覆蓋bit的問題時你才會明白早用syscon的價值。12.2 面向?qū)嵺`的編程范式syscon的做法其實(shí)是一種很通用的編程范式把資質(zhì)相同的資源抽取出來做統(tǒng)一的訪問控制讓業(yè)務(wù)模塊只依賴一個抽象接口不用關(guān)注實(shí)現(xiàn)細(xì)節(jié)。這和用戶態(tài)編程里的依賴注入、服務(wù)定位有異曲同工之妙只是它發(fā)生在內(nèi)核態(tài)以設(shè)備模型和regmap為載體。每次在系統(tǒng)里碰到多個模塊搶同一個寄存器區(qū)域我的第一反應(yīng)不是去加鎖而是先想這片區(qū)域適不適合用syscon統(tǒng)一管理。只有當(dāng)需求確實(shí)非常專一時才考慮在一個驅(qū)動里直接ioremap。這個權(quán)衡標(biāo)準(zhǔn)我希望能給初入內(nèi)核的朋友一些啟發(fā)。12.3 一點(diǎn)個人心得在做過的多個項(xiàng)目里syscon幾乎成了我處理寄存器共享問題時默認(rèn)的“第一選擇”。不只是因?yàn)樗峁┝薃PI更因?yàn)樗谡麄€內(nèi)核生態(tài)里已經(jīng)形成了成熟的規(guī)范和調(diào)試工具鏈。用熟了之后你會發(fā)現(xiàn)在設(shè)備樹審查階段就能很自然地識別出哪些節(jié)點(diǎn)應(yīng)該聲明為syscon哪些驅(qū)動應(yīng)該在設(shè)備樹里引用syscon屬性。說到底內(nèi)核框架的價值不在于它多么炫技而在于它能夠讓一批驅(qū)動協(xié)同工作時不打架。syscon在這方面的設(shè)計(jì)雖然樸素但極其有效。希望這篇文章能幫你在自己的項(xiàng)目中少走一段彎路把寄存器管理變成一件“不用太操心”的事。如果在調(diào)試中遇到什么特別反直覺的問題不妨也記錄下來。內(nèi)核開發(fā)就是這樣很多知識都是在踩坑和復(fù)盤之間積淀出來的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
秋霞日本免费毛片A片| 成人在线网站| 亚洲综合无码| 色五月aV| 亚洲综合五月天婷婷丁香| 五月婷婷五月丁香| 五月丁香亚洲综合网| 日韩色色一区| 99热 日韩| 婷婷色网站| 狠狠干五月丁香| 成片免费观看大全| 五月丁香婷婷伊人| 五月天色图| 久久思思热视频| 久操人妻| 亚洲超级碰| 少妇人妻丰满做爰XXX| 五月丁香色婷婷色| 亚洲天码视频www蛋播视频| 六月婷婷激情图片| 色婷婷先锋| av在线资源| 国产激情综合五月久久| 天天影视色综合网| 五月丁香激情综合六月涩涩爱| caop在线| 任你日视频| 五月色 亚洲| 9久久AV| 69精品人人人人| 激情五月天婷婷五月天| 99成人免费热视频| 婷婷丁香色五月久久88| 五五月五月| 夜夜资源站| 99五丁香月| 日韩999| 五月丁香激情综合久久| 国产在线另类五月婷婷| 午夜精品777| 欧美日韩国产日本精品四虎网网站物 | 亚洲国产网站| 99五丁香月| 丁香五月婷婷基地| 成人做爰A片免费看网站找不到了| 99免费在线视频| 亚洲欧美国产高清vA在线播放| 日韩久久色| 91热久| 狠狠色噜噜狠| 思思久久久婷婷| 日本色五月| 超碰97免费在线| 日韩人妻操逼视频| 精品无吗va视频免费观看| 日韩按摩二区| 婷婷丁香五月综合网上| 桃色激情网| 精品久久久人妻| 欧美色五月天| 色五月婷婷在线| 天天久| 色婷婷久久综合中文久久一本| 婷婷伊人久久综合| 熟女激情五月天| 日本少妇AA一级特黄大片| 亚洲精品又粗又大又爽A片| 丁香五月婷婷影院| 99这里有精品视频| 丁香五月色激情| 97日本在线播放| 日韩av一区二区在线/日产精品久久久| 久久激情综合| 婷婷五月天小说网| 亚洲国产精品二二三三区| 亚洲av骚货| 五月激情六月丁香| 五月丁香六月情| 丁香色婷婷| 五月天婷婷在线观看| 9999久久久久| av网址在线播放| 610018岁成人视频| 色色97丁香婷婷五月天| 99色综合网| 人妻AV在线| 久久精品五月| 色色婷婷五月| 亚洲色婷婷网站| 五月丁香黄色| 婷婷伊人久久| 中文字幕无码人妻少妇免费视频| 婷婷视频在线碰| 少妇人妻丰满做爰XXX| 中文中文在线| 丁香婷婷五月综合影院| 亚洲综合色网站| 女人被躁到高潮嗷嗷叫小| 思思热99er| 亚洲精品网址| 亚洲综合新99视频| 婷婷六月综合激情| 风流少妇A片一区二区蜜桃| 色噜噜狠狠色综合日日| 免费视频WWW在线观看网站| 性欧美大战久久久久久久83| 久久久久亚洲AV无码网影音先锋| 亚洲 小说 欧美 激情 另类| 天天爽天天干| 国产精品久久久久9999小说| 99福利导航| site:minyis.com| 人人摸人人干人人做| 五夜丁香| 一本色道久久综合狠狠躁一二三 | 婷婷五月天成人网| 99riAV成人在线视频| 欧美日韩国产一区二区| 99re热久久| 五月天激情综合| 狠狠色婷婷7777久| 激情久久久久久久久久久| 婷婷AV丁香| 激情婷婷色五月| 99操99| 精品婷婷| 丁香五月婷婷黑人妻黄色电影院| 丁香五月成人社区| 狠狠爱青青草| 婷婷激情四射| 亚洲综合碰| 金桔一区二区ab地址| 亚州精品久久久久AV无码| 综合五月丁香六月婷婷| 国产古装妇女野外A片| 成人在线高清| 激情婷婷亚洲五月| 热99这就是精品视频| 国产人妻人伦精品一区二区| 香蕉综合在线| 激情第四色| 亚洲精品V天堂中文字幕| 哇嘎成人久久| 五月丁香欧美综合| 婷婷99视频在线| 久热大香蕉| 婷婷成年人免费视频| 亚洲亚洲人成综合网络| 五月天天天操天天爽夜夜操| 91人操| 任你干aa| 欧洲亚洲激情五月天在线| 91婷婷丁香| 婷婷干六月综合旧址| 激情五月色婷婷| 五月成人网天天| 婷婷五月天伊人网| 性色av大香综合| 一本综合丁香日日狠狠色| 99激情视频| 亚洲热久| 天天操天天插| 婷婷另类小说| 超碰色天堂| 99久久婷婷国产综合| 99视频在线观看网址| 色色色五月天婷婷| 六月婷婷网站| 婷婷丁香五月在线观看91| 久久这有这里精品| 日本狠狠干| 丁香五月天天| 成人午夜视频精品一区| 白天AV月月| 五月婷婷色五月| 99久久精品色老| 丁香五月天色婷婷| 六月婷婷啪啪| 久久精品性爱| 丁香婷婷综合喷| 狠狠色丁香婷婷综合久久97AV| 国产日比| 天天艹夜夜爽| 欧在线一区| 天天爽夜夜爽天天爽夜夜爽| 淫荡A片| 99re这里| 香蕉久久六月| 五月丁香影院| 五月噜噜| 五月婷婷国产| 国产67194| 激情色色| 成 人片 黄 色 大 片| 激情啪啪五月天| 亚洲色久| 婷婷五月天堂一本在线| 五月婷婷深深爱| 婷婷色九月| 海外网站专业操老外| 丁香五月婷婷视频| 丁香五月自拍| 国产精品18久久久| 97色色视频| 91久久综合亚洲噜噜成人在线 | 婷婷五月欧美综合| 色五月欧美| 夜夜躁婷婷AV| 精品影院| 丁香五月偷拍| 99热精品少| 亚洲12p| 婷婷色色婷婷| 九九99免费视频| 99在线精品观看99| 五月丁香啪啪啪啪| www.色婷婷.com| 五月丁香影视| 丁香五月天AV| 五月色亭丁香| 97碰成超视频免费视频| 精品久热| 五月婷婷丁香在线视频| av激情在线| 天天操婷婷| 五月天婷婷三级黄| 超碰激情五月| 五月婷婷六月丁香| 狠狠狠狠狠干| 色情五月丁香婷婷网| 五月婷婷久久网| 综激情网| 天天综合色综合| 人人爽网| 久久性操| 六月香五月婷| 久久精品63| 久久小说| 97人人干| 99久视频| 成人狠狠成人狠狠成人狠狠成人狠狠| 9久视频| 日韩1区2区| 内射丰满人妻| www,超碰| 天天干天天日蜜臀av| 五月天婷婷操逼视频| 色五月在线| 五月天婷婷色情| 成AV人片一区二区三区久久| 色婷婷a v| 开心五月丁香综合久久| www久| 午夜少妇在线观看视频| 亚洲天堂爱爱| 亚洲va欧洲va国产va不卡| 9色在线视频| 天天搡日日搡aaaaⅩ| 亚洲色情一区二区三区四区| 国产亚洲99| 超碰色天堂| 亚洲精品久久久无码| 日韩av网址大全| 99在线精品观看99| 自拍偷窥99热| 精品久久久人妻| 九九免费视频在线| 狠狠爱夜夜| 在线成人网站| 久久九色| 综合深爱五月| 高清无码 一区 二区 三区| 九色PORNY在线精品酒店| 亚洲妇女熟BBW| 久久人妻视步| 狠狠五月天激情| 亚洲sesesese| 啪啪啪大香蕉| 免费成人网在线观看| 香蕉97碰碰碰欧美| 色色色网站| www.色婷婷| 天天天天天天天操| 九九人妻福利| 色婷婷中文字母五月丁香| 婷色综合| 老美AA片| 亚洲三A| 国产性爱亚洲是图| 九九视频在线观看| 婷婷五月色天| 91色久| 色综合区| 色色色999| AV在线大香蕉| 操碰97| 日本啪啪天堂| 激情五月丁香六月综合AVXXXX| 丁香五月六月婷婷怡红院| 俺去也在线官网| 涩涩涩婷婷| 婷婷五月丁香五月丁香| 激情综合婷婷五月| 婷婷在线操| 天天噜天天爱| 丁香五月婷婷欧美成人色图| www·五月天| 婷婷九月激情网| 久久99热这里只有| 婷婷五月中文在线| 日韩AAA| eeuus五月婷| 日韩五月婷婷| 婷婷激情五月综合丁| 五月天色婷婷视频| 色噜噜狠狠色综合日日| 色婷网| 97精品欧美91久久久久久久| 天天色综合天天| 五月天无码| 91vip在线观看| 五月婷成人| 久久婷婷成人视频| 五月丁综合在线观看| 五月天激情Av| 日韩乱玛久久| 可以看的av| 久久婷五月综合| 天天摸天天肏| 这里只有精品视频| 五月天婷婷涩涩| 猫咪伊人AV| 久热伊人在91| 综合亚洲六月婷婷在线| 婷婷五月色亚洲| 五月天综合在线观看视频| 久热69| 日本色婷婷| 少妇性按摩无码中文A片| 婷婷综合中文字幕| 99热插| 在线播放中文字幕| 日本婷婷丁香五月| 5月丁香六月婷婷| 一本色道久久综合狠狠躁小说| 丁香五月网址| 狠狠精品干练久久久无码中文字幕| 九九色人| 日本一级淫| 2013AV天堂| 五月丁香激情怕怕| 激情www.98com| 久色婷婷200| 激情久久久| 九九热免费视频| 伊人大综合| 99热九九在线| 婷婷激情五月天7| 天堂婷婷五月在线| 色播播五月天| 婷婷在线精品| 天堂综合久久| 精品色色网| 婷婷婷久久久| 久久9情免费| 久操福利| 激情综合网五月天| 色色欧美。| h亚洲| 激情综合网五月在线播放| 2025天天爽天天摸| 色色色色色综合| 婷婷97C| 色婷婷综合网| 涩涩五月天| 欧美成人AAA片一区国产精品| 日本三级第一页| 亚洲中文字幕AV| 激情综合网激情五月网| 99久热| AV人人操| 久久久婷丁香五月天激情综合| 天天草婷婷五月| 婷婷射综合| 色综合色综合网| 在线99精品| 丁香六月婷婷高清| AV在线中文| 无语停婷丁香网| 综合欧美五月婷婷| 亚洲天堂热| 九 九九九AV| 婷婷五月天另类视频| 色噜噜五月天| 五月丁香久久色| 五月天中文网| av色色国产| 26uuu亚洲精品国产| 色色色色网站| 任你日热视频| 色婷婷五月天视频网站| 五月天小说激情| 五月激激网w'w'w| 五月婷婷AV| 综合超碰熟| 99热这里只有精品 搜| 91chinese在线| 天天摸天天肏| 99热国产| 在线中文字幕视频| 99色色网| 大香蕉久久伊人婷婷五月丁香| 丁香久久五月天视频在线观看| www.天天干| 色综合香蕉| 五月婷婷无码专区| 超碰狠狠操| 色色五月天网站| 日本天堂爱爱| 伊人网碰碰| 五月天丁香| 亚洲色基地| 激情五月,婷婷五月,丁香五月| 丁香五月婷婷av影院| 婷婷成人丁香色情基地30 | AV色色天堂中文| 九九色99| 久久这里都是精品| 99热这里只有精品国产免费| 九月色婷婷| 99精品视频在线6| 丁香五月影院| 婷婷伊在线| 色色五月婷婷| 欧美综合激情五月| 成人亚洲精品久久久久| 亚洲丁香五月在线观看| 国产老熟妇亲子乱对白| 可以看的av网站| 人人爽人人射-美女久久久久久久久久-成人AV| 丁香六月激情综合| 欧美色骚婷婷五月天| 天堂在线观看视频| 五月婷婷丁香俺日污视频| 国产日韩精品SUV| 五月停性愛| 天天操夜夜爽天天操| 天天天天天天操| 日本在线视频www色| 婷婷五月在线视频| 五月天婷婷丁香视频| 色五月色综合| 五月天婷婷激情| 秋霞AV美国| 五月丁香激情婷婷| 77799热| 国产午夜伦鲁鲁| 看久久性爱视频| 婷婷射综合| 日本色婷婷| 69激情小说| 丁香五月婷婷欧美成人色图| 九九Av| 日韩AAA| 综久久久| 色婷婷视频在线| 五月天婷婷网站| 婷婷94s| 91久久久久久久久18| 99色色网站| 91丁香婷婷综合久久欧美| 婷婷五月天综合网| 久久er九九| 九九久久免费视频44| 国产67194| 婷婷五月天影视| 91pornav在线| 三十熟女| 人妻av在线| 婷婷丁香激情五月| 久久免费操| 99网| 俺去也五月| 日日操,夜夜爽| 五月婷婷影| 无码AV免费精品一区二区三区 | 国产资源91在线| 人人妻人人澡| 九月婷婷人人操人人舔人人爱| 五月丁香好婷婷A片网| 激情久久天天| 色婷婷综合网| 亚州色综合| 99re在线观看| 97碰碰在线观看视频| 激情综合网,五月| 久久婷婷五月综合啪| 99色在线| 嫩草视频在线观看| 亚洲秘 无码一区二区三区妃光/1| 色欲操| 吊色AV男人的天堂| 亚洲综合色婷婷文学| www.久久爱| 九九99久久| 天天干天天日日| 五月天久久综合| 黄色av网站在线免费播放| 最新va在线播放| 99er久久| 青青草婷婷综合五月| 婷婷六月色开| 丁香五月天.com| 丁香五月色色婷| 国产精品久久久久久久久久| 天天爱天天操| 日本久久天堂| 六月婷婷在线| 天堂草在线看www| 国产欧美日韩一区二区三区| 国产精品久久99| 91肏| 国产ava| 五月天停婷基地| 丁香五月婷婷香| 欧美性生交A片免费看| 99自拍视频| 国产成人网| 婷婷内射视频在线| 91色在线 | 日韩| 天天爽日日爽夜夜爽| 99九九视屏| 日本色婷婷久久99精品91| 婷婷大香蕉| 九九这里是免费的视频5| 久久伊人9| 密乳Va| 婷婷五月丁香综合桃花色网| 欧美日韩精品一区二区三区钱| 亚洲免费综合一区| 另类图片五月天激情| 亚洲激情四射色| 超碰v| 精品无码久久久久久久久| 中文字幕按摩做爰| 色99综合色88| 人操91在线| 91久久久久| 国产在线自| 91大屁股精品| 色五月色五天色情网| 中文无码婷婷| 停停色综合伊人| 日日天天操| 我爱婷婷五月天综合88| 天天爽天天干天天| 91人碰| 久久婷网| 天天爽夜爽| 婷婷五月天激情四射| 午夜成人AV在线| 99九九精品| 婷婷色综合| 亚洲日韩乱码一区二区三区四区 | 五月婷婷人妻| 九九99久久| 色五月琪琪| 色吧综合网| 五月丁香久久| 色五月,com| 成人色图情色成人网 www.5b5b5bcom 五月天 | 五月丁香888| 丁乡久久| 丁香六月色婷婷欧美| 久久er+| 五月婷婷六月丁香在线视频| 天天综合久久| 九九精品热| 精品一二三区久久AAA片| 99无码视频| 亚洲第一成人AV| 日韩淑女人妻luan伦激情精品一区二| 欧美久久婷婷| 日逼免费视频| 99精品自拍| 久草热8精品视频在线观看| 五月天丁香久久综合 | 俺去也在线www色官网| 色五月天成人| 婷婷丁香六月| 丁香色影院| 欧美A级网站| 丁香五月婷婷成人网| 婷婷五月天亚洲五码| 日本欧美成人片AAAA| 狠狠爱青青草| 人人干99| 日日操,夜夜爽| 在线天堂9| 欧美私人家庭影院| 棕合影院色色| 天天热夜夜操| 色综合99| 99日在线观看视频| 丁香五月成人论坛| 亚洲成人高清在线| 丁香五月亚洲综合丝袜| 婷婷丁香五月天综合AV| 激情综合丁香五月| 丰满女老板BD高清A片| 成人AV网站在线| 亚洲色爽| 色情五月综合婷婷| 丁香五月婷婷www..com| 丁香香五月激情免费视频| 天天操综合网| 五月婷婷影视| 久热这里只有精品3| 五月婷婷激情综合网 | 国产看真人毛片爱做A片| 色色色婷婷五月| 开心综合激情综合| 欧美日本黄色| 婷婷综合国产| 五月天婷婷六月| 色停停香蕉视频| 七七久久婷婷| 亚洲AV无码久久精品色欲| 色色激情网| 91久久九九| 艹| 五月天伊人| 影音先锋噜一噜| 九九久久网| 夜夜嗨一区二区三区直播内容| 亭亭五月丁香综合欧美| 欧美99视频| 亚洲无码猫咪| 99色一| 国产精品久久久久久久久久久久| 97久久草草超级碰碰碰| 九九成人| 婷婷丁香亚洲色综合91| 欧州色色| 天天日P天天射P| 五月丁香六月婷婷亚洲激情综合| 色色a| 爆乳熟妇一区二区三区爆乳照片| 五月婷婷在线视频观看| 亚洲精品白浆高清久久久久久| 亚洲av骚货| 成人免费高清在线播放| 99热国产这里只有精品| 激情婷婷护士激情| A网在线欧洲| 夜夜嗨一区二区三区直播内容 | 香蕉97碰碰碰超视精品| anquye五月| 天天爱天天爽| 女人露出p毛视频www网站| 婷婷色丁香五月| 婷婷婷久久久| 婷婷噜噜| 97人人看一| 激情婷婷六月天| 激情婷婷22月间| 婷婷综合五月激情| 中国女人内射6XXXXX| 99精品视频在线| 免费看欧美成人A片无码| 热久久思思热思思| 色五月婷婷成人| 婷婷爱婷婷| 亚洲天天| 4438国产免费看| 久99久视频| 婷婷色在线| 99热| 5月丁香六月婷婷| 91丨九色丨国产| 蜜乳中文字| 97超碰婷婷五月天| 五月婷婷六月丁香在线| 99超级碰碰| 婷婷成人五月天| 日本色色色| 日日操日日撸| 丁香五月激情站| 亞洲自怕| 亚洲综合网 665566| 91九色首页| 婷婷亚洲天堂| 高清无码视频网址| 亚洲无码另类| 丁香五月天社区| 国精产品久久| 天天干,天天操,天天射| 4399成人黄A片| 亚洲色五月天在线| 99热观看| 丁香五月天堂网| 先锋av性爱成人电影| 激情骚五月| 久婷婷| 美女婷婷六月色| 在线不卡AC| 婷婷色片| 97婷婷狠狠| 久热9| 色五开心五月五月深深爱| 玖玖精品婷婷| 99国产精品久久久久久久久久久| 色深爱五月| 级情九色| 91人妻人人操| 九九碰九九爱97超| 五月开心婷婷| 色婷婷免费视频| 搡BBBB搡BBB搡18| 丁香五月天激情视频| 中文字幕成人| 国产精品男人AV不卡| 久久婷婷六月综合| 五月婷婷六月激情在线| av最新在线| 婷婷天堂站| 99视频在线观看网址| 丁香五月天色| 婷婷中文字幕网| 亚洲乱码日产精品BD| 综合网五月| 欧美日韓成人亚洲精品另类| 午夜成人av在线| 91丨九色丨东北熟女| 99爱视频免费看| 97综合在线| 婷婷丁香综合在线| 无码人妻少妇色欲AV一区二区| 天天久| 综合色色婷婷| 婷色人人狠| 九色在线观看91av| www婷婷色| 久久只有18视频| 亚州色色色| 丁香六月天婷婷色| 日韩啪啪视频| 狠狠色丁香久久婷婷综合五月| 成人免费120分钟啪啪| 91婷婷搞| 色爱亚洲| 99福利视频| 激情五月天综合图片小说网站 | 六月丁香五月天| 深夜婷婷五月丁香| 日韩啪啪网| 538任你爽视频不一样的| 高潮毛片又色又爽免费| 婷婷色在线| 4399亚洲视频| 高清无码入口| 日本操逼九九九九58日本操逼| 99热日韩这里只有精品| 97AV在线视频| 天天综合网~91综合网| 中文字幕成人| 99操视频| 97久久精品| 99re热免费观看视频精品| 日在线V视频在线播放| 五月婷婷丁香啪啪| 99天堂网| 亚洲精品网站色视频| 五月丁香另类图片| www.91在线观看| 香蕉中文在线| 日韩天堂久久| 大香蕉视频婷| 五月丁香久久婷| 偷拍99在线视频观看| 草了bav视频在线观看| 可以免费观看的av| 国产亚洲99久久精品| 久久国产色| 五月花婷婷| 五月天色不卡| 99综合视频| 俺去也婷婷| 激情亚洲婷婷| 超碰猛烈的性猛交| 婷婷久久精品| 99 re视频一区| 久久九九中文字幕| 亚洲成人网在线观看| 女婷久久| 色婷婷丁香五月天| 欧洲激情网站| 五月色亚洲| 内射人妻视频国内| 婷婷色爱| 国产精品成人av在线观看春天| 天天爽天天干天天| 五月婷婷啪啪综合网| 五夜丁香| www,天天干| 六月激情婷婷| 婷婷丁香色五月天| 五月婷婷六月丁香| 免看黄大片AA | 丁香88AV五月婷婷| 99爱爱网| 日韩成人电影AV| 丁香五月婷婷久久综合激情网 | 夜夜干夜夜操| 欧美色色色| 午夜微拍福利| WWW99视频| 欧美人人操| 色五月婷婷五月丁香五月激情五月视频| 最新热中文字幕| 欧美综合婷婷网| 五月色亚洲| 精品婷婷| 日本一级一级一级一级| 婷婷六月丁香五月图区| 日本nghangse中文字幕| 久久伊人9| 蜜臀av无码久久久久久久久 | 人妻丰满精品一区二区A片| 97色射| 伊人大香蕉在线视频| 色情丁香五月婷婷精品| 99久久国产宗和精品1上映| 67194成I人在线观看线路1| 亚洲丁香五月美女| 色色色色色色网站| 亚洲午夜AV| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 99热9| 专区无日本视频高清8| 五月婷婷久久网| 色九月婷婷丁香| 丁香五月婷婷无码AV| 婷婷五月深爱五月| 狠狠色狠狠| 欧美性生交XXXXX无码小说| 91色色色视频| 久久三级视频| 五月丁香婷婷久久| 懂色av蜜臀av粉嫩av永陈冠希| 婷婷综合色图| 久久人妻在线| 激情五月影院| 一区无码| 五月天色婷婷激情综合| 淑女丝袜bi操逼123| 色五月在线观看| 99久久天堂婷婷| www.色五月| 色五月婷婷、老熟女| 99re在线这里只有精品视频首页| 五月激情婷婷在线| 99久久婷婷国产综合亚洲| 思思热国产视频| 亚洲成人五月| 五月天激情小说| 99视频网址| 东北婷婷五月天| 亚洲精品电影| 99热第一页| 俺去也在线官网| 日韩另类| 亚洲激情综| 色播婷婷五月天| www久久艹| 九九色网专区| 激情宗合哪里能看| 99超级碰碰| 操91综合网| 色五月丁香五月激情五月激情| 五月丁香六月综合激情| 国产午夜精品一区二区三区四区| 99热永久在线观看| 亚洲人妻Av| 啪啪视频99| 天天色五月| 久久免片| 亚洲午夜电影| 日韩五月丁香| 国产操B| 亚洲女婷婷五月基地综合久久久| 一区二区乱码视频| 国产99久久久国产精品免费看 | 夜夜撸天天操| 国产XXXX搡XXXXX搡麻豆| Se.婷婷五月天| 操97| 丁香五月大香蕉在线99| 国产伊人五月天| 成人在线网址| 另类国产欧美视频| 色久免费| 777米奇影视第四色| 日本va欧美va欧美va精品| 成人在线综合| 免费在线a| AV性爱网| 99在线一区| 亚洲热综合| 日本天堂网站99| 99在线视频在线观看| 五月激情天| 色五月开心婷婷| 五月婷婷视频| 99噜噜噜| 婷婷色五天| 97热精品| 婷婷九月激情| 综合激情在线观看| 天天做夜夜爽| 五月婷婷六月丁香在线| 99人人精品| 婷婷五月天六月丁香| 91av成人| 婷婷亚洲丁香五月| 国产精产国品一二三在观看| 日日天天操| 六月婷婷毛片| 99久久国产宗和精品1上映| www.超碰| 六月丁香婷婷在线波多| 夜色五月天| 99热这里只有精品22| 欧美色色日韩| 亚洲精品色| 色碰碰| 久热伊人| 亚洲另类婷婷五月丁香在线播放| 色999;丁香五月| 色色五月天婷婷| 五月开心网| 天天草婷婷五月| 99热日本| 五月婷婷免费在线观看| 久久久久9久无码视频| 这里只有精品1| 婷婷少妇激情| 亚洲综合五月天| 色五月婷婷狠狠撸| 97在线观视频免费观看| 国产三级秋霞| 五月丁香少妇| 婷婷在线视频| 色情久久久| 午夜av网| 丁香色色网| 色色亚洲无码| 久久99免费视频网站| 色综合九九| 色深爱五月| 97五月久久丁香婷婷| 26uuu精品国产| 激情婷婷人妻| 久久一级片| 五月丁香啪综合| 婷婷六月丁香在线| 亚洲欧美综合7777色亭亭| 99热这里只有精品中文字幕| 婷婷和五月天| 婷婷五月天淫荡| 玖玖综合色| 丝袜人妻| www九九免费视频| 五月丁香激情综合网| www.91久久| 97超级碰人人| 玖玖爱伊人| www.狠狠干com| 色五月婷婷综合在线| 亚洲AV网站| 天堂草在线观| 99自拍网| 色9999综合久久| 337p大胆噜噜噜噜噜91Av| 丁香五月冃欧美| 亚州激情九月| 激情五月婷婷综合| 天天干天天操天天爱| 色呦呦美女| 丁香婷婷六月| 日日综合网| 手机免费福利视频| 狠狠狠狠草草| 夜夜爽天天爽| 五月丁香六月婷婷欧美综合| 超碰99在线观看| 天天久综合| 国产小网站| 嫩草AV久久伊人妇女超级A| 99热精品中文字幕| 综合逼五月激情婷婷| 五月天久久网站| 99年操人人爽| 婷婷丁香五月麻豆| 婷婷久久丁香| 少妇久久诱惑视频| 91操在线| 久久久天堂国产精品女人| 久久99精品久久久久久噜噜| 亚洲乱码成人| 99热精品在线| 色色色色色五月丁香| 一区二区成人电影免费播放| 99色视频| 激情九色| 激情丁香五月婷婷啪啪| 激情综合网婷婷久久| 91婷婷搞| 97成人在线视频精品| 4438亚洲欧美| 激情五月综合网| 久99视频在线观看| 激情综合色播| 色婷丨日丨天丨综合久久| 久久综合影院| 丁香五月黄色| 丁香婷婷AV| 99热综合| 激情小说五月天| 丁香五月天亚洲视频| 婷婷五月天激情影片| 色婷婷色五月丁香| 丁香色五月婷婷17C| 99操碰| 欧美视频五区| 日本久久性| 婷婷五月在线| 亚洲va久久久噜噜噜久久天堂| 色噜噜综合网| 久久久久婷婷| 综合色99| 九九这里是免费的视频5| 激情五月婷婷网| AV79| 婷婷五月中文字幕国产| 人色五月天婷婷| 六月丁香深深爱| 五月丁香五月丁香| 亚洲AV激情五月综合网| 婷婷,五月天,丁香,第一| 日本99久久| 狠狠色噜噜狠狠狠狠综合| 色五月婷婷综合在线| 日韩精品电影| 亚洲成人中心| 涩九九九九| 婷婷内射视频在线| 9视频在线成人网站| 内射干少妇亚洲69XXX| 大香蕉手机视频| 激情综合丁香五月| 五月天成人在线| 丁香婷婷五月综合色情| 97热久久五月婷婷| 91综合色噜噜| 丁香香蕉婷婷| 99久操| 在线网黄| 中文字幕在线日亚州9| 99精品在线| 强奸幻女毛片| 五月天激情日色在线| 久久日曰| 狠狠爱夜夜| 久久精品综合色| 另类视频在线| 五月婷婷伦理| 五月婷六月天| 久久综合伊人综合在线| 综合玖玖性爱免费视频| 爱之国产色情综合| 久久99这里只有精品| 秋霞午夜理论| 日日鲁鲁夜夜爽爽| 99性爱精品| 开心五月激情婷婷| 特级西西4444www无码| 成人丁香五月| 丁香九月综合激情| 九九色欲网| 综合网天天| 色婷婷在线电影| 成人无码中文| 另类图片天天影视在线观看| 色婷婷久久久| 婷婷激情综合无月| 五月天狠狠干| 五月婷婷六月丁香玖玖玫瑰91| 色情婷婷。| 热无码A∨| 99re这里只有精品在线观看| 射区导航| 久久婷婷视频| 色级停停| 免费人人操| 六月婷婷七月丁香| 天天干,天天舔| 亚洲人妻五月丁香婷婷| 色五月婷婷91| 人妻AV中文系列| 丁香五月天亚洲综合| 婷婷综合视频| 日韩成人五月天| 五月天色五月| 99色综合| 亚洲色综合色网| 五月色综合| 狠狠五月天激情| 伊人婷婷大香蕉| A片试看120分钟做受图片| 日本三级片片| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 伊人丁香花综合影院| 丁香五月成人网| 久久er99热精品一区二区| ww超碰在线| 亚洲精品网址| 538在线| 99热99热不卡| 91超级碰碰| 老师高潮流白浆喷水的A片| 久久精品五月天| 九月丁香婷婷综合激情| 婷婷五月天激情基地| 激情婷婷五月天| 逼特逼在线免费播放| 高清视频一区| 免费播放99性爱视频| 亚洲激情综合| 怡红院AV亚洲一区二区三区H| 激情视频综合| 五月天婷婷色播| 大香蕉婷婷| 久久婷婷网址| 99自拍视频网站| 婷婷五月天成人动漫 | 久草免费福利视频| 久久色情| 丁香激情网| 久热一区| 激情综合无码| 六月综合在线| 韩日另类| 任你艹| 五月婷婷日| 99只有精品9| 亚洲激情丁香五月天色| 开心五月网| 色噜噜丁香| 色色激情五月天| 亚洲va欧美va天堂v国产综合| 天天狠狠综合精区| 99热精品在线| 亚洲六月婷婷| 日本天堂久久| 丁香五月婷婷亚洲另类| 99热免费精品| www,色婷婷| 一级黄色尤物综合视频手机在线观看| 人妻丰满精品一区二区A片| 亚洲sesesese| 991精品在线视频| 97超碰欧美中文字幕| 色香五月天| 97干97色| 99热国产婷婷| 丁香婷婷视频在线| yazhoujiqingav| 新99思思视频| www.丁香五月| VA色婷婷| www.maotanji.com| 欧美婷婷九月| 色爱亚洲| www.久久| 亚洲色色爱| 色九月婷婷| 玖玖综合色| 丁香六月综合激情| 婷婷欧美激情综合| 97在线刺激| 亚洲成人av中文| 操操操AV| 玖玖热99| 色爱五月天| se99热久久一本| 美女丁香五婷婷| 精品五月花| 伊人五月人妻精品| 亚州美女| 亚洲天堂久久| 99人妻碰碰碰久久久久禁片| 五月婷婷熟女| 久操激情| 婷婷五月激情视频在线| 日本偷拍九九九| 91精品综合久久久久久五月丁香 | 九一牛视频探花| 婷婷涩五月天综合| 婷婷五月激情欧美| 色色欧美。| 尤物一区二区| 国庆精品久久| 久色网| 热99精品视频在线观看| 色中色综合| 无码毛片992367| 成人无码精品1区2区3区免费看| 97色色色视屏| 另类丁香五月天区图| 另类视频丁香五月| 六月色 亚洲| 五月天婷婷在线播放| 黄色一级影片| 五月丁香六月停停| 色色999三级片| 色五月成人| 激情五月综合网最新| 日本久久网| 華人性愛AV在線| 久久99最新地址| 噜噜狠狠色| 五月婷婷熟女| 少妇高潮A片无套内谢麻豆传| 狠狠操天天操天天操| WwW色婷婷| 五月天伊人| 成人在线精品| 免费看成人AA片无码视频吃奶| 色五月婷婷婷婷| 草草影院爱爱| 婷婷五月天久久久| 九九热区一区二区三区| 无码九九九九| 国产精品色婷婷久久久精品| 99热乎| 久久性爱网| 五月婷婷综合在线视频小说| 六月婷婷综合| www.99日本| 青青草性爱视频| 抽插特写| 久久五月天色婷婷| 99er精品| 中文字幕精品推荐免费在线观| 国产激情在线| 色色丁香五月婷婷| 伊人影院久久网| 亚洲五月婷婷| 五月天婷婷丁香社区| 日本人人干| 精品国产AV色一区二区深夜久久| 无套内射极品大美女| 亚洲欧洲99| 综合九九久久|