欧美成人午夜精品久久久,国产?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
返回資訊列表
丁香六月色香蕉视频| 五月丁综合在线观看| 色婷婷久久综合久色综| 激情无码网| 五月婷婷,狠狠操| 九九九九中文字幕| 人人97碰| xxxx五月| 综合精品啪啪| 色五月六月| 轮奸综合网| 婷婷久久五月天| va婷婷在线| 国产精品久久久爽爽爽麻豆色哟哟| 色综合爱综合| 色欲色香,www,com| 99热国产精品| 激情亚洲婷婷六月| 人人操 色| 色五月91| 思思久久96热在精品国产,| 丁香婷婷AV| 激情五月天伊人影院| 国产婷婷五月| 色欲色香综合网| Se.婷婷五月天| 日韩精品一区二区三区,四区,五区视频| 在线A色| 91丨九色丨国产打屁股| 久久久人妻门| 亚洲成人免费电影| 久久九九热re6这里有精品| 婷婷婷婷婷开心无码播放| 98色丁香五月婷婷综合网| 久婷| 婷婷六月视频| 色婷婷综合网站| 婷婷五月丁香五月| 五月婷婷五月丁香| 色五月开心五月激情五月| 男人的天堂av俄罗斯热| 四色99久久| 天天拍夜夜爽| 91viP在线看| 国外亚洲成AV人片在线观看| 成人网址在线观看| 丁香五月网| 99久久婷婷五月综合| 成人一级片| 风流少妇A片一区二区蜜桃| 99热精品6| 丁香五月婷婷亚洲综合精品| 99色在线观看视频者| 免费播放片大片| 五月激情五月丁香| 干一干xxxx| www.狠狠| 亚洲第一精品成人999久久精品| 思思久久99热只有频精品66| 亚洲成人婷婷| 婷色人人狠| 五月天丁香婷婷久久九| 人妻内射视频| 亚洲精品99| 99超在线| 五月停亭六月,六月停亭的英语| 4399无码视频| 午夜一区| 婷婷激情综合| 开心五月天激情网| 丁香五月激情视频| 另类婷婷丁香| 一起草无码视频| 综久久久| 色噜噜丁香| 香蕉综合在线| 亚洲人成色A777777在线观看| 色婷婷六月综合| 五月婷婷色播| 婷婷丁香五月基地| 超碰色热| 婷婷色色网站| 最近韩国日本免费高清观看| 97人人草| 2025天天日爽| 日日色综合| 五月激情婷婷六月丁香| 狠狠色婷婷在线| 亭亭五月基地在线| 五月丁香最新| 二区成人视频| 久热精彩视频98| 激情六月婷婷| 天天色视频| 激情五月天婷婷| 99久久黄色顶级视频| 99热网址| 日韩黄色网络| 久热99热| 大香蕉五月天婷婷| 色婷婷五月天偷拍| 色色性爱视频| 色偷偷综合| 婷婷色片| 91seav| 狠狠人人婷婷| 婷婷色六月| 思思国产99| 情欲综合网| 色色自拍视频网站| 五月天丁香啪啪综合| 97碰| 7月婷婷六月丁香| 五月天激情久久| 九九99在线视频| 丁香五月婷婷激情蜜桃| 99精品在线观看| 狠狠狠狠狠狠狠狠| 79精品视频在线观看,| 日本三级中国三级99| 涩涩五月天| 激情五月婷婷五月| 亚洲天天操| 91久久婷婷人人澡草| 五月天激情久色| 6月丁香婷婷激情| WWW·天天操·视频?| 婷婷丁香成人| 99久热这里有精品| 这里只精品| 婷婷激情五月天网站| 色色五月婷婷| 天天日人人| 情欲综合网| 日本人妻丁香婷婷久久寝取熟女五月| 婷婷五月丁香基| 77799热| 激情五月综合网| 日本久久99| 欧美婷婷| 色婷婷伦理| renrencaoav| 六月丁香综合999| site:esunnet.com| 亚洲激情区| 严洲天天插| 丁香色五月直播| 色五月婷婷五月丁香五月激情五月视频| 久99视频在线观看| 激情小说婷婷小说| 91疯狂操操操操| www.yw色| 婷婷五月成年人| 五月停停直播| 五月天激情婷婷久久| 五月天国产| 激情六月天婷婷| VA色婷婷| 人人色人人弄人人操| 91久女| 69久久久| 五月天婷婷色| 五月天婷婷视频30| 欧美色色色色色色色| 九热视频| 天天肏天天舔AV| 亚洲av网址| 精品99视频| 九九热这里只有精品556| 99热无码精品| 手机激情网| 色综合中文综合网| 国产99视频永久免费| 中文字幕乱轮| 丁香五月婷婷综合啪啪| 色色色色色色色色五月先| 亚洲小电影在线观看黄999| 色婷婷导航| 激情小说五月天中文字幕| 九九色天堂| 国外亚洲成AV人片在线观看| 五月丁香最新| 婷婷五月天无码视频| www狠狠爱com| 五月天另类小说亚洲| 五月开心婷婷| 欧美在线97| 丁香五月久久| 九九精品99久久久| WWW.桔色成人.COM入口| 玖玖在线| 97婷婷五月| 丁香六月啪啪啪| 丁香五月久久| 99色免费观看全部| 99热66| 色播丁香| 综合激情站| 日都一级A片| 久久久99视频| 色婷婷色婷婷五月| 五月婷丁香| 超碰cap| 婷婷色丁香五月| ss视频xx91| 丁香久久综合| 国产在线网| 色九九九九| 天天AV导航网| 在线成人网站| 色婷婷在线影院| 五月在线婷色| 激情久久久久久| 日日夜夜九九| 五月天婷婷丁香花| 伊人激情影院| 97色婷婷五月天| 色婷婷色人人射| 99啪啪视频| 人妻视频一区而且二区| 六月丁香五月婷婷首页| 婷婷五月色花丁香社区| 九色91国产| 日操熟女| 5月婷婷六月丁香| 国产91视频| 99色免费在线观看| 婷婷五月激情的图片| 日本婷婷综合精品| 亚洲婷婷91丁香| 九九色中文| 五月天另类综合网| 超碰人人在线| 五月婷视频久久| 囯产精品久久欠久久久久久九大| 免费观看高清无码| 婷激情五月| 99热免费在线| 色色激情| 99热97| 亚洲色图45p| 四色五月婷婷在线观看| 99热网精品| 激情五月开心五月在线视频| 婷婷五月丁香基地| 丁香婷婷五月天激情四射| 五月婷婷激情综合网 | 亚洲婷婷激情综合激情999精品| www,五月丁,com| 99热这里只有精品9| 中文字幕,综合,91| 五月丁香婷草| 五月色婷婷中文字幕| 日日夜夜狠狠操| 123日本不卡在线| 99热大片| 婷婷情色五月| 婷婷综合五月天亚洲综合| chaopengdaxiangjiao| 中文网AV| 狠狠精品干练久久久无码中文字幕| 九九AV在线| 丁香五月影视| 99综合视频| 日本不卡中文字幕| 色五月大香蕉| 色婷婷激情| 婷婷五月成年人| 这里只有精彩视频| 狠狠香婷婷五月| 99九九在线| 五月丁香啪啪| 丁香六月婷婷综合激情欧美| 色婷婷av在线观看| 精品九九视频| www.夜夜爱.com| 五月色天情| 免费观看日韩成人av| 婷婷六月情| av一区二区电影免费在线观看| av操一操| 婷婷射图| 91视频综合网| 婷婷久久五月| 野战J办公桌椅H| 99惹精品视频| 色色婷婷婷丁香五月天| 91九色欧美| 日韩久热| 欧美成人A片AAA片在线播放 | 五月婷婷丁香大陆免费| 狠狠五月天| 性 色 婷婷| 色色色激情网| 欧美色五月| 色婷婷狠| 人妻丰满精品一区二区A片| 五月色婷婷AV| 黄色99热| 天天色视频| 狠狠色激情在线| 亚洲 在线 另类| 色色哒五月婷婷六月丁香| 免费超碰在线| 五月天激情图片| 六月激情婷婷色| www久久久久久久久久久| 色色五月婷婷丁香| 97香蕉人人在线观看| 天天干,天天日| 男女99免费视频| 思思久久99热只有频精品66| 人人草人人爱| 热的国产,热的综合,热的有码| 婷婷五月天免费99| 97碰久久| av性爱在线| 日本免费91| 五月婷婷色| 六月色国内综合| 大香蕉久操| 狠狠色婷婷在线| CHINESE熟女老女人HD视频 | 超碰啪啪网| 99色网站| www狠狠| 成人版视频在线观看| 丁香五月社区| 99热这里只有精品9| 九九99九九99| 久久婷婷一级片| 久久资源网五月婷| 五月婷婷网站| 99这里只有免费的小视频在线观看| 亚洲图片 丁香婷婷| 婷婷五月综激情| 九九这里精品| 如何安全看伊人婷婷| 婷婷丁香九色| 天天拍天天操| 丁香六月欧美| 亚洲无码成人性爰网| 91嫩草久久| 亚洲欧美婷婷五月色综合| ji'qing'luan'ren'lun| 色综合色五月| 九月丁香八月婷婷久久综合久97| 97在线观视频免费观看| 99碰超| 丁香五月,激情五月,深爱五月| www.婷婷亚洲基地| 影音先锋综合网| 婷婷五月影院| 中美日韩成人在线| WWW,五月| 亚洲人妻一区二区| 五月天丁香六月综合| 色五月在线综合| 在线99热| 天天日天天干天天操| 五月天婷婷爱丁香中文字幕| 亚洲成人在线播放| 亚洲成人网站在线| 9 9热这里有精品| 中文幕无线码中文字蜜桃| 丁香五月天.com| 婷婷五月天激情在线| 亚洲综合激情五月天婷婷| 伊人9在线| 精品热青草| 九九黄色网| 99无码超碰| 丁香午夜天| 五月丁花色综合网| 国产美女主播vip| 久久精品凹凸分类| 办公室少妇激情呻吟A片在线观看| 99热大香蕉| 五月六月婷| 五月婷婷九月婷婷九月婷婷| 26uuu亚洲欧美另类| 久热久| 久操大香蕉| WWW.桔色成人.COM| 26uuu精品一区二区| 婷婷天天综合| 玖操97| 操人妻90p| 天天操天天曰天天射| 五月丁香激情综合网官网| 99久久网站| 久久五月综合| 九九激情网| 色丁香五月| 六月丁香激情| 99精品无码| 亚洲综合色色色| 婷婷开心激情综合五月天| 天天爽夜夜爽夜夜爽精| 99爱免费在线观看| 丁香婷婷人妻综合网| 婷婷天堂综合| 永久的网站AAAA| 婷婷丁香人妻天久久| 久久网日本| 丁香五月天激情四射网络不好| AA丁香综合激情| 日本狠狠干| 成功精品影院| 玖玖色综合网| 97人人超| 色五月丁香伊人五月| 色五月婷色彩免播放器| AA片在线观看视频在线播放| 9色91视频| 欧美叉叉叉BBB网站| 天天爽夜夜操| 91se精品国产| 一区二区乱视频码| 黄色短视频在线观看| 婷婷新网址| 天天射色五月天| 伊人久久综合| 综合啪啪| 激情开心五月婷婷| 日本AAAAAAAAAAAAAA片| 丁香五月天之婷婷影院| 99久久99九九九99九他书对| 久色网| 伊人婷婷五月天| 久久人妻久久久久| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 超碰久热| 色 丁香婷婷| 狠狠狠激情网| 99操逼| 看全色黄大色大片| 五月天精品| 免看黄大片AA | 1024久婷| 香蕉综合网| 秋霞三级影视资源| 婷婷久久五月天亚洲欧美国产日韩在线观看| 五月婷婷网久久| 婷婷五月美女直播| 色五月琪琪| 五月天偷拍| www.99精品日操伊人乱碰在线| 国产性爱色| 国产成人网站在线观看| 五月丁香六月情婷婷久久| 综合久久人妻| 精品人妻久久久久久| 六月激情网| 婷婷九月色| 亚洲精品V天堂中文字幕| 99操不停| 欧美性二区| 婷婷婷五月天最新综合你懂的| 丁香五月在线| 97操操| 日韩av高清| 97久久久| jiqingliuyuetian| 99热在线播放| 婷婷人妻激情| 夜夜骑日日操| 婷婷五月天六月丁香| 丁香五月大香蕉| 久久色六月| 亚州婷婷五月激情综合| 六月丁香色色| 91人妻视频| 亚洲在线资源| 久久久精品婷婷五月天| 日韩无码成人电影| av中文网站| 99热6这里只有精品| 综合久久丁丁香婷| 婷婷亚洲色| 欧美激情综合色综合色| 国产亚洲在线| 色色色色色综合| 【乱子伦】黄色| 丁香五月婷婷AV在线| 99ER热精品视频| 色噜久| 色。 日日日| 久久久久久人妻久久久久久久久久人妻久久久 | 超碰在线综合| 69热91天堂| 五月天日日操夜夜操| 综合五月激情网| 99热手机在线精品| 日本色色网站| 日日操日日射| 天天综合久久| www.五月天婷婷| 伊人热在线大香蕉| 五月天婷a在线| 婷婷八月丁香激情综合| 五月婷婷丁香日韩在线| 开心深爱五月天| 五月丁香六月激情综合| 日本婷婷激情四射中文字幕在线观看| 97久人人| 亚洲va欧美va天堂v国产综合| 亚洲色无码A片一区二区麻豆| 五月婷婷激情| 丁香婷婷五月综合| 日本在线视频看se99| 中文字幕日韩无码制服诱或| 久久婷婷视频| 婷婷色色网| 国产综合婷婷| 成人网页在线观看| 综合激情站| 操人妻AV| 777精品成人a v久久| 玖玖99免费视频| 五月天操逼激情| 99这里只有免费的小视频在线观看| 99九九精品视频| 久婷视频| 色播播婷婷| 欧美五月婷婷综合| 艾小青av| 久久五月婷综合| 亚洲五月婷婷在线| 久久人妻精品| 99热20| 五月色网| 综合在线网| 99爱视频在线观看| site:hcxsz888.com| 久久久91| 怡红院91a√| 婷婷五月天激情诱惑| 久久九九激情五月天 | 26UUU欧美| 九九综合九九| 97色色婷婷| 中文色婷婷| 黄色AAAAA| 五月婷婷综合在线视频| 婷婷综合五月天亚洲综合| 天天插天天插| 狠狠草婷婷| 色五月激情五月| www.五月天性.com| 亚洲天堂婷婷丁香| 丁香婷在线| 亚洲9久久精品| 99精吕视频在线观看了| 婷婷丁香五月天熟女丝袜| 色婷婷综合视频| 色欧美日| 亚洲综合色婷婷| 久热9| 91九色丨国产丨爆乳| www.色色五月天.com| 五月丁香操婷逼| 欧美六月| 五月丁香六月婷婷手机无线| 1级欧美日韩| 激情五月天伊人av| 涩五月丝袜婷婷| 激情深爱五月天| 香蕉视频91| 婷婷五月色播放| 色五月之第四色| 少妇搡BBBB搡BBB搡毛茸茸| 欧美天天综合网站上去吧| 影音先锋高清无码资源网| 国产精品视频久久99| 婷色天堂| 五月天成人综合| 国产AV不卡福利| 五月婷婷激情五月| 色九区| 亚洲成av人影院| 天天干天天爽天天操| 超级碰碰视频无码| 丁香婷婷五月综合色情| 婷婷五月丁香av网站| 免费看欧美成人A片无码| 色婷婷在线视频综合| 日韩天堂久久| av中文在线| 视频这里只有精品16| Av免费网站在线| 99在线免费视频| 在线观看熟女少妇| 任我干视频在线观看| 婷婷丁香视频| 久久婷婷五| 超碰人人草| 久久这里只有精品视频26| 99caobi| 五月开心激情| 玖玖资源站蜜臀| 日本一级特黄大片AAAAA级| 久热9| 丁香欧美| 99久久婷婷国产综合精品草原| 人人摸人人| www开心激情网| 色五婷婷| 丁香狠狠干| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 色玖玖综合网| 人人干Av| 在线播放中文字幕| 久久婷婷艹| 久久九九99| 九九精品视频在线6| 久久永久视频| 九九无毛| 久久综合九九| 99在线精品免费视频| site:hcxsz888.com| 高清a片基地| 五月天综合婷婷| 甈你aaaaa| 综合久久五月天| 亚洲国产精品成人午夜| 五月天停婷基地| 中国AV性爱观看| 99热网站| 丁香五月天堂网| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 日本啪啪网| 五月精品99综合| 996er热| 人人摸人人干人人做| 青青.com| 欧美色图天堂网色| 日本精品人妻无码77777| 日韩成人电影在线播放| 激情性五月天免费小说视频| 九九热在视频| 九九热99视频| www.久久爱.c n| 操操综合网婷婷| 婷色五月| 99re这里| 大香蕉五月婷婷| 五月天堂在线| 色色五月婷婷| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 日韩六十路91性交电影| 五月丁香婷婷久久| 伊综合蕉| 五月婷婷久久大片| 久久9久| 亚洲另类视频| AAA亚洲AV| 天天色天天爱天天舔| 激情四射网| 国精产品一区二区三区| 久久ri精品| 丁香五月影院| 99精品在线| 婷婷无码视频| 色综合九九色综合88| 97很鲁在线视频| 91九色中文字幕女在线观看| H亚洲| 亚洲精品a成人在线播放| 亚洲丁香花色| 97人人干| 99热在线观看| 亚洲熟妇AV乱码在线观看| 91久久精品无码一区二区三区| 日本熟女内射| 五月综合缴情网| 六月五月婷婷| 婷婷五月激情在线| 五月WWW| 天堂草在线观| 久久这里99| 婷婷精品在线| 热99只有精品| 丁香九月婷婷色| 亚洲狠狠狠色婷婷综合激情久久久| 综合亚洲五月天| 日本精品人妻无码77777| 激情综合五月天| 久久九区| 泰州成人视频| 欧美成人日韩| 91人人网| 五月丁香六月情| 久久九九国产精品怡红院| 99超级碰免费视频| 欧美人与性动交CCOO| 国产精品久久久爽爽爽麻豆色哟哟 | 99热这里都是精品| 色婷婷欧美| 色婷婷亚洲精品天天综| 五月丁香999| 亚州色色色| 播五月丁香三月婷婷| 日日干日日| 色五月成人| 99热这里只有精品首页| 九九色精品| 免费观看全黄做爰的视频| 免费无码毛片一区二区A片| 狠狠爱深色婷婷综合| 抽插特写| 大香线蕉伊人| 丁香久久| 亚洲 25P| www.五月瑟| 五月丁香综合激情| 91碰| 五月天激情网站| 久久精品凹凸分类| 色五月大香蕉婷婷| w婷婷五月婷婷w| 天天噜天天插| anquye五月| 丁香美女五月天婷婷| 玖玖爱综合网| 国产精品国产成人国产三级| 久久久9久| 激情婷婷九月| 婷婷99狠狠躁天天| 日本五月丁香| 91婷婷五月天嫩女| 激情五月天丁香| 青柠影视免费高清电视剧| 久久久噜噜噜操操操| 婷婷涩五月| 色五月天中文字幕| 五月天色区| 九久9精品| 人人操超碰| 成人丁香五月婷| 婷婷久久欧美| 五月天婷婷在线AN| 综合网天天| 91操黄| 99re免费精品视频| 精久久色| 亚洲激情亚洲激情 | 久久这里只有欧美| AAA久久| 激情5月婷婷| 丁香六月激情四射| 五月天成人手机在线视频| 色激情五月| 老师的粉嫩小又紧水又多A片视频| 99丁香五月婷婷在线| 丁香六月婷婷一区| 5月丁香婷婷激情网| www.婷婷| 亚洲无码成人网| 精品无码av丁香五月激情| 久久少妇视频| 大香蕉九九| 色www.con| 人妻久久久久久久久妻久久久久| 色情丁香五月婷婷精品| 久久91久久精品久久| 九九综合九九| 亚洲色在线观看| 大香蕉婷婷| 六月婷婷七月丁香| 97色伦另类图片小说视频| 丁香婷婷噜噜| 99久久九九视频| 99热最新| 色五月欧美| 色色欧美。| 中文字幕在线观看视频www| 色婷婷社区| 精品国产乱码久久久久夜深人妻| 草一草avb| 毛片色五月| 无码人妻精品一区二区蜜桃色欲| 五月天婷婷激情综合| 深夜男女福利刺激影院一区完整| 丁香五月冃欧美| 五月在线| 五月婷婷之综合激情在线| 九九九午夜影院成人| www超碰| WWW·天天操·视频?| 人妻久久人妻久久第一区| 日韩久久系列| 狠狠搞亚洲| 9久热在线精品| 人妻少妇色综合| 久久婷婷夜| 狠狠干综合网| 老师的粉嫩小又紧水又多A片视频 粉嫩AV久久一区二区三区 | 97精品自拍| 99免费视频精品| 中文字幕日韩无码制服诱或| 色五月激情五月开心五月| 久久九九激情五月天| 久久婷婷激情五月天一区二区| 美国十月色婷婷在线观看| 色婷婷狠狠18yy| 五月天全国最大成人网| 超碰久热| 久久38视频| 五月婷婷激情综合| 九九99在线视频| 日本一级一片免费视频| 五月丁香婷婷久久| 丁香五月自拍| 直接看的AV网站| 婷婷久久五月丁香| 国产在线aaa片一区二区99| 五月天综合| 99ri在线| 久久婷婷超碰| 丁香亚洲婷婷五月| WwW色婷婷| 超碰碰碰碰| 五月天婷婷影院| 亚洲操逼网| 色五月网址| 五月天婷婷小说| 99色综合久久| 26uuu91| 婷婷六月激情综合| Jh7Uf088VHafNm| 97超碰,人人舔,人人操,人人摸| 婷婷五月天综合蜜桃| 五月丁香啪| 婷婷色播六月无码| 免费观看全黄做爰的视频| 婷婷色五月天第7色| 色情久久久| 97人人看| 欧美久热| 97狠狠色| 六月丁香综合| 婷婷色激情网| 99无码视频| oVV4WIB3vFi8D| 51精品国自产在线| 日本va视频| 色9999综合久久| 妻久久人久久| 伊人久久丁香五月91| 深爱网深爱综合网| 亚洲六月综合激情久久下卡| 操操操AV| 六月丁香婷婷色狠狠久久| 国产精品色婷婷99久久精品| 婷婷 丁香 久久| 婷婷久久综合久色| 97人妻碰碰碰久久香蕉| 丁香六月综合激情| 操操操av| H亚洲| 五月婷婷综合视频| 丁香九月婷| 五月天色综合| www,av好吊操| 99精品久久久久久久| 97人人草| 99在线看片| 啪啪啪大香蕉| 久久 视频这里只有精总| 久久一伦| 99热这里有精力| 99re思思| 免费91久久精品| 色色色色色网站| 欧美三级巜人妻互换| xxx综合在线| 毛v一区二区视频| 综合色色婷婷| 亚洲视频色色| 亚洲情欲久久| 婷婷久月| 开心五月综合激情综合五月| 97操男人的天堂| 国产精品久久久久久白浆色欲| 婷婷五月天无码熟女| 蜜乳AV成人| 日日噜噜夜夜狠狠久久丁香六月| 婷婷久久午夜网| 亚洲黄网在线| 日本天天色| 天天 青草 制服丝袜 在线| 青青草青青草五月天| 五月婷婷激情综合| 婷婷丁香五| 五月婷婷色白丝| 五月天成人综合| 思思久久精品视频| 久久青青日本视频| 婷婷五月综合在线| 丁香六月天之亚州热女 | 色色色成人网| 99色综合网| 香蕉AV777XXX色综合一区| 五月成人综合| 开心婷婷中文字慕| 亚洲成人综合网在线免费观看| 丁香五月天啪啪| 天堂AV在线看| 9久热| 色色色色丁香| 婷婷五月激情图片| 俺去啦综合网| 第四色色六月色综合| 亚洲丁香五冃97色| 亚洲色婷婷| 五月激情四射婷婷丁香| 在线成人av播放| 九九黄色网| 五月婷婷九九热| 久这里只有精品99| 99丁香五月婷婷在线| 五月色丁香| 激情五月综合网最新 | 97人人干人人操| 中文aV网| 丁香视频| 五月婷婷影视| 色色a| 五月丁香免费看| 婷婷丁香第一页| 成人 在线 日韩| 久久99热网| www.婷婷五月| 极品另类| 操逼棍操逼| 九九色人| 色综合偷拍| 色99久草在线| 色一情一乱一伦一区二区三区| 色五月婷婷av| 这里只有精品无码| 五月婷婷开心亚州在线| 亚洲色色在线| 色综合久久久久| 五月天激情网址| 日本97在线观看| 开心激情婷婷| 九九色综合网| 婷婷五月天国产在线播放| 狠狠狠狠操| 日本va欧美va欧美va精品| 九九色大香蕉| 九一娱乐在线观看视频| 99精品偷自拍| 天天操夜夜操| 大香蕉久久| 美女丁香五婷婷| 五月停停丁香| 五月丁香婷中文字幕| 婷婷丁香六月五月天| 婷婷99狠狠躁天天躁中| 玖玖婷婷五月天毛片| 开心五月深爱五月| 丁香六月啪| 超碰免费大香蕉| 一本色道久久综合狠狠躁小说| 99热在线成人网站| 91人妻视频| 欧美另类五月激情| 深爱婷婷色| 色婷婷成人在线| 色月九九| 久久99看免费| 日韩xx在线| 色婷婷香蕉丁丁网| 婷婷丁香五月基地| 色色色色色色色色色色色色色色,网站| 丁香狠狠干| 少妇AB又爽又紧无码网站| 色99视频| 狠狠干狠狠干| 激情五月婷婷视频一区二区三区| 91干视频| 五月色婷婷影院| 婷婷97碰碰| 日本系列_4页_777FP| 日本99在线| 成人婷99最新| 色婷婷大香蕉| 国产成人网| 丁香伊人网| 婷婷五月丁香久久| 99热都是精品| 色婷婷AV在线| 99自拍网| 中文av网站| 九色视频91| 欧美肉大捧一进一出免费视频| 9l视频自拍九色9l视频自拍九色9l社区 | 538在线精品| 成人片黄网站色大片免费毛片| 大香蕉九九| 99热这里只有精品5| 激情五月色在线播放| 丁香五月 性爱| 天天干、天天日日| 97香蕉人人在线观看| 色婷婷六月天在线| 丁香五月婷婷狠狠色| 久久A区B区| www久久艹| 五月宗合激情网| 亚洲精品乱码久久久久久综合| 99热 免费| 五月丁香综合伦理片| 丁香五月23111| 五月丁香六月色婷婷| 3www激情| 老司机日日夜夜青草| 国产精品久久久海的味道| 99日这里只有精品| 丁香六月婷婷久久综合| 婷婷五月婷婷| 亚洲色五月| 色久综合| 影音 五月 婷婷 久久| 激情综合婷婷久久| 五月天久久婷婷| 五月婷五月婷伊人伊人五月婷| 色99视| 婷婷丁香一月| 99性爱视频网站| 97婷婷丁香| 久久婷色| 色婷婷丁香AV综合| 99久扒热| 丁香六月开心| 日日日影院| 五月婷婷在线视频观看| 天天综合网91| 五月激情偷拍| 99色在线观看视频者| 色婷婷狠| 成人无码精品1区2区3区免费看| 丁香五月婷婷香| 九色1区视频在线| 97干97色| 五月天快乐开心激情网| 丁香五月在线观看| 亚洲va成人va成人va在线观看| 九色在线五月婷婷网址| 天堂在线9| 五月夜丁香| 天天操天天插| 国产做A爰片毛片A片美国| 96丁香婷婷九月蜜桃综合久久| 日本乱论99| 色欲丁香久久| 婷婷激情人妻| 国产黄大片在线观看画质优化| 激情五月份婷婷| 亚洲亚洲激情| 激情网五月| 国产全是老熟女太爽了| 色综合丁香婷婷| 色情激情五月| 久久久久9| 日逼影音先锋男人资源站| 日韩欧美一级大黄网站| 乱色色色| 可以免费观看的AV| 在线观看日韩12345区| 五月丁香色婷婷婷基地| 99精彩视频| 国产99久久久国产精品免费看| 婷婷五月天亚洲五码| 五月天激情婷婷五月天久久| 性生活视频98791| 91无码色色| 91日本在线观看| 婷婷六月中文字幕| 99精品在线观看视频| 久久婷婷六月综合综合| 天天日狠狠| 亚韩在线视频| 九九在线91| 婷婷五月天激情综合婷婷五月天激情综合| 色播五月天激情| 思思热99热| 91精品91久久久中77777久久玖玖九九 | 强伦轩人妻一区二区电影| www.99热最新视频8| 射婷婷中文字幕| 另类 在线| 操一操插一插| www.久久爱| 99激情在线| 色婷婷亚洲五月天| 182tv992tv人之初午夜免费观看| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 午夜天堂啪啪| 超碰中文字幕在线| 蜜臀av无码久久久久久久久| 精品久久9| 色很久综合| 五月天激情子轮| 五月开心网| 99久久婷婷国产综合| 综合噜噜| 九九九激情网| 激情综合青草| 熟女激情五月天| 色五月色图| 亚洲综合五月| 婷婷综合天堂| 亚洲色域网| 久色网| 九九热re99re6在线精品| 婷婷五月婷婷| 婷婷五月日本| 99免费视频网| 丁香五月花影院| 襙比视频| 国产精品国产成人国产三级| 日日日,com| 五月婷综合| 国产99热| EEUSS鲁片一区二区三区| 久久这里只有精品99| 国产激情综合五月久久| 东京热免费视频网站| 丁香婷婷啪啪| 婷婷五月天视频亚洲| 五月天激情网站| 婷婷综合亚洲| 国产美女无遮挡裸体毛片A片 | 五月天婷婷成人资源站| 天天舔天天插天天干| AV在线免费播放| 久久婷婷六月综合国际| 99热9| 色婷婷国色天香综合| av中文在线| 丁香五月天AV在线| 婷婷久久综合久| 九九色人| 日日夜夜狠狠| 91热er| 国产99久久久国产精品免费看| 2020夜夜操天天爽| www.91五月| 99热精品在线播放| 丁香五月婷婷激情完整版| 婷婷午夜综合| 99热播放| 狠狠色噜噜狠狠狠狠综合| 婷婷综合一二三| 一级精品999WWW| 亚洲啪啪啪啪| www,色婷婷| 五月激情综合网| 久操大| 九九成人视频| 天天舔天天摸天天射| 色婷婷久久| 九九精品综合| 婷婷丁香五月综合网上| 成人在线综合| 天天做天天爱天天玩夜夜爽| 超级碰人人操人人干| 丁香五月婷婷基地| 深爱激情五月网| 久久 无毛。| 丁香六月婷婷综合欧美| 熟女少妇内射日韩亚洲| 精品人人操| www.日日夜夜.com| 逼逼AV| 大香蕉丁香五月| 久热99热| 久热成人| 免费看欧美成人A片无码| 日日操日日射| 国产精品岛国片在线观看免费| 亚洲av网站| 成人久久天天x资源站| 久久久久久久合一狠狠做深爱| 久久ri精品视频| 99九九久久| 天天做天天爱天天爽在| 五月婷三级片| 五月天综合视频| 天天综合五月天| 久草婷婷| 激情久久天天| 激情久久月| 国产亚洲色婷婷久久99精品91| 99热久只有精品首页| 中文字幕丰满孑伦无码专区| 精品乱码久久久久| 中文无码婷婷| 中文字幕日产A片在线看| 日本色色视频| 日本久久高清| AA片在线观看视频在线播放 | 大香蕉久久久久久久久| 东北婷婷五月天| 99久久国产宗和精品1上映| 婷婷五月天激情偷拍| 国产精产国品一二三在观看| 色之综合网| 97色色网| 五月丁香A片| 综合久久综合| 91精品久久久久久久久| 久久久免费精彩视频| 五月婷在线视频免费播放| 久久婷婷大香蕉| 另类激情综合| 深爱五月日韩| 九九色大香蕉| 怡红院AV亚洲一区二区三区H| www.色五月| 99在线观看这里都是精品| 影音先锋男人av资源站| 噜一噜在线| 免费成人va| 岛国资源站| 五月婷婷丁香| 激情五月丁香亭亭| 天堂爱爱| 丁香五月婷婷偷拍| 丁香在线视频| 97黑人精品区| 五月丁香婷婷啪啪| 国熟女视频| 日本一级大片| 婷婷丁香18| 日日日影院| 久久婷婷国产| 伊人无码高清| 日日夜夜婷婷| 任你艹| 变态 另类 在线 | 九热视频在线精品15| 99视频内射三四| 久色欧美| 丁香无月在线观看| 久久婷婷五月天大香蕉| 91超级碰在线| 色婷婷在线综合色播网| 欧美在线视频9| 开心激情婷婷| 日日夜夜婷婷| 色婷婷香蕉| 久久久91精品| 99色在线观看视频| 天天色丁香| 少妇高潮呻吟A片免费看软件| 激情五月天色网站| 五月六月婷| 99这里只有精品在线观看| 色欲Av五月天| 久草大| 九九精品热播|