国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成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
返回資訊列表
久久综合18p| 欧美最婬乱婬爆婬性视频 | 手机在线观看不卡无码av| 北京专精特新企业招聘信息| 久久久久久久唑| 日韩国产成人自拍视频| 麻豆a'v电影| 国产AV色黄看到爽| 蜜屁Av| 亚洲另类欧美精品| 亚洲精品天天影视综合网| 丰满人妻一区二区三区免费| 亚洲综合在线高清| 日本不卡在线二区三区| 无遮挡h肉动漫在线观看| 久操 高清| 亚洲人妻中文在线视频| 日韩不卡码| 黄色片一区二区三区四区五区| 人妻出轨一区二区三区| 午夜小电影在线插入淫高潮| 97操操| 欧美色图自拍| 少妇高潮对白在线观看| 日本免费一区二| 人妻另类 专区 欧美 制服| 天天操女人| 91亚州| 五月天久久婷婷亚洲| 日韩美女啪啪一区| 亚洲色电影在线| 五月婷婷六月丁香| 中国国产精品一区视频| 久久春色| 婷婷九月丁香| 人人弄人人摸| 青青操在线视频| 女人妻一区| 日韩欧美字幕亚洲一区二区| 久久系列| 国产人妻精品一区二区三区秋霞| 久久久久久久久国产| 五月婷婷激情综合| 四虎影视永久在线免费| 精品中文字幕一区二区| 四虎884a| 久操视频免费在线观看| 国产一区二区三区精品观看啪| 国产免费内射视频| 日本三级精品| 美女操逼A A| 亚洲人妻日日日| 99久在线精品99re8热| 欧美大香蕉97| 青青久操| 精品96久久| 天堂九九九九九九九九九| 久久精品中文字幕无码l| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲在线综合| 黄页网站成人免费| 激情久久日韩精品中文字幕麻豆| 亚洲春色激情小说| 天天日少妇逼AV| 天天爽天天操| 97中文天堂| 色噜噜综合在线| 亚洲黄a三级三级三级看三级| 黄色大香焦1级‘′‘| 国产精品无码久久久久2025| 2017av无码免费无线播| 青草一区二区| 色综合加勒比| 国产家庭乱伦性爱视频| 美女大乳久久久久久久女人18| 天天插天天干| 欧美亚男人的天堂| 色 婷97| 日本九九久久99播| 91熟女视频| www.色婷婷| 色吧5亚洲| TS人妖另类精品视频系列| 精品人妻中文字幕高清| 啪啪啪东京| 人妻精品一区二区在线| 99热综合| k频道色撸撸| 呻吟 欧美 日本 中出| 青青草在线视频美女| 99少妇| 女人天堂av在线播放| 精品熟女一区=区三区| 国内外色色色色色成人视频| 国产蜜臀精品一区免费尤物| 欧洲精品一区二区三区| 超碰天天操| 任你艹| 艾草av| 嗯嗯啊啊的视频| 国产精品乱码久久| 区二区亚洲婷| 国产热av| 欧美中文字幕日韩在线| 51一区二区三区| 欧美性天天影视| B049AV在线播放| 麻豆久久精品亚洲精品88| 成人精品在线免费视频| 嗯~啊~快点 死我视频免费看网站| 黑人精品欧美一区二区蜜桃| 高清无码在线播放网站| 欧美高清性猛交| 在线免费观看日韩一区| 国模少妇一区二区三区| 熟女精品va中文字幕| 五月婷婷影院| 91男人综合| 丰满人妻无码一区二区三区 | 亚洲色图第一页| 无码外流操逼视频| 日日骚 av| 中文字幕丰满人妻日本| 亚洲 综合 欧美| 欧美高清91| 国产做?爰片久久毛片?片美国| 97 国产一区| 亚洲 图片 综合91| 久久亚洲一区女同性恋中文字幕 | 欧美精品,四区。五区| 91色婷婷综合久久中文字幕二区| 欧美日本成人一区二区| 花野真衣| 亚洲无码精品AV久久久| 东京热一区二区三区四区五区六区| 亚洲欧美不卡线| 旡码电影特区| 大香蕉一区二区在线观看.| 狠狠搞 亚洲91| 福利操逼| 一二三区精品视频| 精品网站9999| 东北丰满熟女国产一区| 4虎在线视频| 欧美淫乱视频| 猛交交| 国产一区二区视频在线播放| 亚洲欧美内射| 天堂俺去俺来也www久久婷婷| 热久日综合| 欧美系列在线一区二区| 91色香| 一本久久精品中文字| 日本www操操操| 欧美色综合网| 国产精品香蕉| 欧美黑人XXXⅩ高潮交| 亚洲色图 欧美| 91性感网站| 人妻嗯啊啊在线播放| 欧美后入| 国产91 丝袜在线播放| 国产亚洲精品美女| 色哟哟AⅤ| 97爱啪| 国产亚洲精品A在线观看下载| 欧美白嫩在线放| 国产精品久久久久无码AV会牛| 高清无码国产亚洲| 亚洲自拍青操视频| 激情欧美日韩女同久久| 婷婷月色| 五月婷婷基地| 东北丰满熟女国产一区| 91性高朝久久久久久久久| 成人日本片久久久蜜桃| 熟妇国产免费一区| 超硑97精品| 亚洲中文人妻色| 久久久98网站免费视频| 岛国艾薇凹凸视频天堂| 亚洲欧美另类激情小说| 97资源超碰| 国产中文精品一区二区在线观看| 18禁看网站一区| 9久热这里只有精品| 91美女高潮| 久久国产乱子伦精品免费女人| 久久一区二区蜜桃| 九九精品无码专区免费| 中文字幕色AV| 久久久久久十| 好爽视频在线观看| www国产无码| 亚洲国产97| 精久久久| 97视频在线免费| 日韩精品影视| 97草草| 天天日天天干天天操| 免费亚洲国产精品久久一区| 伊人网综合在线视频| 美国人人操人人操| 留下AⅤ黄色片| 91精品大奶人妻| 激情五月婷婷| 一区二区三区免费视频入口| 91视频综合| 国产精品不卡av免费在线观看| 国产偷拍网站| 亚洲AV无码AV吞精久久久久| 久操热| 色吧综合网| 婷婷五月在线视频| www国产无码| 在线日韩精品一区二区三区| 日韩av不卡在线看| 亚洲国产一级中文综合久久天堂在线免费观看 | 另类小色呦| 国产午夜在线观看| 夜嗨影院| 色眯眯射| 日韩97超碰| 超碰97人人cao| 色久桃花影院在线观看| 国产 日韩 另类 视频一区爱| 国产超碰在线一区| 亚洲精品国产精品乱码不卡| 九九九不卡| 免费无码婬片AAAA片直播色戒| 久久精品国产99精品亚洲蜜...| 亚卅熟女乱色| 欧美激情久久久久| 思思久热在线精品66| 亚洲夜夜欢无码一区二区| 四虎AV无码| 亚洲97网站| 韩国一级做a久久久久| 9丨久久九九九| 人妻乱仑一区二区三区| 熟妇亚洲一区二区三区| 资源新线在线天堂| 色偷偷综合91久久噜噜| 色综合久久88色综合久久天天| 精品对白久久不卡| 丁香激情网| 精品久久九| 精品久久久久久中文字幕三区| 久久久com| 色综合1991| 国产精品永久免费10000| 天天肏美女| 91黄站| 操屄不卡视频| 一本一道久久综合久久| 后入合集| 婷婷人妻激情| 干婷婷综合网| 97 国产精品| 手机在线视频国内精品| 欧美A√综合网| 精品中文字幕第一页| 亚洲永久永久永久永久一级一级一级精品 | 国产玖玖| 少妇综合网| 天天色悠悠激情| 一区二区高清视频| 国产视频一区二区在线| 国产一区二区三区久久精品太古里| 亚洲视频一二区| 欧美激情亚洲| 91五月天| 78久久| 亚洲中文字幕乱码无码一区二区| 日本成熟少妇A∨网站| 亚州色站 日韩电影| 国产专区第一页| 午夜福利合集| 中文幕97| 黑操B| a一区二区三区乱码在线| 亚洲资源网| 久久五月丁香| 国产一区在线观看无码AV| 久久精品成人| 亚州色图欧美| 青草视频在线看看看看看看看看看| 日本操逼视频在线| 后入人妻无码| 污电影在线观看| 好淫网一二三视区| 五月天色色网站| 久久久久亚洲av综合波多野制衣| 操曰本熟女| 欧美亚洲手机在线| 激情综合亚洲| 日本三级R| 99国产在线 精品 视频| 男人的天堂2018| 208天天久久九九九| 97久久超碰国产网站| 中日韩久久久| 欧洲欧美视频一区二区| 亚洲男人天堂av| 九九综合网| 熟女一区二区| 噜噜噜在线视频| 78久久| 九久久精| 欧美小说区视频区| 超碰在线97国产| 中文字幕丝袜美腿| 国产亚洲人妻综合日韩 久久| 欧美aaaaaaa| 妇女性内射冈站HDWWWCOM| 国内一级精品| 大香蕉黄色一区| 青娱乐国产精品| 成全动漫视频观看免费下载| 超碰免费人妻在线| 春色91| 欧美在线视频观看一二三四区高清 | 色网在线视频观看免费| 97色碰| 91丝袜| 大香蕉久久| 97在线观看免费视频| 熟女精品日韩一区二区三区| 日欧操屄视频| 日韩在线观看字幕精品| 国产精品一区二区黄片| 97av在线视频| 私色综合网| 国产精品一区二区在钱播放| 欧美最婬乱婬爆婬性视频 | 欧美大香蕉专区网| 亚洲熟女一区二区| 91综合中文字幕| 国产精品久久久午夜夜伦鲁鲁| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 日韩精品三级片长长久久| 久久骚| 啊啊啊水好多| 成人线上超碰| xxxx网站亚洲精品| 日本精品第一视频在'| 免费视频观看60秒| 青青青在线高清视频在线一二三四区| 综合久久9| 国产成人综合在线播放| 国产精品一区二区黄片| xxx亚洲午夜天堂| 色偷综合| 男女啪啪网站免费视频| 在线一道啪| 五月婷婷六月丁香| 精品美女少妇一区二区三区| 伊人欧美大香蕉视频| 丰满人妻一区二区三区色-百度| 欧美特大AA级黄片| 色婷婷亚洲婷婷| 亚洲综合性网址| 九九九只有精品| 日韩视频小说在线观看| 人人看人人插| 久久久久成人亚洲国产| 十八禁视频网站| 麻豆一区二区AV天美| 天操老女人| 欧美综合色综合| 免费A片三p视频| 国产欧美亚洲精品a第2页| 麻豆AV一区二区| 国产精品视频自拍在线| 99久久无码| 囯产精品久久久久久久久久梁医生| 日本 色 导航| 美女大乳久久久久久久女人18| 蜜臀99久久精品| 91香蕉视频在线观看免费| 中亚精品极乱| 变态综合色| 午夜精品久久久久久久99蜜桃一| 日影院久久婷婷夜夜网| 黄色人人| 中文一区在线日| 欧洲黄色网| 欧美三级免费伊人| 久久久性少妇| 色色丁香| 国产精品剧情| 亚洲不卡不卡中文字幕不卡| 97爱亚洲| 东京成人一区| 性爱Av免费| 国产日韩人人| 99热只有这里有精品| 亚洲情色综合网| 色欲久久综合| 92久久| 操九九九九九九| 欧美人与动性人交a| 中文高清一区二区的| 亚洲伊人久久综合97| 91美女在线视频| 18禁超污无遮挡无码免费网| 亚洲色人阁| 欧美有码亚洲中文字幕一区二区三区四区 | 国产欧美在线观看免费观看| 色情综合网| 精品少妇999| 小明看看网址| 黑丝少妇| 日韩一性一交一A片俄罗斯| 精品人妻一区二区三区蜜桃视频| 欧美|91色综合| 2019精品国产无码成人| 国产精品久久久午夜夜伦鲁鲁| 亚洲激情网一二三四区| 天天色,天天干,天天干| 日韩啪啪视频| 色五月AV在线| 新97国产超碰| 乱人乱色一区二区三区免费| 99re只有精品| 亚洲素人综合| 人人操人人摸人人看人人干| 天天欧美色| 日韩中文9| 五月婷亚洲精品天堂| 懂色AV蜜臀无码精品APP| 一区中文字幕二区日韩| 久久久久久9| 色婷婷成人| 韩日巨乳美女免费视频在线观看| 男女一进一出视频久久| 欧美人妻久久精品二区三区 | 无码抄逼网| 91总综合网| 日本久久女同性恋视频| 熟妇熟女亚洲天堂网| 五月婷婷青青草娱乐伊人| 欧美大香蕉久| 日本999精品视频| 怡红院成人视频| 国产激情综合| 人妻少妇久久| 国产精品一级片在线看| 都市激情人妻一区二区青青操视频| 日日爱99| 日韩二三区| 亚洲色图欧美激情| 91蜜臀在线久久久久| 老熟女阿 国产91| 亚洲色图欧美视频| 91欧| 91精品综合久久久久久五月丁香| 亚洲精品国产熟女久久久| 国产操逼视频在线观看| av操操不卡| 人人干黄色| 亚洲色图欧美色图制服丝袜 | Sekablack无码一区| 天天干一区二区| 亚洲毛片基地专区| 国内精品不卡无毒99999| 91色宗合| 一区二区久久天天干狠狠| 欧美少妇色图| 中文字暮97| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 久久欲| 草久久久| 在线A日本| 精品国产久久乱码| 婷婷综合网| 97精品人妻一二三四| 亚洲一区日韩| 欧美中文综合| 不卡码视频| 91人妻中文| 日韩欧美中文字亚洲慕| 一区二区三区精品黑丝白丝酒店对鸡 | av在线一区二区三区| 久久风骚城市| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 超碰97护士| 嗯嗯啊啊操死我| 操逼操网| 天天干18禁| 欧美不卡在线美女| 亚洲无线码欧洲精品区别| 亚洲色资源| 色婷婷丁香| 无码人妻精品酒店| 啊啊啊不要啊啊受不了了视频在线| 中文字幕AV乱伦| 亚洲图片 激情小说| 午夜大香蕉| 激情婷婷综合久久| 97操综合| 懂色AV一区二区三区| 亚洲国产av中文字幕久久| 夜夜夜夜爽| 999久久久精品国产| 国产美女口爆吞精视频| 91蜜桃传媒精品久久久一区二区| 亚洲综合另类欧美久久久| AAAAAAAAA黄片| 在线天堂资源亚洲| 天堂国产AV| 极品白嫩美女白浆成人福利在线看| 免费操逼91| 伊人少妇久久久| 熟女精品一区二区三区| 欧美性爱无码一区二区三区| 97超碰色色| 97AV在线免费观看| 亚洲欧美精品一区天堂久久| 国产一区二区a毛片| 久久久久女教师免费一区 | 91在线秘 男同| 97国产精选| 啊啊啊好湿久久| 国产成人www免费人成看片| 日本伦乱九九九综合| 超碰97.com| 日韩钢筋无码高清啾啾啾| 国产久久久久久久久一区二区 | 成人 日韩欧美一区| 久久东京伊人一本到鬼色| 另类小说欧美激情校园春色| 日本男人插女人的逼黄色| 五月婷婷色| 熟女人妻一区二区三区| 人人妻碰人人免费| 日逼97| 91男同| 色鬼在线综合| av在线人气| 色色色网站| 日本一区二区三区四区免费观看| 欧美成年人性爱视频免费观看| 亚洲高清欧美总合| 欧美精品欧美精品系列| 国产精品丝袜久久亚洲不卡| 韩国女主播青草福利视频| 最新欧洲欧美日本激情网站| 日韩欧美经典在线观看| 777AV电影| 亚洲āv网址在线观看| 99热一区二区三区四区| 九九九久久久W精品| 欧美综合传媒| 久久久男人的天堂| 九九九九免费高| 久久久∴| 蜜臀99999| 18一区二区三区| 五月丁香啪啪| 欧美丰满熟妇XXXX性ppX人交| 亚洲精品国产专区在线观看| a片 xxxx受爽视频| 玖草在线视频| 久9无限国产| 老熟女综合| 日韩久射综合| 精品欧美乱码久| 亚洲欧美洲综合| 9Ⅰ老熟女| 特污精品女优骚货黄色视频在线免费观看| 国产尤物在线三区| 91痴汉| 国产精品3| 久久成人午夜狠狠| 亚洲91射| 狠狠色五月亚洲91| 亚洲另类春色| 欧美色网| 国产高清午夜成人在线观看| 欧美成人免费在线观看| 久久精品操| 青娱乐91| 伊人天天久久动态图| 试看60秒 爽| 欧差乱伦二三| 波多野结衣一级视频| 国产一在线观看| 日韩不卡在线一区二区| 无码国产精品久久久久| www.色五月| 精品久久青青草| 国产老熟女| 大香蕉乱级| 国产成人无码啪| 欧美东京热精品A∨| 欧美日韩中文亚洲v在线综合| 亚洲国产欧美中日韩成人综合视频| 中文字幕一区电影在线观看| 国产欧美一区激情交| 国产亚洲一黄| 欧美色66| 伊人久久亚洲色欲综合网站| 99色热| 亚洲天天操| 成人av毛片在线观看| 少妇人妻好深太紧了vr91| 精品亚洲国产成人AV制服丝袜| 婷婷色播婷婷| 91国产丝袜足交精品视频| 五十路二区在线| 国产精品97视频| 凹凸视频在线一区二区| 美女尤物人人操| 色婷婷电影网| 色超碰综合| 人妻激情视频| 国产家庭乱伦表演| 91强奸乱轮| 亚洲城人男人的天堂| 久草草一二三四区久久| 亚洲天堂加勒比| 欧美亚洲素人制服精品| 水野优香在线观看| 好屌色综合| 欧美性爱一区二区三区| 91视频伊人| www.婷婷五月天| 亚洲色图欧美另类在线| 国产精品久久久久9999小说| av爱爱爱| 无码9区| 少妇专区一二三四五| 国产精品久久泡妞网站| 四虎午夜影院| 视频二区美腿丝袜制服人妻欧美| 亚洲少妇色图自慰直播| 一本色道人妻久久| 超碰人人超在线观看| 97综合在线观看| 亚洲激情欧美色图| www.yeyecao| 91蜜臀在线久久久久| 久久久天美| 国产色综合亚洲色综合吹潮| 99色在线视频| 日韩中文字幕宗合在线| 操东北女人| 国产情侣自拍在线播放| 九九九九免费高| 欧美中出| 激情综合五月天| 91精品国产乱码| heyZO天然素人无码AⅤ专区| 啊啊啊好爽快点啊啊啊嗯嗯| 国产精品在线一区二区| 操b在线观看| 亚洲欧美精品91| 97超碰色中文字幕| 在线免费观看日韩一区| 男女激情中文字幕| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 人妻一二三区| 天堂资源欧美| 久久大| 久久日韩毛| 欧美日韩制服| 国产18精品亚洲精品| 欧美乱妇狂野欧美在线视频| 国产一区二区三区免费视频在性观看| 日韩草久视频| 欧美 亚洲| 国产亚州高清国产拍精| 伊人96在线| 亚洲国产精品无码AV在线| 欧美色997| 精品人妻1区| 欧美性色综合网| 成人五月天丁香激情综合| 男人天堂久久精品| 久草加勒比一区在线| 九九九九九九视频免费| 99激情视频| 久久春色| 亚洲综合春色| 午夜毛片亚洲精品片国产久久久| 天天干天天爽| 五月丁香激情四射| 九九热男人天堂| 亚洲色欧美| 成人综合网 欧美| 日本精品网站在线中文| 超碰97最新人妻| 日本 色 导航| 九草九九九| 午夜国产成人福利视频| 亚欧操逼片在线观看| 极品美女福利在线观看| 99热国产精品| 日韩免费性爱视频在线观看| 九九九久| 97色冈| 男女啪啪网站免费视频| 色老汉色| 一本色道综合久久欧美| 日韩人妻无码精品系列| 久久精品中文字幕观看| 天天插天天操天天摸天天射天天看| 一起草精品人妻| 超碰97极品9| 欧亚免费视频| 亚洲色电影在线| 亚洲第一页欧美| 在线播放一级无码视频| 91国内外在线| 人妻碰碰碰碰碰碰| 懂色中文一区二区三区| 亚洲永久AV无码精品秋霞| 亚洲黄片免费在线播放| 激情图片亚洲色图| 免费精品人妻一区二区三| 久久国产对白激情浪潮| 亚州精品丝袜-不卡成人免费| 大香蕉丝袜一级片| 国产情侣自拍在线播放| 日韩情色一区二区| 久久亚洲色图中文字幕| 欧洲精品在线播放| 精品91摸| 乱老女人一区二区视频| A级毛片在线看免费| 国产又粗又长视频| 天堂亚洲精品久久老牛| 久久蜜色情在线视频xxx免费观看| 99九九久久| 女人高潮大叫一级毛片| 免费αⅴ在线观看| 国产高清精品一区二区三区毛片| 国产粉嫩蜜臀av一区二区三区| 色天天野狼综合社区| 久久人妻无码毛片A片麻豆| 色五月69夫妻| 人妻熟女一区二区三区在线| 久草色悠悠在线视频| 97舔舔| 男人兔费天堂| 欧美亚洲日本视频久久久| 欧美日韩精品一区二区三区高清| 久操凹凸视频| 性暴力欧美猛交在线直播| 日本黄色精品专区网站| 国产午夜精品理论片a大结局| 国产深夜福利| 秋霞 色色| 国产精品操| 国产午夜精品在线观看| 亚洲爽图| 国内一级精品| 亚洲欧洲日韩中文字幕一区| 在线 欧美 亚洲| 天天天操天天天爱| 色踪合AV| 本道在线| 97超色| 亚洲欧美综合网站| 亚洲。天堂。日本在线观看| 欧美日韩亚洲五月天婷婷| 97香蕉人人乳| 玖玖爱一区在线| 久久天堂婷婷网| 91九色丨国产丨爆乳| 九九热免费在线国产视频伊人五月| 天天肏美女| 淫乱图区 | 白嫩国模丰满一二三区| 国语对白在线播放视频| 操逼1区| 色五月网址| 久久久九97| 屌色在线97视频| 欧美色图私拍91| 国产精品久久久久久久久久久久久久久久 | a片久久久久久久久久久久| 91人妻人人澡人人爽人人精品| 九九九九九九九九九国产精品 | 亚洲无码一区成人免费午夜| 国内毛片无码一级毛片| 99性视频| 国产自产91区13区| 91精品在线播放| 啪啪自拍九九综合| 人人做,人人操,人人摸| 色色五月婷| 色女网日韩| 视频在线中文字幕| 亚洲在线网站| 国产又大又硬又长又粗| 五月丁香综合| 黑人粗大V S日韩女优视频| 大香蕉线| 免费黄色片。| 欧美制服网站美腿丝袜| 97一区二区三区视频| 久久久女人| 亚洲av综合色| 爱爱动态120秒| 亚洲资源网| 秋霞操逼片| www五月| 9久久美女首页| 精品黄色电影| 淫荡少妇免费| 亚洲色图激情小说| 97视频一区| 翔田千里无码中出中文字幕| 91丨九色丨国产打屁股| 久久 久久国内精品亚洲| 色牛aV| 亚洲,日韩,欧美,成人播放 | 亚洲久草AV色图| 欧美999| 少妇干B| 亚洲91网。| 激情色图| 日本日逼视频网| 男人天堂综合| 五月丁香六月综合缴清无码 | 久久精品老司| 欧美激情区| 婷婷中文字幕| 中文字幕熟女人妻丝袜丝| 先锋影音av先锋一区| 欧美美女啪啪视频| 91熟女网| 日韩av在线播放不卡| 无码人妻系列少妇| 人人摸.人人色| 激情五月综合| 夜夜爽夜夜摸夜夜操免费视频| 免费视频在线一区二区不卡| 九九热精品在线| 日韩久射综合| 人妻少妇色综合| 密臀视频三区免费网站| 综合色色网| 视频在线观看青青99国产| 九色在线熟女国产黑人| 日韩电影天堂视频一区二区| 日韩免费一级性爱视频| 欧美内射少妇| 青青青国产手线观看视频2| 九九久久九九久久| 九九九网站| 亚洲色天堂日韩中| 日本视频在线中文字幕| 久草综合京东| 亚洲一级黄色毛片| 久久精品72| 国产欧美成人第一页在线观看| 男人的天堂啪啪| 国产精品ww久久| 青青草吊丝| 日韩欧美成人性爱在线| 午夜无码熟妇丰满人妻| 国产 日韩 另类 视频一区爱| 国产夫妻性生活视频| 亚欧国产无码精品在线| 人妻蜜桃臀| 久操高青| 桃花色综合影院| 欧美激情区| 欧美色图亚州激情| 免费啪啪av| 正宗无毛一线天嫩逼| 91久久婷婷| 97爱亚洲| 色眯眯av| 国产精品老师| 91人妻人人澡人人爽人人精品| 久久人妻97久久久久久久| 九九综合九九综合| 久久原创中文| 91无码中出人妻视频| 97免费视频在线观看| 天天日天天操VV| 中文久久爆乳| 另类图片五月天| 嗯……啊…嗯嗯…啊…好舒服| 嫩草在线视频| 人妻天堂三区| 97色色国产视频| 国产伦乱91| 100啪啪视频大全| 亚欧美色图| 第45页一区二区| 亚欧国产无码精品在线| 97在线视频免费观看| 91女优在线观看| 天天操狠狠日夜夜干超碰撸com视频在线观看| 91伊人| 视频在线观看青青99国产| 性吧在线视频| 深夜激情无码| 国产拍偷精品网站| #NAME?| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 丁香五月天久久精品视频一区二区三区| 熟女精品va中文字幕| 欧美+日产+中文| 美日韩一二三区| 九久9热| 中国亚洲呦女专区| 日日干天天干夜夜爽| 嗯嗯啊好大| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 五月丁香婷婷综合| 国内精品嫩模A∨私拍小视频| 日本 情色 1区2区3区| 国产丰满熟夫69mpp| 五月天色图影视| 婷婷五月成人| 无码高清专| 日韩字幕一区| 9久在线视频只有精品| 97久久久网站| 亚洲人妻久久久| 一区二区国产视频在线观看| 人妻天天操天天爽视频免费| 天天日少妇逼AV| 91在线无码精品秘 软件| h无码动漫在线观看| 强奸乱伦 亚洲一区| 亚洲a色| 亚洲图片 欧美电影| 国产十八禁视频| 狠狠热这里都是精品| 长长久久免费视频| 色婷五月| 天天综合精品| 亚欧国产无码精品在线| 秋霞视频一区二区| 人人爱人人操人人性| 99国产在线 精品 视频| 自怕偷自怕亚洲精品| 乱伦一二三区| 国产视频一区二区三区在线免费观看 | 大香蕉乱级| 亚洲美女精品九九视频| 国产2.3.4区| 亚洲涩图欧美| 亚洲成人在线乱码色午夜| 呻吟 欧美 日本 中出| 夜夜嗨TV| 高清无码91| 中文字幕免费在线观看| 久久在肏| 日韩9区| 乱伦强奸区日韩| 成人羞羞视频国产| 亚洲影视高清第一页| 91精品国产91久久久久久久久久久久| 久久久久斤小| 国产白丝AV| 老熟女91视频| 国产400孕妇孕交群| 精品国产乱子伦一区二区三区,精品一| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 啊啊啊久久久视频| 国产精品夜夜夜| 国产丁香精品露脸视频| 欧美综合天堂| 女生91网站| 亚洲一区在线观看欧洲 | 麻豆AV一区二区| 欧美 传媒 麻豆 日韩 偷拍| 久久视频少妇美女| 欧美日韩妖精91com| 中文字幕在线观| 午夜国产成人精品视频| 亚洲AV无线| 超碰人人干| 色av中文字| 97精品在线| 日日躁夜夜躁狠狠躁超爽| www.色吧5.com| 日韩一级特黄av毛片| 欧美日韩成人在线| 色婷婷在线视频精品导航| 国产欧美一区二区| 亚洲人精品午夜不卡| 男同专区一区二区三区在线| 黄色操人| 免费A V在线| 开心六月色| q2午夜理论片夜色av| 国产高清亚洲日韩一区| 国模不卡| 极品五月天噜噜| 91黑丝操| 91天堂网| 欧美日韩性爱操大逼| 精品久久一区二区三区四区五区| 国产白丝在线| 久久精品店| 人人操人人操草草| 国产视频三区四区| 久久有碼| 12一15性XXXX粉嫩国产| 亚洲av淫乱| 久久111| 抽插一区二区视频| 欧美精品日韩久久久九| 久久99综合| 国产九九九九九九| 欧美成人一级麻豆| 这里只有精品视频在线观看麻豆 | 色偷综合| A一区片| 99色视频| 超碰在线综合97| 午夜男女爽爽爽影院视频| 亚洲国产第一页综合视频| 极品AV网站在线观看| 日韩免费av片高清无码| 色色五月婷婷| 人妻少妇色综合| 国产激情视频一区区三区| 欧美亚洲中文字幕| 欧美极品色| 国产成年女人免费视频播放a| 久久久久久久 九九九九九九九| 天天综合91入口| 图片区小说区| 久久人妇| 综合久久久久久久综合网| 欧美成人9797| 久9九综合在线| 熟女视频久久| 久久久免费高清中文视频| 99re公开精品免费视频 | 99热一区二区三区四区| 熟女人妇一区二区三区| B049AV在线播放| 1级黄色夫妻对换性交免费看| 久久久久久久久久久人妻| 亚洲无码日韩电影| 六月天婷婷| 人妻熟女一区二区三区视频| 极品尤物在线观看| 日韩精品一区,二区 九九...老司机| 精品人妻一区二区视频| 大香伊人在线一区| 天堂а√在线最新版在线| 亚洲AV资源| 中国少妇XXXX做受| 91九九九逼| 99亚洲精品| 久草婷婷| 日韩国产精品人妻无码久久久| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 激情综合久久| 一卡二卡三卡| 强奸乱伦av电影| 91黑丝操| 欧美熟女操屄| 91精品操美女| 18禁网站在线播放| 成人草草视频| 亚洲激情在线| 天天影视色香欲综合网小说| 无码一区二区三区四区五区六区七区八区九区十区视频 | 日韩欧无码一区二区三区免费不卡 | 国产一区二区a毛片| 欧美色图97| 中文字幕精品区先锋资源| 99re久久| 人妻日日夜夜精品| 日本影视久久免费| 人妻人人澡人人爽人人| 黄色小视频日本txt| 日比av无码| 亚洲国产精品成人无码久久久 | 免费精品人妻一区二区三| 国产伊人精品在线| 激情综合网激情五月天| 日韩精品中文字幕人妻| 黄日韩| AV九九| 日韩免费中文字幕视频| 男女性扦B| 五月综合激情网| 飘花国产午夜精品不卡| 美国三级日本三级久久99| 五月丁香六月婷综合成人综合| 九七色图| 欧美日韩人妻少妇 一区二区三区| 久久精品亚洲成a人天堂| 秋霞色色影院| s片在线观看| 精品少妇后入一区二区三区四区人妻巨乳| 在线午夜成人无码视频| 青青草久久| 偷拍伦理视频| 91人人臊| 狠狠久久手机视频精品| 天天爽入口| 红桃视频高潮| 人妻嗯啊啊在线播放| 特级特黄一级毛片免费| 国产AV中文| 97视频在线视频| 日日干日日操五月天伦理视频| 天天视频黄网站| 无码高清少妇久久| 又黄又硬又粗又长国产视频| 久久超碰98| 亚洲 图片 综合91| 综合色99| 一级一性爱免费视频| nuu12国产麻豆精品| 97国产成人精品免费视频| 久久久99免费| 97伦乱| 亚洲精品蜜桃久久久久久久| 91蜜臀熟女| 国产亚洲禁久一区二区 | 色五月综合| 强奸a片网| 久久这里是精品| 日韩欧洲操屄视频| 久久久9999| 日韩精品人妻一区二区| 偷拍片久久| 大香蕉青青9| 大香蕉欧美伊| 精品久久久久黄少妇| 亚洲中文日韩精品| 国产熟女乱论| 精品性爱一二三区| 大香蕉免| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 日韩AV一区二区三区三州三州| 亚洲国产成人精品无码专区| 欧美一区二区日韩三区| 97超碰中文在线| 淫荡网址| 狠狠爱大香蕉| 蜜臀99久久| 97视频播放| 男人久久天堂| 啊啊啊啊免费视频| 中文字幕一区二区三区人妻不卡| 久污| 热热色国产一二区AV| 亚洲视频一二区| 熟妇高潮一区二区免费视频| 天天日老熟妇| 人人天天欧洲| 欧美另类色图片| 国产精品久久发布|