免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
久久婷婷激情久久| 99爱在线视频| 美女黄频aⅴ视频| 久久99综合| 亚洲激情免费视频| 激情婷婷丁香五月| 丁香五月天激情婷婷丁香六月| 国产精品电| 婷婷久久亚洲| 五月天六月色| 五月丁香六月婷婷综合网缴情| 婷婷无码视频| 色哟哟www| 在线中文AV| 99精色| VfJxEwPH| 开心五月激情婷婷| 五月天激情久色| 激情五月丁香五月| 黄色激情久久| 日韩日比视频| 天天干,天天操,天天射| www.九九婷婷| 日日操夜夜操中国无码| 婷婷丁香熟女| W色综合| se99视频| 操骚货在线| 五月婷婷亚洲色视频| 夜夜操狠狠操天天操| 丁香五月亚洲激情婷婷射| 99视频在线啪| 97干在线播放| 丁香婷婷啪啪| 亚洲综人色综网| www.99久久久久99| 色播五月天婷婷老师| 五月婷婷香蕉视频| 97亚洲精品| 成人午夜视频精品一区| 深夜婷婷 丁香| 亚州美女| 色婷婷丁香花五月天| 成片免费观看视频大全| 亚洲字幕AV一区二区三区四区| 九九精品免费| 图片区 小说区 区 亚洲五月| 婷婷久久大香蕉| 婷婷丁香五月色| 无码人妻一区二区三区免费九色| 国产精品香蕉| 色婷六月| 79精品视频在线观看,| 成人五月天丁香| 天天爱综合网| 亚洲另类电影| 精品夜夜澡人妻无码AV| 亚洲av电影网站| 色五月婷婷7777| 久久全意婷婷| 99ri国产精品| 操操人人| 亚洲五月天综合| 怡红院院久久| 久狠狠狠| 亚洲天堂色色| 九月丁香八月婷婷加勒比| 最新高清无码专区| 日韩三及成人AV片| 九九热超碰| 丁香六月婷月91婷月| 亚洲成人色五月婷婷综合| 五月天婷婷黄色视频| 无码四色色色| 色色色国产| 国产精品色色色色| 五月天亚洲综合网| 开心激情网五月天| 在线五月婷| 欧美日韩国产一二区| 色婷婷影视99| 大香蕉五月天| 丁香五月婷婷天| 欧美婷婷五月丁香| 成人电影一区| 五月婷婷黄网站大全| 国产亚洲av片| 激情婷婷五月亚洲| 成人丁香五月天| 婷婷丁香花五月天| 草草色情综合网| 大香蕉人人网| 五月情综合| dingxiangtingtingliuyue| 色婷婷丁香五月天| 五月丁香五月综合欧美| 伊人成综合五月婷婷| 天堂成人久久| 九九色99| 婷婷六月色| 天天射影院| 日韩三十六页| 夜夜骑操AV| 婷婷五点亚洲| 粉嫩AV久久一区二区三区| 五月婷婷 激情按摩| 99啪在线视频| 欧美天天性| 五月丁香六月天| 色99视频| 久久刺激网| 激情合网婷婷| 97色干| VA婷婷亚洲| 婷婷狠狠18禁久久| 色婷小说| 色的色综合| 五月天综合色| 婷婷五月丁香国产| 婷婷五月天 偷拍| 成人丁香五月| WWW.亚洲无码| 在线区区区| 野战毛片三一3| 思思热在线视频精品| 婷婷五月六月| 日韩操| 婷婷在线免费| 五月丁香久久丝袜啪啪| 日本五月视频| 大陆肏屄视频| 秋霞免费视频| 成人五月天在线观看| 五月丁香婷婷成人网| 久久久人妻| 婷婷大乡焦噜噜| 思思热再线视频| 久久97| 免费在线a| 人人人人人人人人人草| 婷婷综合激情| 丁香五月婷婷亚洲人| 天天色噜| 97人妻碰碰碰久久久久-最近国语高清| 丁香 婷婷五月| 91人人操人人爱| 五月综合人妻| 99er6热在线观看精品6| AV操操操| 超碰AV成人| 成人网站免费sxj| 丁香五月自拍| 五月久久五月激情| 婷婷丁香久久| 国产在线6| 五月天啪啪| 日本久久爽| 色爱五月天| 日木WWW视频| 性爱先锋AV| 久久婷五月婷| 噜噜噜噜噜久| 日产精品一线二线三线芒果| 五月激情精品视频| 婷婷色色网站| 亚洲欧美国产高清vA在线播放| 伊久大香蕉| 日韩婷婷五月天| 99在线精品免费视频| 丁香五月在线人妻| 欧美性生交XXXXX无码小说| 欧美性二区| 六月丁香啪啪| 深爱五月激情综合| 久碰视频| 久9久9热久热| 狠狠干夜夜干| 欧美日韩大黄| 日韩av一区二区在线/日产精品久久久 | 黄色成人网站在线播放| 91丨九色丨熟女丰满| 日韩五月丁香| 五月天婷婷爱| 激情五月五月婷婷| 激情com| 思思热精品在线视频| 九九狠狠干| 高清无码入口| 丁香五月天导航| 97色干| 亚洲永久四色| 99在线精品免费视频| 色婷婷国色天香综合| 九九精品热| 激情婷婷另类| 人人超碰99| www.五月天激情| 青青操日本摸摸看看| 五月天久久网站| 五月情涩综合婷婷| 依人大香蕉| 婷婷五月69| 精品婷婷| 激情婷婷色五月| 日日噜噜久久婷婷五月天| 色中色综合| 丁香五月最新网址| 99自拍视频在线观看| 综合亚洲五月天| 夜夜爽77777妓女免费下载| 最新激情五月天| 欧美性生交XXXXX无码小说| 亚洲成人色五月婷婷综合| www.色五月| 这里只有精彩视| 97在线日本| 亚洲综合视频网| 婷婷成人综合| 黄色高清无码| 4399成人黄A片| 丁香五月婷婷深爱综合激情| 大香蕉AV在线| 婷婷久久五月天| 色热久| 婷婷伊人网| 激情综合网亚洲色图| www.婷婷五月| 中文字幕簧片| 91日韩美女被插视频| 婷婷精品在线| 色婷婷久久综合丁香五月| 色综合中文色综合网| 99热网站| 天天色视频| 久久久久久欧美精品se一二三四| 蒲京久久无码视频| 色99在线视频| 色五月中文网| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 丁香六月久久| 九色在线五月婷婷网址| 久久激情网| 五月丁香色五月| 色婷婷影音| 亚洲综合在线视频| 欧美五月丁香| 五月花丁香婷婷| 丁香九月婷婷综合| 91色欲综合| 能看的AV| 男女99免费视频| 久久欧洲综合网| 久久九九爽| 亚洲99热| 免费做A爰片77777| 日韩AAAAA| 激情色视频| 五月天激情综合网俺也去| 色综啪啪| 偷拍丁香九月激情| A久久| 五月婷婷深深爱| 五月丁香久久丝袜啪啪| 天天爽—爽| 夜夜久久综合网| 538在线精品| 欧美色99| 色五月播五月| 久 久9 9 热 视 频| 天天弄天天爽| 爱爱网址9| 综合久久影院| 激情中文在线| 精品人妻久久久久久| 天天干肏夜夜| 成人版视频在线观看| 久久婷婷原创视频| 亚洲精品**不卡在线播he| 色色色综合| 狼友超碰| 狠狠五月激情丁香六月| 五月丁香在线观看| 色婷狠狠| 久9免费视频| 99热的无码| 国产精品噜噜在线视频| 伦乱美欧| 99成人精品六| 5月丁香综合网| 日韩婷婷五月| 婷婷一本和五月丁香| 亚洲综人色综网| 欧美久久网| 综合色色综合| 色五月婷婷影院| 五月婷综合激情| 中文字幕久久婷九女同| 人妻中文av| 97碰碰人人视频| 久9综合| 成人精品一区日本无码网 | 性爱电影科技贸易有限公司| 亚色网站小视频| 日韩免费乱轮网站| 在线视频九色97| 婷婷五月花| 99视频精品| 欧美99| 色999五月色| 天天操天天干天天日| 第四色激情网| 99在线免费观看| 婷婷99狠狠躁天天躁| 久99热| 玩熟女五十AV一二三区| 色情五月天导航| 青青草网武则天| 变天就操逼婷婷五月| 久久久久久久,99精品视频| 五月综合激情网| 色网站9| 激情五月婷黄版| 日韩av在线免费观看| 午夜亚洲国产精品av一区二区| 亚洲操逼片| 激情网第九色| 五月婷婷无码专区| 久久999久久999久久999久久| 综合五月天| 婷婷五月天亚洲| 亚洲综合成人网| 免费看欧美成人A片无码| 国产无套精品一区二区| www.久久久.com| 综合色色色| 亚洲国产精品VA在线看黑人| 天堂二区| 亚洲综合草草| 综合五月天天天天天五月| 九九热经典视频在线观看| 2025天天日爽| 色五月av| 久久思思99| 人妻性爱av网站| 亚洲综合色丁香婷婷六月| 国产婷婷五月天| 天堂五月婷婷| 国产精品色色| 东京热免费视频网站| 丁香激情网| 狠狠色 综合色区| www.婷婷六月天| 五月丁香啪啪综合| 色婷婷第四色| 99热20| 色播五月婷婷五月| 久久这里有精品| 91碰碰碰久久久久| mmm1717.6dbm人人爱人人操| 激情综合网色播五月| 激情五月天综合网| 激情婷婷视频在线| 天天舔夜夜操www com| 天天五月情| 五月色丁香综合| 五月香六月婷| 色99视频| 婷婷月综合| 久久这里只有精品网| 久久色五月| 97caop| 97在线精品视频| 久色国产| 97人人干| 91久久九久久九久久九久久九久久| 色七色九九| 中文在线成人| 婷婷日韩| 激情五月天网页| 97碰在线| 婷婷五月天亚洲| 中文字幕性爱视频| 91人人爽狠狠狠| 国产精品99久久久久久猫咪| 99热精品在线播放| 五月婷婷福利| 31色区视频免费看| 婷婷五月天AV| 色噜噜,噜噜色| 国产人妻777人伦精品HD| www.狠狠操.com| 亚洲成人AV高清字幕| 五月婷婷色情| 伊人婷婷大香蕉| 婷婷五月天小说网| 色宗合久久五月婷婷| 色综合综合综合| 日日夜夜久| 色色色色色五月丁香| www.色色五月天.com| 日本女天天爽| 97超碰在线观看免费| 99无码| 色色五月婷| 裸睡玩奶头(高H)| 色婷婷五月天天天干天天操天天爽| 久久五月丁香综合| 五月天婷婷久久视频| 婷婷五月丁香高清无码| 婷婷丁香五月天熟女丝袜| 日本九九视频| 亚洲性爱区无码区| 99热99色| 欧美人人超级碰| 99热综合| 成人丁香五月天| 99热精品在线| 五月婷丁香久久综合| 97热这里精品在线视频| www.91色| 五月丁香偷拍| 粉嫩AV久久一区二区三区| 五月丁六月香| 免费精品66| 婷婷五月精品中文| 草草女人亚洲| 亚洲五月婷| 五月丁香婷婷成人综合网| 丁香婷色| Y11111111111少妇电影院| 久久视频这里有精品99| 久久天天| www.狠狠狠狠| 久久之人妻| 成人 AV播放| 97人人干| 欧美99| 五月花在线观看视频| 思思99热在线| 天天摸天天肏| 嫩草国产| 久操人| 人人爽网| 99色色| 伊人婷婷综合| 天天爽天天爽视频| 天天操,夜夜骑| 五月色情婷婷开心五月天| 超碰高清在线| 亚洲AV电影美洲AV电影| 五月天开心色色网| 国产精产国品一二三在观看| 亚洲乱码日产精品BD| 久热 91| 婷婷五月天在线观看| 久久精品亚洲热| 色综合色欲综合天天免费| 丁香五月婷婷啪| 九九人人看| 九九久久腿| 亚洲九九99精品视频在线播放| 激情五月综合网| 欧美婷婷| 狠狠狠狠狠| 婷婷五月天久久久| 99超级碰免费视频| 五月天久久久| 97精品人人A片免费看| 色99网站| 婷婷综合五月| 青青草视频免费观看| 性色做爰片在线观看WW| 最近中文字幕在线中文视频| 精品一二三区久久AAA片| 玖玖色综合| 九九精品免费| 亚洲中文字幕在线观看| 操操综合网婷婷| 激情五月天天| 丁香五月色色婷| 97人人操人人拍| 中文字幕高清av| 大香蕉伊然在亚洲90| 激情精品久久| 毛v一区二区视频| 五月丁香A∨在线| 一区二区传媒视频| 久久xxxx| 开心五月色婷| 天天干天干| 夜夜骑天天操| 91精品久久久久久77777| 欧美性爱中文字幕| 久久99网站| 欧美日韩中文国产一区发布| 婷婷色情 | 思思热视频| 六月色色| 五月天婷婷婷| 婷婷五月天视频小说| 色99色| 日本二级毛片二级毛片| 97干在线| 少妇高潮一区二区三区99欧美| 狠狠久综合| 国产在线中文字幕| 2013AV天堂| 国产亚洲精品久久久久久久久动漫 | 操逼福利视频| 婷婷久久综合久| 精品九九婷婷| 超碰婷婷五月| 国产古装妇女野外A片| 91性高潮久久久久久久久| 亚洲色另类| 天天爱天天做天天爽| 91一起操| 乱精品一区字幕二区| 中文字幕五月久久婷婷| 日本三级日本三级三级人妇四虎| www.亭亭五月天| xx久久| 情欲禁地| 亚洲第一成人无码A片| 久久综合网免费视频| 综合久久99| 婷婷另类小说| 影音先锋男人资源站一区二区| 色综合网上班开心婷婷久久| 婷婷六月久久综合导航| 国产肥白大熟妇BBBB视频| 综合九色| 爱草视频在线观看| 丁香五月天啪啪| 久久综合图片| 26uuu| 激情黄色小说五月天| 天天色伊人| 五月天激情综合网站| 成人五月天综合网| 亚洲激情亚洲激情| 天天色综合色| 97色伦另类图片小说视频 | 26uuu精品一区二区| 色婷婷欧美| 亚洲AV中文在线| 91色色色18| 97超碰人人操| 丁香五月人妻| 欧美交换配乱吟粗大25P| 婷婷丁香五月综合| 国产全是老熟女太爽了| 99热这里只有精品99| 五月天婷婷基地| 深爱激情五月天| 99色综合| 99在线视频操999| 天天做天天爱| 99操网站| 97婷婷在线| 久久久久8888| 99精品视频在线观看| av国产精品| 操大屄五月天视频| 中文字幕五月久久婷婷| 九月综合| 久久五月天婷婷视频 | 丁香成人五月天| 色五月婷婷影院| 婷婷综合激情| 无码激情AAAAA片-区区| 先锋影音男人的天堂AV| 国产婷婷久久| 狠狠干婷婷| 另类激情五月| 26uuu成人网| 午夜色婷婷| 伊人激情| 69精品无码一区二区三区| 99色热视频| 99re6在线视频精品免费| 久99久精品视频| 91九色欧美| 97欧美在线| 婷婷四色五月| 人人爱干人人爱草| 少妇高潮A片无套内谢麻豆传| 日本a片网址| 99视频在线| 五月丁香AV、伊人业余、性色熟妇| 婷婷五月天久久久| 五月激情偷拍婷婷| 大香蕉网 久久| 99热这里只有免费| 97色啪| 欧美精品99| 婷婷激情小说网| 99性爱| 思思热在线精品视频网站| 色色热日| 激情伊人| 婷婷五月丁香高清无码| 婷婷激情五月综合| 狠狠干综合| 蜜桃婷婷狠狠久久| 色综合性视频| 91男同| 久久久久久久久月丁| 久久婷色| 色色色色色色网站| 国产亚洲精品AAAAAAA片| 丁香婷婷午夜| 天天狠狠综合精区| 婷婷五月中文在线| 天天干,天天日| 99热在线观看| 天天射美女| 五月叮香啪| 午夜性做爰电影| 色爽九九| 色五XX| 五月丁香婷婷色| 欧日韩成人| 丁香五月婷婷手机| 亚洲乱码精品久久久久..| 伊人五月综合网| 婷婷色色播五月天| 日本色色网| 欧美视频五区| 欧美黄色韩日网| 国精产品一区一区三区免费视频| www,超碰| 激情五月婷婷丁香| 九九丁香社区欧美激情| 操逼五月婷婷| 色99视| 色播五月| 久久色天堂| 五月激情影视| 男女av免费看| 亚洲中文无码成人| 色九月| 大香蕉人人人| 五月丁香六月婷婷综合网缴情| 性爱综合网| 99激情网| 日本久久网| 色综合九九色综合88| 天天日夜夜拍| ztEJj| 在线A色| 色婷婷成人做爰A片免费看网站| 99超级碰免费视频| 日韩欧美颜射| 国产67194| 丁香五月婷婷色播艳门照| 99er这里只有精品| 色5月婷婷色| sewuyuetingtingiii| 免费无码毛片一区二区A片| WWW.婷婷五月天.COM| 天天日日综合| 六月婷婷国产| 婷婷色情小说| 色婷婷丁香五月天激情综合网| 激情丁香五月天综合| 久久Xx| 98永久精品| 97婷婷久久丁香| 伊人香大香蕉视频| 欧美69久成人做爰视频| 激情五月婷婷网| 成人 在线 日韩| 超碰国产在线观看| 婷婷在线播放| 色婷婷先锋| 国产成人高清| 久久总和99| 99综合| 思思热视频在线观看| 俺去也综合| 丰满熟女人妻一区二区三| 色婷婷五月天不卡| 中文在线视频久1| 天天天天天天操| 五月开心激情| 思思热在线视频精品| 丁香五月婷久久| 蜜桃五月天| 丁香色情五月综合网站| 婷婷五月天偷拍| 丁香美女主播视频在线观看 | 五月婷婷,六月丁香| 五月婷婷啪啪啪| 狠狠的日| 99在线精品免费视频| 成人午夜视频精品一区| 激情五月天天| 色色婷婷综合| 国产一区18| 五月激情婷婷综合| 欧美内射AA| www.天天干.com| 色五月天网| 亚洲 六月 综合| 妻久久人久久| 亚洲综合九九| 亚洲第一成人无码A片| 影音先锋AV资源男人站| 玖玖激情网| 國語久久婷| 亚洲无码成人性爰网| 婷婷五月综合视频| 日本九九视频| 中文字幕按摩做爰| 免费人人操| 五月天色色激情综合| 性小说五月天| 丁香五月激情婷婷婷婷在线观看| 伊人婷婷五月天| 午夜伊人大香蕉| 91久久色| 99热在线99| www.久热| 九九黄色网| 中文字幕成人日韩| 在线成人网站| 婷婷婷婷婷婷婷五月丁香| www.五月婷婷| 91九九九色在| 综合天天综合| 五月天综合视频网| 大香网伊人久久综合| 99久久偷拍视频| 色噜噜综合网| 丁香美女五月天婷婷| 97久久超碰| 五月丁香五月丁香五月丁香五月丁香91| 亚洲另类在线观看| 欧美五月婷婷| 少妇被躁爽到高潮无码文| 性爱五月婷婷| 丁香五月人妻熟女| 色播丁香| 久久码久久无清| 成人婷婷桔色| 26uuu精品国产| 日本在线观看91| 色九月婷婷综合| 中文字幕丰满孑伦无码专区| 丁香五月婷久久| xx人人xx| 婷婷五月丁香网| 亚洲色情久久| 五月丁香啪啪啪啪| 综合亚洲AV| 成人无码精品1区2区3区免费看 | 激情五月婷婷网| 99久视频| 伊人婷婷五月天av| 深爱丁香激情| 这里只有精品视频国产| 欧美97色| 人操91在线| 婷久久高清| 无码激情AAAAA片-区区| 久久激情五月婷婷| 99热在线播放| 婷婷涩五月| 97色色色| 夜夜爽天天干| 99久视频| 人妻精品一区二区三区| 婷婷五月18永久免费视频| 激情六月五月婷婷综合网| 91Chinese在线| 超碰免费大香蕉| 久久99看免费| 综合激情五月婷婷| 97黑人精品区| 久久久久久久8| 久久99精品久久久| 91人人操人人看| 玖色色综合| 99热色综合| 五月婷婷很很色| 99国产精品白浆在线观看免费| 色五月首页| 96丁香六月婷婷蜜桃综合久久| 婷婷综合网| 久久久久人妻精品| 婷婷五月天基地| 深爱综合网| 色婷婷狠狠| 婷婷五月天av| 巴基斯坦粉嫩无码视频| 影音先锋 婷婷| 人人干Av| 夜夜综合色| 26uuu欧美日本| 99九九热视频| 涩综合网| 深爱激情五月婷婷| 99色在线视频| 色婷婷五月天| 日本视频久久| 婷婷情色五月| 99九九热视频| av在线观看免费| 婷婷八月激情| 人妻操操色| 99热中文字幕久久| 99乱视频| 99九无网码| 天天拍天天操| 久久精品国产AV一区二区三区 | 97色精品视频| 久久9久久| 全亚洲最大的婷婷五月天网站COM 丁香五月婷婷狠狠色 | 一级韩国产精品毛| 久热黄色| 婷婷欧美色| 日韩激情人伦人| 青青草成人网| 99在线精品免费视频| 色五月av| 国产精品久久久久久久久久免费| 激情婷婷22月间| 久久久.COM| 亚洲激情图文小说| 99A片| 激情丁香社区| 丁香五月av| 激情骚五月| 久久久18| 精品一区二区三区木瓜| 亚洲人人操| 亚洲激情综合| 九九精品re免费视频| 丁香五月综合激情啪啪| 丁香婷停五月激情综合深爱| 人妻操逼视频| 开心激情五月天网| 综合激情四射一theav| 91vip在线观看| 色五月婷婷、老熟女| 超碰1999| 嫩草AV久久伊人妇女超级A| 日本偷拍九九九| 婷婷伊人綜合中文字幕| 国产成人亚洲综合亚洲| 日韩色色色色色| 丁香六月视频免费观看| 日韩欧美一级大黄网站| 国产在线激情视频| 五月丁香啪综合| 久久只这里有精品| 丁香五月天啪啪| 91九九九九九九| 久久98| 激情欧美丁香五月| 色五月婷婷久久| 久激情| 五月丁香色婷婷基地| 欧美三级欧美一级| 香蕉曰比| 婷婷丁香第一页| 丁香婷婷五月色成人网站| 久草热8精品视频在线观看| 停停综合色色| 六月婷婷狠狠做| 99ri精品| 色五月婷婷777| 欧亚色色| 狠狠99| 91九色PORNY大屁股| 人人操Av| AV在线资源| 91免费试看| 99热综合在线观看| 日日综合网| 蜜乳人妻一区二区三区| 丁香六月无码| 五月婷婷综合在线| www婷婷| 九月综合| 一本狠婷婷综合| 狠狠干五月丁香| 99热日本| 91打屁股视频网站| 337午夜福利| 六月成人网| 国产1区2区3区在线观| 五月婷婷影院| 成人AV网站在线| 久久这里只有欧美| 中文字幕无码人妻少妇免费视频| 婷婷六月丁香激情| 五月丁香久久网| 欧美在线视频9| 99在线精品免费视频| 免费无码毛片一区二区A片| 99热最新| 色五月婷婷亚洲| 亚洲无码成人| 激情五月婷黄版| 婷婷五月天情色| 五月婷婷亚洲| 超级碰碰碰久久网站| 人人摸人人干人人做| 天堂伊人干| 日本人妻丁香婷婷久久寝取熟女五月| 99自拍视频在线观看| 日韩啪啪网| 玖玖综合网| 色综合五月天| 国产99美少妇| 丁香五月成人网| 五月丁香美女| 97人人超| 丁香五月天色| 久久久久人妻| 激情深爱婷婷网| 涩涩五月天| 国产阿姨日皮艹逼内射视频| 这里只有精品久久| 99在线观看亚洲| 五月婷婷丁香| 丁香六月婷婷综合麻豆| 性av| 日日爽天天| 99久久婷婷综合| 无码任你操| 日韩精品一区二区亚洲AV观看| 久久色9| 国产精品操| 99A片| 天天摸天天舔天天爽| www.五月天婷婷| WwW天天干| 五月婷婷很很色| 天天日天天摸| 亚洲天堂大香蕉| 色婷婷色99国产综合精品| 操操操操操操婷婷五月天| 天天做天天爱| 婷婷丁香五月久久| 久久综合五月情| 天天做好综合色| 9999热在线观看| 99热爱爱干干日| 丁香丁婷五月激情| 熟妇人妻中文字幕无码老熟妇 | 九九色逼| 美妞av| 亚洲热视频在线| 婷婷丁香水多多视频| 五月婷婷丁香91| 日日夜夜爽| 激情啪啪五月| 国产激情综合| 97婷婷五月天| 五月丁香激情四射| 69精品人人人人| 韩国天天婷婷| 成人 视频免费观看网站| WWW.17C亚洲精品| 午夜理论片最新午夜理论剧| 色五月亚洲| 这里只有精品免费视频| 97碰超级人人看| 五月综合视频| 激情五月天影院| 九九伊人网| 亚洲日韩久久婷婷伊人| 日本久久性| 琪琪理论片| 久草婷婷视频| 99热9| www.av骚货| 91婷婷色| 成人做爰高潮A片免费视频| 亚洲男女激情| 五月天婷婷基地丁香| 秋霞免费视频| 99操视频| 色情网综合| 丁香五月AV| 色播五月丁香| 久操热| 色玖玖网| 99碰碰| 激情小说 五月天| 九九热中文| 婷久久高清| 涩五月婷婷| 啪啪小说五月天| 天天性视频| 丁香五月婷婷亚洲另类| 日日操天天操| 五月天激情久久| 99re这里只有精品首页| 夜夜 操无码| 九九热内射| 色五月综合| 亚洲尤物在线| 成人在线视频网| 久久久日韩特色特黄AAAA| 激情五月天色色| 六月婷婷八月丁香| 婷婷五月天激情亚洲小说| 丁香五月天啪啪| 91色碰| 婷婷久热| 成人网站在线观看视频| 伊人AV五月婷| 狠狠色丁香婷婷基地| 九月av在线| 激情内射人妻1区2区3区| 九九香蕉网| 丁香婷婷深情五月亚洲| www.日本久久videos| 欧美在线视频免费播放| 久久久91精品| 99视频| 九九热在线观看视频| 五月丁香在线| 综合色五月| 91啪级电影| 激情婷婷五月女| 婷婷99中文字幕| 玖玖综合玖玖| 91seAV| 九月婷婷在线视频| 国产亚洲精品久久久久久郑州| 亚洲成人一区| 色噜噜狠噜噜视频| 久久五月天色| 婷婷网五月| 久久99久久99精品免观看软件| 天天艹天天综合网| 国产亚洲色婷婷久久99精品9j| 丁香五月天91| 五月婷婷涩涩爱| 午夜天堂一区人妻| 五月丁香六月天| 人人草人人舔| 新激情五月天天在线网| 久久草中文日韩欧美| www.97干视频| AVV黄| 色色婷婷丁香五月天| 日韩欧美性爱| 丁香婷婷老熟女综合网| 97久久综合网| 99欧美热| 精品国产a| 丁香花狠狠婷婷亚洲中文字幕| 91操黄| 日操熟女| 亚洲天堂色| 无码一级片| 月色色综合婷婷网| 欧美大道不卡| 色99在线看| 色婷婷综合在线| 97碰碰人人视频| 成人免费视频一区| 五月天婷婷綜合院| 亚洲操精品| www,五月天com| 另类的婷婷| 99热老网站| 天天爽夜夜爽夜夜爽精品| 99这里有精品久久97| 色综合天天网| 天天综合图片| 激情六月日韩| 天天爽天天干| 大香蕉五月丁香| 天天操人人干| 天天操夜夜操| 91无码一区人妻A片蜜| 中文字幕视频色婷婷| 九热视频免费观看| 六月丁香婷婷色狠狠久久| 啪啪激情综合| 九九视频免费| 青青五月天婷婷| 狠狠色婷婷777| 欧美狠狠色| 九九精品热| 男男野外做爰全过程69| 日韩成人影片在线观看| 丁香久久久| 亚洲艹网| 天天透天天摸天天舔| 五月丁香激情综合六月涩涩爱| 婷婷五月天色综合| 狠狠高潮精品亚洲1| 91九色在线| 无码人妻精品一区二区蜜桃色欲| 99热九九九九| 91精品国产99久久久久久天美| 五月天开心激情网色欲无码| 91婷婷五月天综合视频| 色综合射婷婷| 色婷婷电影网| 免费看欧美成人A片无码| 婷婷日本色| 五月婷婷AV| 小视频一区| 色五月五月天色婷婷色五月| 色婷婷六月天| 国产99久| 色色色色区| 99色在线视频观看| www.26uuu.com亚洲电影| 色五月婷婷老师| 国产精品18久久久| 天堂在线婷婷| 色情五月综合婷婷| 26UUU在线观看| 超碰在线视屏| 精品久久久久成人码免费动漫| 婷婷色五月天在线| 五月婷婷亚洲天堂97色婷婷| 97碰久久| WWW激情五月天| 色色亚洲五月天| www.婷婷| 欧美三级巜人妻互换| 午夜成人网站在线观看| 婷婷五月天伦理| 亚洲成人av在线| 亚洲妇女熟BBW| 99九九热在线观看| 久久精彩视频99| 精品色| 狠狠色噜噜色狠狠狠综合色| 天天插天天插天天日| 久久婷婷五月免费视频| 国产精品扒开腿做爽爽爽A片唱戏| 97超碰欧美中文字幕| 天天婷婷操| yellow视频在线观看91| 91九九九九九九| 婷婷五月丁香av网站| 五月天激情中文字幕| av狠狠操| OUMEIRIHANCHENGREN| 久久九九99字幕| 丁香五月91| 婷婷伊人五月丁香天堂网| 91热er| 激情五月综合网| 狠狠久久婷| 综合热无码| 久久狠狠干| 久久精品63| 婷婷色情六月| .青娱乐天天操B| www.超碰| 丁香五月婷婷色情综合| 另类国产欧美视频| 我爱va亚洲va52| 五月天婷婷无码| 综合网啪啪| 五月草视频| www.玖玖九| 99激| 久久激情网| 在线中文字幕av| 天天操天天插| www天堂99| 人人干AV| 五月天激情小说网| 色八月婷婷| 婷婷色婷婷| 九九婷婷综合| 久久丁香五月天| 91亚洲免费片| 国模淫穴色图| 99精品综合| 丁香亚洲婷婷五月| 99热| 亚洲小视频免费看| 激情五月色婷婷| 99自拍网| 97久久视频| 狠狠爱婷婷丁香| 日韩在线一级| 久草婷婷视频| 色婷婷五月天不卡| 久久婷婷网址| 99国产性感视频| JlZZJlZZ8JlZZ亚洲熟女| 五月天色导航| 久久桃花网色婷婷| 五月天性色| 男人的天堂婷婷色五月| 五月婷婷中文网| 激情综合丁香六| 欧美综合在线五月天色婷婷| 牛色色碰| 99热精品9| 色婷婷亚洲综合网站| 五月丁香六月婷婷亚洲| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | site:jszngf.com| 五月天开心网| 五月婷婷六月激情在线| 亚洲精品V天堂中文字幕| 色色色国产| 欧美性爱五月天| 色综合爽| 青草视频在线观看视频| 这里只有国产精品在线| 密着浓厚中出乚交尾GvG935| 久久99成人性爱高清视频| 淫视馆av三区| 99精品免费| 91九色在线视频| 极品人妻VideOssS人妻| 国庆精品久久| se色婷婷视频| 这里只有精品在线看| 海外网站专业操老外| 青青草原精品久久| 99色在线观看视频| 五月婷婷在线观看黄| 色婷婷五月色| 99热这里只有精品99| 夜夜操狠狠操| 五月天激情婷婷| 色激情综合狠狠婷婷| 香蕉AV777XXX色综合一区| 伊人丁香花综合影院| 欧美激情 日韩无码 婷婷 五月天| 激情伊人五月天| 丁香五月欧美成人| 99久久婷婷国产综合精品草原| 99久久er| 9 大屁股在线视频精品| 激情丁香婷婷| 99精品这里只有免费视频| 情色五月天 网站| 狠狠久综合| 亚洲成人在线综合| 另类少妇人与禽zOZZ0性伦| 国产色五月婷婷| 激情婷婷五月| 婷婷中文字幕| 六月婷婷开心| 日本色色色| 婷婷六月香| 综合色播| 色欲婷婷夜夜| 久热9热| 9久久精品| 日韩色情亚洲五月天婷婷| 欧美日韩五月婷婷| 开心五月婷婷| 97色五月婷婷在线| 国产午夜一区二区三区| 丁香五月婷婷Av|