色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
日日操天天操| 自拍大香蕉乱插| 亚洲情色1区| 78超碰| 亚洲欧美日韩精品久久久一区二区 | 亚洲春色欧美激情自拍| 国产乱青青草久久| 国产一级片| 亚洲国产美女久久久久 | 亚洲乱码精品一区二区| 九九九九九精品十六| 久久精品国产亚洲AV无码电影| 亚洲熟女偷拍在线观看| 丰满高潮18xxxx| 青青草在线视频播放器| 国内97干免费看| 国内三级自拍小视频在线观看| 狠狠色伊人亚洲综合网站色| 99热大香蕉伊在线| 天堂国产AV| 久久这里只精品99re66图| 日韩免费av片高清无码| 国产AV天美传媒一区二区三区| 久久理论字幕视频| av天堂手机版追回| 97干在线视频| 91在线视频免费播放| 亚洲欧美国产va在线| 五月天婷婷小说| 色欲三区| 亚洲国产一级黄色视频| 精品人妻丰满熟妇一区二区三| 人人摸人人叼| 多毛小伙内射老太婆| 欧美性色欧美| 91精品久久久久| 超碰98综合网| 欧美亚洲特P| 青青草玖玖爱| 岛国1区2区3区在线观看| 怡红院亚洲怡春院av| 少妇蜜汁| 色av中文字幕| 开心激情婷婷| av中文在线| 久久毛卡| 亚洲小电影免费涩涩成人在线高清| 男女国产精品| 欧美综合色图片| 久久精品国产精品| 久久一二三四不卡| 物业黑人 AV一区| 美女AV一区二区| a人欧美综合天堂麻豆| 无码高清专| 中国AAAAAA黄色片| 欧美亚洲| 韩国久久97| 亚洲激情综合| 九九九午夜| 91欧美偷拍| 夜夜肏2021| 999日韩中文精品观看视频。| 屌色在线97视频| 日韩一级片| 99热国产| 一道本东京热加勒比一区二区三区| 久久xxxx| 青草视频在线看看看看看看看看看| 美女刺激久久国产欧美| 亚洲天堂,男人| 欧美黑人性猛交91| 亚洲91色在线| 色综合99999| 91成人久久| 九九九九亚洲| 欧美国产精品久久九九| 岛国片在线视频网站| 成全在线观看免费观看| 欧美熟妇操操视频| 91爱看| 后入式福利| 91亚洲网站| 97免费在线观看| 嗯嗯啊啊啊好爽| 9999久久久| 欧 美 自 拍 偷 拍| 操国产高清| 日韩熟女操逼| 欧美日韩中文亚洲v在线综合| 一区三区啪啪| 丰满翘臀美女影院视频| 嗯阿好爽好紧| 夜夜欢天天干| 色欲天天综合久久久无码网中文| 国产无码久久高清| 啪啪啪大香蕉| 久久97资源 网| 亚州大图综合色图| 精品无码久久久久久久杏吧| 青青操狠狠撩| 久久伊人青青草| 理论久久婷婷网 8| 日本精品一区二区三| 亚洲资源站| 日本高清_区二区三区 | 久久无码成人| 精品人妻一区二区三区-国产| 蜜臀久久99'精品久久久| 992视频一区| 自拍偷拍 高清无码| 亚洲综合小说另类图欧美视频激情小说色五月天 | 久久精品国产亚洲AV清纯| 亚洲涩涩| 人人摸人人入| 一区二区三区视频在线观看免费| 欧美精品第四五页中文字幕在线观看| 欧美AB在线| 温婉少妇玩3p| 亚洲 欧美 另类 日韩 人妻一区| 国产日韩无码一区二区三区久久区| 网页导航五月天免费一二三区| 第二页中文字幕| 91欧美丝袜| 强奸乱伦免费网站| 亚洲色图欧美色图制服丝袜| 日韩熟女精一区二区三区不卡| 不卡一区二区日本视频| 国产传媒美日韩av| 日韩黄色片子| 97视频900| 操国产逼| 日韩在线视频1234| 在线播放一级无码视频| 国产极品久久久| 又大又大又大又粗爽高潮观看| 亚洲欧美精品福利在线| 日韩国产九九精品一区二区三区毛片| 激情网色| 中文字幕欧美日本乱码一线二线| 2019天天干| 99热国产| 九九碰九九爱97超| 国产女人高潮视频| 成人av性爱电影在线观看| 人妻久久久久久久久久久久久久久| 97精品视频免费| 欧美999| 99激情视频| 九九精品网| 婷婷亚洲综合| 啊啊啊爽爽| 志村玲子视频一区二区| 91P0RNY大屁股人妻| 丁香色狠狠色综合久久小说| 人妻天天爽夜夜爽爽| 人妻激情视频| 99精品在线观看| 2017天天操| 中文字幕一区二区三区人妻少妇在线 | 精品一二三区女同| 婷婷99狠狠躁天天躁| 97精品免费视频网站| 99色在线| 精品欧美А∨无码黑人大荫蒂| 91丝袜激情在线| 国产黄色剧情影片麻豆免费播放| 爱爱久久| 狠狠操综合| 国产v亚洲v日韩v欧美v片另类| 久久99久久99久久99人受| 亚洲激情视频| 欧美另类自拍 | 欧美老熟另类| 艹少妇网站| 91白虎| 天堂蜜桃无码视频一区二区| 亚洲天堂中文字| 亚洲影视第一页| 麻豆60秒| 久久美女福利是上海美女| 国产精品网址| 超碰欧美97资源| 天堂av2019| 久久色网| 人爽不卡视频| 天天综合网~91入口| 久久精品色欧美aⅴ一区二区| 97超碰中文在线| 亚洲性爱高潮影院| 久久亚洲中文字幕视频| 夜夜春夜夜操| 红桃视频高潮| 人人操人人狠狠操| 日韩Va亚洲va欧美Ⅴa久久| 欧美韩日精品99综合| 国产农村妇女精品1区二区| 日韩激情啪啪| 国产女同视频在线播放| 人妻丝袜美腿中文字幕| 美女91网| 狠狠躁天天躁日日躁97| 99re只有精品| 青青草原人妻| 蜜乳AV色欲AVAV无码| 中文字幕丰满人妻日本| 综合色99| 国产精品分类在线观看| 精品大全99999| 九九国产热| 九九热免费在线国产视频伊人五月| 国产绿奴视频在线观看| 久久久久久一日韩字幕无码| 九九九热| 人人操人人精品影片| 亚洲揄拍网| 欧美成人黄网色网站| 视频黄色国产一级| 八戒无码国产午夜福利| 人人么人人操| 东北毛片| 亚洲加勒比久久日本道| 风间由美日韩欧美久久| 国产在线精品电影观看| 婷婷香网站| 男人天堂.AB| 又大又长又爽| 欧洲射精91| 国产专区路线| 午夜呻吟欧美| 人妻 制服 日韩 中文 在线| 神马久久中文字幕| 色丁香五月婷婷| 免费久久精品麻豆一区二区av| 久久免费精品视频免一| 自拍大香蕉乱插| 370p日韩欧美亚洲精品| 国产日韩精品suv| 国产三级在线现体验区| 日韩黄片视频试看| 亚洲蜜桃V妇女| 欧美一级黄片视频在线| 国产亚洲日本精品在线| 人妻加勒比东京热| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | www久久国产精品| 成年人黄色视频免费| 国产免费一区2区3区| 午夜噜噜噜| 丝袜色综合| 日韩欧美~中文字| 欧综合网| 一区二区三区探花在线观看| 国产亲戚伦亲在线| 依人大香蕉| 伊人综合色网| 不卡一区视频| 亚洲风情在线观看| 欧美午夜熟妇黑人精品91| 丰满少妇一区二区三区免费看| 欧美欧美啪啪视频| 国产AV色黄看到爽| 夜夜爽夜夜| 色婷网| 日韩无码人妻| 校园春色五月天| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 99re8免费高清在线| 亚洲国产欧美日韩人妻日中文| 搡老女人老熟女91| 夜夜欢天天干| 丝袜视频一区二区在线播放国产中文 | wwe 天天干.com| 日日夜夜干| 黄色大香焦1级‘′‘| 婷婷激情五月天小说网| 91成人高清在线观看| 少妇久久久久久| 97日韩超碰超碰中文字幕| 欧美综合 站| wwe 天天干.com| 五月天人妻综合| 欧洲精品一二三在线| 99国产精品免费| 青娱乐大香蕉| AV色五月天| 五月开心久久AV官网| 色综合av综合久久| 国产精品亚洲天堂网址| 极品尤物在线观看| 伊人色综合网| 男人天堂.AB| 欧美一级色| 99爱在线视频| 欧美专利1区2区3区4区5区免费| 狠狠婷婷亚洲中文综合久久| 久久久精品视频免费观看| 强奸乱伦αv片| 一区二区三区网站日日骚| 上床不卡网站| 俺也射| 中文久久久| 人人操我人人干| 熟女人妻一区二区三区| 婷婷三区| 欧美后入式| 欧美色偷偷| 91福利网在线观看| 操婷婷逼| av橘色网站| 波多野结衣AV无码一区| 99ri在线视频| 牛牛aV| 97超碰公开| 久久视频少妇美女| www..com操老师| 日日骚精品视频| 亚洲在线观看| 成人亚欧免费视频| av草草在线电影| 十八禁的黄污污免费网站| 欧插网站| 青青青在线高清视频在线一二三四区 | 伊人网青青| 亚洲色图久久成人| 欧美色三级片91| 嫩草影院在线观看精品| 偷拍 亚洲| 欧美欧美少妇| 亚洲国产欧美日韩人妻日中文| 粉嫩小泬久久久一区二区| 免费福利视频中文字幕| 99re免费| 搡老人老9丨女老熟人| 天天情欲宗合网| 在线播放成人高清免费视频| 吉川爱美98堂在线| 精品久久久久久AV无码| 亚洲污污网站| 日韩人妻精品久久久久| 男人的天堂com| 天天操美美| 婷婷精品国产欧美精品亚洲人人爽| 亚洲91少妇| 国产精品3| 91狠狠色丁香婷婷综合久久精品| 蜜乳AV色欲AVAV无码| 999狠狠综合| 东京热毛片177b2viP| 二级毛片| 熟女突然公开看18禁影片 | 狠狠躁日日躁夜夜躁A| 日本人妻伦在线中文字幕| 天天插天天舔舔天天干| 久久111| 视频国产精品未满十八禁止在线观看| 俄罗斯一区二区视频在线观看| 骚逼高潮久久精品| 丰满人妻被猛烈进入中| 精品少妇一区二区| 美女露胸露奶头| 九热视频| 天天综合色| 一区超碰一区| 宅男午夜在线视频| 北京专精特新企业招聘信息| 久久草在线综合视频| 天天干夜夜鈤| 欧美第二页午夜| 国产呦精品系列在线观看| 青青伊人久久| 超碰日韩美妻| 久久伊人青青草| 75大香蕉| 国产成人主播| 夜夜国自区| 午夜毛片高清免费不卡| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 日韩精品一区二区三区色欲| 国内精品嫩模A∨私拍小视频| 9丨久久九九九| 91色欧美| 噜噜噜噜久久久精品免费| 亚洲日本天堂| 欧美日韩在线小说| 亚洲97成人在线观看| 久久加勒比| 欧美人与动性人交a| 色吧 综合| 久久久久久九九九| 婷婷爽人人婷婷爽视频| 黄色av网站在线播放| 在线欧美69V免费观看视频| 亚洲精品天堂久久A∨51成人漫| juliaann丝袜大战黑鬼| 天天综合网视频91| 91啦人妻| 成人自拍三级在线观看| 成人网址在线观看| 国产av青草| 欧美精品亚洲精品日韩传电影| 欧美淫乱视频| 日本成人A片网站| 婷婷性网| 强奸乱伦AV网站| 国产青青美女玩逼视频| 夜夜嗨视频| 欧美黄色大片在线观看| 国产精品国产拍高清AV| 一区二区三区 丝袜 高跟 美腿| 99蜜桃臀亚洲成人在线观看| 激情一区二区| 91九色精品熟女内射| www. 男人天堂成人在线| 成人区人妻精品一| 激情网色| 91女优在线观看| 综合五月婷婷亚洲一区| 91丝袜美女| 中文乱码字幕观看| 任你草| 激情综合网一盗摄| 操逼逼无码| 一区二区三区蜜桃成人撸久久东京热| 酒色综合网| AA丁香综合激情| 亚洲女人毛茸茸91| av毛片aaaaa免费看| 精品超碰国产| 97久久超碰亚洲| 91九色在线| AV在线资源| 久草网站免费在线观看| 久久成人东京热人妻| 777琪琪午夜免费A片| 一本一道人妻久久一区二区三区| 欧美精品自慰系列寂寞少妇| 91网站18+| 日本亚洲熟女视频| 久久婷婷成人综合色怡春院| 色婷婷丁香五月| 国产精品网址| 女人精品内射国产99| 国产日韩欧美亚洲精品95| 97视频新免费| 色啪网| 性色综合网| 大香蕉十区| 在线观看免费视频国产| 久久系列| 精品无码久久久久| 五月丁香啪| 啊啊啊啊啊啊啊啊在线观看| 色色色热| 久久av一级av少妇av高潮| 东北女人高潮视频| 欧美情色贴图| 国产白丝在线| 久操高青| 国产亚洲精品自在线亚洲情侣| 青娱乐999| 九九热精品视频六| 婷婷久草| 试看福利| 91在线色| 99久久久无码| 99精品丰满人妻无| 久久久久精| 日韩精品一区的| 日韩精品在线观看观看| 乱伦熟妇一区二区| 亚洲人妻精品一区二区| 亚洲综合一| 天天操天天射青青草| 玖玖97综合| 日本天天人人狠狠在线日美女 | 性色av婷婷久久一区二区点复制| 国产精品网址| 久久性爱免费送| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲精品黑丝| 韩国嫰模上门援交视频| 综合网天天| 2020久久免费视频| 欧美白嫩在线放| 2019亚洲男人天堂| 校园春色综合| 久久综合资源一区二区| www.人人摸在线视频| 天天肏夜夜肏| 无码久久国产| 99视频在线| 91N综合网| 九九色精品| 国产精品乱码久久久久久| 亚洲欧洲日韩天堂av| 亚洲影院小综合| 韩国三级一线观看久| 伊人色综合超碰| 综合av社区| 97超碰精品成| 五月丁香狠狠爱| 欧美在线|亚洲| 国产亚洲99久久精品| 东北毛片| AV天天综合| A级在线视频| 伊人精品视频| 九九色逼| 凹凸视频在线一区二区| 偷拍在线观看视频| 国模精品娜娜一二三区| 色图综合网| 国产91精品久久久久久久网曝门| 探花在线免费观看视频国产一区| 青青草色AV| 老熟女熟妇| 天天爽天天爽| 超碰色男人操熟女| 香蕉精品二区二区| 欧美毛片在线网| 超碰97资源中文字幕| 久久啊啊啊视频| 久久免费精品视频免一| 天天色黄色影院天天操| 熟妇综合一区二区三区| 色综合1991| 日韩美脚一区二区网站| 日韩色香| 日韩少妇一区二区三区| 欧美有码激情视频一区二区三区| 最新亚洲人成网站在线影院| 麻豆精品久久久久久久| 好涩综合| 超碰人妻天天干| 超碰综合色| 亚洲欧美中日韩| 香蕉视频精品亚洲一区二区三区在线播| 97久久超碰日韩精品| 人人操人人摸超碰| 久视频在线观看| 91粉芽高清在线一区二区| 伊人网青青| 4虎在线视频| 日日噜噜夜夜久久亚洲一区二区| 亚洲AV成人在线| 中文字幕亚洲在线一区| 国产第12页| av在线播放国产一区| 香蕉黄色一级视频| 午夜视频好爽啊| 国产一级操B视频| 欧美老妇曰批的视频| AV和黑人在线播放| 亚洲国产成人高清在线| 熟女突然公开看18禁影片| AV大香蕉| 国产午夜视频| 综合97久久| 久久这里只有精品9| 男女啊啊啊| 欧美高清18A片| 激情久久久| 久久精品毛片免费不卡| 嗯嗯啊中文字幕| 久久久久久中文字幕中文字幕最新| 欧美精品丝袜久久久中文字幕| 欧美熟女激情| 友优传媒精品在线一区二区| 国产精品久久久啊| 风骚少妇视频中文字幕| 99国产精品自在自在| 97色五月天完| 国产欧美日韩精品中文| 手机午夜电影神马久久| 美女久久久久久久| 久久精品99| 亲子敌伦对白在线播放| 韩国三级三级BD在线| 天操老女人| 久久久久亚洲一区女同性恋中文字幕| 久久有码| 激情小说五月天| 精品97久久综合| 一区二区高清视频| 亚洲色图大香| 美女十八禁| 人妻系列无码专区中文有码| 后入 亚洲 美女 射| 97极品无码| 国产盗摄美女如厕大神作品在线观看| 九色97| 久久精品店| 国产A v无码专区| 亚洲另类小说卡通动漫| 男女啪啪啪18禁网站| 男插女青青影院| 岛国片在线播放| 久久久久久电影| 亚洲九月丁香| 91婷婷| JULIA人妻风俗店中出电影| 亚洲精品819| 91人人看| 一二三啪啪专区| 免费看美国人人爽,人人操| 大屁股xxxxx| 电影69乱码96| 欧美日韩一干二干| 亚洲校园激情| 大肥女高潮bbwbbwhd视频| 九九热男人天堂| 你草精品在线视频| 青青草在线视频播放器| 在线a亚洲视频播放在线| 呦呦一区| av爱爱爱| 亚洲乱熟女一区二区三区大香蕉| 丝袜熟女2P| 四虎视频在线观看| 91国模| 2017人人操,人人摸| A片 AV一级在线播放观看免费| 一起草av| 久久精品国产精品| 97 色综合| 亚洲色系另类精品国产| 欧美一级黄片免费播放| 国产专区路线| 99re欧美| 亚洲无吗在线视频| 91女网站| 极品美女嘿咻| 国产不卡免费在线视频| 婷婷色色五月天| 久久久久久久久久久久黄色| 丰满人妻一区二区三区免费 | 国产久久久久影院老熟女| 久9无限国产| 99久久久久| 大干人妻| 亚洲AV无码国产成人| 蜜臀久久99精品| 国产精品久久久久久久久久久久| 久久久精品无码亚免费| 天天看人人操屄犊摸阴| 色综合91好| 色一色综合网| 国产精品午夜福利视频| 69XX一中文字幕人妻91| 淮穴色AV| 蜜臀久久99精品久久久久电影| 人妻丰满熟妇一区二区三| 操美女高潮抽搐白浆| 亚洲欧洲精品视频发布| 深田咏美亚洲精品福利社| 中亚黄色三级大片| 国产一级黄色片在线观看| 智利AV在线网| 亚欧美综合网。| 亚洲中文日韩欧美大香蕉视频| 天美传媒av在线| 国产无码一二三区| 国产美女自拍视频| 亚洲一二三精品久久网| 91亚洲色人| 国产免费一区| 亚洲天堂久久| 国产无码久久高清| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 翔田千里AV无码秘 三区| 野狼激情网| 极品欧美一区二区三区| 天天操人人操骚逼网站| 97最新在线播放视频| 国产熟女无套内射| 免费9 1久久| 欧美日韩精品一区二区三区高清| 精品少妇一区二区| 大香蕉AV丝袜| 国产第25页在线观看| 国产又粗又长的视频| 色女网日韩| 精品一区二区成人| 免费视频一二三区| 99只有精品| 丁香五月激情婷婷| 98人妻精品一区二区色欲| 欧亚揄拍偷拍精品视频| 午夜精品久久久久久久男人的天堂| 97色碰| julia中文字幕在线观看| 丁香婷婷久久| ji熟女.com| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 动漫片子网站3黄| 亚洲精美粉嫩嫩泬在线观看| 91少妇人妻| 天天综合网~91综合网| 亚洲中文制服诱惑| 黄aaaaaaaaaaaaaaaaaa色网站| 九九碰九九爱97超| 国产精品高朝久久久久久久| 怡红院怡春院| 五月婷婷性爱| 国产不卡免费在线视频| 精品欧美老熟女一二区| 玖玖资源视频一区二区三区| 校园春色综合色| 人妻久久久| 国产亚洲中文不卡二区| 一级性爱视频免费观看 | 亚洲国产综合久久久性感熟妇| 欧美一级国产一级| 日韩三级伦理中文字幕| 欧美亚洲特P| 国产欧洲精品亚洲午夜拍精品| 人人爽天天爽| 九九伊人网| 亚洲欧美一区二区三区一猛片| 久久久精品中文字幕爱豆| 水滴偷拍| 国产嫩草精品A88AV| 色天堂在线观看| 亚洲。日韩。欧美| 97久久精品亚洲| 国产成人精品日本亚洲语言| 中文字幕一区电影在线观看| 香蕉国产精品麻豆亚洲欧美日韩| 久久这里只有精品9| 国产97综合| 久久↗↗| 青青草久草AV| 欧美男人亚洲天堂| 国产欧美后入| 很很很很操| 96久久久精品| 超碰97在线中文| 精品国产国产AV| 日本淫穴在线| 大香蕉欧美国产日韩高潮| 99xav| 欧美色图私拍91| 成人色女网| 天天日天天射天天干| 久久綜合很很很| 国产污视频麻豆传媒一区二区| 久久久久久久久久久97| 亚洲。日韩。欧美| 夜夜操天天肏| 欧美一区二区三区大综合| 欧美一区二区传媒| 1204av韩国| 亚洲凸凹超碰成人| 久久久精品视频欧州站| 婷婷探花久久精品一区| 蜜臀99久久国产| 无码人妻一区二区三区免费九色| 久久加勒比| 无码一区免费在线不卡| 1769国内精品视频| 中文字幕亚洲热播人妻| 强奸乱伦av电影| 伊人婷婷五月天| 大稥蕉免费视频这里只有精品| 亚洲不卡不卡中文字幕不卡| 亚洲成人精品久久久| 亚洲欧洲无码一区夜| 韩国嫰模上门援交视频| 成人性交午夜免费片| 久操97| 操操逼视频| 精品偷拍13p欧美dodk视频| 亚洲色图亚洲无码强奸乱伦| 久久午夜伦| 91天天综合网,天天综合网| 久久久久久少妇| 东北女人高潮视频| 佐山爱中文字幕| 精品国产久久乱码| 成人久久久| 激情抓乳插进去啪啪啪日韩 | 激情九月婷婷| 97精品国产97久久久久久户外免费| 性色国产东北露脸精品视频| 中文字幕av片| 2023天天操夜夜操| www.国产高潮精品| 国产精品天美传媒| 欧美性视频二区三区| 亚洲天堂资源网| 日本成人A片网站| 激情综合网激情五月天| 91久久久视| 国产精品伦理| 草莓精品视频在线免费观看| 日本综合久久| 精品美女少妇一区二区三区| 久久无码精品| 亚洲人妻中文高清| 男人天堂站| 嗯嗯嗯啊啊在线观看| 国产精品无码成人精品| 91久久久久久久| 四虎884a| 欧美人妻少妇| 综合婷婷| 精品中文一区二区| 无码区蜜乳| 超碰人人乐97| 96超碰网| 欧美熟女操屄| 亚洲欧美一区二区不卡视频播放| 日韩无码一区二区三区| 啊啊啊啊好多水| 精品色色| 亚洲国产成人7777| 日日干夜夜欢| 天天爽天天| 91久久青青草原精品| 夜色五月天| 极品欧美一区二区三区| 久久久久极品| 一区久久久二区| 在线观看亚洲专区| 天天综合97| 青青草中日韩在线| 五月丁香六月激情综合| TS人妖另类精品视频系列| 国模一区二区三区| 色图综合网| 五月天婷婷社区| 4虎在线观看| 少妇久久| 伊人黄色视频免费观看| 91超碰碰在线| 成人影 天天操 亚洲| 超碰99re| 97色婷| 免费视频观看60秒| 国产精品三级视频网站| 97精品在线| 性色av网站| 中日992视频| 人人透人人操| 久久久天堂| 日韩熟妇二区| 91久久| 日日夜夜青青草母狗| 国产乱伦亚洲色图高清无码| 亚洲永久永久永久永久一级一级一级精品 | 97任你吞精| 九九九九一区| 国内91熟女人妻丝袜天天精品视频在线 | 人人操人人爽人人操人人| 日日夜夜骚| 久久青青草原免费视频| 嗯嗯啊啊好大好爽| 欧美一级做a爰片免费视频| 97在线视频免费看| 欧美黑人与女人91~| 午夜乱轮操逼视频免费看| 少妇精品久久久| av婷婷色婷婷色六月| 久久国产精品m码| 91xingse| 曰本人妻人人澡人人夹| 国产91丝袜 在线播放| 久久婷婷国产一区二区色| 思思视频免费看网站| 超碰97亚洲区| 青青草玖玖爱| 亚洲熟妇白浆无码AV| 日韩无码极品| 国产精品懂色tv影视免费观看| 久热精品在线国产| 中日亚韩免费视频| 99婷婷| 成人熟女视频一区二区三区| 精品无码少妇| 偷拍导航视频网站| 成年男人的天堂| 377p欧洲日本亚洲大胆| 精品69网| 亚洲色图美腿丝袜| 五月婷婷综合网| 国产欧美日本亚洲精品| 亚洲午夜蜜臀| 日本不卡三级网在线播放| 强奸乱伦Av网| 97在线免费| 亚洲AV在线资源| 青青11操操操操操操操操| 乱论91| 国产白丝精品在线观看| 久草成人影片| 熟妇艹鸡八| 婷婷尹人大香蕉免费| 97在线精品观看视频| 91岛国动作片| 91女优在线观看 | 国产又色又粗又黄又爽| 新怡红院| 少妇内射www在线观看视频 | 激情小说亚洲视频| 亚洲aw毛茸茸在线 | 亚洲色宗合| 日韩熟女视频二区| 国产精品欧美激在线| 亚洲日韩精品一区二区| 亚洲色资源| 精品人妻一区二区三区-国产精品| 色婷视频| 中文字幕狠狠玩| 国产一进一出视频网站| 69国产对白刺激| 性欧美91| 色综九九九一区| 在线小视频| 欧美综合制服在线| 香港成人一级视频在线青青草| 人妻久久久久久久久久久久久久久| 国产精品久久成人免费| 天天摸夜夜添无码小视频| 在线毛片片免费观看| 婷婷久月| 丰满人妻一区二区三区免费| 九九久精品| ...日韩成人一区二区三区字幕| 四虎视频在线观看| 国产传媒1234区| 日韩少妇丰满亚洲| 91啪9色| 午夜呻吟欧美| 亚洲精品一区二区三区新线路| 99久久久| 日韩AV一区二区三区四四| 超碰免费人人| 九九热AV| 久久久精品国产亚洲伊人| 综合五月婷婷| 五月丁香色综合| 懂色AV一区二区三区| 亚洲激情网一二三四区| 日本三级中国三级99人妇网站| 香蕉婷婷| 私色综合网| 狠狠躁AV| 中文字幕乱码人妻一区二区三区,99精品| 99热这里只有精| 97综合在线观看| 美腿丝袜偷拍亚洲欧美| 久久久久久久久久久久黄色| 熟妇高潮精品一区二区三区下载| 在线情色电影 91大| 精品少妇人妻一区二区三区| 夜夜嗨一区二区三区三州加勒比| 国产午夜精品一区二区三区牛牛| 一区二区三区麻豆| 在线观看啊啊啊啊啊| 日韩熟女精一区二区三区不卡| 国产一二三福利视频网| 日韩欧美字幕亚洲一区二区| 国模少妇一区二区三区| 亚洲av乱伦色图网站| 久青草影院| 欧美亚男人的天堂| 亚洲揄拍网| 久久精品女同亚洲女同13| 久久啊啊| 日韩无码操逼片| 日韩黄色成人性爱| 东京太热久久久| 欧美91精彩| 日本二三四区| 欧美A片中文字幕| 黄片无码在线制服| 91久久精品国产| 午夜毛片高清免费不卡| 深喉吞精| 中文字幕日韩电影人妻| 一区二区三区机械有限公司| 中文字幕在线观看第二页| 最新9久久久9免费视频| 性猛交| 国产东北女人在线视频| 天天爽天天爽| 少妇内射www在线观看视频| 日韩人妻无码不卡网站| 18啪啪手机免费性爱| 在线播放中文字幕| 国产精品视频播放| 欧成人精品一区二区三区| 九九综合久久中文字幕| 欧美日韩高潮喷水91| 欧美传媒一区| 亚洲最新Av| 综合久久婷婷| 日韩人妻精品中文字幕| 精品九九九九九九| 亚洲国产高清福利视频| 青青操在线亚洲视频观看欧美在线| 99色热| 人人操人人摸人人看人人干| 精品国产乱码久久久久久影片| 久久人妻无码毛片A片麻豆| jizz啪啪| 黄色AV影视| 日本久久久久久久久久| 操日韩第| 青青草十区九区爱夜| 人人摸人人干| 色香综合天天影视综合 | 日韩在线一区高清在线| 狠狠躁AV| 婷婷激情四射| 综合欧美日本三级| 日本欧美m v精品网站加| 午夜a成v人电影| 日韩精品.久久精品.AV女优.天美传媒| 国产九九九九九九| 亚洲导航深夜福利| 香港日本韩国人妇99www.wccm20| 国产性爱强奸乱伦大全| 这里只有精品视频| 欧美激情 亚洲色图| 一起草精品人妻| 久久久久斤小| 久干9操| 欧美日韩另类字幕中文| 国产精品亚洲无码| 影音先锋一区二区在线资源| 一道α片欧美| 极品粉嫩一区二区| 69国产对白刺激| 亚洲天堂东京热| 七月婷婷综合| 麻豆AV一区二区| 精品三级在线专区| 秋霞男人网| 操人人| 精品亚州18| 免费精品人妻一区二区三| 日韩啪啪啪视频| 偷拍亚洲熟女视频播放| 亚洲91网站| 久干9操| 男人天堂最新手机版在线青青草| 无码日韩网站| 99re28在线观看| 日本在线一二| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 中文字幕永久在线| 男人的天堂va在线| 混色激情av| 国产福利电影| 国产欧美黑人丰满在线| 天天色播亚洲综合网站| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美一级久久久久久久大片动画 | 无码人妻1727| 啊啊啊啊视频免费| 亚洲AV成人无码一二三久久| 亚洲第91页 | 色欲久久99精品久久| 婷婷五月天成人网| 翔田千里av一区二区三区| 天天澡天天爽日日AV| 精品女同一区| 人妻熟女一区二区| 久久久久亚洲一区女同性恋中文字幕| 日韩乱插| 亚洲 欧美日韩 另类| 日韩免费在线观看不卡| 天堂亚洲欧美| 男人的天堂久久狠| 国产精品在线网站| 亚州 综合 色图| http://qxhbdz.com| AV高清一区| 男女91| 好吊色一区| 五月天伊人| 可以在线观看AV的网站| 成人性爱免费播放| 永久免费观看的毛片的网站| 曰韩人妻中文字幕在线| 青青草视频这里只有精品| 国产内射爽爽大片| 久久久三区二区一区| 婷婷激情四射| 天天视频网站黄| 热热色青青草| 欧美亚洲丝袜美女电影| 亚洲强奸乱伦影视网| 亚洲中文字幕在现观看| 蜜桃狠狠色伊人亚洲综合 | 亚洲一区二区三区麻豆传媒| 丰满岳乱妇一区二区三区| 国产精品高清2021在线| 久久天堂网| 在线天堂999| 91人妻Pr| 一级性爱啪啪视频| 日韩一级二级三级在线不卡观看完整| 91麻豆一二三区| 久操99| 一区二区三区欧美激情| 91人妻最真实刺激绿帽| 久久青青草在线视频| 神马九九九| 中文字幕人妻色偷偷久久皮 | 欲香欲色天天天综合和网| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 嫩草 我啊~嗯~在线| 国产传媒日本欧美专区| 密桃99999| 亚洲欧美中文日韩视频中国语| av天堂精品久久| 东北少妇高潮zzzz| 欧美亚洲手机在线| 青青操日韩| 亚洲女人毛茸茸91| 天天内射| 欧美色天堂网在线视频| 91丝袜美女| 日本曲间由美性生活片| 防屏蔽在线视频| www.色综合| 国产自偷自拍一区| 国产树林里野战在线看| 大香蕉久| 精品一区二区成人| 青娱乐亚洲自拍| 亚洲小电影免费涩涩成人在线高清 | 人人操,人人插| 思思热国产高清| 91老司机视频| 九九九九九精品视频| 国产精品对白自产拍| chaopen97久久| 婷婷五月天色网| 操老熟女AV| 国产一区二区精品在线视频| 成人精品欧洲亚洲| 亚洲图片在线| 欧美一二级| 国产少妇内射| 久久激情四射婷婷丁香五月天| 亚洲玖玖爱| 亚洲资源一区| 无码78| 成人一二| 91在线秘 男同| 久久直播国产| 国产精品久久久久无码AV会牛| 日本熟妇人妻中出视频| 久草福利在线资源站| 久久久五月天| 亚洲欧美一区二区三区在钱蜜桃|