日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

嵌入式Linux驅(qū)動開發(fā):從MFD到syscon與regmap的底層機制

嵌入式Linux驅(qū)動開發(fā):從MFD到syscon與regmap的底層機制 1. 一個物理設(shè)備為什么要拆成一群驅(qū)動MFD的出現(xiàn)邏輯1.1 單驅(qū)動時代的維護噩夢做嵌入式Linux驅(qū)動開發(fā)的人十有八九會遇到這樣一種芯片一顆芯片里既有ADC又有GPIO還帶兩路LDO、一個看門狗和一個復(fù)位控制器。我最早接手這種項目時習(xí)慣性地在一個驅(qū)動文件里把這些功能全寫了結(jié)果probe函數(shù)長得像流水賬IRQ處理里塞滿了各種功能的判斷IOCTL滿天飛。后來同事想單獨復(fù)用里面的GPIO驅(qū)動幾乎要連鍋端光是拆文件就拆了兩天。這種芯片在嵌入式領(lǐng)域太常見了PMIC、SoC內(nèi)部的混合信號模塊、外掛的編解碼器都是典型的一個物理設(shè)備多類功能形態(tài)。如果不做拆分直接的痛點有四個功能耦合ADC讀到一半GPIO來了中斷兩個邏輯互相干擾出問題很難定位。復(fù)用困難換一塊主控想保留其中一路regulator的邏輯根本沒法單獨搬走。生命周期混亂一個probe里要初始化多個子系統(tǒng)任何一個失敗都會拖垮全部功能。代碼結(jié)構(gòu)失控維護半年后沒人敢動這個文件改動一處影響全局。所以Linux內(nèi)核才搞出了MFDMulti-Functional Device子系統(tǒng)。它的核心思想很簡單把一個物理設(shè)備通過虛擬總線拆分成多個平臺設(shè)備每個設(shè)備專職做一類事。這樣ADC驅(qū)動只管ADCregulator驅(qū)動只管穩(wěn)壓GPIO驅(qū)動只管引腳各干各的最后通過資源描述把共享的中斷、寄存器配置傳遞下去。1.2 MFD做了一件什么事mfd_cell與子設(shè)備注冊MFD的使用模式看一眼代碼就明白了。主設(shè)備驅(qū)動在probe階段做基礎(chǔ)初始化然后構(gòu)造一個mfd_cell數(shù)組里面描述每個子功能模塊的名字、資源、設(shè)備樹compatible等最后調(diào)用devm_mfd_add_devices()一次性把這些cell注冊成平臺設(shè)備。static const struct mfd_cell my_pmic_devs[] { { .name my-pmic-adc, .of_compatible vendor,my-pmic-adc, .num_resources 1, .resources adc_resources, }, { .name my-pmic-gpio, .of_compatible vendor,my-pmic-gpio, .num_resources 1, .resources gpio_resources, }, };主驅(qū)動的probe短很多static int my_pmic_probe(struct platform_device *pdev) { struct regmap *regmap; int irq; regmap devm_regmap_init_i2c(to_i2c_client(pdev-dev), config); if (IS_ERR(regmap)) return PTR_ERR(regmap); irq platform_get_irq(pdev, 0); if (irq 0) return irq; /* 注冊中斷控制器 */ ret devm_regmap_add_irq_chip(pdev-dev, regmap, irq, IRQF_ONESHOT, 0, irq_chip, irq_data); if (ret) return ret; return devm_mfd_add_devices(pdev-dev, PLATFORM_DEVID_NONE, my_pmic_devs, ARRAY_SIZE(my_pmic_devs), NULL, 0, NULL); }每個子模塊的驅(qū)動寫法和普通platform驅(qū)動完全一樣自己注冊一個platform_driver匹配子節(jié)點compatible后在probe里通過platform_get_resource()拿到寄存器地址或中斷號。MFD負(fù)責(zé)的只是生出這些子設(shè)備子設(shè)備完全不知道父設(shè)備的內(nèi)部實現(xiàn)。這樣設(shè)計還有一個隱藏好處很多PMIC可以直接復(fù)用內(nèi)核里現(xiàn)成的子驅(qū)動比如regulator框架下的regmap_regulator驅(qū)動、GPIO框架下的gpio-regmap驅(qū)動只要MFD把regmap和中斷域傳遞正確幾乎不用新寫驅(qū)動代碼。如果覺得這些概念抽象可以把MFD想象成物業(yè)公司一棟大樓物理芯片有很多房間子功能物業(yè)統(tǒng)一負(fù)責(zé)水電寄存器映射、門禁中斷控制器各家公司子驅(qū)動租下房間后按自己的方式經(jīng)營水電出問題找物業(yè)內(nèi)部業(yè)務(wù)互不干涉。2. syscon底層到底藏了什么regmap的誕生和解剖2.1 syscon是“系統(tǒng)控制寄存器區(qū)的統(tǒng)管者”說完MFD再來看syscon。這兩個東西出現(xiàn)頻率一樣高但解決的問題完全不同。SoC里經(jīng)常存在這樣一段寄存器區(qū)域它既不屬于某個標(biāo)準(zhǔn)外設(shè)也不歸某個驅(qū)動獨占而是一堆雜七雜八的控制位混在一起。比如0x1000處是某個外設(shè)的軟復(fù)位寄存器0x1004處是睡眠喚醒使能0x1008處又變成了另一個外設(shè)的時鐘門控。傳統(tǒng)做法是每個驅(qū)動各自ioremap這段地址然后各讀各的。這樣做的后果很糟糕同一段物理內(nèi)存被映射了好幾份虛擬地址沒有統(tǒng)一緩存機制也沒法用內(nèi)核的調(diào)試框架統(tǒng)一查看。syscon就是來解決這個問題的。它把這堆系統(tǒng)控制寄存器抽象成一個統(tǒng)一的設(shè)備節(jié)點由內(nèi)核helper在底層創(chuàng)建一個全局共享的regmap實例。別的驅(qū)動想操作寄存器時不再自己ioremap而是通過syscon API去拿到這個regmap然后走regmap的讀寫接口??吹竭@里你應(yīng)該明白了syscon本身不是一個功能驅(qū)動它更像一個寄存器倉庫管理員。誰需要用這段寄存器就到倉庫管理員那里登記一下領(lǐng)一把鑰匙struct regmap *用完了歸還。倉庫內(nèi)部用什么方式管理貨架、怎么做緩存、怎么加鎖調(diào)用者不需要關(guān)心。2.2 regmap不是簡單的read/write套殼很多初學(xué)者把regmap理解成封裝了read/write函數(shù)的寄存器操作工具這個理解沒錯但低估了它的含金量。regmap真正的價值在于分了兩層緩存層可以配置cache_type把寄存器值緩存在內(nèi)存里避免頻繁訪問慢速總線比如I2C。物理層通過regmap_config里注冊的reg_read、reg_write函數(shù)指針對接實際總線可以是MMIO、I2C、SPI甚至可以是自定義的回調(diào)。static const struct regmap_config my_syscon_config { .reg_bits 32, .val_bits 32, .reg_stride 4, .max_register 0x3ff, .cache_type REGCACHE_RBTREE, };對于一個regmap實例幾乎所有操作都收斂成幾個通用函數(shù)regmap_read(regmap, reg, val)讀單個寄存器。regmap_write(regmap, reg, val)寫單個寄存器。regmap_update_bits(regmap, reg, mask, val)讀-改-寫保證并發(fā)安全。regmap_field_read/write操作寄存器里某個bit域不用手動移位并掩碼。syscon在底層創(chuàng)建regmap時會自動從設(shè)備樹節(jié)點的reg屬性里解析地址和長度并且根據(jù)reg-io-width屬性設(shè)置寄存器位寬一般不需要驅(qū)動開發(fā)者手動配置那些初始化參數(shù)。這也是syscon API能短小精悍的原因——它把最繁瑣的配置都干掉了。另外注意一個細(xì)節(jié)syscon創(chuàng)建的regmap默認(rèn)是沒有打開cache的。因為系統(tǒng)控制寄存器往往需要及時反映硬件狀態(tài)如果開了緩存又沒處理好失效邏輯讀到的可能是舊值。這一點在后面的設(shè)備樹坑里會詳細(xì)展開。3. MFD syscon 合體流程從probe到子設(shè)備拿到regmap3.1 一條完整的注冊鏈路MFD和syscon經(jīng)常一起出現(xiàn)因為很多MFD芯片本身就是多個功能模塊共享一大段寄存器空間的典型。它們合體后的注冊鏈路大致是這樣的內(nèi)核在設(shè)備模型初始化階段或devm_platform_iomap_resource()被調(diào)用時MFD主驅(qū)動先probe。主驅(qū)動解析設(shè)備樹找到compatible syscon的節(jié)點調(diào)用syscon_node_to_regmap()獲得統(tǒng)一regmap。主驅(qū)動用這個regmap繼續(xù)初始化芯片的基礎(chǔ)功能讀版本號、響應(yīng)軟復(fù)位、初始化中斷控制寄存器。主驅(qū)動注冊MFD的子設(shè)備通過mfd_cell或設(shè)備樹子節(jié)點把資源、中斷域傳遞下去。子驅(qū)動probe時再次通過syscon API拿到同一個regmap然后各自操作屬于自己的寄存器區(qū)間。這種設(shè)計最關(guān)鍵的一點是所有子驅(qū)動共享同一個regmap實例而不是各自創(chuàng)建一份。這樣不僅節(jié)省內(nèi)存還能保證并發(fā)安全——regmap內(nèi)部自帶了spinlock或mutex多個驅(qū)動同時讀寫同一段寄存器不會打架。以實際代碼為例。假設(shè)一個PMIC主驅(qū)動的probe里有這樣的初始化static int pmic_main_probe(struct platform_device *pdev) { struct device *dev pdev-dev; struct regmap *regmap; struct regmap_irq_chip_data *irq_data; unsigned int version; int ret; /* 通過設(shè)備樹phandle找到syscon節(jié)點對應(yīng)的regmap */ regmap syscon_regmap_lookup_by_phandle(dev-of_node, pmic,regmap); if (IS_ERR(regmap)) return PTR_ERR(regmap); /* 讀取芯片版本寄存器的bit[4:0] */ ret regmap_read(regmap, PMIC_VERSION_REG, version); if (ret) return ret; dev_info(dev, PMIC version: 0x%x\n, version 0x1f); /* 在這里注冊regmap irq chip為子設(shè)備提供中斷 */ ret devm_regmap_add_irq_chip(dev, regmap, irq, IRQF_ONESHOT, 0, pmic_irq_chip, irq_data); if (ret) return ret; /* 注冊MFD子設(shè)備 */ return devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, pmic_cells, ARRAY_SIZE(pmic_cells), NULL, 0, irq_data); }再來看子驅(qū)動側(cè)比如ADC子驅(qū)動。它的probe里不需要重復(fù)初始化regmap直接查phandle拿現(xiàn)成的regmap就行static int pmic_adc_probe(struct platform_device *pdev) { struct device *dev pdev-dev; struct regmap *regmap; regmap syscon_regmap_lookup_by_phandle(dev-of_node, syscon); if (IS_ERR(regmap)) return PTR_ERR(regmap); /* 利用regmap_field取得某個ADC轉(zhuǎn)換結(jié)果位域 */ adc_data-field devm_regmap_field_alloc(dev, regmap, adc_field_config); if (IS_ERR(adc_data-field)) return PTR_ERR(adc_data-field); return 0; }這種模式的好處顯而易見主驅(qū)動負(fù)責(zé)大而全的基礎(chǔ)工作子驅(qū)動負(fù)責(zé)小而專的業(yè)務(wù)邏輯。寄存器映射、中斷分發(fā)這些容易出錯的部分被MFD和syscon徹底封裝掉了。3.2 simple-mfd與syscon配合的設(shè)備樹解法在設(shè)備樹層面一個常見的組合是compatible syscon, simple-mfdpmic: pmic20000000 { compatible syscon, simple-mfd; reg 0x20000000 0x1000; #address-cells 1; #size-cells 1; adc0 { compatible vendor,pmic-adc; reg 0x0 0x100; interrupts 5 IRQ_TYPE_LEVEL_HIGH; /* 子驅(qū)動拿到同一顆芯片的regmap */ syscon pmic; }; gpio100 { compatible vendor,pmic-gpio; reg 0x100 0x100; gpio-controller; #gpio-cells 2; }; };這里syscon負(fù)責(zé)把這顆芯片的寄存器空間變成統(tǒng)一regmapsimple-mfd則告訴內(nèi)核這個節(jié)點下面還有子設(shè)備需要of_platform_populate()把它們都創(chuàng)建出來。兩者疊加之后一個節(jié)點同時完成了寄存器倉庫和子設(shè)備掛載兩個工作。需要提醒一下simple-mfdsyscon的寫法在內(nèi)核社區(qū)有過一些爭論。某些維護者認(rèn)為simple-mfd節(jié)點的子設(shè)備不應(yīng)該共用父節(jié)點的regmap字段而應(yīng)該通過phandle顯式傳遞。但從實際項目來看這種寫法在大量SoC平臺都工作正常只要子設(shè)備驅(qū)動里用syscon_regmap_lookup_by_phandle()明確引用父節(jié)點而不是隱式依賴就會很安全。3.3 中斷與寄存器regmap_irq_chip讓父設(shè)備更穩(wěn)定MFD芯片的另一個復(fù)雜點在中斷。一顆PMIC通常只有一個中斷輸出引腳但內(nèi)部可能掛了十幾個中斷源ADC完成中斷、過壓保護中斷、看門狗超時中斷、按鍵檢測中斷……如果這些都要子驅(qū)動各自去處理原始中斷那父設(shè)備的中斷引腳早就被搶破了。Linux內(nèi)核的regmap_irq_chip方案可以完美處理這件事。它利用regmap讀寫能力直接操作中斷狀態(tài)寄存器和屏蔽寄存器把單一物理中斷拆成多個虛擬中斷并建立一個irq domain讓子設(shè)備通過platform_get_irq()拿到屬于自己的中斷號。static const struct regmap_irq pmic_irqs[] { REGMAP_IRQ_REG(PMIC_IRQ_ADC_DONE, 0x10, BIT(0)), REGMAP_IRQ_REG(PMIC_IRQ_OVP, 0x10, BIT(1)), REGMAP_IRQ_REG(PMIC_IRQ_WDOG, 0x10, BIT(2)), }; static const struct regmap_irq_chip pmic_irq_chip { .name pmic-irq, .status_base 0x10, .mask_base 0x12, .unmask_base 0x13, .ack_base 0x11, .num_irqs ARRAY_SIZE(pmic_irqs), .irqs pmic_irqs, };實現(xiàn)這種機制之后子驅(qū)動像處理普通外設(shè)中斷一樣注冊request_threaded_irq()就可以寄存器層面的狀態(tài)判斷、中斷清除全部由regmap_irq_chip自動完成。這既簡化了子驅(qū)動又保證了中斷響應(yīng)的一致性。4. 驅(qū)動側(cè)最常用的syscon API選型與用法4.1 查找regmap的三個API對比syscon相關(guān)API里日常打交道最多的就是下面這三個API參數(shù)適用場景返回說明syscon_node_to_regmap()struct device_node *np已知節(jié)點指針直接獲取該節(jié)點對應(yīng)的regmap成功返回struct regmap *失敗返回ERR_PTRsyscon_regmap_lookup_by_compatible()const char *compatible不知道具體節(jié)點只知道compatible字符串同上syscon_regmap_lookup_by_phandle()struct device_node *np,const char *property子驅(qū)動通過設(shè)備樹屬性引用父syscon節(jié)點同上三者的關(guān)系可以用一句話概括syscon_node_to_regmap()是底層實現(xiàn)后兩個是它的封裝。實際開發(fā)中我推薦優(yōu)先使用syscon_regmap_lookup_by_phandle()因為它在設(shè)備樹里顯式聲明了依賴關(guān)系可讀性最強也方便后續(xù)維護的人一眼看出這個驅(qū)動在用哪個syscon節(jié)點。一個容易忽略的細(xì)節(jié)這幾個函數(shù)返回的都是ERR_PTR判斷失敗時一定要用IS_ERR()不能直接比較NULL。很多新手在probe里寫regmap syscon_regmap_lookup_by_phandle(np, syscon); if (!regmap) return -EINVAL;這樣寫一旦返回ERR_PTR(-EPROBE_DEFER)會被當(dāng)成成功后面繼續(xù)操作就會訪問非法指針內(nèi)核直接oops。正確的寫法是regmap syscon_regmap_lookup_by_phandle(np, syscon); if (IS_ERR(regmap)) { ret PTR_ERR(regmap); if (ret -EPROBE_DEFER) return ret; dev_err(dev, failed to get syscon regmap: %d\n, ret); return ret; }4.2 讀寫寄存器regmap_update_bits與regmap_field實操拿到regmap之后具體的寄存器操作也有講究。直接regmap_write()寫一個整值寄存器是最簡單的情況但實際項目里更多時候要求只改某個寄存器里的某幾個bit其他bit保持不變。這時候如果用read-modify-write需要自己加鎖、自己移位非常容易寫錯。regmap_update_bits()就是為這種場景準(zhǔn)備的/* 在寄存器0x20的bit[7:5]寫入新的分頻系數(shù) */ ret regmap_update_bits(regmap, 0x20, 0xe0, div 5);參數(shù)含義分別是regmap、寄存器地址、掩碼哪幾位會被改動、新值已經(jīng)左移對齊到位域上。regmap內(nèi)部會處理讀改寫和并發(fā)保護比自己手動操作可靠得多。更進(jìn)一步的方案是regmap_field。它的作用是預(yù)先描述一個位域之后操作這個位域只需要一句regmap_field_write()完全不用管移位和掩碼。static const struct reg_field version_field REG_FIELD(0x00, 0, 4); field devm_regmap_field_alloc(dev, regmap, version_field); if (IS_ERR(field)) return PTR_ERR(field); ret regmap_field_read(field, version);假如寄存器地址是0x00bit[0]到bit[4]存的是版本號用REG_FIELD(reg, lsb, msb)聲明之后regmap_field_read()讀出來的就直接是版本號數(shù)值不需要知道它在哪個bit、也不需要手動移位。平時我寫MFD子驅(qū)動凡是涉及芯片功能配置的地方都傾向用regmap_field。它還有一個好處是讓寄存器布局變得更加集中和顯眼后續(xù)查硬件手冊對照代碼時效率高很多。4.3 一個可供抄作業(yè)的例子下面用一段完整的最小示例演示子驅(qū)動里如何拿到syscon regmap并完成讀版本號更新bit域兩步典型操作static int demo_probe(struct platform_device *pdev) { struct device *dev pdev-dev; struct regmap *regmap; struct regmap_field *cfg_field; unsigned int version; int ret; regmap syscon_regmap_lookup_by_phandle(dev-of_node, syscon); if (IS_ERR(regmap)) return dev_err_probe(dev, PTR_ERR(regmap), failed to get syscon regmap\n); ret regmap_read(regmap, 0x00, version); if (ret) return ret; dev_info(dev, chip version: 0x%x\n, version); cfg_field devm_regmap_field_alloc(dev, regmap, REG_FIELD(0x20, 1, 3)); if (IS_ERR(cfg_field)) return PTR_ERR(cfg_field); /* 開啟某個功能位同時保留其他bit不變 */ ret regmap_field_write(cfg_field, 0x5); if (ret) return ret; return 0; }dev_err_probe()是內(nèi)核5.2以后比較推薦的錯誤返回方式它既能打印日志又能在-EPROBE_DEFER時靜默處理避免啟動階段刷屏。如果你維護的內(nèi)核版本較老沒有這個函數(shù)也可以自己用IS_ERR加條件判斷實現(xiàn)同樣的邏輯。5. 設(shè)備樹里容易被忽視的坑5.1 compatible的順序問題compatible屬性是有順序語義的。內(nèi)核在匹配驅(qū)動時會按順序比較第一個字符串。所以compatible syscon, simple-mfd和compatible simple-mfd, syscon效果完全不同。syscon框架在of_syscon_register()里會遍歷compatible屬性找到包含syscon的字符串才會執(zhí)行注冊邏輯。如果把simple-mfd放在前面某些內(nèi)核版本在遍歷到第一個字符串時可能不會繼續(xù)查找syscon導(dǎo)致syscon注冊失敗。正確做法是把syscon放在第一個compatible syscon, simple-mfd;這一點在文檔里經(jīng)常被忽略但在實際排障中能省下很多時間。如果你發(fā)現(xiàn)子驅(qū)動調(diào)用syscon_regmap_lookup_by_phandle()返回-EINVAL先檢查一下這個順序。5.2 reg重疊問題syscon的管理粒度是節(jié)點。兩個不同的設(shè)備樹節(jié)點即使reg指向同一段物理地址也會被syscon創(chuàng)建成兩個獨立regmap實例。這意味著同一塊寄存器可能被兩個驅(qū)動同時訪問卻沒有任何同步機制。我見過一個項目兩個模塊分別定義了syscon節(jié)點指向同一段寄存器區(qū)域各自操作自己的bit。結(jié)果A模塊寫入的數(shù)據(jù)被B模塊的緩存覆蓋問題極其隱蔽用調(diào)試器看硬件寄存器完全正常但軟件讀出來總是不對。正解是整個系統(tǒng)里同一段物理寄存器區(qū)域只允許一個syscon節(jié)點。其他模塊通過phandle引用這個唯一節(jié)點獲取regmap。所以設(shè)備樹里看到重復(fù)的syscon定義不要猶豫先合并再往下查。5.3 cache與只讀寄存器如果你在子驅(qū)動里自建regmap并打開cache會遇到一類典型問題寄存器由硬件自動更新比如中斷狀態(tài)寄存器、ADC結(jié)果寄存器但regmap緩存不會自動失效驅(qū)動讀到的永遠(yuǎn)是緩存里的舊值。syscon默認(rèn)regmap是不開cache的cache_type REGCACHE_NONE所以直接用syscon場景下這個問題不常見。但如果你在MFD主驅(qū)動里自定義了regmap且開了cache必須對硬件自動更新的寄存器做特殊處理要么在讀取時設(shè)置regmap_bypass標(biāo)志跳過緩存要么把這些寄存器設(shè)置為volatile讓regmap每次都走物理總線讀取要么在硬件更新后手動調(diào)用regmap_cache_only(false)并flush。在配置regmap_config時如果確定某些寄存器是硬件自動更新的可以在volatile_reg回調(diào)里返回true這是最干凈的方案。5.4 probe順序與EPROBE_DEFERsimple-mfdsyscon場景下子設(shè)備的probe順序并不嚴(yán)格。如果子驅(qū)動依賴主MFD的regmap_irq_chip已經(jīng)注冊完畢而設(shè)備樹順序恰好讓子設(shè)備先probe就會遇到中斷資源不存在的問題。這種情況下子驅(qū)動不能直接將-ENXIO返回了事而應(yīng)該返回-EPROBE_DEFER告訴內(nèi)核我還沒準(zhǔn)備好過一會兒再試我一次。內(nèi)核會在后續(xù)時機重新觸發(fā)probe直到依賴條件滿足。判斷一個錯誤是否應(yīng)該返回-EPROBE_DEFER有個簡單標(biāo)準(zhǔn)如果這個資源是由另一個驅(qū)動/框架注冊的并且名字里帶devm_或irq_domain大概率需要-EPROBE_DEFER。比如platform_get_irq()返回-ENXIO時先別急著報錯確認(rèn)中斷域是否已注冊如果沒注冊就返回-EPROBE_DEFER。6. 調(diào)試經(jīng)驗和一次真實排障6.1 用debugfs把regmap扒開看內(nèi)核默認(rèn)開啟CONFIG_DEBUG_FS和CONFIG_REGMAP_DEBUG后每個regmap實例都會在/sys/kernel/debug/regmap/目錄下生成一個子目錄。目錄名通常是設(shè)備名加序號里面有registers當(dāng)前所有寄存器的值。access每個寄存器的可讀可寫權(quán)限表。range寄存器地址范圍信息。遇到驅(qū)動讀出來的寄存器值和硬件手冊對不上第一步就去看這里cat /sys/kernel/debug/regmap/*/registers輸出大概是00: 00000010 04: 00000000 08: 00000001這能快速告訴你是驅(qū)動讀錯了地址還是物理總線上的值本身就不對。如果地址范圍里沒有你要看的寄存器那多半是max_register配置太小了regmap直接拒絕越界訪問。6.2 devmem交叉驗證debugfs只能反映軟件層面的regmap視角要驗證硬件真實狀態(tài)還需要一把物理標(biāo)尺。在嵌入式Linux的busybox環(huán)境里通常有devmem工具# 查看物理地址0x20000020處的32位值 devmem 0x20000020 32這個命令繞過regmap直接讀物理地址。如果devmem讀出來的值與debugfs里regmap顯示的不一致問題基本可以鎖定在regmap緩存或者寄存器地址映射方向如果兩邊一致但和硬件手冊預(yù)期不符那就要檢查設(shè)備樹里的reg地址、reg-io-width是否與芯片選型匹配了。devmem讀出來的物理地址必須和reg屬性完全對應(yīng)如果syscon節(jié)點有多個reg段還要確認(rèn)你讀的是哪一段。這里沒有捷徑只能對著芯片手冊逐項核對。6.3 共享regmap的釋放坑syscon返回的regmap是所有驅(qū)動共享的負(fù)責(zé)創(chuàng)建它的一般是syscon框架或MFD主驅(qū)動。子驅(qū)動在remove時千萬不要去調(diào)用regmap_exit()或devm_regmap_exit()之類的東西這個regmap并不歸你管。我踩過一次很隱蔽的坑某子驅(qū)動在remove里加了regmap_exit(regmap)試圖清理資源。結(jié)果另一個正在運行的驅(qū)動拿著同一個regmap指針下一次regmap_read直接崩潰而且現(xiàn)場看起來完全像硬件故障。排查了整整一個下午最后在代碼review里發(fā)現(xiàn)是這個熱心的release函數(shù)干的好事。關(guān)于共享對象原則很簡單誰創(chuàng)建誰釋放。通過syscon API拿到的regmap生命周期由syscon框架統(tǒng)一管理子驅(qū)動只需使用即可。6.4 probe失敗排查清單最后整理一份排查清單純經(jīng)驗總結(jié)按出現(xiàn)頻率排序現(xiàn)象常見原因定位手段syscon_regmap_lookup_by_phandle返回-EINVAL設(shè)備樹節(jié)點compatible順序不對或?qū)傩詻]寫檢查/proc/device-tree下對應(yīng)節(jié)點的compatible屬性返回-EPROBE_DEFERsyscon節(jié)點尚未完成注冊確認(rèn)節(jié)點沒有被status disabled禁用regmap_read返回-EIO寄存器地址超過max_register查看debugfs regmap目錄下的range讀到的值一直不變緩存未失效檢查volatile_reg配置用devmem交叉驗證中斷一直不觸發(fā)irq domain尚未注冊查看/proc/interrupts確認(rèn)子驅(qū)動中斷號是否映射成功probe反復(fù)重入父設(shè)備和子設(shè)備probe順序沖突確認(rèn)返回了-EPROBE_DEFER而不是-ENXIO做MFD syscon開發(fā)最大的經(jīng)驗其實就一句話不要試圖繞過框架自己管理底層寄存器。MFD已經(jīng)把芯片拆分的骨架搭好了syscon把寄存器訪問的內(nèi)存管理做透了我們要做的只是把業(yè)務(wù)邏輯裝進(jìn)合適的殼里。真正難搞的問題往往不是代碼寫不出來而是沒有理解框架為什么這樣設(shè)計。只要能想明白誰創(chuàng)建、誰使用、誰釋放這三個問題整個驅(qū)動架構(gòu)就會清晰很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲av在线免费观看| 日本网色| 一本一道vs波多野结衣| 中文字幕 码 自拍 视频 区| 亚洲色图超碰在线| 日本一二区免费| 国产不卡片| 日韩在线女优天天干| 国产精品视频电影| 大香蕉免费中文| 欧美骚少妇| 婷婷爽人人婷婷爽视频| 午夜福利av电影在线| 日韩中文字幕二区| 国产精品久久久久久9999| 日韩性色| 隔壁邻居波多野结衣中文字幕| 色官网色综合| 久久久内射良家| 91亚州| 亚洲精品人体| 欧美亚洲中文字幕| 狠狠2050在线观看| 无遮挡男女激烈动态图| 青娱乐久久艹| 欧美丝袜美女电影一二三四区| av中亚| 亚洲黄网在哪免费看| 九九九九九九九九九九九免费国产| 欧美亚洲影视| 3PAV乱伦视频| 北京美女一区二区| 国产欧美一区激情交| 性高潮久久久| 国产成人精品亚洲日本| 久久久久国产| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 目产99999久久999| 久夜视频| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久色网| 久久久少妇诱惑精品视频| 日韩熟女三十乱伦| 久热这里| 婷婷15月天青娱乐| 欧洲自拍色图gif在线| 婷婷激情丁香| 天天干美少妇一区| 国产91亚洲精品一区二区三区| 国产操逼逼网| 大茄子熟女AV导航| 九九九九九九亚洲| 国产精品女久久久久av爽| 98福利在线视频| 在线色导航| 99久热精品99re6热| 天天日天天搞天天干| 久久久专区| 在线看免费无码AV天堂的| www.成人无码| av在线人气| 久操网视频| 懂色AV网| 超碰 av 女人天堂| 国产 丝袜 欧美中文 另类| 久热最新在线杭州| 青春草A| 亚洲第一精品在线视频| 嫩草 我啊~嗯~在线| 九九黄色网| a男人的天堂久久一级A毛片| 国产精品婬乱一级毛片彝族| 草草电影院| 欧美日韩99| 美女网站91| 亚洲国产精品久久久久婷婷老年| 亚洲天堂性爱| 新婚人妻扶着粗大强行坐下| 四虎免费看黄| 五月婷在线| 999精品国产高清一区二区| 中文字幕第23区| 色噜噜综合在线| 91性网| 亚洲综合图色在线| 大香蕉碰| 午夜精品探花| 91精品国产日韩欧美综合| 天堂综合网| 老女人碰碰在线碰碰视频| 亚洲天堂,男人| av黄图片在线观看| 国产嫩草精品A88AV| 中文字幕久久精品一区| 农村妇女一级二级三级视频| 99色视频| 综合 欧美 亚洲 日本| 欧美日韩亚洲天堂| 国产丝袜啪啪| 欧美最大综合网| 97在线免费看| 成人性爱免费播放| 日日摸日日碰| 无码欧美有限公司| 婷婷色中文字幕| 欧美性爱www免费版| 放黄片放3级黄片没穿衣服| 久久久少妇诱惑精品视频| 懂色AV中文| 国模限制级电影| 大香蕉综合在线| 国产福利在线视频网站| 午夜AV人气不卡| 嫩草伊人久久精品| 欧洲亚洲人妻无码中字久久三区四区| 日本综合久久| 欧美一级特黄淫片在线观看| 亚洲国产97| JuliaAnnXXX888| 亚洲最大的黄色电影网站。| 日韩无码嘿咻黑热久| 色噜噜综合网| 成人贴图日韩欧美| 久久久久熟女| 3D污黄视频在线观看| 十八禁电影伊人网| 97中文天堂| 亚洲精品精品一区二区| 成人在线视频网| 操曰本熟女| 97久久久| 日本免费中文字幕在线| 亚洲素人综合| 综合激情一一91| 91亚洲欧美综合高清在线| 国产熟女高潮一区二区三区| 激情六月天| 成视频在线观看免费看| 亚洲五月婷婷| 97色论| 亚洲人在线| 欧美一区二区三区大综合| 91在线色| 色欲久久99精品久久| …中文字幕亚洲乱,97人妻无码费视…| 99热日| 日日妻色网| 九七人妻在线| 久久久啊啊啊| 97亚洲色图| 久久伦理视频久久大香蕉视频| 久操黄色视频| 久久久成人免费av电影| 97资源站日韩| 日韩精品大香蕉伊人在线| 国产婷婷一区| 色香综合天天影视综合| 日韩极品无码B| 户外裸露刺激视频第一区| 色色激情| 欧洲精品网| 欧美亚洲中文字幕| 亚洲av无码国产精品字幕| 中文字幕123| 黄色污污污污污污网站| 精品一区二区三区四区外站| julia国产在线| 欧美激情综合| 丁香久久| 偷拍五区| 黄片视频观看| 精品一区二区亚洲国产| 色噜噜国产在线| 一区二区三区一亚洲中文字幕、综合区灬 | 久久国99999| 欧美在线亚洲| 秋霞曰韩R级| 青青草吊丝| 941超碰| 精品日韩人妻视频| 91蜜臀在线久久久久| 极品后入免费视频| 大香蕉综合网| 精品超碰国产| 欧美综合第一| av天堂电影网| 精品人妻一区二区三区四区石在线| 日本高清视频在线观看黄已三辽| 熟女少妇一区二区三区| 日韩乱伦影音先锋| 国语国产操逼伊人AV网| 亚洲一区二区中文字幕| 欧美A√综合网| 久久97超碰| 国产区性爱在线视频秋霞豆| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 97免费视频在线观看视频| 九九九热| www鬼畜国产男人的天堂| 东北女人性交| 六月丁香五月婷婷| 欧美精品黑人猛交高潮| 激情接吻视频久久久久久| 亚洲精品色| 青青草福利视频| 成人免费在线网站| 91在线/欧洲| 国产高清免费不卡av| 国产四虎在线| 制度丝袜99| 国产精品。| 97超碰超碰| 丁香五月激情啪啪| 亚洲情欲| 按摩中文字幕| 三级日韩一区二区三区| 人妻精品综合中文字幕在线 | 亚洲美女 晚间男人天堂| av一区二区三区不卡| 920日本午夜免费| 91色射| 国产激情在线| 色色青青久久| 日日操天天操| 黄骗免费网站| 97中文字幕色| 日本精品五区| 天天躁夜夜躁狠狠躁AV| 日本黄 R色 成 人网站| 亚洲欧美综合图片| 东京热男人的天堂网| 中文久久久| 日韩欧美亚洲国产日韩| 欧美三级中文字幕hd| 亚州欧美综合| av天堂影视中文在字幕在线中文| 麻豆天天躁天天揉揉AV| 丁香六月激情| 妇女性内射冈站HDWWWCOM| 吉田爱美AV在线| 国产中文大片资源中文字幕| 99精品人人爽| 91GD.COM| 亚洲一区二区三区在线激情| 欧美在线视频播放| 天堂种子在线www网资源| 91精片| 青春草A| 一区二区视频在线播放| 日本三级韩国三级美三级91| 九九九九九九九精品视频| 人妻夜夜爽天天爽三区麻豆AV网站| 91爱综合| 91三级理论片播放器| 久久香蕉国产线看观看亚洲女人 | 国产真乱mangent| 77777亚洲蜜臀精品久久综合蜜臀| 国产无码成人无码| 欧美后进式| 欧美日韩国产三级黄色| 九草九九九| www鬼畜国产男人的天堂| 日本精品五区| 蜜桃精品视频一区二区三区| 五月丁香色色网| 十八禁av无码免费网站APP| 久久久99999久网站| 国产毛片精品一区二区色欲黄A片| 69一区二区三区 | 日韩一级欧美一级国产一级台湾| 超碰1997| 国产白领连续中出在线观看| 欧洲熟妇xxXx欧美老妇裸体| 久久av无码| 五月天精品| 婷婷成人久久久精品| 最新av网站在线观看| 青青草大香蕉视频| 久日91在线| 婷婷色网| 99色| 日本色色色视频| 91伊人久| a'v在线资源| 中日韩久久久免费看| 亚洲永久AV无码精品秋霞| 91久热| 插穴性爱视频在线观看| 思思热免费在线视频| 欧美亚洲情色| 天天伊人| 欧美人妻少妇| 中文字幕一区二区三区蜜桃视频| 日韩二三区| 91人妻Pr| 国产精品白领在线观看| 丰满人妻一区二区三区色-百度| 99热精品在线观看| 97美日韩视频| 亚洲一区二区中文字幕| 伊人在线大香蕉二。| 污污污8888| 日韩一区二区熟女| 欧洲综合视频| 亚洲国成人情色好看电影| 粉嫩国产精品久久粉嫩| 亚洲欧美一区二区三区在钱蜜桃| 又大又黄国产| 2020视频1区2区3区| 亚洲色婷婷| **一级毛片国产| 能直接看AV的网站| 国模一区二区三区| 中文字幕片| 精品熟女一区=区三区| 五月色综合| 国产黄色av大片网站| 天天干天天操天天干天天操| 偷拍偷窥与盗摄视频专区| 亚洲综合电影| 91天天| 亚洲欧美另类激情小说| 国产极品粉嫩馒头一线天av| 精品国产91av一区二区三区| 国产一级不卡在线观看| 探花熟女,姿勢到位,體驗感也到位| 农村女一级毛卡片| 日本精品网站在线中文| 国产精品无码av| 一区二区三区免费岛国片| 超碰成人最新最好看| 黑人精品成人一区二区三区 | 熟女激情综合网| 天天干天天燥| 午夜福利免费福利视频| 激情五月丁香五月| 欧美一区二区在线资源| 色香伊人| 久久亚洲AV无码白度| 老司机深夜18禁污污网站| 中文字幕亚洲永久精品| 大香蕉久久| 国产av青草| 亚洲欧洲第二视频在线观看色图| 国产又大又粗又长视频| 富女玩鸭子一级毛片| av午夜影院在线播放| 无码日韩网站| 91少妇通奸网站| 黄色工厂这里只有精品| 色网在线视频观看免费| 9+1视频网址| 国产视频一区二区三区久久亚洲天堂| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 人人爱操| 一区二区三区四区久久视1| 国产精品乱码久久久久久| a啊啊啊啊啊啊啊啊一区二区| 免费国产视频| 偷拍亚洲熟女视频播放| 五月丁香色色网| 日本三级日本三级三级人妇四虎| 久久中文字幕女同性恋一区| 国内毛片国产欧美拍| 91操人视频| 超碰 av 女人天堂| 天啪| 国产一区二区在线电影| 蜜臀99999| 97伦综合| 探花在线免费观看视频国产一区| 中文字幕视频在线观看一区二区| 中文有码9| 亚洲 日本 国产 综合| 久久婷婷五月天| 人妻素股| A 在线网址| 亚洲情色第一页| 啊啊啊啊啊好舒服视频| 国产二区三区免费视频| 日韩人妻精品久久久久| 91n.欧美| 蜜乳性色无码专日粉嫩骚逼AV| 午夜福利成人免费视频| 欧美日韩天堂| 国产精品爱欲| 欧美一级色| 风骚少妇视频中文字幕| 久久中文字幕一区不卡| 亚州色图欧美| 亚洲成人精品在线一区| 毛片视频白嫩| 黄色工厂这里只有精品| 国内三级自拍小视频在线观看 | 蜜乳AV网址| 99热导航| 97色网| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 欧美福利视频啊啊啊啊| jazzjazz国产精品麻豆| 日本色婷婷| 国产久久男人天堂| 老熟女乱伦一区| 美女黄频a美女大全免费皮| 日韩精品高清资源在线| 综合网亚洲在线| 久久精视频美日韩在线视频| 中文字幕伊人| 国产色呦呦| 久久精品国产97欧美精品亚洲| 亚洲色图日韩精品| 亚洲97p| 秋霞成人一级在线观看| 日本最新免费韩国1区2区视频播放| 久久综合九色综合欧洲98| 中文字幕视频2区| 日本性感人妻91| 男人天堂导航| 丁香五月综合| 人妻色偷色噜| 青娱乐手机日韩在线视频| 性色生活片久久毛片婬片免费放女人一级毛片 | 青青色综合| 欧美人人操人人插| 中文字幕一区二区三四五区日日骚| 中文字幕五月婷婷免费| 天天日天天插| 99999亚洲| 婷婷五月av| 亚洲中文字幕在现观看| 大香蕉99热| 成人a大片在线观看| 欧美爱国产综合、| 一区二区偷拍拍视频| 天天综合网在线观看| 亚洲人成色9999精品久久| 精品人妻免费观看| 哑洲在线| 神马久久久久眼| 五月婷婷丁香六月丁香| 色香综合天天影视综合| 色婷婷99| 欧美一区二区福利在线| 国产高清在线自在拍69| 99热伊人| 日本色色视频网站| 美女诱惑久久| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 精品久久久久久中文字幕视频免费| 9久久9综合| 亚洲情色中文字幕一区| 一区二区久久天天干狠狠| 日本操逼视频免费| 91美女视频电影| 超碰亚洲欧美日韩无| 国产51色综合久久免费| 天天网综合| 欧美 日韩 婷婷 五月| 成人综合久久精品色婷婷| 牛牛AV人人夜夜澡人人爽| 91精品久久久久久久久久| 91熟女熟妇视频网站 | 日韩精品人妻中文字幕久久久| 亚洲 欧美 手机在线观看| 亚洲美女精品九九视频| 997色在线| 亚洲欧美日韩电影网站一区 | 亚洲欧洲日韩国产自在线| 狠狠爱综合网| 日韩精品影视| 啊啊啊在线观看免费视频| hd成人一区二区在线| 13小男生GAY自慰脱裤子| 加勒比性爱成人在线| 久久精品72| 好吊妞转入那个网| 亚洲操逼视频网站| 国产区性爱在线视频秋霞豆| 色色色日本| 欧美 亚洲 综合 制服| 思思热免费视频观看| 日韩福利综合一区| 免费a v| 欧美激情1区| 9997se| 妇人噜噜| 男人 天堂 日 亚洲| 91久久国产综合久久| 国产一区二区在线电影| 户外裸露刺激视频第一区| 操逼免费视频无码国产| 亚洲天天做日日做天天谢日日| 日本一区不卡| 91亚洲欧洲| 嫩草91| 爱妻综合网| 在线一区| 中文字幕亚洲欧美在线不卡| 欧美色三级片91| 东京热男人的天堂网| 精品亚洲国产成人av网站| 久久青青草原免费视频| 岛国网址国产| 午夜电影在线观看无码专区| 国产精品久久久久无码A√| 中文字幕人成乱码熟女香港| 欧美色图20p| 玖玖爱影院| 91老熟妇| 69XX一中文字幕人妻91| 国产一级不卡在线观看| 性色av网站| 中文字幕一区日韩精| 亚洲综合色婷婷| 国产超碰在线| 亚洲精品中文字幕一区在线视频| 亚洲成?V人片在线观看福利| 志村玲子视频一区二区| 九九热九九热| 一牛一区二区三区久久| 久久视频少妇美女| 超碰吊日色| 日韩激情无码影院| 亚洲第2页| 综合激情婷婷| 国产原创精品| 超碰综合色| 青青操视频在线| 久久精品国产97欧美精品亚洲| 欧美肥臀在线| 老司机福利青青草| 日本性爱欧美性爱| 黄色区免费观看中文字幕| 黄片不用下载在线观看| 91亚州日韩高清| 国产黄a三级三级三级av在线看| 青青青国产| 久久久久久久久久久999| 玖玖爱伊人玖玖爱| 啊啊啊免费视频| 波多野42部激情无码喷潮| 亚洲国产欧美另类自拍| 91日本在线观看| www.97在线| 国产女人9999| 好吊色综合| 91午夜无码| 啪啪免费| 97色五月天完| 大香蕉2017| 久久精品国产精品一区| 激情久久久| 岛国小电影| 欧美综合网1| 午夜超碰| 日韩成人性爱电影在线播放| 男人的天堂在线2| 毛片99-全集电影手机免费观看完整-B029AV | 美女91网| 黄骗免费| 亚洲天堂另类小说男人| 国产美女91| 人干人人人操人人摸| 91亚洲人电影| 99热国产| 91综合网站| 成人免费在线网站| 青青操少妇| 欧美天天综合在线| 欧美日韩操逼嗦吊| 麻豆伊人网| 视频一区二区免费在线| 婷婷九月| 日韩精品9区| 日韩精品中文字幕人妻| 91精品国产麻豆国产自产在| 岛国AV一区二区电影| k频道色撸撸| 大屁股人妻女教师撅着屁股| 色爱综合网| 欧美日韩亚洲五月天婷婷| 蜜臀久久99精品久久久久久成人小说 | 十八禁一区二区无码观看| 亚洲欧美日韩免费观看| 欧美|91色综合| 日韩精品啪啪啪| 竹菊影视国产一区二区| 天天热精品| 激情接吻视频久久久久久| 裸体1区| 久艾草在线精品视频在线观看| 天天看片天天爽| 色综合91好| 综合色播| 99无码狠狠久久| 欧亚洲精品有视频| 青青草毛片| 口爆综合网| 国产精品9999| 国产原创自拍| 天天综合-91入口| 色哟哟的毛片| 97亚洲一区| 色综合V| 精品免费国产二区三区| 日韩在线性爱免费视频| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 欧美成人色| 一类无码操逼视频| A一级色女| 欧美视频边做饭边橾| 欧美精品不卡一二三四在线91| 久久性爱大全| 中文在线视频| 99热综合| 日韩电影在线观看网址| 日本A级视频| 亚洲无吗在线视频| 麻豆国产原创AV色哟哟| 久久精品国产亚洲AV嘿嘿| 后入式五六区| 五月丁香久久| 中文字幕精品免费一区二区| 国产成人精品午夜福利| 啊v视频在线观看| 97超碰超碰| 日韩免费人妻色情网站| 欧美探花网| 美女骚尻视频| 另类图片五月| 女同女同恋久久级三级| 欧美成人色| 亚洲欧美精品一区天堂久久 | 日韩AV噜噜噜一区二区三区四区| 花野真衣| 最新三级网址| 欧美在线|亚洲| 久久久久13| 亚洲精品欧洲色| 精品国产72| 国产成人网址| 中文字幕,人妻,日韩| 天天干夜夜操一区二区| 97国产色综合| 久久国内| 日韩欧无码一区二区三区免费不卡 | 午夜毛片高清免费不卡| 91色婷婷综合久久中文字幕二区| 久久在线观看免费视频| 风骚少妇视频中文字幕| 伊人天堂在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 黑人美精品 A片| 国产吹潮女在线观看| 天天欧美欧美亚洲网| 国产一级操B视频| 久久春色| 精品少妇高潮久久| 操B久久| 国产对白刺激视频| 天天噜| 亚洲欧美啪啪| 大香蕉啪啪啪啪在线| 亚洲AV小说| 秋霞一级视频在线观看免费| 性无码专区2020| 欲色综合| 久久久久久无码人妻中文字幕| 干b在线性社区| 天天做日日爱夜夜爽| 国产精品久久久久久久电影渣男| 婷婷激情四射| 少妇第一页| 一区,二区,三区网站| 欧美色五月| 日本午夜久久电影| 成人无码在线超碰网| 亚洲图片激情小说| 天天干人人乐| 欧洲一区二区| 天天操熟妇| 日本顶级天天操狠狠操夜夜操中文字幕| 97精品国产97久久久久久免费| 成人影院永久免费观看网址| 啊啊啊啊啊啊好多水| 欧美同性恋 的搜索结果 - 91n| 超碰免费欧美7| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 午夜爽爽爽在线观看永久入口姬片| 在线观看一级α片刺激高潮视频| 色色九区| 少妇熟女一区二区三区| 性欧美精| 亚洲精品久久一区二区三区蜜桃臀| 色婷婷婷五月天激情四射| 日韩精品永久在线观看| 久草网站免费在线观看| 国产美女自拍AV| 26uuu偷拍亚洲欧洲综合| 黑人精品XXX一区一二区| 欧美日韩大香蕉| 密臀在线一区尤物| 亚洲色图8| 蜜臀99久久精品久久久久久| 天天干人妻视频| 天天躁狠狠躁av| 91女优在线观看| 日日噜噜夜夜久久亚洲一区二区 | 91处女在线观看| 一区二区三区色综合| 九区国产| 久久久国产护士丝袜美腿一| 亚洲限制级| 呦女网站| 日韩无码人妻中字久久三区四区| 97视频在线观看免费高清| 人人妻人人爱人人玩| 69视频入口| 草草影院最新网址| 国产激情av女片自拍| 亚洲精品日日夜夜52| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 亚洲精品97久久| 91av熟女人妻| 亚洲精品xxx| 黄色一级视| 久久激情视频| 久九9精品| 一本色道人妻久久| 免费自拍三级综合| 午夜男人av| 婷婷天堂站| 日韩欧美成人大香蕉| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国精综合一二三区影视| 嫩草黄页| 久久大| 亚洲精品天堂久久A∨51成人漫| 手机看av网站在线看| 综合久久六月久久婷婷| 大香蕉97久久| 中文字幕精品人妻丝袜| 疯操AV| 亚洲无码电影久久久| 中文字幕av乱伦| 国产专区路线| 日韩欧美中文字亚洲慕| 黑人猛交| 一级久久性爱视频| 人人污日韩一区二区| 日夜尻逼网| 男人的天堂网页| 国产亲戚伦亲在线| 欧美最婬乱婬爆婬性视频 | 大香蕉伊人久久| 日本999精品视频| 天综合网欧美| 日本久久女同性恋视频| 综合自拍| 色超碰综合| 日本一区不卡| 免费一级视频特黄色大片| 久久超碰97中文字幕| 国产呦精品系列在线观看| 国产超碰| 久久九操在线观看| 啪啪性爱免费视频| 长长久久88视频| 丝袜天堂| 操逼天美3区| 精品一区96| 国产白丝网站| 一区二区三区高清天码| 日本在线视频导航| 91丨精品丨国产丨丝袜| 国产乱伦亚洲色图高清无码| 亚洲最大91网| 久久久久久久久久久久色网| 操逼逼福利视频| 东北老女人的激情视频| aa片毛片| 91亚洲人电影| 亚洲色图A| 中文字幕日本久久| 欧美A√综合网| 日本人妻丰满熟妇久久久久久| 性爱久久| 久操免费观看| 99自拍视频在线| 加勒比日本在线| 超碰在线人妻中文字幕| 欧美 亚洲 制服 精品| 亚洲欧美日韩不卡人妻| 国产欧美日韩在线不卡第一页| 人妻少妇久久中文| 日韩欧美aⅴ综合网站发布| 午夜性| 成人蜜乳小视频网站| 欧美精品99久久久| 极品内射| av激情亚洲五月天| 人人喜人人妻| 精品国产av一区二区三区四区入口| 射 色综合| 超碰99热| 人妻天堂网| www.91色综合| 亚洲不雅视频1区二区| 婷婷五月天在线观看| 久热久| 一级特级aaaa毛片免费观看| 97干综合网| 免费一级精品啪啪视频| 国产成人天堂| 最新啪啪视频| 丝袜 中出 制服 人妻 美腿 中文字幕| 久久精品性| rion磁力链接| 亚洲欧洲视频小说在线观看| 一类av片在线看| 91色人| 亚州操逼图| 日韩电影免费网站麻豆视频| 国产免费永久精品无码| 91五十路| 闷骚老熟女15P| 欧美操逼录像国产黄色国产| 97香焦色区| 高潮毛片无遮挡高清免费| 人妻熟女一区二区| 天天日天天插| 国产不良强奸视频免费看| 欧美色色人| 91精品无码人妻系列| 国产又长又大又粗的视频| 色五月激情网| 乱伦一二三| 日本天天干天天日一区| 丁香五月婷婷基地| 久久欲| 亚洲成人色情五月天丁香花| 久久欧美性爱视频| 日韩射图| 夂久色| 日韩99精品视频综合区| 欧美人妻一区二区| 亚洲男人天堂2012| 翔田千里AⅤHD无码| 91欧美丨精品丨入口| 国产精品秘 福利姬在线观看| 久久熟女精品不卡一区| 三级片大波波| 亚洲精品成人动漫在线| 久久久999国产| 天天干天天日天天射黄色片| 婷婷丁香五月激情啪啪| 天堂69亚洲精品中文字| 亚洲少妇综合| 狠狠图片青青草| 五月婷在线| 99re6在线视频播放免费精品| 婷婷在线视频| 91看黄片| 超碰久超碰久| 日韩精品人妻中文字有码在线| 五月婷婷综合在线| 十八岁啪啪视频免费看| 欧美色图97| 宗合情欲网| 国产av美女被艹的乱叫| 黄片国产精品一区二区| 91亚洲欧洲| 性感美女91影视| 亚洲日韩青青草色月| 午夜操逼不卡| 上床啊啊啊| 97欧美色综合| 国产精品成人无码av| 无码国产Av| 色哟哟AⅤ| 好属操| 日本97久久| 96国产污污污丝袜| 一区二区三区四区五区高清无码永久视频 | 亚洲综合激情五月久久| 尤物一级在线免费观看| 91人妻精华帖| 在线人成亚洲视频免费观看| 性色综合网| 密臀在线视频| 欧美色图在线视频少妇| 日韩一999精品| 日韩啪啪啪啪啪| 探花激情视频| 欧美成人A√在线一区二区| 中文字幕在线观| 极品肉射| 色99999| 欧美在线天堂| 欧美成97爱| 青青草一本道福利视频| 久操| 超碰97综合网| 久久久999国产精品| 激情在线青青操| 大香蕉天天看妹子| 亚洲AO在线| 欧美色图 人妻| 操死我了嗯嗯嗯| 欧美国产一区二区三区麻豆传媒| 亚洲精品丝袜-不卡成人免费……| 超碰久热| 怡红院视频在线| 精品久久久av| 超碰激情808| 美女淫穴| 人妻美腿丝袜日韩| 亚洲欧美激情小说| 久久99九九九九6666免费观看软件| 天操天操夜操夜月操月年年操操| 韩日精品四区| av九九| 992这里有精品| 亚洲国产剧情少妇激情| 9热9热综合网| 少妇与黑人高潮在线| 欧美精品 - 91爱爱| 久久草视频污视频| 天堂精品| 91制服丝袜| a'v在线资源| 欧美色性情| 午夜小电影在线插入淫高潮| av强奸乱轮| 俺去俺来也在线www| www色色com| 丝袜制服字幕在线| 欧美激情内射| 在线观看无码三级少妇| 婷婷丁香五月天综合东京热| 4399成人黄A片| 超碰日本97美女人妻人人玩人人爱| 欧美少妇性乱| 97 国产精品| 人人操超碰在线| 少妇综合| 国产成年免费大片黄在线观看| 色噜噜人妻丝袜a∨先锋影 | 国产精品久久久久无码A√| 国产精品宅男免费| 天天拍天天操| 欧美日韩情色一区二区| 国产少妇高潮| 97亚洲国产| 就去色综合| 大香蕉综合网| 性在久久久久久| 女人高潮抽搐喷水视频网站| 亚洲熟女国产综合另类| 成人精品视频| 欧美色图 色综合图| 97在线观看播放视频| 日本性爱欧美性爱| 日韩精品亚洲专区在线影视| 女人被男人桶爽视频网站| 色色操| 中文字幕十五区| 东北操逼| 亚洲无码电影久久久| 人妻9117c| 色婷婷久久| 狠狠操夜夜操蜜桃视频三区| 国产精品视频| 欧美乱妇狂野欧美在线视频| 超碰97国产欧美| 97无码视频在线播放| wwwcaobibi| 嗯嗯啊啊好疼| 亚洲天堂男人天堂| 免费福利视频中文字幕| 操少妇很爽av| 亚州五月| 美国日韩黄片| 国产精品久久久三级无码| 天天操女人| 在线色资源| 日本一级真人黄色性爱视频| 91黑人无码激情在线| 国产黄a三级三级三级av在线看| 91网站在线播放| ji熟女.com| 九九九午夜| 熟妇色99| 亚洲日韩美女中文字幕乱| 日韩啪啪啪啪啪| 色情综合网| 福利天堂| 可免费观看的av毛片中日美韩| 色综合色色| 最新精品久久蜜桃 | 男女性感激情网站| 亚洲欧洲精品成人| 成人精品在线免费视频| 密桃99999| 国内毛片四区| 国产又大又硬又长又粗| 一本久久精品中文字| 精品久久无码午夜福利| 韩日男人的天堂| 国产精品午夜AV完会免费| 亚洲高潮少妇| 亚洲在高跟鞋自慰久久在色线| 天天cao在线| 亚洲制服欧美另类内射| 91夜色chaopeng| 思思热在线视频在线| caopeng97| 97这里有精品| 另类视频在线| 中文字幕精品码亚洲| 婷婷综合五月天| 91天美| 干B视频伊人网| 日本操逼视频在线| 欧美熟妇精品黑人巨大一二三区| 五月亭亭六月丁香| 日韩亚洲美女一区久久| 狠狠操狠狠操操| 日韩欧美国产一区二区三区四区| 丰满精品人妻少妇久久字幕| 亚洲av青草久久一区二区| 嗯阿好爽好紧| 三级日韩一区二区三区| 国产欧美精选激情视频| 少妇一区二区三区精选| 亚洲成人在线播放| 玖玖久久久| 夜夜中出国产| 嗯嗯啊啊啊好爽| 人妻精品视频一区二区| 白丝AV网站| 人干人人人操人人摸| 天天日日本| 两女互慰AV高潮喷水在线观看| 亚洲有薄码区日本系列中文字幕| 久久黄黄黄| 理论久久婷婷网 8| 麻豆成人AV| 五月丁香六月婷| 欧美欧美啪啪视频| 日本九九久久99| 成人麻豆av电影网站| 白嫩妹子国产骚| 日韩人妻网站| 亚洲精品自拍| 亚洲九九爱| 91在线色综合| 亚洲黄色网址视频| 超碰97COm中文| 国产精品久久久久久久久久久久久久久久| 亚洲欧美在线观看免费| 亚洲九九视频| 欧美久久毛片基地| 亞洲久久直播| 欧美色就是色| 91女网站| 精品国产乱码久久久久久口爆网站| 四虎影视国产精品| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 干婷婷综合网| 欧美性爱第1 页| 天天躁夜夜躁狠狠躁AV| 殴美牲| 国产成人自拍视频视频| 九九五月天| 美女人妻色网站| 亚洲午夜福利视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91色综合| 欧美啪啪天堂| 青青草白白色| 国产亚洲禁久一区二区| 精品78| 久久爱超碰网| 成人AV素股で擦久久| 五十路六十路七十路熟婆| 91视频女生| 二区熟妇韩日| 中文字幕免费看大片| 久艹99| 欧美精品在线观看| 志村玲子视频一区二区| 乱伦熟妇一区二区| 中亚精品极乱| 啪啪视频免费在线观看| 国产AV天美| 可以免费观看的AV| 欧美在线啊啊| 狠狠97| 都市激情人妻一区二区青青操视频 | 久9热| α√在线| 亚洲色图欧美激情| 欧美丰满少妇交换91欧美精品| 欧美日韩少妇色情| www久| 91操人| 中国zzijzzijzzwww精品| 日韩日本欧美在线观看| 国产在线激情| 在线 欧美 亚洲| 骚人妻少妇视频| 少妇特黄一区二区三区| av婷婷色婷婷色六月| 一牛影视成人片免费| 嫩草一区二区在线观看| 国产精品蜜臀久久久久无码AV| 日韩有码 一区二区三区| 亚洲图片欧美| 丰满人妻一区二区三区| 网友自拍第1页| 国桃视频产巨乳精品一区二区在线| 日本丝袜美腿人妻九九| 精品超碰中文在线| 欧美综合自拍成人自拍第二十页| 1024人妻熟女一区二区三区| 精品无码不卡视频| 91丨熟女丨丰满熟女| 午夜偷拍久久熟女| 色色九区| 欧美人人天天网| 精品一区二区2| 久欲AV| 97爱b| 国产热av| 欧美日韩不卡传媒| 亚洲一二三四区在线免费看视频| 第四色亚洲色图| 任你干在线视频| 成人在线永久| 嫩草黄页| 无毛精品| 黄色片G G G| 亚洲日韩熟女人妻高清在线| 精品国产久久乱码| 亚洲AV不卡在线观看| 91痴汉| 国产精品久久久久婷婷二区次| 超碰99在线| 外国免费性情大片| 韩日欧亚a级| 热99这里有精品综合久久 | 五月婷亚洲精品天堂| 国产60页| 99久久精品无码一区二区毛片免费| 色伊人91| 93人人操人人| 亚洲精品成人| 成人三级片无码| 婷婷九月色|