免费国产精品自在自线-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
返回資訊列表
在线综合91| 五月婷婷免费| 这里只有精品视频一区| 色婷婷五月天堂资源| 婷婷五月天综合AV| 超碰狠狠色| 99久在线视频| 色综合偷拍| 综合色色色| 丁香六月激情网C0W| 五月婷六月| 久久人妻熟女一区二区| 久久人妻视频| 久热AA| 五月丁香偷拍| 丝袜激情网| 伊人五月久久| 丁香五月丐人妻| 日逼影音先锋AV男人资源站| 丁香五月大片| 亚洲中文丁香| 五月婷五月婷伊人伊人五月婷| 激情玖玖综合网| 亚洲色在线观看| 天天爽夜爽| 六月丁香深深爱| 黑人无码一区| 九九99香蕉在线视频播放| 亚洲精品一二三| 日日爽日日| 色色色色网站| 丁香五月综合激情啪啪| 色噜噜综合网| 亚洲第一综合| www.丁香六月婷婷久久天堂影院.con| 激情五月婷婷| 亚洲AV无码成人电影| 色婷婷丁香五月天| 婷婷丁香社区| 全部老头和老太XXXXX| 热久久91| 欧美色五月| 天天肏在线观看| 婷婷五月天激情网站| 人人干Av| 亚洲精品大片| 欧美日比视频| 亚洲综合五月天| 久久人人超| 欧美性爱五月天| 99re鈥哸鈥唙| 影音先锋91| 色五月 五月婷婷| 深爱五月激情| 99精品一二三四视频| 99热这里只| 亚洲五月色| 天天夜夜爽| 丁香五月综合网亚洲综合欧美狠狠| 亚洲人妻一区二区| 日本婷婷| 天天爽天天爽| 香蕉99网| 99成人网一区| 99思思热只有在这里看| 婷婷五月色| 99久久五月婷婷| 天天人人人人人人人人人人人| 五月天婷婷丁香导航| 六月丁香五月婷婷| 色婷婷成人| www.99热| 五月婷婷九| 成人五月天丁香婷| 婷婷五月综合在线视频| 激情五月丁香六月综合AVXXXX| 色婷婷狠| 久久九网| 久久五月天婷婷| 99热国内| 婷婷va| 少妇高潮一区二区三区99欧美| www激情| 丁香六月色婷婷欧美| eeuss人妻| 天天草人人摸| 久久人妻久久| 精品一二三区久久AAA片| 第九色区av天堂| 激情网色五月| 少妇婷婷五月天| 婷婷五月天激情丁香| 婷婷天天色| 久久作爱| 超碰免费电影| 丁六月激情| 可以看的av网站| 99综合视频| 免费无码毛片一区二区A片| 99色在线观看视频者| 亚洲AV电影美洲AV电影| 第九色区av天堂| 玖玖色综合色| 丁香五月婷婷少妇| 综合久久久| 九九成人| 色呦呦免费观看| 婷婷五月丁香色情| 午夜丁香婷婷| 亚洲永久四色| 婷婷日欧美在线观看| 伊人色综合网| 日日噜狠狠| 综合视频五月| 亚洲综合五月天婷婷丁香| 国产高潮白浆一区二区| 午夜爱爱爱成人| www.色9| av大片在线| 亚洲精品亚洲人成人网| 91大屁股精品| 日本三级毛片| 狠狠操狠狠操AV| 99精品久久| 六月婷婷九月丁香| 精品99在线观看| 亚洲精品久久久无码| 伊人狠狠色婷婷综合丁香一区| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 2025最新亚洲激情在线| 九热视频| 亚洲色色在线| www.色婷婷| 97干视频| 人妻无码精品一区| 91丨九色丨东北熟女| 五月丁香五月婷婷在线观看| 丁香五月天影院| 日韩人妻无码一区二区| 久色网| 色月九九| 亚洲另类电影| 色丁香在线视频| 天天爽天天干| 天干干夜夜操| 一本到不卡高清DVD| 天天激情夜夜干| 丁香六月天| 九九久久五月天综合伊人| 99热在线观看免费精品| 五月丁香无码| 狠狠色噜噜狠狠狠888| 色五月AV| 亚洲AV免费国产电影| 婷婷五月偷拍| 另类图片五月激情| 思思热在线视频精品| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 依人大香蕉| 久久九九爽| 激情婷婷久久| 五月综合婷婷开心网| 桃色五月天| 日日噜狠狠| 丁香婷婷性爱| 色月视频| 婷婷久久天堂网| 久久五月天婷婷| 96色婷婷| 天天射影院| 天天日日夜夜爽| 久热这里只有精品6| 99久久婷婷| 啪啪啪大香蕉| 欧美色色色| 97超级碰| 婷婷激情五月综合| 精品色色网| 久久久久久久久18久久| 亚洲欧洲午夜成人精品av| 色九月婷婷丁香| 久久色五月| 噜噜噜噜噜在线| 婷婷五月天视频| 色 丁香婷婷| 激婷网| 久久偷拍综合五月天| 婷婷五月天你懂的| 日韩成人精品中文字幕| 色色色色色网| 亚洲日韩26uuu| 九九久久腿| 激情久久久久久久久久| 伦99热| 九九激情| 5月激情天| 99热热热99精品丁香| 五月婷婷AV| 狼人狠狠操| 亚洲精品又粗又大又爽A片| 99av视频| 亚洲色欲欧美一区二区三区| 热99久| 狠狠干综合| 婷婷激情五月天激情| 激情六月丁香| 91 九色 入口| 在线观看视频1区| 97AV在线视频| 亚洲色优| 五月婷婷网五月在线| 久久综合五月天| 538在线精品| 丁香五月六月综合激情| 狠狠插日日干撸| 久久激情网| 97成人视频| 思思热在线精品视频| 婷婷情色五月| 天天做天天爽| 草草视频91| 99热久| 大波美女VA网站| 4399欧美另类视频| 丁香五月婷婷少妇| 亚洲超碰中文字幕| 婷婷丁香社区| 婷婷丁香五月综合| 天天日天天舔| 七七久久综合| 激情综合婷婷| 丁六月激情| 99ri在线观看视频| 五月婷婷色播| 99玖玖人人| 九九无码AV| 国产精品色色| 九九热精品| 亚洲AV中文在线| 激情五月,激情综合网| 丁香五月天色| 99热成人精品| 97深爱伊人综合| 成人AV免费观看| 91久久免费| 亚洲丁香花五月丁香花| 久超免费视频| 欧美日韩成人在线免费| 黑人无码一区| 超碰免费大香蕉| www.爱婷婷.com| 丁香五月综合狠狠| 91在线观看www| 91精品91久久久久77777| 色婷婷丁香五月天| 色婷婷丁香花五月天| 久久小说| 亚洲无码性爱| 五月婷婷日本| 9久精品视频| 色婷婷丁香九月| 九九九九无码| 激情AV在线| 色九月婷婷丁香| 欧美啪啪五月天| 青青日韩| 热中文字幕| 婷婷五月激情网站| 五月停停丁香| 99操免费视频| 97婷婷色| 国产亚洲色婷婷久久99精品9j| 丁香婷婷老司机久操| 久久久9久| 无码色综合| 91丨九色熟女丨首页| 99热99极品观看| 日韩成人AV在线播放| 99re热在线视频| 色综合色综合婷婷热| peg 2区三区四区的| 午夜美女人啪最红院| 久久婷出差欧美色两性综合网| 婷婷丁香一月| 26uuu国产| 99自拍网| 性爱网五月婷婷| www色哟哟| 久热伊人9| 大香蕉啪啪| 五月伊人综合| 日本成人噜噜噜| 日本欧美国产| 丁香六月婷婷色XXXX| 九一娱乐在线观看视频| 色婷婷成人网| 色婷婷视频综合| 另类图片激情五月| 午夜微拍福利| 婷婷五月激情六月丁香| 泰州成人视频| 国产精品第一国产精品| 色九九七七| 欧美成性色| 欧美婷婷色五月| 99视频九九热| www.第四色99| 国产激情综合五月| 久久婷婷丁香| 日韩有码一区| 丁香五月狠狠综合欧美| 中文字幕在线资源| 激情综合网站| 九九热手机在线视频| 五月激情影院| 第四色色色色色丁香五月天| 思思99热在线| 久9热| 丁香激情综合| 色的色综合| 五月天伊人| 性做爰A片免费视频A片直播| 欧美va精品va老师va| 午夜丁香五月天综合| 超碰九色| 99操免费视频| 色色日本| 9色天堂| 欧美天天五月丁香免费观看| 婷婷色中文字幕| 人人操操97| 狠狠五月丁香色婷| 激情六月婷婷| 婷婷五月天成人五月天| 91丨九色丨国产打屁股| 九九人人精品| 欧美色色色色色色色色色色| 丁香五月婷婷大香蕉| 欧美综合丁香网| 亚洲激情在线| 日本欧美在线| 91精品综合久久久久久五月丁香| 啪啪激情综合| www.五月天色色.com| 久久99草五月婷婷| 五月花综合视频| 伊人综合网站| 五月天全国最大成人网| 六月丁丁香| 五月丁香啪啪啪| 婷婷爱爱蜜臀天天操| 婷婷五月六月| 91丁香五月| 深爱五月激情五月| 色婷亚洲| yellow视频在线观看91| 国产欧美第五十五页| 婷婷六月亚洲综合| 日本九九视频| 大香蕉AV在线| 天堂爱爱| 天天色中文字幕女优AV| 六月丁AV| 久热亚洲| 色色色色色色色色网站| 婷婷基地成人五月天| 综合色色网| 99精品久久| 99性视频| 色丁香在线视频| 变态 另类 在线| 天天草天天日| 日本天堂免费99| 婷婷五月天国产在线播放| 午夜av网| 婷婷色丁香五月| 激情九月婷婷| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 五月丁香啪啪啪综合网| 99碰碰| 噜色精品| 国产亚洲99久久精品熟女| 这里只有精品9| AV网址大全在| 色综合com| 精a品a视a频| 色五月婷婷五月天| 夜夜夜夜夜操| 97av在线视频| 俺来也狠狠| 丁香五月天啪啪a日本| 激情五月天99色| 色婷婷AV在线| 五月天婷婷青青| 日韩久久欧亚| 久久婷婷五月天| 色六月视频| 婷婷久久性爱| 国产婷伊人| 丁香五月婷婷综合精品素人| 伊人五月久久| 熟女网站久久| 丁香六月婷婷色XXXX| 色婷婷丁香五月天在线观看| 免费视频舔| 丁香亚洲色综合| 色五月婷婷操逼| 丁香五月综合色婷婷| 北条麻妃九九九国产精品视频| 99亚洲精品视频| 97人人草| 丁香五月手机视频| 少妇性按摩无码中文A片 | 六月丁香啪| 操97| 亚洲av骚货| 99视频内射三四| 亚洲狠狠丁香婷婷香蕉| 丁香五月欧美| 色色色婷婷五月| 可以直接看的av网站| 99啪99| 免费无码毛片一区二区A片 | 可以免费观看的AV| 99九九综合久久九九| 夜夜天天久久婷婷| 97天堂| 成人在线观看一区| 高清a片基地| 亚洲国产99| 丁香五月人妻| 亚洲色综合性| 26uuuavcom| 日韩精品999| 五月做爱| 91人妻九色大屁股| 亚洲精品久久久无码| 婷婷操超碰| 丁香美女主播视频在线观看| 丁香婷五月| 色墦五月丁香| 五月丁香av中文| 婷婷五月天丁香成人社区| 国产AV一区二区三区最新精品| 大香蕉久久久| 中文字幕av在线播放| 欧美成人精品老美女噜噜噜| 欧美婷| 九九综合久久丁香婷婷,开心激情综合网| 成人资源在线| 四月婷婷五月丁香| www.五月天色色色| 午夜丁香综合婷婷| a九九热www| 五月丁香婷婷99| 日韩中出视频| 丁香五月婷婷久久久| 大香蕉伊人丁香五月| 最近中文字幕2019视频1| 成人在线日韩| 色婷五月天| 丁香六月啪啪| 婷婷五月天成人网| 国产无遮挡又黄又爽免费网站| 六月婷婷色综合| 日本婷婷五月天| 91操操| www.99视频| 另类图片天天影视在线观看| 日本五月婷婷| 中文字幕日产A片在线看| 五月天com| 婷婷五月六月丁香| 久久在线视频免费观看| 人操综合| 激情综合在线播放| 久久综合干| 九九久久综合| 狠狠色婷婷丁香六月| 亚洲婷婷六月天| 五月停停丁香| 五月婷婷六月色| 99九九在线视频| 久久9精品| 婷婷五月色| 国产成人+综合亚洲+天堂| 2018国产大陆天天弄| 人妻丰满精品一区二区A片| 青青草大香| 五月丁香婷婷激情爱爱| 六月婷婷色色色| 六月激情婷婷| 亚洲男人的天堂婷婷色五月| 26uuu成人网| 婷婷五月天综合网| 丁香五月婷中字在线| 五月丁香婷婷激情四射迷人| 五月丁香手机在线| www.ppypp| 激情爱爱网站| 国外亚洲成AV人片在线观看| www. 五月. com| 五月天丁香综合久久国产| 久久婷婷五月综合97色一本| 丁香综合网| 日本九九视频| 亚洲乱码日产精品BD| 五月丁香六月婷婷的女人| 婷婷操逼| 这里只有精品免费视频| 99精品网| 欧美色色日韩| 婷婷五月天激情在线观看| 天天做天天爱天天要| 日本精品99| 不卡在线中文字幕无| 五月婷婷色啪| 国产熟女日日骚五月丁香爱| 婷婷五月天激情小说| 人妻丰满精品一区二区A片| 狠狠色九月| 5月婷婷综合| 五月天四色房丁香亭亭| 玖玖色综合| 婷婷色情五月| 五月天激情久色| 超碰激情网| 久9精品视频在线| 色色婷婷五月| 亚洲人成色A777777在线观看| 偷偷与邻居做爰完整视频| 五月丁香在线婷婷蜜桃| 热99在线| 99热亚洲精品| 九九这里有精品| 成人无码精品1区2区3区免费看| 91精品人妻少妇无码影院| 先锋av性爱成人电影| 九九99免费视频| 色色色色色色色色色色色色色色,网站| 国产激情久久| 狠狠综合久久| 五月丁香激| 丁香六月婷婷激情| 99视频热99| 久一这里有精品国产| 色综合久久综合中文综合网| 色月丁| 开心五月婷婷在线| 极品少妇XXXX精品少妇偷拍| 午夜大香蕉| 无码动漫av| Www.久久| 久久色情综合免费网站| 97se在线视频| 五月婷婷 激情五月| 操人妻AV| 5月丁香六月情| 另类少妇人与禽zOZZ0性伦| 超碰在线99| 久久98| 在线成人网址| 狠狠色综合网| 婷婷六月丁香激情| 婷婷色中文字幕| 色色精品色| 岛国av网站| 91婷婷丁香五月天免费视频网站| 久久综合丁香激情五月| 婷婷丁香六月综合激情站| 九九综合色| AV九九| 婷婷六月丁香五月| 日本狠狠爽| 日本强伦片中文字幕免费看| 五月天激情网页| 大香蕉福利导航| 79色色色色| 日本三级色| 色婷五月天| 日本97在线视频| 另类激情综合| 婷婷五月综合婷婷| 国内一级片| 新伍月婷婷| 99久久終合| 99操免费视频| 色5在线| 蜜桃人妻无码AV天堂三区| 美女要搞搞天天搞搞搞网站| yirenjiqingshiping| 五月婷婷六月丁香激情| 色婷久九| 在线只有精品| 五月天婷婷人妻| 另类激情码| 深爱五月婷婷| 狠狠撸激情综合丁香五月天俺来啦| 9久热视频| 久久草中文日韩欧美| 玖热精品综合视频| 久久涩视频| 成人免费高清在线播放| 伊人青草成人| 九97免费视频| 亚洲天天操| 亚洲 无码 中文字幕 中出| 五月天堂六月丁香亚州中文字幕久久| 色婷婷久久综合| 久久这有这里精品| 97精品综合久久内射| 日本色道视频网站| 日日夜夜小色哥| 精品成人在线观看| 色五月,com| 激情久久久久久久久久| 婷婷五月天影视| 婷婷终合色图| 一级片操逼视频| 狠狠爱婷婷丁香| 五月丁香婷婷五月色| 人妻在线网站| 少妇被躁爽到高潮无码文| 日本婷婷色日| 婷婷综合五月天激情| 冬月かえでAV无码播放| 亚洲精品久久久久久久久久吃药 | 九九热99免费视频| 五月天婷婷色播在线网| www.色五月.com| 好叼操在线观看| www.色综合| 五月丁香在线婷婷美女| 久久这里只精品66| 婷婷天堂视频| 超碰97在线观看免费| 五月天色影院| 少妇人妻人伦A片| 久久人人人人妻| 综合激情五月丁香| 六月大香蕉| 99热 日韩| 日本狠狠干| 色五月大| 夜夜爽天天干| 婷婷五月伦理| 伊人六月丁香婷婷| 另类色视频| 变态另类9| 丁香五月www| www五月婷婷88导航| 丁香五月婷婷基地| 五月婷婷香| 91.com男女操| 91超级碰在线| 狠狠搞狠狠操| 婷婷六月啪啪| 五月天综合在线观看| 激情网开心网| 深爱开心五月天| 激情深爱综合| 成人操呦av| 天天做天天爱高潮片| 69久久99精品久久久久婷婷| 亚洲XX网| 五月久久婷婷天堂视频| 五月丁香色婷婷色| 色色五月婷婷久久| 婷婷爱爱蜜臀天天操| 婷婷丁香社区| 久久性刺激| 天天肏高清在线| 五月丁了香蕉综合| av成人在线播放| 色婷婷情片| 亚洲午夜一区二区| 丁香婷婷五月色成人网站| 干一干xxxx| 五月天天堂久久| 五月丁香久| 久久9久| 成人在线日韩| 五月丁香 久久久| 国产淫熟妇| 午夜电影网VA内射| 五月天播播中文字幕| 日日噜噜夜夜狠狠久久丁香五月| 五月丁香啪啪啪| 欧美五月婷婷| 五月丁香综合| 播丁香五月婷婷欧美| 狠狠色噜噜狠狠狠777奇米| 色吊操色妞| 丁香五月婷婷五月| 快乐激情五月色婷婷| 玖玖资源部在线播放| 5月婷婷激情6月| 激情婷婷五月天日本系列| 色在线视频网2025| 日韩性视频| 亚洲午夜AV| AⅤ网站在线看| 亚洲国产成人AV在线| 91色吧网| 丁香五月AV在线| 天天搞天天色综合| 色五月成人| 国产AV一区二区三区最新精品| 综合在线观看99| 97se视频在线| 婷婷五月天Av| 色偷偷五月天| 丁香六月激情综合| 婷婷性爱综合| 久久这里都是精品免费| 九九色热视频| 婷婷五月天激情四射| 成人αV视频免费观看| 正宗黄色毛片| 丁香五月婷婷动漫| 人人爱人人草| 97在线观视频免费观看| 中文AV在线观看| 五月丁香久久久日婷婷久久婷婷日| 婷婷欧美激情| 亚洲色五月| 色婷婷五月天无码视频| 五月情丁香色| 国产精品国产| 日韩人妻白浆视频系列| 97碰在线| 婷婷操婷婷干婷婷射| 婷婷丁香五月天激情| 丁香五月婷婷激情蜜桃| 欧美丁香婷婷天天操| 泰州成人视频| 一起草AV入口| 99热 这里只有精品 国产 日韩| 丁香五月六月婷婷殴美综合| 99久久婷婷国产综合精品草原| 99资源在线| 情情五月天色| 天天操天天曰| 4438成人电影| 深爱婷婷丁香五月激情| 国产一区二区三区影院| 操久久网| 五月丁香色综合| 五月四色激情| 天天干天天日天天插 | 色婷婷av综合网| 五月色婷婷综合色| 五月色婷| 玖玖色资源| 亚洲成人噜噜| www.91五月| 欧洲激情五月天婷婷| 国产在线中文字幕| 超级碰碰碰97免费| 99精品视频网| 丁香六月天婷婷| 天天摸天天高潮天天爽| 202丰满熟女妇大| 色10月婷婷视频| 伊人婷婷综合| 婷婷五月激情的图片| 岛国AV网| 五月综合激情图片| 色情综合网| 亚洲AV影片在线观看| 99热香港| 精品一区二区三区四区五区六区| 色很很96| a在线观看| 丁香六月婷婷综情欧美| 另类在线| 99精品视频免费在线播放| 色婷婷综合网| 另类激情五月天。| 综合网亚洲| 97色色色色| www.婷婷五月天| 婷五月天天| 91色久| 亚洲性图一区二区三区| 八戒青柠影视剧在线观看| 国产精品在线视频| 欧美性生交A片免费看| 天天插夜夜爽| 97超级碰| 激情婷婷五月| 久热91精品| 婷婷色中文字幕| 蜜乳9188| 亚洲成人在线在线| 激情五月,色播五月| 99干在线| 97九色| 思思热久久阴99| 激情五月激情综合网| 人妻熟妇六区| 久久婷婷综合色丁香| 五月丁香六月色| 久久停停超碰| 99热久久这里只有精品| 华人在线免费| 天堂综合久久| 99亚洲精品视频| 狠狠色综合777| 色吧网综合| 色婷婷精品视频| 久久久这里都是精品| 秋霞免费视频| 噜噜色噜噜网| 97干97色| 超级碰碰97在线| www.com五月天| 91热在线| 九月婷婷在线视频| 色色激情五月| 五月天成人在线精品| 伊人大香久久| 天天操婷婷| 五月丁香在线婷婷美女| 9l视频自拍九色9l视频自拍九色9l社区 | 成人av免费观看| 狠狠擼综合| 五月婷婷六月丁香玖玖玫瑰91| 99久久婷婷国产综合精品草原| 激情五月综合色婷婷| 中文字幕亚洲-区久久99婷婷| 99久久激情视频| 丁香五月婷婷在线视频| 色欲婷婷五月天| 亚洲在线免费成人| 欧美色色色色色色色| 热99视频| 色五月婷婷色| 综合久久8| 天天插天天射| 岛国av网站| 丁香六月av| 亚洲成人网站在线播放| 野战J办公桌椅H| 在线观看中文字幕亚洲| 色婷婷激情视频| 亚洲精品亚洲人成人网| 狠狠色婷婷综合开心影视| 亚洲日日日| 99色视频在线| 欧美婷| 久草婷婷| 亚洲狠狠婷婷| 新激情婷婷| 99激情| 麻豆雪千夏| 五月综合缴情网| 色五月涩涩婷婷蜜桃| 久一网站| 丁J香六月首页| 玖玖99免费视频| 久久九区| 久久综合影院| www五月天com| 伊人天堂婷婷| 欧美激情综合色综合啪啪五月| 色婷婷五月天| 99热这里只有免费| 五月婷婷六月爱| 五月丁香啪啪| 亚洲乱码在线观看| 丁香五月婷婷99| 五月天激情亚洲| 丁香五月花| 免费AV播放| 婷婷久久网| 97丁香婷婷| 综合日本婷婷| 中文字幕视频色婷婷| 4399成人黄A片| 久久婷婷影院| 激情综合区| 性生活视频98791| 激情欧美丁香五月| 亚洲六月色| 久久精品亚洲一级牲爱综合| www.丁香黄色五月天人与| 亚洲激情免费久久| 五月丁香在线视频观看| 丁香五月婷婷狠狠色| 大香蕉婷婷五月天| 中文字幕永久免费| 久久婷婷精品| 天天舔天天插天天爱| 狠狠干综合| 丝袜大香蕉| 激情五月天婷婷| 丁香婷婷人妻| 色婷婷中文字母五月丁香| 国产1区2区3区在线观| 天天综合网、天天综合色 | 九九视频这里有精品| 五月激情婷婷女| 婷婷五月美女直播| 精品久久99码| 狠狠爱激情网| 色99在线| 激情综合五月| 欧美69久成人做爰视频| 丁香五月天久久| 久久婷婷网址| 夜色综合网| 超碰99久久| 日本va欧美va欧美va精品| 久久人妻久久久久| 狠狠干2007| 99思思热只有在这里看| 五月天久久婷婷| 激情婷婷丁香五月天| 直接看的av| 久久在线视频免费观看| 亚洲无码性爱| 啪啪六月婷婷| 色色日韩网| 逼逼AV| 欧美成人性爱网| 婷婷激情在线| 婷婷六月色| 九九艹女| 色色狼人综合| 电影爱拉战争免费观看| 99热精地址| 婷婷在线视频| 啪啪综合网| 丁香花狠狠婷婷亚洲中文字幕| 91chinese 在线| 99热这里在线精品| 五月丁香六月婷婷久久久综合| 五月丁香六月婷婷姐| 久草婷婷| 九九婷婷热| 伊人色综合影院视频| 亚洲婷婷月丁香五月| 欧美va在线| 久久激情视频| 波多野结衣不卡AV| 成人AV在线网站| 五月丁香五月天现场视频| 久久亚洲天堂| 亚洲色无码A片一区二区麻豆| se色综合网| 琪琪理论片| 丁香婷婷激情六月五月开心| 丁香五月av| 97久操| 色黑鬼导航| 99热在线播放| 亚洲精品字幕在线观看 | 色呦呦美女| 六月丁香婷婷开心综合基地| 98色花堂98t.R| 99热国品| 九九99免费视频| 色五月综合激情| 激情四射五月天| www.99热精品| 婷婷射图五月天| 五月天色婷婷综合| 日本天堂免费99| 久久一二三视频| 亚洲色碰| 99干在线| 丁香五月激情婷婷激情| 综合色情网| 国产操逼视频网站| 五月婷婷久久激情 | 黄桃AV无码免费一区二区三区 | 天天操天天曰| 亚洲无码www| 天天爽夜夜爽夜爽精品| 久久99精品视频| 婷婷爱爱蜜臀天天操| 2025年最新亚洲在线欧美| 色一情一乱一乱一区91Av| 日韩AV在线免费观看| 思思久久青草热| 久久久久久人妻| 另类专区在线| 五月天婷婷成人网| 99精品手机在线视频| 丁香六月 人妻| 五月丁香啪啪| 一起草Av| 婷婷欧美激情综合| 欧美婷婷丁香五月| 99热只有精| 99在线精品免费视频| 99在线观看视频免费| 色射影院| 99热在线观看精品| 超碰99资源站| 亚洲xx网| 婷婷五月天社区| 欧美亚洲成人在线| 色婷婷五月天激情在线观看| 97人人妻人人艹| 天天操夜夜玩!| 99在线精品免费视频| wWw色五月| 午夜色婷婷| 六月亚洲婷婷6月中文字幕| 日韩视频99| 婷婷亚洲日本| 伊人色综合网| 国产在线6| 五月婷婷六月激情| 国产Va视频| 无码人妻精品一区二区蜜桃色欲| 99爱欧美| 99年操人人爽| 婷婷五月天成人基地| 日韩专区五月天婷婷丁香| 五月天婷爱综合| 六六久久黄色| 99国产这里只有精品| 九一牛视频探花| 九九这里有精品| 在线观看av网站| 超碰超碰在线| 噜噜噜噜婷婷五月天| 色五月网址| 很很干在线视频| 九月性爱网| 欧美这里只有精品| 中文资源在线a | 色日本五月天| 噜噜噜噜噜日本视频| 午夜精品久久久久久久爽| 少妇人妻凹凸视频| 亚洲天堂有码| 爱久综合| 日韩狠狠色婷婷| 婷婷字幕在线| 六月久久婷婷| 涩涩五月天综合| 久久九九激情五月天| 久久综合五月| 亚洲天堂99| 国产AV一区二区三区最新精品 | 97视频久久| 再次出发二| 大香蕉久久伊人网| 九九99九九99偷拍视频免费看| 婷婷五月深情丁香深爱日韩| 国产乱子轮XXX农村| 亚洲成人人人操| 97人人操在线| 97精品人人A片免费看| 色狠久| 91色色色| 丁香婷婷五月份| 激情图片婷婷| 色天天狠狠干| 99视频久久久| 五月丁香六月婷| 久久精彩免费视频| 六月丁香啪| 免费成人网在线观看| 五月丁香六月天| 九九热国产| 综合亚洲色色| www.cao.com久久| 91精品91久久久中77777| 艾小青av| 综合色情网| 五月婷狠狠| 99爱视频在线| 五月丁香在线看| 丁香香五月激情免费视频| 精品九九婷婷| 性一交一乱一交A片久| 少妇人妻人伦A片| 天天干夜夜b| 男人天堂99| 日操夜操天天操不卡| 玖玖热视频| 99在线观看精品视频| 丁香六月av| 99爱99操| 99久久婷婷五月| 欧美日韩91| 婷婷丁香九月| 17.c黄色| 成人婷婷色五月天| 99九九综合久久九九| 91久久网站| 婷婷五月色| 91无码视频| 激情五月天小说| 夜夜天天久久婷婷| 伊九九三级区| 成人色图情色成人网 www.5b5b5bcom 五月天| 国产JK精品白丝AV在线观看| 超碰chaompinm| 激情五月天婷婷丁香 | 这里只有九九精品| 婷婷色播色五月五色五月天色妇| 99久精品| 玖玖激情网| 日韩不卡123| 国产成人精品一区二三区熟女在线| 九九综合久久| 九九re精品视频在线观看 | 综合狠狠干| 日韩操啪| 一区=区操屄高清大全av| 欧美私人家庭影院| 狠狠狠狠狠狠| 婷婷色在线| 99热e| 国产精品国产| 99色视频在线| 色99网| 激情婷婷网| 一级二级香港秋霞欧美欧美秋霞| 色五月天综合| 五月婷伊人| 99re这里只有精品视频6| 久热久色| 五月丁香日本片| 99 热| AV伊人青草丁香六月| 五月婷婷激情网| 色欲av伊人久久大香线蕉影院| 9l视频自拍九色9l视频在线观看| 九九人人看| 停停五月色宗合| www.99热在线| 婷婷色啪| 九九色影院| 五月丁香综合啪啪| 激情五月天婷婷激情| 色色日韩| 精品无码色欲AV| 丁香五月婷婷激情123| 热这里| 色99欧洲色19| 婷婷五月av| 色婷五月天| 超碰在线视屏| 丁香六月情| 青青青在线视频国产| 欧美槡BBBB槡BBB少妇| 潘金莲AAAAAAAAAA| 九九热99在线视频| 91精品人妻少妇无码影院| 狠狠干综合网| 人人爽天天莫| 深爱开心激情网| 天天干狠狠艹| 五月婷婷五月色| 天天综合网91| 色色五月婷| 婷婷大香焦| 五月婷婷黄色毛片| 九九色人| 美女要搞搞天天搞搞搞网站| WWW.99热| 97影院一级片| 国产精品电影| 香蕉曰比| 4438激情网| 人妻内射麻豆视频| 亚洲夜夜操| 亚洲av网站在线观看| 色色色欧美| www.cao.com久久| 五月丁香六月综合基地| 第四色五月激情网| 欧美日韩AAAA| 五月叮香啪| 99操九九网| 91干在线| 丁香五月天在线直播观看| 天天狠天天叉| 99热在线播放| 久久久.www| 色婷婷综合网| 亚洲最大五月天成人网| 欧洲亚洲免费视频9| 免费看欧美成人A片无码| 日本在线观看91| 久久永久网址| 激情五月色在线播放| 亚洲AV成人在线| www.金莲av| 色婷婷综合久久久久| 九月色婷婷综合| 六月激情婷婷| 中文AV网站| 成人日韩欧美| www.婷婷.com| 国产人妻777人伦精品HD| 综合激情专区| www.日韩艹| 91超碰在线观看| 婷婷色综合网日韩国产| 五月婷婷在线短视频| 五月天亭亭俺也| 夜精品无码A片一区二区蜜桃| 丁香六月激情综合网| 亚洲欧洲自拍图片专区五月天| 色九亚洲| 婷婷五月综合社区在线| 丁香五月六月久久综合 | 91人操| 丁香五月天成人| 91丨九色丨国产打屁股| 99在线视频女女视频| 婷婷丁香五月噜噜噜| 色五月成人| 婷婷99狠狠躁天天躁中| 天天综合影院| 搡BBBB搡BBB搡五十| 99色视频| 操逼六区| 亚洲欧美日韩另类| 伊人婷婷激情| 99色综合| 婷婷五月天黄色| 中文av网| 五月丁香六月停停停| 色香蕉婷婷| 九九久久污| 五月丁香伊人网| 丁香五月色情| 在线播放成人网站| 97五月久久丁香婷婷| 亚洲午夜国产成人电影VA国产欧…| 天天 青草 制服丝袜 在线| 99热亚洲精品| 91性人人| 日韩五月丁香| 一级片无码| 亚洲精品小视频| 国产69久久久欧美黑人A片| 六月丁香婷| 亚洲av网站| 人妻视频在线| 五月婷婷激情网| 九九精品re免费视频| 天天干com| www.99色在线| www.五月丁香av| 成人免费黄色短视频| 深爱激情AV| 少妇熟女视频一区二区三区| 99热只有精品在线播放| www.日日夜夜.com| 91操碰| 五月丁香啪啪综合| 思思热天天看| 婷婷五月天网| www。狠狠干。com| 色婷婷丁香五月| 婷婷五月俺要去|